6f4633612febe15d33084a089332bb16a4cd360b
[policy/models.git] / models-base / src / main / java / org / onap / policy / models / base / PfValidationResult.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 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
40      * affect the use of the concept.
41      */
42     OBSERVATION,
43     /**
44      * Warnings were made on a concept (such as defined but unused concepts) of a nature that may
45      * affect the use of the concept.
46      */
47     WARNING,
48     /**
49      * Errors were detected on a concept (such as referenced but undefined concepts) of a nature
50      * that will affect 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,
63      * even if the model 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
73      * model is OK to use.
74      *
75      * @return true, if the concept has no warnings or errors
76      */
77     public boolean isOk() {
78         return validationResult == ValidationResult.VALID || validationResult == ValidationResult.OBSERVATION;
79     }
80
81     /**
82      * Adds a validation message to the validation result, used by validate() implementations on
83      * {@link PfConcept} subclasses to report validaiton observations.
84      *
85      * @param validationMessage the validation message
86      */
87     public void addValidationMessage(final PfValidationMessage validationMessage) {
88         messageList.add(validationMessage);
89
90         // Check if the incoming message has a more sever status than the
91         // current one on the overall validation result,
92         // if so, the overall result goes to that level
93         if (validationMessage.getValidationResult().ordinal() > validationResult.ordinal()) {
94             validationResult = validationMessage.getValidationResult();
95         }
96     }
97
98     /*
99      * (non-Javadoc)
100      *
101      * @see java.lang.Object#toString()
102      */
103     @Override
104     public String toString() {
105         final StringBuilder builder = new StringBuilder();
106
107         switch (validationResult) {
108             case VALID:
109
110                 builder.append("***validation of model successful***");
111                 return builder.toString();
112             case OBSERVATION:
113
114                 builder.append("\n***observations noted during validation of model***\n");
115                 break;
116             case WARNING:
117
118                 builder.append("\n***warnings issued during validation of model***\n");
119                 break;
120             case INVALID:
121                 builder.append("\n***validation of model failed***\n");
122                 break;
123             default:
124                 break;
125         }
126
127         for (final PfValidationMessage message : messageList) {
128             builder.append(message);
129             builder.append("\n");
130         }
131
132         builder.append("********************************");
133         return builder.toString();
134     }
135 }