Fix valid values for list and map
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / tosca / constraints / AbstractPropertyConstraint.java
index 950a7fa..8e09648 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * limitations under the License.
  * ============LICENSE_END=========================================================
  */
-
 package org.openecomp.sdc.be.model.tosca.constraints;
 
-import java.io.Serializable;
+import java.util.Arrays;
 
+import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
 import org.openecomp.sdc.be.model.PropertyConstraint;
+import org.openecomp.sdc.be.model.PropertyDefinition;
 import org.openecomp.sdc.be.model.tosca.ToscaType;
+import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintFunctionalException;
+import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintValueDoNotMatchPropertyTypeException;
 import org.openecomp.sdc.be.model.tosca.constraints.exception.ConstraintViolationException;
 import org.openecomp.sdc.be.model.tosca.version.ApplicationVersionException;
 
-public abstract class AbstractPropertyConstraint implements PropertyConstraint, Serializable {
+public abstract class AbstractPropertyConstraint implements PropertyConstraint {
+
+    private static final String INVALID_VALUE_ERROR_MESSAGE = "Unsupported value provided for %s property supported value type is %s.";
+
+    @Override
+    public void validate(PropertyDefinition property) throws ConstraintViolationException {
+        validate(ToscaType.isValidType(property.getType()), property.getValue());
+    }
+    
+    protected void validate(ToscaType toscaType, String propertyTextValue) throws ConstraintViolationException {
+        try {
+            validate(toscaType.convert(propertyTextValue));
+        } catch (ApplicationVersionException e) {
+            throw new ConstraintViolationException("String value [" + propertyTextValue + "] is not valid for type [" + toscaType + "]", e);
+        }
+    }
 
-       /**
-        * 
-        */
-       private static final long serialVersionUID = 4459522275459723374L;
+    public String getErrorMessage(ToscaType toscaType, ConstraintFunctionalException e, String propertyName, String errorMessage,
+                                  String... propertyValue) {
+        if (e instanceof ConstraintViolationException) {
+            return String.format(errorMessage, propertyName, propertyValue.length == 1 ? propertyValue[0] : Arrays.toString(propertyValue));
+        }
+        if (e instanceof ConstraintValueDoNotMatchPropertyTypeException) {
+            return e.getMessage();
+        }
+        return String.format(INVALID_VALUE_ERROR_MESSAGE, propertyName, toscaType.getType());
+    }
 
-       @Override
-       public void validate(ToscaType toscaType, String propertyTextValue) throws ConstraintViolationException {
-               try {
-                       validate(toscaType.convert(propertyTextValue));
-               } catch (IllegalArgumentException | ApplicationVersionException e) {
-                       throw new ConstraintViolationException(
-                                       "String value [" + propertyTextValue + "] is not valid for type [" + toscaType + "]", e);
-               }
-       }
+    protected void initialize(ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException {
+        //Initialization not needed for few constraints for now might be needed in future
+    }
+    
+    @Override
+    public void initialize(ToscaType propertyType, SchemaDefinition schema) throws ConstraintValueDoNotMatchPropertyTypeException {
+        initialize(propertyType);
+    }
 }