Fix valid values for list and map
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / tosca / constraints / AbstractPropertyConstraint.java
index 4b4c0a6..8e09648 100644 (file)
 package org.openecomp.sdc.be.model.tosca.constraints;
 
 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;
@@ -32,10 +35,14 @@ 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(ToscaType toscaType, String propertyTextValue) throws ConstraintViolationException {
+    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 (IllegalArgumentException | ApplicationVersionException e) {
+        } catch (ApplicationVersionException e) {
             throw new ConstraintViolationException("String value [" + propertyTextValue + "] is not valid for type [" + toscaType + "]", e);
         }
     }
@@ -43,13 +50,20 @@ public abstract class AbstractPropertyConstraint implements PropertyConstraint {
     public String getErrorMessage(ToscaType toscaType, ConstraintFunctionalException e, String propertyName, String errorMessage,
                                   String... propertyValue) {
         if (e instanceof ConstraintViolationException) {
-            return String.format(errorMessage, propertyName, Arrays.toString(propertyValue));
+            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 initialize(ToscaType propertyType) throws ConstraintValueDoNotMatchPropertyTypeException {
+    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);
+    }
 }