JPA concepts for TOSCA
[policy/models.git] / models-base / src / main / java / org / onap / policy / models / base / PfValidationResult.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2020 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.base;
22
23 import java.util.LinkedList;
24 import java.util.List;
25 import lombok.Getter;
26
27 /**
28  * This class records the result of a validation and holds all validation observation messages.
29  */
30 @Getter
31 public class PfValidationResult {
32     /**
33      * The ValidationResult enumeration describes the severity of a validation result.
34      */
35     public enum ValidationResult {
36         /** No problems or observations were detected during validation. */
37         VALID,
38         /**
39          * Observations were made on a concept (such as blank descriptions) of a nature that will not affect the use of
40          * the concept.
41          */
42         OBSERVATION,
43         /**
44          * Warnings were made on a concept (such as defined but unused concepts) of a nature that may affect the use of
45          * the concept.
46          */
47         WARNING,
48         /**
49          * Errors were detected on a concept (such as referenced but undefined concepts) of a nature that will affect
50          * the use of the concept.
51          */
52         INVALID
53     }
54
55     // The actual verification result
56     private ValidationResult validationResult = ValidationResult.VALID;
57
58     // Messages collected during the verification process
59     private final List<PfValidationMessage> messageList = new LinkedList<>();
60
61     /**
62      * Check if a validation reported a valid concept, returns true if the model is usable (that is, even if the model
63      * has warnings or observations).
64      *
65      * @return true, if the concept is reported as valid and can be used
66      */
67     public boolean isValid() {
68         return validationResult != ValidationResult.INVALID;
69     }
70
71     /**
72      * Check if a validation reported a concept with no errors or warnings, returns true if the model is OK to use.
73      *
74      * @return true, if the concept has no warnings or errors
75      */
76     public boolean isOk() {
77         return validationResult == ValidationResult.VALID || validationResult == ValidationResult.OBSERVATION;
78     }
79
80
81     /**
82      * Append a validation result to another validation result.
83      *
84      * @param result2Append the result to append to the current validation result
85      */
86     public void append(final PfValidationResult result2Append) {
87         for (PfValidationMessage message : result2Append.getMessageList()) {
88             addValidationMessage(message);
89         }
90     }
91
92     /**
93      * Adds a validation message to the validation result, used by validate() implementations on {@link PfConcept}
94      * subclasses to report validaiton observations.
95      *
96      * @param validationMessage the validation message
97      */
98     public void addValidationMessage(final PfValidationMessage validationMessage) {
99         messageList.add(validationMessage);
100
101         // Check if the incoming message has a more sever status than the
102         // current one on the overall validation result,
103         // if so, the overall result goes to that level
104         if (validationMessage.getValidationResult().ordinal() > validationResult.ordinal()) {
105             validationResult = validationMessage.getValidationResult();
106         }
107     }
108
109     /*
110      * (non-Javadoc)
111      *
112      * @see java.lang.Object#toString()
113      */
114     @Override
115     public String toString() {
116         final StringBuilder builder = new StringBuilder();
117
118         switch (validationResult) {
119             case VALID:
120
121                 builder.append("***validation of model successful***");
122                 return builder.toString();
123             case OBSERVATION:
124
125                 builder.append("\n***observations noted during validation of model***\n");
126                 break;
127             case WARNING:
128
129                 builder.append("\n***warnings issued during validation of model***\n");
130                 break;
131             case INVALID:
132                 builder.append("\n***validation of model failed***\n");
133                 break;
134             default:
135                 break;
136         }
137
138         for (final PfValidationMessage message : messageList) {
139             builder.append(message);
140             builder.append("\n");
141         }
142
143         builder.append("********************************");
144         return builder.toString();
145     }
146 }