diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java')
-rw-r--r-- | catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java | 772 |
1 files changed, 383 insertions, 389 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java index ed58bc221b..c64e47a14a 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/validators/DataTypeValidatorConverter.java @@ -20,420 +20,414 @@ package org.openecomp.sdc.be.model.tosca.validators; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - +import com.google.gson.*; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; import org.openecomp.sdc.be.model.tosca.converters.PropertyValueConverter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.openecomp.sdc.common.log.wrappers.Logger; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSyntaxException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; public class DataTypeValidatorConverter { - private static DataTypeValidatorConverter dataTypeValidatorConverter = new DataTypeValidatorConverter(); + private static DataTypeValidatorConverter dataTypeValidatorConverter = new DataTypeValidatorConverter(); - public static DataTypeValidatorConverter getInstance() { - return dataTypeValidatorConverter; - } + public static DataTypeValidatorConverter getInstance() { + return dataTypeValidatorConverter; + } - private DataTypeValidatorConverter() { + private DataTypeValidatorConverter() { - } + } - private static Logger log = LoggerFactory.getLogger(DataTypeValidatorConverter.class.getName()); + private static final Logger log = Logger.getLogger(DataTypeValidatorConverter.class.getName()); - JsonParser jsonParser = new JsonParser(); + JsonParser jsonParser = new JsonParser(); - ImmutablePair<JsonElement, Boolean> falseResult = new ImmutablePair<JsonElement, Boolean>(null, false); - ImmutablePair<JsonElement, Boolean> trueEmptyResult = new ImmutablePair<JsonElement, Boolean>(null, true); + ImmutablePair<JsonElement, Boolean> falseResult = new ImmutablePair<>(null, false); + ImmutablePair<JsonElement, Boolean> trueEmptyResult = new ImmutablePair<>(null, true); - ImmutablePair<String, Boolean> trueStringEmptyResult = new ImmutablePair<String, Boolean>(null, true); - ImmutablePair<String, Boolean> falseStringEmptyResult = new ImmutablePair<String, Boolean>(null, true); + ImmutablePair<String, Boolean> trueStringEmptyResult = new ImmutablePair<>(null, true); + ImmutablePair<String, Boolean> falseStringEmptyResult = new ImmutablePair<>(null, true); - private ToscaPropertyType isDataTypeDerviedFromScalarType(DataTypeDefinition dataTypeDef) { + private ToscaPropertyType isDataTypeDerviedFromScalarType(DataTypeDefinition dataTypeDef) { - ToscaPropertyType result = null; + ToscaPropertyType result = null; - DataTypeDefinition dataType = dataTypeDef; + DataTypeDefinition dataType = dataTypeDef; - while (dataType != null) { + while (dataType != null) { - String name = dataType.getName(); - ToscaPropertyType typeIfScalar = ToscaPropertyType.getTypeIfScalar(name); - if (typeIfScalar != null) { - result = typeIfScalar; - break; - } + String name = dataType.getName(); + ToscaPropertyType typeIfScalar = ToscaPropertyType.getTypeIfScalar(name); + if (typeIfScalar != null) { + result = typeIfScalar; + break; + } - dataType = dataType.getDerivedFrom(); - } + dataType = dataType.getDerivedFrom(); + } - return result; - } + return result; + } - private ImmutablePair<JsonElement, Boolean> validateAndUpdate(JsonElement jsonElement, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { - - Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); - - ToscaPropertyType toscaPropertyType = null; - if ((toscaPropertyType = isDataTypeDerviedFromScalarType(dataTypeDefinition)) != null) { - - PropertyTypeValidator validator = toscaPropertyType.getValidator(); - PropertyValueConverter converter = toscaPropertyType.getConverter(); - if (jsonElement == null || true == jsonElement.isJsonNull()) { - boolean valid = validator.isValid(null, null, allDataTypes); - if (!valid) { - log.trace("Failed in validation of property {} from type {}", dataTypeDefinition.getName(), dataTypeDefinition.getName()); - return falseResult; - } - return new ImmutablePair<JsonElement, Boolean>(jsonElement, true); - - } else { - if (jsonElement.isJsonPrimitive()) { - String value = null; - if (jsonElement != null) { - if (jsonElement.toString().isEmpty()) { - value = ""; - } else { - value = jsonElement.toString(); - } - } - boolean valid = validator.isValid(value, null, null); - if (!valid) { - log.trace("Failed in validation of property {} from type {}. Json primitive value is {}", dataTypeDefinition.getName(), dataTypeDefinition.getName(), value); - return falseResult; - } - - String convertedValue = converter.convert(value, null, allDataTypes); - JsonElement element = null; - try { - element = jsonParser.parse(convertedValue); - } catch (JsonSyntaxException e) { - log.debug("Failed to parse value {} of property {} {}", convertedValue, dataTypeDefinition.getName(), e); - return falseResult; - } - - return new ImmutablePair<JsonElement, Boolean>(element, true); - - } else { - // MAP, LIST, OTHER types cannot be applied data type - // definition scalar type. We currently cannot derived from - // map/list. (cannot add the entry schema to it) - log.debug("We cannot derive from list/map. Thus, the value cannot be not primitive since the data type {} is scalar one", dataTypeDefinition.getName()); - - return falseResult; - } - } - } else { - - if (jsonElement == null || jsonElement.isJsonNull()) { - - return new ImmutablePair<JsonElement, Boolean>(jsonElement, true); - - } else { - - if (jsonElement.isJsonObject()) { - - JsonObject buildJsonObject = new JsonObject(); - - JsonObject asJsonObject = jsonElement.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - - for (Entry<String, JsonElement> entry : entrySet) { - String propName = entry.getKey(); - - JsonElement elementValue = entry.getValue(); - - PropertyDefinition propertyDefinition = allProperties.get(propName); - if (propertyDefinition == null) { - log.debug("The property {} was not found under data type {}" ,propName, dataTypeDefinition.getName()); - return falseResult; - } - String type = propertyDefinition.getType(); - boolean isScalarType = ToscaPropertyType.isScalarType(type); - - if (isScalarType) { - ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); - if (propertyType == null) { - log.debug("cannot find the {} under default tosca property types", type); - return falseResult; - } - PropertyTypeValidator validator = propertyType.getValidator(); - String innerType = null; - if (propertyType == ToscaPropertyType.LIST || propertyType == ToscaPropertyType.MAP) { - if (propertyDefinition.getSchema() != null && propertyDefinition.getSchema().getProperty() != null) { - innerType = propertyDefinition.getSchema().getProperty().getType(); - if (innerType == null) { - log.debug("Property type {} must have inner type in its declaration.", propertyType); - return falseResult; - } - } - } - - String value = null; - if (elementValue != null) { - if (elementValue.isJsonPrimitive() && elementValue.getAsString().isEmpty()) { - value = ""; - } else { - value = elementValue.toString(); - } - } - - boolean isValid = validator.isValid(value, innerType, allDataTypes); - if (false == isValid) { - log.debug("Failed to validate the value {} from type {}", value, propertyType); - return falseResult; - } - - PropertyValueConverter converter = propertyType.getConverter(); - String convertedValue = converter.convert(value, innerType, allDataTypes); - - JsonElement element = null; - if (convertedValue != null) { - if (convertedValue.isEmpty()) { - element = new JsonPrimitive(""); - } else { - try { - element = jsonParser.parse(convertedValue); - } catch (JsonSyntaxException e) { - log.debug("Failed to parse value {} of type {}", convertedValue, propertyType, e); - return falseResult; - } - } - } - buildJsonObject.add(propName, element); - - } else { - - DataTypeDefinition typeDefinition = allDataTypes.get(type); - if (typeDefinition == null) { - log.debug("The data type {} cannot be found in the given data type list.", type); - return falseResult; - } + private ImmutablePair<JsonElement, Boolean> validateAndUpdate(JsonElement jsonElement, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { + + Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); + + ToscaPropertyType toscaPropertyType = null; + if ((toscaPropertyType = isDataTypeDerviedFromScalarType(dataTypeDefinition)) != null) { + + PropertyTypeValidator validator = toscaPropertyType.getValidator(); + PropertyValueConverter converter = toscaPropertyType.getConverter(); + if (jsonElement == null || jsonElement.isJsonNull()) { + boolean valid = validator.isValid(null, null, allDataTypes); + if (!valid) { + log.trace("Failed in validation of property {} from type {}", dataTypeDefinition.getName(), dataTypeDefinition.getName()); + return falseResult; + } + return new ImmutablePair<>(jsonElement, true); + + } else { + if (jsonElement.isJsonPrimitive()) { + String value = null; + if (jsonElement != null) { + if (jsonElement.toString().isEmpty()) { + value = ""; + } else { + value = jsonElement.toString(); + } + } + boolean valid = validator.isValid(value, null, null); + if (!valid) { + log.trace("Failed in validation of property {} from type {}. Json primitive value is {}", dataTypeDefinition.getName(), dataTypeDefinition.getName(), value); + return falseResult; + } + + String convertedValue = converter.convert(value, null, allDataTypes); + JsonElement element = null; + try { + element = jsonParser.parse(convertedValue); + } catch (JsonSyntaxException e) { + log.debug("Failed to parse value {} of property {} {}", convertedValue, dataTypeDefinition.getName(), e); + return falseResult; + } + + return new ImmutablePair<>(element, true); + + } else { + // MAP, LIST, OTHER types cannot be applied data type + // definition scalar type. We currently cannot derived from + // map/list. (cannot add the entry schema to it) + log.debug("We cannot derive from list/map. Thus, the value cannot be not primitive since the data type {} is scalar one", dataTypeDefinition.getName()); + + return falseResult; + } + } + } else { + + if (jsonElement == null || jsonElement.isJsonNull()) { + + return new ImmutablePair<>(jsonElement, true); + + } else { + + if (jsonElement.isJsonObject()) { + + JsonObject buildJsonObject = new JsonObject(); + + JsonObject asJsonObject = jsonElement.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + + for (Entry<String, JsonElement> entry : entrySet) { + String propName = entry.getKey(); + + JsonElement elementValue = entry.getValue(); + + PropertyDefinition propertyDefinition = allProperties.get(propName); + if (propertyDefinition == null) { + log.debug("The property {} was not found under data type {}" ,propName, dataTypeDefinition.getName()); + return falseResult; + } + String type = propertyDefinition.getType(); + boolean isScalarType = ToscaPropertyType.isScalarType(type); + + if (isScalarType) { + ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); + if (propertyType == null) { + log.debug("cannot find the {} under default tosca property types", type); + return falseResult; + } + PropertyTypeValidator validator = propertyType.getValidator(); + String innerType = null; + if (propertyType == ToscaPropertyType.LIST || propertyType == ToscaPropertyType.MAP) { + if (propertyDefinition.getSchema() != null && propertyDefinition.getSchema().getProperty() != null) { + innerType = propertyDefinition.getSchema().getProperty().getType(); + if (innerType == null) { + log.debug("Property type {} must have inner type in its declaration.", propertyType); + return falseResult; + } + } + } + + String value = null; + if (elementValue != null) { + if (elementValue.isJsonPrimitive() && elementValue.getAsString().isEmpty()) { + value = ""; + } else { + value = elementValue.toString(); + } + } + + boolean isValid = validator.isValid(value, innerType, allDataTypes); + if (!isValid) { + log.debug("Failed to validate the value {} from type {}", value, propertyType); + return falseResult; + } + + PropertyValueConverter converter = propertyType.getConverter(); + String convertedValue = converter.convert(value, innerType, allDataTypes); + + JsonElement element = null; + if (convertedValue != null) { + if (convertedValue.isEmpty()) { + element = new JsonPrimitive(""); + } else { + try { + element = jsonParser.parse(convertedValue); + } catch (JsonSyntaxException e) { + log.debug("Failed to parse value {} of type {}", convertedValue, propertyType, e); + return falseResult; + } + } + } + buildJsonObject.add(propName, element); + + } else { + + DataTypeDefinition typeDefinition = allDataTypes.get(type); + if (typeDefinition == null) { + log.debug("The data type {} cannot be found in the given data type list.", type); + return falseResult; + } - ImmutablePair<JsonElement, Boolean> isValid = validateAndUpdate(elementValue, typeDefinition, allDataTypes); + ImmutablePair<JsonElement, Boolean> isValid = validateAndUpdate(elementValue, typeDefinition, allDataTypes); - if (!isValid.getRight().booleanValue()) { - log.debug("Failed in validation of value {} from type {}", (elementValue != null ? elementValue.toString() : null), typeDefinition.getName()); - return falseResult; - } - - buildJsonObject.add(propName, isValid.getLeft()); - } - - } - - return new ImmutablePair<JsonElement, Boolean>(buildJsonObject, true); - } else { - log.debug("The value {} of type {} should be json object", (jsonElement != null ? jsonElement.toString() : null), dataTypeDefinition.getName()); - return falseResult; - } - - } - } - - } - - public ImmutablePair<JsonElement, Boolean> validateAndUpdate(String value, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { - - ImmutablePair<JsonElement, Boolean> result = falseResult; - - if (value == null || value.isEmpty()) { - return trueEmptyResult; - } - - JsonElement jsonElement = null; - try { - jsonElement = jsonParser.parse(value); - } catch (JsonSyntaxException e) { - return falseResult; - } - - result = validateAndUpdate(jsonElement, dataTypeDefinition, allDataTypes); - - return result; - } - - private Map<String, PropertyDefinition> getAllProperties(DataTypeDefinition dataTypeDefinition) { - - Map<String, PropertyDefinition> allParentsProps = new HashMap<String, PropertyDefinition>(); - - while (dataTypeDefinition != null) { - - List<PropertyDefinition> currentParentsProps = dataTypeDefinition.getProperties(); - if (currentParentsProps != null) { - currentParentsProps.stream().forEach(p -> allParentsProps.put(p.getName(), p)); - } - - dataTypeDefinition = dataTypeDefinition.getDerivedFrom(); - } - - return allParentsProps; - } - - public boolean isValid(String value, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { - - boolean result = false; - - if (value == null || value.isEmpty()) { - return true; - } - - JsonElement jsonElement = null; - try { - jsonElement = jsonParser.parse(value); - } catch (JsonSyntaxException e) { - log.debug("Failed to parse the value {} from type {}", value, dataTypeDefinition, e); - return false; - } - - result = isValid(jsonElement, dataTypeDefinition, allDataTypes); - - return result; - } - - private boolean isValid(JsonElement jsonElement, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { - - Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); - - ToscaPropertyType toscaPropertyType = null; - if ((toscaPropertyType = isDataTypeDerviedFromScalarType(dataTypeDefinition)) != null) { - - PropertyTypeValidator validator = toscaPropertyType.getValidator(); - if (jsonElement == null || true == jsonElement.isJsonNull()) { - boolean valid = validator.isValid(null, null, allDataTypes); - if (false == valid) { - log.trace("Failed in validation of property {} from type {}", dataTypeDefinition.getName(), dataTypeDefinition.getName()); - return false; - } - - return true; - - } else { - if (true == jsonElement.isJsonPrimitive()) { - String value = null; - if (jsonElement != null) { - if (jsonElement.toString().isEmpty()) { - value = ""; - } else { - value = jsonElement.toString(); - } - } - boolean valid = validator.isValid(value, null, allDataTypes); - if (false == valid) { - log.trace("Failed in validation of property {} from type {}. Json primitive value is {}", dataTypeDefinition.getName(), dataTypeDefinition.getName(), value); - return false; - } - - return true; + if (!isValid.getRight().booleanValue()) { + log.debug("Failed in validation of value {} from type {}", (elementValue != null ? elementValue.toString() : null), typeDefinition.getName()); + return falseResult; + } + + buildJsonObject.add(propName, isValid.getLeft()); + } + + } + + return new ImmutablePair<>(buildJsonObject, true); + } else { + log.debug("The value {} of type {} should be json object", (jsonElement != null ? jsonElement.toString() : null), dataTypeDefinition.getName()); + return falseResult; + } + + } + } + + } + + public ImmutablePair<JsonElement, Boolean> validateAndUpdate(String value, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { + + ImmutablePair<JsonElement, Boolean> result = falseResult; + + if (value == null || value.isEmpty()) { + return trueEmptyResult; + } + + JsonElement jsonElement = null; + try { + jsonElement = jsonParser.parse(value); + } catch (JsonSyntaxException e) { + return falseResult; + } + + result = validateAndUpdate(jsonElement, dataTypeDefinition, allDataTypes); + + return result; + } + + private Map<String, PropertyDefinition> getAllProperties(DataTypeDefinition dataTypeDefinition) { + + Map<String, PropertyDefinition> allParentsProps = new HashMap<>(); + + while (dataTypeDefinition != null) { + + List<PropertyDefinition> currentParentsProps = dataTypeDefinition.getProperties(); + if (currentParentsProps != null) { + currentParentsProps.stream().forEach(p -> allParentsProps.put(p.getName(), p)); + } + + dataTypeDefinition = dataTypeDefinition.getDerivedFrom(); + } + + return allParentsProps; + } + + public boolean isValid(String value, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { + + boolean result = false; + + if (value == null || value.isEmpty()) { + return true; + } + + JsonElement jsonElement = null; + try { + jsonElement = jsonParser.parse(value); + } catch (JsonSyntaxException e) { + log.debug("Failed to parse the value {} from type {}", value, dataTypeDefinition, e); + return false; + } + + result = isValid(jsonElement, dataTypeDefinition, allDataTypes); + + return result; + } + + private boolean isValid(JsonElement jsonElement, DataTypeDefinition dataTypeDefinition, Map<String, DataTypeDefinition> allDataTypes) { + + Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); + + ToscaPropertyType toscaPropertyType = null; + if ((toscaPropertyType = isDataTypeDerviedFromScalarType(dataTypeDefinition)) != null) { + + PropertyTypeValidator validator = toscaPropertyType.getValidator(); + if (jsonElement == null || jsonElement.isJsonNull()) { + boolean valid = validator.isValid(null, null, allDataTypes); + if (!valid) { + log.trace("Failed in validation of property {} from type {}", dataTypeDefinition.getName(), dataTypeDefinition.getName()); + return false; + } + + return true; + + } else { + if (jsonElement.isJsonPrimitive()) { + String value = null; + if (jsonElement != null) { + if (jsonElement.toString().isEmpty()) { + value = ""; + } else { + value = jsonElement.toString(); + } + } + boolean valid = validator.isValid(value, null, allDataTypes); + if (!valid) { + log.trace("Failed in validation of property {} from type {}. Json primitive value is {}", dataTypeDefinition.getName(), dataTypeDefinition.getName(), value); + return false; + } + + return true; - } else { - // MAP, LIST, OTHER types cannot be applied data type - // definition scalar type. We currently cannot derived from - // map/list. (cannot add the entry schema to it) - log.debug("We cannot derive from list/map. Thus, the value cannot be not primitive since the data type {} is scalar one", dataTypeDefinition.getName()); - - return false; - } - } - } else { - - if (jsonElement == null || jsonElement.isJsonNull()) { - - return true; - - } else { - - if (jsonElement.isJsonObject()) { - - JsonObject asJsonObject = jsonElement.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - - for (Entry<String, JsonElement> entry : entrySet) { - String propName = entry.getKey(); - - JsonElement elementValue = entry.getValue(); - - PropertyDefinition propertyDefinition = allProperties.get(propName); - if (propertyDefinition == null) { - log.debug("The property {} was not found under data type {}", propName, dataTypeDefinition.getName()); - return false; - } - String type = propertyDefinition.getType(); - boolean isScalarType = ToscaPropertyType.isScalarType(type); - - if (true == isScalarType) { - ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); - if (propertyType == null) { - log.debug("cannot find the {} under default tosca property types", type); - return false; - } - PropertyTypeValidator validator = propertyType.getValidator(); - String innerType = null; - if (propertyType == ToscaPropertyType.LIST || propertyType == ToscaPropertyType.MAP) { - if (propertyDefinition.getSchema() != null && propertyDefinition.getSchema().getProperty() != null) { - innerType = propertyDefinition.getSchema().getProperty().getType(); - if (innerType == null) { - log.debug("Property type {} must have inner type in its declaration.", propertyType); - return false; - } - } - } - - String value = null; - if (elementValue != null) { - if (elementValue.isJsonPrimitive() && elementValue.getAsString().isEmpty()) { - value = ""; - } else { - value = elementValue.toString(); - } - } - - boolean isValid = validator.isValid(value, innerType, allDataTypes); - if (false == isValid) { - log.debug("Failed to validate the value {} from type {}", value, propertyType); - return false; - } - - } else { - - DataTypeDefinition typeDefinition = allDataTypes.get(type); - if (typeDefinition == null) { - log.debug("The data type {} cannot be found in the given data type list.", type); - return false; - } - - boolean isValid = isValid(elementValue, typeDefinition, allDataTypes); - - if (false == isValid) { - log.debug("Failed in validation of value {} from type {}", (elementValue != null ? elementValue.toString() : null), typeDefinition.getName()); - return false; - } - - } - - } - - return true; - } else { - log.debug("The value {} of type {} should be json object", (jsonElement != null ? jsonElement.toString() : null), dataTypeDefinition.getName()); - return false; - } - - } - } - - } + } else { + // MAP, LIST, OTHER types cannot be applied data type + // definition scalar type. We currently cannot derived from + // map/list. (cannot add the entry schema to it) + log.debug("We cannot derive from list/map. Thus, the value cannot be not primitive since the data type {} is scalar one", dataTypeDefinition.getName()); + + return false; + } + } + } else { + + if (jsonElement == null || jsonElement.isJsonNull()) { + + return true; + + } else { + + if (jsonElement.isJsonObject()) { + + JsonObject asJsonObject = jsonElement.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + + for (Entry<String, JsonElement> entry : entrySet) { + String propName = entry.getKey(); + + JsonElement elementValue = entry.getValue(); + + PropertyDefinition propertyDefinition = allProperties.get(propName); + if (propertyDefinition == null) { + log.debug("The property {} was not found under data type {}", propName, dataTypeDefinition.getName()); + return false; + } + String type = propertyDefinition.getType(); + boolean isScalarType = ToscaPropertyType.isScalarType(type); + + if (isScalarType) { + ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); + if (propertyType == null) { + log.debug("cannot find the {} under default tosca property types", type); + return false; + } + PropertyTypeValidator validator = propertyType.getValidator(); + String innerType = null; + if (propertyType == ToscaPropertyType.LIST || propertyType == ToscaPropertyType.MAP) { + if (propertyDefinition.getSchema() != null && propertyDefinition.getSchema().getProperty() != null) { + innerType = propertyDefinition.getSchema().getProperty().getType(); + if (innerType == null) { + log.debug("Property type {} must have inner type in its declaration.", propertyType); + return false; + } + } + } + + String value = null; + if (elementValue != null) { + if (elementValue.isJsonPrimitive() && elementValue.getAsString().isEmpty()) { + value = ""; + } else { + value = elementValue.toString(); + } + } + + boolean isValid = validator.isValid(value, innerType, allDataTypes); + if (!isValid) { + log.debug("Failed to validate the value {} from type {}", value, propertyType); + return false; + } + + } else { + + DataTypeDefinition typeDefinition = allDataTypes.get(type); + if (typeDefinition == null) { + log.debug("The data type {} cannot be found in the given data type list.", type); + return false; + } + + boolean isValid = isValid(elementValue, typeDefinition, allDataTypes); + + if (!isValid) { + log.debug("Failed in validation of value {} from type {}", (elementValue != null ? elementValue.toString() : null), typeDefinition.getName()); + return false; + } + + } + + } + + return true; + } else { + log.debug("The value {} of type {} should be json object", (jsonElement != null ? jsonElement.toString() : null), dataTypeDefinition.getName()); + return false; + } + + } + } + + } } |