Fix valid values for list and map
[sdc.git] / catalog-model / src / main / java / org / openecomp / sdc / be / model / tosca / constraints / AbstractPropertyConstraint.java
index 041a86d..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.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;
@@ -31,33 +32,38 @@ import org.openecomp.sdc.be.model.tosca.version.ApplicationVersionException;
 
 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.";
+    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) {
-            throw new ConstraintViolationException(
-                    "String value [" + propertyTextValue + "] is not valid for type [" + toscaType + "]", e);
+        } catch (ApplicationVersionException e) {
+            throw new ConstraintViolationException("String value [" + propertyTextValue + "] is not valid for type [" + toscaType + "]", e);
         }
     }
 
-    public String getErrorMessage(ToscaType toscaType,
-                                                                 ConstraintFunctionalException e,
-                                                                 String propertyName,
-                                                                 String errorMessage,
-                                                                 String... propertyValue) {
+    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);
+    }
 }