Support TOSCA functions in Node Filters
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / tosca / constraints / EqualConstraint.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20 package org.openecomp.sdc.be.model.tosca.constraints;
21
22 import java.io.Serializable;
23 import javax.validation.constraints.NotNull;
24 import org.openecomp.sdc.be.datatypes.enums.ConstraintType;
25 import org.openecomp.sdc.be.model.PropertyConstraint;
26 import org.openecomp.sdc.be.model.tosca.ToscaType;
27 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintFunctionalException;
28 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintValueDoNotMatchPropertyTypeException;
29 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolationException;
30 import org.openecomp.sdc.be.model.tosca.constraints.exception.PropertyConstraintException;
31
32 @SuppressWarnings("serial")
33 public class EqualConstraint extends AbstractPropertyConstraint implements Serializable {
34
35     @NotNull
36     private String constraintValue;
37     private Object typed;
38
39     public EqualConstraint(String constraintValue) {
40         super();
41         this.constraintValue = constraintValue;
42     }
43
44     public String getConstraintValue() {
45         return constraintValue;
46     }
47
48     @Override
49     public void initialize(ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException {
50         if (propertyType.isValidValue(constraintValue)) {
51             typed = propertyType.convert(constraintValue);
52         } else {
53             throw new ConstraintValueDoNotMatchPropertyTypeException(
54                 "constraintValue constraint has invalid value <" + constraintValue + "> property type is <" + propertyType.toString() + ">");
55         }
56     }
57
58     @Override
59     public void validate(Object propertyValue) throws ConstraintViolationException {
60         if (propertyValue == null) {
61             if (typed != null) {
62                 fail(null);
63             }
64         } else if (typed == null) {
65             fail(propertyValue);
66         } else if (typed instanceof Comparable && typed != propertyValue) {
67             fail(propertyValue);
68         } else if (!typed.equals(propertyValue)) {
69             fail(propertyValue);
70         }
71     }
72
73     @Override
74     public ConstraintType getConstraintType() {
75         return null;
76     }
77
78     @Override
79     public void validateValueOnUpdate(PropertyConstraint newConstraint) throws PropertyConstraintException {
80     }
81
82     private void fail(Object propertyValue) throws ConstraintViolationException {
83         throw new ConstraintViolationException(
84             "Equal constraint violation, the reference is <" + constraintValue + "> but the value to compare is <" + propertyValue + ">");
85     }
86
87     @Override
88     public String getErrorMessage(ToscaType toscaType, ConstraintFunctionalException e, String propertyName) {
89         return getErrorMessage(toscaType, e, propertyName, "%s property value must be %s", constraintValue);
90     }
91 }