diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters')
26 files changed, 1151 insertions, 1202 deletions
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/BooleanConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/BooleanConverter.java index f721efb3c9..9ff43926a4 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/BooleanConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/BooleanConverter.java @@ -20,23 +20,23 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class BooleanConverter implements ToscaValueConverter { - private static BooleanConverter booleanConverter = new BooleanConverter(); + private static BooleanConverter booleanConverter = new BooleanConverter(); - public static BooleanConverter getInstance() { - return booleanConverter; - } + public static BooleanConverter getInstance() { + return booleanConverter; + } - private BooleanConverter() { + private BooleanConverter() { - } + } - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - return Boolean.valueOf(value); - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + return Boolean.valueOf(value); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DataTypePropertyConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DataTypePropertyConverter.java index 32929beb5f..f3b842e0cf 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DataTypePropertyConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DataTypePropertyConverter.java @@ -1,19 +1,18 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.io.StringReader; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.openecomp.sdc.be.model.DataTypeDefinition; -import org.openecomp.sdc.be.model.PropertyDefinition; -import org.openecomp.sdc.common.util.JsonUtils; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; +import org.openecomp.sdc.be.model.DataTypeDefinition; +import org.openecomp.sdc.be.model.PropertyDefinition; +import org.openecomp.sdc.common.util.JsonUtils; + +import java.io.StringReader; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class DataTypePropertyConverter { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DefaultConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DefaultConverter.java index c190298b52..11c0340a91 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DefaultConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/DefaultConverter.java @@ -20,24 +20,24 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class DefaultConverter implements PropertyValueConverter { - private static DefaultConverter defaultConverter = new DefaultConverter(); + private static DefaultConverter defaultConverter = new DefaultConverter(); - public static DefaultConverter getInstance() { - return defaultConverter; - } + public static DefaultConverter getInstance() { + return defaultConverter; + } - private DefaultConverter() { + private DefaultConverter() { - } + } - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - return value; - } + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + return value; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/FloatConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/FloatConverter.java index d3edd9b8bf..2d2ac72ca5 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/FloatConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/FloatConverter.java @@ -20,23 +20,23 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class FloatConverter implements ToscaValueConverter { - private static FloatConverter floatConverter = new FloatConverter(); + private static FloatConverter floatConverter = new FloatConverter(); - public static FloatConverter getInstance() { - return floatConverter; - } + public static FloatConverter getInstance() { + return floatConverter; + } - private FloatConverter() { + private FloatConverter() { - } + } - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - return Double.parseDouble(value); - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + return Double.parseDouble(value); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatBooleanConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatBooleanConverter.java index 52fa9bfa81..77f49319bd 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatBooleanConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatBooleanConverter.java @@ -20,35 +20,35 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class HeatBooleanConverter implements PropertyValueConverter { - private static HeatBooleanConverter booleanConverter = new HeatBooleanConverter(); + private static HeatBooleanConverter booleanConverter = new HeatBooleanConverter(); - public static HeatBooleanConverter getInstance() { - return booleanConverter; - } + public static HeatBooleanConverter getInstance() { + return booleanConverter; + } - private HeatBooleanConverter() { + private HeatBooleanConverter() { - } + } - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (value == null || value.isEmpty()) { - return null; - } + if (value == null || value.isEmpty()) { + return null; + } - if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("t") || value.equalsIgnoreCase("on") - || value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("y") || value.equalsIgnoreCase("1")) { - return "true"; - } else { - return "false"; - } - } + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("t") || value.equalsIgnoreCase("on") + || value.equalsIgnoreCase("yes") || value.equalsIgnoreCase("y") || value.equalsIgnoreCase("1")) { + return "true"; + } else { + return "false"; + } + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatCommaDelimitedListConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatCommaDelimitedListConverter.java index 30c21c8c1c..04c2a7dd1f 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatCommaDelimitedListConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatCommaDelimitedListConverter.java @@ -20,33 +20,33 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.common.util.ValidationUtils; +import java.util.Map; + public class HeatCommaDelimitedListConverter implements PropertyValueConverter { - private static HeatCommaDelimitedListConverter stringConverter = new HeatCommaDelimitedListConverter(); + private static HeatCommaDelimitedListConverter stringConverter = new HeatCommaDelimitedListConverter(); - public static HeatCommaDelimitedListConverter getInstance() { - return stringConverter; - } + public static HeatCommaDelimitedListConverter getInstance() { + return stringConverter; + } - private HeatCommaDelimitedListConverter() { + private HeatCommaDelimitedListConverter() { - } + } - @Override - public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { - String coverted = null; - if(original != null){ - coverted = ValidationUtils.removeNoneUtf8Chars(original); - coverted = ValidationUtils.removeHtmlTagsOnly(coverted); - coverted = ValidationUtils.normaliseWhitespace(coverted); - coverted = ValidationUtils.stripOctets(coverted); - } - return coverted; - } + @Override + public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { + String coverted = null; + if(original != null){ + coverted = ValidationUtils.removeNoneUtf8Chars(original); + coverted = ValidationUtils.removeHtmlTagsOnly(coverted); + coverted = ValidationUtils.normaliseWhitespace(coverted); + coverted = ValidationUtils.stripOctets(coverted); + } + return coverted; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatJsonConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatJsonConverter.java index 9922c0f05d..90618ced45 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatJsonConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatJsonConverter.java @@ -20,34 +20,34 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.common.util.ValidationUtils; +import java.util.Map; + public class HeatJsonConverter implements PropertyValueConverter { - private static HeatJsonConverter jsonConverter = new HeatJsonConverter(); + private static HeatJsonConverter jsonConverter = new HeatJsonConverter(); - public static HeatJsonConverter getInstance() { - return jsonConverter; - } + public static HeatJsonConverter getInstance() { + return jsonConverter; + } - private HeatJsonConverter() { + private HeatJsonConverter() { - } + } - @Override - public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (original == null) { - return null; - } - String converted = ValidationUtils.removeNoneUtf8Chars(original); - converted = ValidationUtils.removeHtmlTagsOnly(converted); - converted = ValidationUtils.normaliseWhitespace(converted); - converted = ValidationUtils.stripOctets(converted); - // As opposed to string converter, keeping the " and ' symbols - return converted; - } + @Override + public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { + if (original == null) { + return null; + } + String converted = ValidationUtils.removeNoneUtf8Chars(original); + converted = ValidationUtils.removeHtmlTagsOnly(converted); + converted = ValidationUtils.normaliseWhitespace(converted); + converted = ValidationUtils.stripOctets(converted); + // As opposed to string converter, keeping the " and ' symbols + return converted; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatNumberConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatNumberConverter.java index 8798b544bc..187793ee0b 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatNumberConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatNumberConverter.java @@ -20,31 +20,31 @@ package org.openecomp.sdc.be.model.tosca.converters; +import org.openecomp.sdc.be.model.DataTypeDefinition; + import java.math.BigDecimal; import java.util.Map; -import org.openecomp.sdc.be.model.DataTypeDefinition; - public class HeatNumberConverter implements PropertyValueConverter { - private static HeatNumberConverter numberConverter = new HeatNumberConverter(); + private static HeatNumberConverter numberConverter = new HeatNumberConverter(); - public static HeatNumberConverter getInstance() { - return numberConverter; - } + public static HeatNumberConverter getInstance() { + return numberConverter; + } - private HeatNumberConverter() { + private HeatNumberConverter() { - } + } - @Override - public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { + @Override + public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (original == null || original.isEmpty()) { - return null; - } + if (original == null || original.isEmpty()) { + return null; + } - return new BigDecimal(original).toPlainString(); - } + return new BigDecimal(original).toPlainString(); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatStringConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatStringConverter.java index 3f2b6eabf7..3bc379c7f9 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatStringConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/HeatStringConverter.java @@ -20,33 +20,33 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.common.util.ValidationUtils; +import java.util.Map; + public class HeatStringConverter implements PropertyValueConverter { - private static HeatStringConverter stringConverter = new HeatStringConverter(); + private static HeatStringConverter stringConverter = new HeatStringConverter(); - public static HeatStringConverter getInstance() { - return stringConverter; - } + public static HeatStringConverter getInstance() { + return stringConverter; + } - private HeatStringConverter() { + private HeatStringConverter() { - } + } - @Override - public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { - String coverted = null; - if(original != null){ - coverted = ValidationUtils.removeNoneUtf8Chars(original); - coverted = ValidationUtils.normaliseWhitespace(coverted); - coverted = ValidationUtils.stripOctets(coverted); - coverted = ValidationUtils.removeHtmlTagsOnly(coverted); - } - return coverted; - } + @Override + public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { + String coverted = null; + if(original != null){ + coverted = ValidationUtils.removeNoneUtf8Chars(original); + coverted = ValidationUtils.normaliseWhitespace(coverted); + coverted = ValidationUtils.stripOctets(coverted); + coverted = ValidationUtils.removeHtmlTagsOnly(coverted); + } + return coverted; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/IntegerConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/IntegerConverter.java index 30fbf69b80..f5e0a61358 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/IntegerConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/IntegerConverter.java @@ -20,28 +20,28 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class IntegerConverter implements ToscaValueConverter { - private static IntegerConverter integerConverter = new IntegerConverter(); + private static IntegerConverter integerConverter = new IntegerConverter(); - public static IntegerConverter getInstance() { - return integerConverter; - } + public static IntegerConverter getInstance() { + return integerConverter; + } - private IntegerConverter() { + private IntegerConverter() { - } + } - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if ( value == null || value.isEmpty() ){ - return null; - } - return Integer.parseInt(value); - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + if ( value == null || value.isEmpty() ){ + return null; + } + return Integer.parseInt(value); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/JsonConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/JsonConverter.java index 3472b6448c..db2004aab4 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/JsonConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/JsonConverter.java @@ -20,42 +20,41 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.io.StringReader; -import java.util.Map; - -import org.openecomp.sdc.be.model.DataTypeDefinition; -import org.openecomp.sdc.common.util.GsonFactory; - import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; +import org.openecomp.sdc.be.model.DataTypeDefinition; +import org.openecomp.sdc.common.util.GsonFactory; + +import java.io.StringReader; +import java.util.Map; public class JsonConverter implements PropertyValueConverter { - private static JsonConverter jsonConverter = new JsonConverter(); + private static JsonConverter jsonConverter = new JsonConverter(); - private static JsonParser jsonParser = new JsonParser(); + private static JsonParser jsonParser = new JsonParser(); - private static Gson gson = GsonFactory.getGson(); + private static Gson gson = GsonFactory.getGson(); - public static JsonConverter getInstance() { - return jsonConverter; - } + public static JsonConverter getInstance() { + return jsonConverter; + } - private JsonConverter() { + private JsonConverter() { - } + } - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - StringReader reader = new StringReader(value); - JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - JsonElement jsonElement = jsonParser.parse(jsonReader); - if (jsonElement.isJsonPrimitive()) { - return value; - } - return gson.toJson(jsonElement); - } + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + StringReader reader = new StringReader(value); + JsonReader jsonReader = new JsonReader(reader); + jsonReader.setLenient(true); + JsonElement jsonElement = jsonParser.parse(jsonReader); + if (jsonElement.isJsonPrimitive()) { + return value; + } + return gson.toJson(jsonElement); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java index 4f6de9b80c..00783404e7 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java @@ -20,200 +20,191 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - +import com.google.gson.*; +import fj.data.Either; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; import org.openecomp.sdc.be.model.tosca.validators.DataTypeValidatorConverter; import org.openecomp.sdc.be.model.tosca.validators.ListValidator; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.common.util.GsonFactory; import org.openecomp.sdc.common.util.JsonUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; - -import fj.data.Either; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; public class ListConverter implements PropertyValueConverter { - private static ListConverter listConverter = new ListConverter(); - private static Gson gson = GsonFactory.getGson(); - private static Logger log = LoggerFactory.getLogger(ListValidator.class.getName()); - - DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance(); - - private static JsonParser jsonParser = new JsonParser(); - - public static ListConverter getInstance() { - return listConverter; - } - - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - Either<String, Boolean> convertWithErrorResult = this.convertWithErrorResult(value, innerType, dataTypes); - if (convertWithErrorResult.isRight()) { - return null; - } - - return convertWithErrorResult.left().value(); - } - - public Either<String, Boolean> convertWithErrorResult(String value, String innerType, - Map<String, DataTypeDefinition> dataTypes) { - if (value == null || innerType == null) { - return Either.left(value); - } - - PropertyValueConverter innerConverter; - ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); - - if (innerToscaType != null) { - PropertyValueConverter innerConverter1; - switch (innerToscaType) { - case STRING: - innerConverter1 = ToscaPropertyType.STRING.getConverter(); - break; - case INTEGER: - innerConverter1 = ToscaPropertyType.INTEGER.getConverter(); - break; - case FLOAT: - innerConverter1 = ToscaPropertyType.FLOAT.getConverter(); - break; - case BOOLEAN: - innerConverter1 = ToscaPropertyType.BOOLEAN.getConverter(); - break; - case JSON: - innerConverter1 = ToscaPropertyType.JSON.getConverter(); - break; - default: - log.debug("inner Tosca Type is unknown"); - return Either.left(value); - } - innerConverter = innerConverter1; - } else { - log.debug("inner Tosca Type {} ia a complex data type.", innerType); - - Either<String, Boolean> validateComplexInnerType = convertComplexInnerType(value, innerType, dataTypes); - - return validateComplexInnerType; - } - - try { - ArrayList<String> newList = new ArrayList<String>(); - - JsonArray jo = (JsonArray) jsonParser.parse(value); - if(ToscaPropertyType.JSON == innerToscaType) - return Either.left(value); - int size = jo.size(); - for (int i = 0; i < size; i++) { - JsonElement currentValue = jo.get(i); - String element = JsonUtils.toString(currentValue); - - if (element == null || element.isEmpty()) { - continue; - } - element = innerConverter.convert(element, null, dataTypes); - newList.add(element); - } - - switch (innerToscaType) { - case STRING: - value = gson.toJson(newList); - break; - case INTEGER: - List<BigInteger> intList = new ArrayList<BigInteger>(); - - for (String str : newList) { - int base = 10; - if (str.contains("0x")) { - str = str.replaceFirst("0x", ""); - base = 16; - } - if (str.contains("0o")) { - str = str.replaceFirst("0o", ""); - base = 8; - } - intList.add(new BigInteger(str, base)); - } - value = gson.toJson(intList); - break; - case FLOAT: - value = "["; - for (String str : newList) { - value += str + ","; - } - value = value.substring(0, value.length() - 1); - value += "]"; - break; - case BOOLEAN: - List<Boolean> boolList = new ArrayList<Boolean>(); - for (String str : newList) { - boolList.add(Boolean.valueOf(str)); - } - value = gson.toJson(boolList); - break; - default: - value = gson.toJson(newList); - log.debug("inner Tosca Type unknown : {}", innerToscaType); - } - - } catch (JsonParseException e) { - log.debug("Failed to parse json : {}", value, e); - BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); - return Either.right(false); - } - - return Either.left(value); - } - - private Either<String, Boolean> convertComplexInnerType(String value, String innerType, - Map<String, DataTypeDefinition> allDataTypes) { - - DataTypeDefinition dataTypeDefinition = allDataTypes.get(innerType); - if (dataTypeDefinition == null) { - log.debug("Cannot find data type {}", innerType); - return Either.right(false); - } - - List<JsonElement> newList = new ArrayList<>(); - - try { - - JsonArray jo = (JsonArray) jsonParser.parse(value); - int size = jo.size(); - for (int i = 0; i < size; i++) { - JsonElement currentValue = jo.get(i); - - if (currentValue != null) { - - String element = JsonUtils.toString(currentValue); - - ImmutablePair<JsonElement, Boolean> validateAndUpdate = dataTypeValidatorConverter - .validateAndUpdate(element, dataTypeDefinition, allDataTypes); - if (validateAndUpdate.right.booleanValue() == false) { - log.debug("Cannot parse value {} from type {} in list position {}",currentValue,innerType,i); - return Either.right(false); - } - JsonElement newValue = validateAndUpdate.left; - newList.add(newValue); - } - } - } catch (Exception e) { - log.debug("Failed to parse the value {} of list parameter.", value); - return Either.right(false); - } - value = gson.toJson(newList); - return Either.left(value); - } + private static ListConverter listConverter = new ListConverter(); + private static Gson gson = GsonFactory.getGson(); + private static final Logger log = Logger.getLogger(ListValidator.class.getName()); + + DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance(); + + private static JsonParser jsonParser = new JsonParser(); + + public static ListConverter getInstance() { + return listConverter; + } + + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + Either<String, Boolean> convertWithErrorResult = this.convertWithErrorResult(value, innerType, dataTypes); + if (convertWithErrorResult.isRight()) { + return null; + } + + return convertWithErrorResult.left().value(); + } + + public Either<String, Boolean> convertWithErrorResult(String value, String innerType, + Map<String, DataTypeDefinition> dataTypes) { + if (value == null || innerType == null) { + return Either.left(value); + } + + PropertyValueConverter innerConverter; + ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); + + if (innerToscaType != null) { + PropertyValueConverter innerConverter1; + switch (innerToscaType) { + case STRING: + innerConverter1 = ToscaPropertyType.STRING.getConverter(); + break; + case INTEGER: + innerConverter1 = ToscaPropertyType.INTEGER.getConverter(); + break; + case FLOAT: + innerConverter1 = ToscaPropertyType.FLOAT.getConverter(); + break; + case BOOLEAN: + innerConverter1 = ToscaPropertyType.BOOLEAN.getConverter(); + break; + case JSON: + innerConverter1 = ToscaPropertyType.JSON.getConverter(); + break; + default: + log.debug("inner Tosca Type is unknown"); + return Either.left(value); + } + innerConverter = innerConverter1; + } else { + log.debug("inner Tosca Type {} ia a complex data type.", innerType); + + return convertComplexInnerType(value, innerType, dataTypes); + } + + try { + ArrayList<String> newList = new ArrayList<>(); + + JsonArray jo = (JsonArray) jsonParser.parse(value); + if(ToscaPropertyType.JSON == innerToscaType) + return Either.left(value); + int size = jo.size(); + for (int i = 0; i < size; i++) { + JsonElement currentValue = jo.get(i); + String element = JsonUtils.toString(currentValue); + + if (element == null || element.isEmpty()) { + continue; + } + element = innerConverter.convert(element, null, dataTypes); + newList.add(element); + } + + switch (innerToscaType) { + case STRING: + value = gson.toJson(newList); + break; + case INTEGER: + List<BigInteger> intList = new ArrayList<>(); + + for (String str : newList) { + int base = 10; + if (str.contains("0x")) { + str = str.replaceFirst("0x", ""); + base = 16; + } + if (str.contains("0o")) { + str = str.replaceFirst("0o", ""); + base = 8; + } + intList.add(new BigInteger(str, base)); + } + value = gson.toJson(intList); + break; + case FLOAT: + value = "["; + for (String str : newList) { + value += str + ","; + } + value = value.substring(0, value.length() - 1); + value += "]"; + break; + case BOOLEAN: + List<Boolean> boolList = new ArrayList<>(); + for (String str : newList) { + boolList.add(Boolean.valueOf(str)); + } + value = gson.toJson(boolList); + break; + default: + value = gson.toJson(newList); + log.debug("inner Tosca Type unknown : {}", innerToscaType); + } + + } catch (JsonParseException e) { + log.debug("Failed to parse json : {}", value, e); + BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); + return Either.right(false); + } + + return Either.left(value); + } + + private Either<String, Boolean> convertComplexInnerType(String value, String innerType, + Map<String, DataTypeDefinition> allDataTypes) { + + DataTypeDefinition dataTypeDefinition = allDataTypes.get(innerType); + if (dataTypeDefinition == null) { + log.debug("Cannot find data type {}", innerType); + return Either.right(false); + } + + List<JsonElement> newList = new ArrayList<>(); + + try { + + JsonArray jo = (JsonArray) jsonParser.parse(value); + int size = jo.size(); + for (int i = 0; i < size; i++) { + JsonElement currentValue = jo.get(i); + + if (currentValue != null) { + + String element = JsonUtils.toString(currentValue); + + ImmutablePair<JsonElement, Boolean> validateAndUpdate = dataTypeValidatorConverter + .validateAndUpdate(element, dataTypeDefinition, allDataTypes); + if (!validateAndUpdate.right.booleanValue()) { + log.debug("Cannot parse value {} from type {} in list position {}",currentValue,innerType,i); + return Either.right(false); + } + JsonElement newValue = validateAndUpdate.left; + newList.add(newValue); + } + } + } catch (Exception e) { + log.debug("Failed to parse the value {} of list parameter.", value); + return Either.right(false); + } + value = gson.toJson(newList); + return Either.left(value); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/LowerCaseConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/LowerCaseConverter.java index f33be29327..6e799dac83 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/LowerCaseConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/LowerCaseConverter.java @@ -20,29 +20,29 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class LowerCaseConverter implements PropertyValueConverter { - private static LowerCaseConverter booleanConverter = new LowerCaseConverter(); + private static LowerCaseConverter booleanConverter = new LowerCaseConverter(); - public static LowerCaseConverter getInstance() { - return booleanConverter; - } + public static LowerCaseConverter getInstance() { + return booleanConverter; + } - private LowerCaseConverter() { + private LowerCaseConverter() { - } + } - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (value == null) { - return null; - } - return value.toLowerCase(); - } + if (value == null) { + return null; + } + return value.toLowerCase(); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/MapConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/MapConverter.java index 30b895f0d2..f53d95ceaf 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/MapConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/MapConverter.java @@ -20,230 +20,221 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - +import com.google.gson.*; +import fj.data.Either; import org.apache.commons.lang3.tuple.ImmutablePair; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; import org.openecomp.sdc.be.model.tosca.validators.DataTypeValidatorConverter; import org.openecomp.sdc.be.model.tosca.validators.ListValidator; +import org.openecomp.sdc.common.log.wrappers.Logger; import org.openecomp.sdc.common.util.GsonFactory; import org.openecomp.sdc.common.util.JsonUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; - -import fj.data.Either; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; public class MapConverter implements PropertyValueConverter { - private static MapConverter mapConverter = new MapConverter(); - private static Gson gson = GsonFactory.getGson(); - private static Logger log = LoggerFactory.getLogger(ListValidator.class.getName()); - - DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance(); - - private static JsonParser jsonParser = new JsonParser(); - - public static MapConverter getInstance() { - return mapConverter; - } - - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - - Either<String, Boolean> convertWithErrorResult = this.convertWithErrorResult(value, innerType, dataTypes); - if (convertWithErrorResult.isRight()) { - return null; - } - - return convertWithErrorResult.left().value(); - } - - public Either<String, Boolean> convertWithErrorResult(String value, String innerType, - Map<String, DataTypeDefinition> dataTypes) { - - if (value == null || value == "" || innerType == null) { - return Either.left(value); - } - - PropertyValueConverter innerConverter; - PropertyValueConverter keyConverter = ToscaPropertyType.STRING.getConverter(); - ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); - - if (innerToscaType != null) { - switch (innerToscaType) { - case STRING: - innerConverter = ToscaPropertyType.STRING.getConverter(); - break; - case INTEGER: - innerConverter = ToscaPropertyType.INTEGER.getConverter(); - break; - case FLOAT: - innerConverter = ToscaPropertyType.FLOAT.getConverter(); - break; - case BOOLEAN: - innerConverter = ToscaPropertyType.BOOLEAN.getConverter(); - break; - case JSON: - innerConverter = ToscaPropertyType.JSON.getConverter(); - break; - default: - log.debug("inner Tosca Type is unknown"); - return Either.left(value); - } - - } else { - - log.debug("inner Tosca Type {} ia a complex data type.", innerType); - - Either<String, Boolean> validateComplexInnerType = convertComplexInnerType(value, innerType, keyConverter, - dataTypes); - - return validateComplexInnerType; - - } - - try { - Map<String, String> newMap = new HashMap<String, String>(); - - JsonElement jsonObject = jsonParser.parse(value); - JsonObject asJsonObject = jsonObject.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - for (Entry<String, JsonElement> entry : entrySet) { - String key = entry.getKey(); - JsonElement jsonValue = entry.getValue(); - - key = keyConverter.convert(entry.getKey(), null, dataTypes); - - String element = JsonUtils.toString(jsonValue); - - String val = innerConverter.convert(element, null, dataTypes); - newMap.put(key, val); - } - - String objVal; - switch (innerToscaType) { - case STRING: - value = gson.toJson(newMap); - break; - case INTEGER: - String key = null; - Map<String, Integer> intMap = new HashMap<String, Integer>(); - for (Map.Entry<String, String> entry : newMap.entrySet()) { - objVal = entry.getValue(); - key = entry.getKey(); - if (objVal != null) { - intMap.put(key, Integer.valueOf(objVal.toString())); - } else { - intMap.put(key, null); - } - - } - value = gson.toJson(intMap); - break; - case FLOAT: - value = "{"; - for (Map.Entry<String, String> entry : newMap.entrySet()) { - objVal = entry.getValue(); - if (objVal == null) { - objVal = "null"; - } - key = entry.getKey(); - value += "\"" + key + "\":" + objVal.toString() + ","; - } - value = value.substring(0, value.length() - 1); - value += "}"; - break; - case BOOLEAN: - Map<String, Boolean> boolMap = new HashMap<String, Boolean>(); - for (Map.Entry<String, String> entry : newMap.entrySet()) { - objVal = entry.getValue(); - key = entry.getKey(); - if (objVal != null) { - boolMap.put(key, Boolean.valueOf(objVal.toString())); - } else { - boolMap.put(key, null); - } - } - value = gson.toJson(boolMap); - break; - default: - value = gson.toJson(newMap); - log.debug("inner Tosca Type unknown : {}", innerToscaType); - } - } catch (JsonParseException e) { - log.debug("Failed to parse json : {}", value, e); - BeEcompErrorManager.getInstance().logBeInvalidJsonInput("Map Converter"); - return Either.right(false); - } - - return Either.left(value); - - } - - /** - * convert the json value of map when the inner type is a complex data type - * - * @param value - * @param innerType - * @param keyConverter - * @param allDataTypes - * @return - */ - private Either<String, Boolean> convertComplexInnerType(String value, String innerType, - PropertyValueConverter keyConverter, Map<String, DataTypeDefinition> allDataTypes) { - - DataTypeDefinition dataTypeDefinition = allDataTypes.get(innerType); - if (dataTypeDefinition == null) { - log.debug("Cannot find data type {}", innerType); - return Either.right(false); - } - - Map<String, JsonElement> newMap = new HashMap<String, JsonElement>(); - - try { - - JsonElement jsonObject = jsonParser.parse(value); - JsonObject asJsonObject = jsonObject.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - for (Entry<String, JsonElement> entry : entrySet) { - String currentKey = keyConverter.convert(entry.getKey(), null, allDataTypes); - - JsonElement currentValue = entry.getValue(); - - if (currentValue != null) { - - String element = JsonUtils.toString(currentValue); - - ImmutablePair<JsonElement, Boolean> validateAndUpdate = dataTypeValidatorConverter - .validateAndUpdate(element, dataTypeDefinition, allDataTypes); - if (validateAndUpdate.right.booleanValue() == false) { - log.debug("Cannot parse value {} from type {} of key {}",currentValue,innerType,currentKey); - return Either.right(false); - } - JsonElement newValue = validateAndUpdate.left; - newMap.put(currentKey, newValue); - } else { - newMap.put(currentKey, null); - } - } - - } catch (Exception e) { - log.debug("Cannot parse value {} of map from inner type {}", value, innerType); - return Either.right(false); - } - - value = gson.toJson(newMap); - return Either.left(value); - } + private static MapConverter mapConverter = new MapConverter(); + private static Gson gson = GsonFactory.getGson(); + private static final Logger log = Logger.getLogger(ListValidator.class.getName()); + + DataTypeValidatorConverter dataTypeValidatorConverter = DataTypeValidatorConverter.getInstance(); + + private static JsonParser jsonParser = new JsonParser(); + + public static MapConverter getInstance() { + return mapConverter; + } + + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + + Either<String, Boolean> convertWithErrorResult = this.convertWithErrorResult(value, innerType, dataTypes); + if (convertWithErrorResult.isRight()) { + return null; + } + + return convertWithErrorResult.left().value(); + } + + public Either<String, Boolean> convertWithErrorResult(String value, String innerType, + Map<String, DataTypeDefinition> dataTypes) { + + if (value == null || value == "" || innerType == null) { + return Either.left(value); + } + + PropertyValueConverter innerConverter; + PropertyValueConverter keyConverter = ToscaPropertyType.STRING.getConverter(); + ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); + + if (innerToscaType != null) { + switch (innerToscaType) { + case STRING: + innerConverter = ToscaPropertyType.STRING.getConverter(); + break; + case INTEGER: + innerConverter = ToscaPropertyType.INTEGER.getConverter(); + break; + case FLOAT: + innerConverter = ToscaPropertyType.FLOAT.getConverter(); + break; + case BOOLEAN: + innerConverter = ToscaPropertyType.BOOLEAN.getConverter(); + break; + case JSON: + innerConverter = ToscaPropertyType.JSON.getConverter(); + break; + default: + log.debug("inner Tosca Type is unknown"); + return Either.left(value); + } + + } else { + + log.debug("inner Tosca Type {} ia a complex data type.", innerType); + + return convertComplexInnerType(value, innerType, keyConverter, + dataTypes); + + } + + try { + Map<String, String> newMap = new HashMap<>(); + + JsonElement jsonObject = jsonParser.parse(value); + JsonObject asJsonObject = jsonObject.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + for (Entry<String, JsonElement> entry : entrySet) { + String key = entry.getKey(); + JsonElement jsonValue = entry.getValue(); + + key = keyConverter.convert(entry.getKey(), null, dataTypes); + + String element = JsonUtils.toString(jsonValue); + + String val = innerConverter.convert(element, null, dataTypes); + newMap.put(key, val); + } + + String objVal; + switch (innerToscaType) { + case STRING: + value = gson.toJson(newMap); + break; + case INTEGER: + String key = null; + Map<String, Integer> intMap = new HashMap<>(); + for (Map.Entry<String, String> entry : newMap.entrySet()) { + objVal = entry.getValue(); + key = entry.getKey(); + if (objVal != null) { + intMap.put(key, Integer.valueOf(objVal.toString())); + } else { + intMap.put(key, null); + } + + } + value = gson.toJson(intMap); + break; + case FLOAT: + value = "{"; + for (Map.Entry<String, String> entry : newMap.entrySet()) { + objVal = entry.getValue(); + if (objVal == null) { + objVal = "null"; + } + key = entry.getKey(); + value += "\"" + key + "\":" + objVal.toString() + ","; + } + value = value.substring(0, value.length() - 1); + value += "}"; + break; + case BOOLEAN: + Map<String, Boolean> boolMap = new HashMap<>(); + for (Map.Entry<String, String> entry : newMap.entrySet()) { + objVal = entry.getValue(); + key = entry.getKey(); + if (objVal != null) { + boolMap.put(key, Boolean.valueOf(objVal.toString())); + } else { + boolMap.put(key, null); + } + } + value = gson.toJson(boolMap); + break; + default: + value = gson.toJson(newMap); + log.debug("inner Tosca Type unknown : {}", innerToscaType); + } + } catch (JsonParseException e) { + log.debug("Failed to parse json : {}", value, e); + BeEcompErrorManager.getInstance().logBeInvalidJsonInput("Map Converter"); + return Either.right(false); + } + + return Either.left(value); + + } + + /** + * convert the json value of map when the inner type is a complex data type + * + * @param value + * @param innerType + * @param keyConverter + * @param allDataTypes + * @return + */ + private Either<String, Boolean> convertComplexInnerType(String value, String innerType, + PropertyValueConverter keyConverter, Map<String, DataTypeDefinition> allDataTypes) { + + DataTypeDefinition dataTypeDefinition = allDataTypes.get(innerType); + if (dataTypeDefinition == null) { + log.debug("Cannot find data type {}", innerType); + return Either.right(false); + } + + Map<String, JsonElement> newMap = new HashMap<>(); + + try { + + JsonElement jsonObject = jsonParser.parse(value); + JsonObject asJsonObject = jsonObject.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + for (Entry<String, JsonElement> entry : entrySet) { + String currentKey = keyConverter.convert(entry.getKey(), null, allDataTypes); + + JsonElement currentValue = entry.getValue(); + + if (currentValue != null) { + + String element = JsonUtils.toString(currentValue); + + ImmutablePair<JsonElement, Boolean> validateAndUpdate = dataTypeValidatorConverter + .validateAndUpdate(element, dataTypeDefinition, allDataTypes); + if (!validateAndUpdate.right.booleanValue()) { + log.debug("Cannot parse value {} from type {} of key {}",currentValue,innerType,currentKey); + return Either.right(false); + } + JsonElement newValue = validateAndUpdate.left; + newMap.put(currentKey, newValue); + } else { + newMap.put(currentKey, null); + } + } + + } catch (Exception e) { + log.debug("Cannot parse value {} of map from inner type {}", value, innerType); + return Either.right(false); + } + + value = gson.toJson(newMap); + return Either.left(value); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/PropertyValueConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/PropertyValueConverter.java index 254785fe8a..b60b0a5ec8 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/PropertyValueConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/PropertyValueConverter.java @@ -20,12 +20,12 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public interface PropertyValueConverter { - String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes); + String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes); } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/StringConvertor.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/StringConvertor.java index f5a7ff632e..ae5340720c 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/StringConvertor.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/StringConvertor.java @@ -20,36 +20,36 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.common.util.ValidationUtils; +import java.util.Map; + public class StringConvertor implements PropertyValueConverter { - private static StringConvertor stringConverter = new StringConvertor(); + private static StringConvertor stringConverter = new StringConvertor(); - public static StringConvertor getInstance() { - return stringConverter; - } + public static StringConvertor getInstance() { + return stringConverter; + } - private StringConvertor() { + private StringConvertor() { - } + } - @Override - public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (original == null) { - return null; - } - String coverted = ValidationUtils.removeNoneUtf8Chars(original); + @Override + public String convert(String original, String innerType, Map<String, DataTypeDefinition> dataTypes) { + if (original == null) { + return null; + } + String coverted = ValidationUtils.removeNoneUtf8Chars(original); - // coverted = ValidationUtils.convertHtmlTagsToEntities(coverted); - coverted = ValidationUtils.normaliseWhitespace(coverted); - coverted = ValidationUtils.stripOctets(coverted); - coverted = ValidationUtils.removeHtmlTagsOnly(coverted); + // coverted = ValidationUtils.convertHtmlTagsToEntities(coverted); + coverted = ValidationUtils.normaliseWhitespace(coverted); + coverted = ValidationUtils.stripOctets(coverted); + coverted = ValidationUtils.removeHtmlTagsOnly(coverted); - return coverted; - } + return coverted; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaBooleanConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaBooleanConverter.java index 977415b909..346f637306 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaBooleanConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaBooleanConverter.java @@ -20,35 +20,35 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class ToscaBooleanConverter implements PropertyValueConverter { - private static ToscaBooleanConverter booleanConverter = new ToscaBooleanConverter(); + private static ToscaBooleanConverter booleanConverter = new ToscaBooleanConverter(); - public static ToscaBooleanConverter getInstance() { - return booleanConverter; - } + public static ToscaBooleanConverter getInstance() { + return booleanConverter; + } - private ToscaBooleanConverter() { + private ToscaBooleanConverter() { - } + } - @Override - public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + @Override + public String convert(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (value == null) { - return null; - } + if (value == null) { + return null; + } - if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("on") || value.equalsIgnoreCase("yes") - || value.equalsIgnoreCase("y")) { - return "true"; - } else { - return "false"; - } - } + if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("on") || value.equalsIgnoreCase("yes") + || value.equalsIgnoreCase("y")) { + return "true"; + } else { + return "false"; + } + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaConverterUtils.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaConverterUtils.java index 4aadaa0910..941535a09d 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaConverterUtils.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaConverterUtils.java @@ -1,8 +1,7 @@ package org.openecomp.sdc.be.model.tosca.converters; -import org.openecomp.sdc.be.model.tosca.ToscaFunctions; - import com.google.gson.JsonObject; +import org.openecomp.sdc.be.model.tosca.ToscaFunctions; public class ToscaConverterUtils { diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaFloatConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaFloatConverter.java index ba765c92a0..417beea5fe 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaFloatConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaFloatConverter.java @@ -20,12 +20,12 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.math.BigDecimal; -import java.util.Map; - import org.apache.commons.lang.StringUtils; import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.math.BigDecimal; +import java.util.Map; + public class ToscaFloatConverter implements PropertyValueConverter { private static ToscaFloatConverter numberConverter = new ToscaFloatConverter(); diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaJsonValueConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaJsonValueConverter.java index d70088e044..0ce446d3c4 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaJsonValueConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaJsonValueConverter.java @@ -20,37 +20,36 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.io.StringReader; -import java.util.Map; - -import org.openecomp.sdc.be.model.DataTypeDefinition; - import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; +import org.openecomp.sdc.be.model.DataTypeDefinition; + +import java.io.StringReader; +import java.util.Map; public class ToscaJsonValueConverter extends ToscaValueBaseConverter implements ToscaValueConverter { - private static ToscaJsonValueConverter toscaJsonConverter = new ToscaJsonValueConverter(); + private static ToscaJsonValueConverter toscaJsonConverter = new ToscaJsonValueConverter(); - public static ToscaJsonValueConverter getInstance() { - return toscaJsonConverter; - } + public static ToscaJsonValueConverter getInstance() { + return toscaJsonConverter; + } - private ToscaJsonValueConverter() { + private ToscaJsonValueConverter() { - } + } - JsonParser jsonParser = new JsonParser(); + JsonParser jsonParser = new JsonParser(); - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - StringReader reader = new StringReader(value); - JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - JsonElement jsonElement = jsonParser.parse(jsonReader); - if (jsonElement.isJsonPrimitive()) { - return value; - } - return handleComplexJsonValue(jsonElement); - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + StringReader reader = new StringReader(value); + JsonReader jsonReader = new JsonReader(reader); + jsonReader.setLenient(true); + JsonElement jsonElement = jsonParser.parse(jsonReader); + if (jsonElement.isJsonPrimitive()) { + return value; + } + return handleComplexJsonValue(jsonElement); + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaListValueConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaListValueConverter.java index f3189ee968..8eb4c1099b 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaListValueConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaListValueConverter.java @@ -20,6 +20,14 @@ package org.openecomp.sdc.be.model.tosca.converters; +import com.google.gson.*; +import com.google.gson.stream.JsonReader; +import org.openecomp.sdc.be.config.BeEcompErrorManager; +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.common.log.wrappers.Logger; + import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; @@ -27,151 +35,136 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.openecomp.sdc.be.config.BeEcompErrorManager; -import org.openecomp.sdc.be.model.DataTypeDefinition; -import org.openecomp.sdc.be.model.PropertyDefinition; -import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import com.google.gson.stream.JsonReader; - public class ToscaListValueConverter extends ToscaValueBaseConverter implements ToscaValueConverter { - private static ToscaListValueConverter listConverter = new ToscaListValueConverter(); - private JsonParser jsonParser = new JsonParser(); - private static Logger log = LoggerFactory.getLogger(ToscaListValueConverter.class.getName()); - - public static ToscaListValueConverter getInstance() { - return listConverter; - } - - private ToscaListValueConverter() { - - } - - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (value == null) { - return null; - } - try { - ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); - ToscaValueConverter innerConverter = null; - boolean isScalar = true; - if (innerToscaType != null) { - innerConverter = innerToscaType.getValueConverter(); - } else { - DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); - - if (dataTypeDefinition != null) { - ToscaPropertyType toscaPropertyType = null; - if ((toscaPropertyType = isScalarType(dataTypeDefinition)) != null) { - innerConverter = toscaPropertyType.getValueConverter(); - } else { - isScalar = false; - innerConverter = ToscaMapValueConverter.getInstance(); - } - } else { - log.debug("inner Tosca Type is null"); - return value; - } - } - JsonElement jsonElement = null; - try { - StringReader reader = new StringReader(value); - JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - - jsonElement = jsonParser.parse(jsonReader); - } catch (JsonSyntaxException e) { - log.debug("convertToToscaValue failed to parse json value :", e); - return null; - } - if (jsonElement == null || true == jsonElement.isJsonNull()) { - log.debug("convertToToscaValue json element is null"); - return null; - } - if (jsonElement.isJsonArray() == false) { - // get_input all array like get_input: qrouter_names - return handleComplexJsonValue(jsonElement); - } - JsonArray asJsonArray = jsonElement.getAsJsonArray(); - - ArrayList<Object> toscaList = new ArrayList<Object>(); - final boolean isScalarF = isScalar; - final ToscaValueConverter innerConverterFinal = innerConverter; - asJsonArray.forEach(e -> { - Object convertedValue = null; - if (isScalarF) { - if (e.isJsonPrimitive()) { - String jsonAsString = e.getAsString(); - log.debug("try to convert scalar value {}", jsonAsString); - convertedValue = innerConverterFinal.convertToToscaValue(jsonAsString, innerType, - dataTypes); - } else { - convertedValue = handleComplexJsonValue(e); - } - - } else { - JsonObject asJsonObject = e.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - - DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); - Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); - Map<String, Object> toscaObjectPresentation = new HashMap<>(); - - 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()); - continue; - // return null; - } - String type = propertyDefinition.getType(); - ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); - Object convValue; - if (propertyType != null) { - if (elementValue.isJsonPrimitive()) { - ToscaValueConverter valueConverter = propertyType.getValueConverter(); - convValue = valueConverter.convertToToscaValue(elementValue.getAsString(), type, - dataTypes); - } else { - if (ToscaPropertyType.MAP.equals(type) || ToscaPropertyType.LIST.equals(propertyType)) { - ToscaValueConverter valueConverter = propertyType.getValueConverter(); - String json = gson.toJson(elementValue); - String innerTypeRecursive = propertyDefinition.getSchema().getProperty().getType(); - convValue = valueConverter.convertToToscaValue(json, innerTypeRecursive, dataTypes); - } else { - convValue = handleComplexJsonValue(elementValue); - } - } - } else { - String json = gson.toJson(elementValue); - convValue = convertToToscaValue(json, type, dataTypes); - } - toscaObjectPresentation.put(propName, convValue); - } - convertedValue = toscaObjectPresentation; - } - toscaList.add(convertedValue); - }); - return toscaList; - } catch ( - - JsonParseException e) { - log.debug("Failed to parse json : {}", value, e); - BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); - return null; - } - } + private static ToscaListValueConverter listConverter = new ToscaListValueConverter(); + private JsonParser jsonParser = new JsonParser(); + private static final Logger log = Logger.getLogger(ToscaListValueConverter.class.getName()); + + public static ToscaListValueConverter getInstance() { + return listConverter; + } + + private ToscaListValueConverter() { + + } + + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + if (value == null) { + return null; + } + try { + ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); + ToscaValueConverter innerConverter = null; + boolean isScalar = true; + if (innerToscaType != null) { + innerConverter = innerToscaType.getValueConverter(); + } else { + DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); + + if (dataTypeDefinition != null) { + ToscaPropertyType toscaPropertyType = null; + if ((toscaPropertyType = isScalarType(dataTypeDefinition)) != null) { + innerConverter = toscaPropertyType.getValueConverter(); + } else { + isScalar = false; + innerConverter = ToscaMapValueConverter.getInstance(); + } + } else { + log.debug("inner Tosca Type is null"); + return value; + } + } + JsonElement jsonElement = null; + try { + StringReader reader = new StringReader(value); + JsonReader jsonReader = new JsonReader(reader); + jsonReader.setLenient(true); + + jsonElement = jsonParser.parse(jsonReader); + } catch (JsonSyntaxException e) { + log.debug("convertToToscaValue failed to parse json value :", e); + return null; + } + if (jsonElement == null || jsonElement.isJsonNull()) { + log.debug("convertToToscaValue json element is null"); + return null; + } + if (!jsonElement.isJsonArray()) { + // get_input all array like get_input: qrouter_names + return handleComplexJsonValue(jsonElement); + } + JsonArray asJsonArray = jsonElement.getAsJsonArray(); + + ArrayList<Object> toscaList = new ArrayList<>(); + final boolean isScalarF = isScalar; + final ToscaValueConverter innerConverterFinal = innerConverter; + asJsonArray.forEach(e -> { + Object convertedValue = null; + if (isScalarF) { + if (e.isJsonPrimitive()) { + String jsonAsString = e.getAsString(); + log.debug("try to convert scalar value {}", jsonAsString); + convertedValue = innerConverterFinal.convertToToscaValue(jsonAsString, innerType, + dataTypes); + } else { + convertedValue = handleComplexJsonValue(e); + } + + } else { + JsonObject asJsonObject = e.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + + DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); + Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); + Map<String, Object> toscaObjectPresentation = new HashMap<>(); + + 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()); + continue; + // return null; + } + String type = propertyDefinition.getType(); + ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); + Object convValue; + if (propertyType != null) { + if (elementValue.isJsonPrimitive()) { + ToscaValueConverter valueConverter = propertyType.getValueConverter(); + convValue = valueConverter.convertToToscaValue(elementValue.getAsString(), type, + dataTypes); + } else { + if (ToscaPropertyType.MAP.equals(type) || ToscaPropertyType.LIST.equals(propertyType)) { + ToscaValueConverter valueConverter = propertyType.getValueConverter(); + String json = gson.toJson(elementValue); + String innerTypeRecursive = propertyDefinition.getSchema().getProperty().getType(); + convValue = valueConverter.convertToToscaValue(json, innerTypeRecursive, dataTypes); + } else { + convValue = handleComplexJsonValue(elementValue); + } + } + } else { + String json = gson.toJson(elementValue); + convValue = convertToToscaValue(json, type, dataTypes); + } + toscaObjectPresentation.put(propName, convValue); + } + convertedValue = toscaObjectPresentation; + } + toscaList.add(convertedValue); + }); + return toscaList; + } catch ( + + JsonParseException e) { + log.debug("Failed to parse json : {}", value, e); + BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); + return null; + } + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaMapValueConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaMapValueConverter.java index 5b565bf62a..04636d87e0 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaMapValueConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaMapValueConverter.java @@ -20,233 +20,222 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.io.StringReader; -import java.util.ArrayList; -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 com.google.gson.stream.JsonReader; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonParser; -import com.google.gson.JsonSyntaxException; -import com.google.gson.stream.JsonReader; +import org.openecomp.sdc.common.log.wrappers.Logger; + +import java.io.StringReader; +import java.util.*; +import java.util.Map.Entry; public class ToscaMapValueConverter extends ToscaValueBaseConverter implements ToscaValueConverter { - private static ToscaMapValueConverter mapConverter = new ToscaMapValueConverter(); - - private JsonParser jsonParser = new JsonParser(); - private static Logger log = LoggerFactory.getLogger(ToscaMapValueConverter.class.getName()); - - public static ToscaMapValueConverter getInstance() { - return mapConverter; - } - - private ToscaMapValueConverter() { - - } - - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - if (value == null) { - return value; - } - try { - ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); - ToscaValueConverter innerConverter = null; - boolean isScalar = true; - List<PropertyDefinition> allPropertiesRecursive = new ArrayList<>(); - if (innerToscaType != null) { - innerConverter = innerToscaType.getValueConverter(); - } else { - - DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); - if (dataTypeDefinition != null) { - ToscaPropertyType toscaPropertyType = null; - if ((toscaPropertyType = isScalarType(dataTypeDefinition)) != null) { - innerConverter = toscaPropertyType.getValueConverter(); - } else { - isScalar = false; - allPropertiesRecursive.addAll(dataTypeDefinition.getProperties()); - DataTypeDefinition derivedFrom = dataTypeDefinition.getDerivedFrom(); - while ( !derivedFrom.getName().equals("tosca.datatypes.Root") ){ - allPropertiesRecursive.addAll(derivedFrom.getProperties()); - derivedFrom = derivedFrom.getDerivedFrom(); - } - } - } else { - log.debug("inner Tosca Type is null"); - return value; - } - - } - JsonElement jsonElement = null; - try { - StringReader reader = new StringReader(value); - JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - - jsonElement = jsonParser.parse(jsonReader); - - } catch (JsonSyntaxException e) { - log.debug("convertToToscaValue failed to parse json value :", e); - return null; - } - if (jsonElement == null || true == jsonElement.isJsonNull()) { - log.debug("convertToToscaValue json element is null"); - return null; - } - JsonObject asJsonObject = jsonElement.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); - - Map<String, Object> toscaMap = new HashMap<>(); - final boolean isScalarF = isScalar; - final ToscaValueConverter innerConverterFinal = innerConverter; - entrySet.forEach(e -> { - convertEntry(innerType, dataTypes, allPropertiesRecursive, toscaMap, isScalarF, innerConverterFinal, e); - }); - return toscaMap; - } catch (JsonParseException e) { - log.debug("Failed to parse json : {}", value, e); - BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); - return null; - } - } - - private void convertEntry(String innerType, Map<String, DataTypeDefinition> dataTypes, List<PropertyDefinition> allPropertiesRecursive, Map<String, Object> toscaMap, final boolean isScalarF, final ToscaValueConverter innerConverterFinal, - Entry<String, JsonElement> e) { - log.debug("try convert element {}", e.getValue()); - boolean scalar = false; - String propType = null; - ToscaValueConverter innerConverterProp = innerConverterFinal; - if ( isScalarF ){ - scalar = isScalarF; - propType = innerType; - }else{ - for ( PropertyDefinition pd : allPropertiesRecursive ){ - if ( pd.getName().equals(e.getKey()) ){ - propType = pd.getType(); - DataTypeDefinition pdDataType = dataTypes.get(propType); - ToscaPropertyType toscaPropType = isScalarType(pdDataType); - if ( toscaPropType == null ){ - scalar = false; - }else{ - scalar = true; - propType = toscaPropType.getType(); - innerConverterProp = toscaPropType.getValueConverter(); - } - break; - } - } - } - Object convertedValue = convertDataTypeToToscaObject(propType, dataTypes, innerConverterProp, scalar, e.getValue()); - toscaMap.put(e.getKey(), convertedValue); - } - - public Object convertDataTypeToToscaObject(String innerType, Map<String, DataTypeDefinition> dataTypes, ToscaValueConverter innerConverter, final boolean isScalarF, JsonElement entryValue) { - Object convertedValue = null; - if (isScalarF && entryValue.isJsonPrimitive()) { - log.debug("try convert scalar value {}", entryValue.getAsString()); - if (entryValue.getAsString() == null) { - convertedValue = null; - } else { - convertedValue = innerConverter.convertToToscaValue(entryValue.getAsString(), innerType, dataTypes); - } - } else { - if ( entryValue.isJsonPrimitive() ){ - return handleComplexJsonValue(entryValue); - } - - // ticket 228696523 created / DE272734 / Bug 154492 Fix - if(entryValue instanceof JsonArray) { - ArrayList<Object> toscaObjectPresentationArray = new ArrayList<>(); - JsonArray jsonArray = entryValue.getAsJsonArray(); - - for (JsonElement jsonElement : jsonArray) { - Object convertedDataTypeToToscaMap = convertDataTypeToToscaMap(innerType, dataTypes, isScalarF, jsonElement); - toscaObjectPresentationArray.add(convertedDataTypeToToscaMap); - } - convertedValue = toscaObjectPresentationArray; - } else { - convertedValue = convertDataTypeToToscaMap(innerType, dataTypes, isScalarF, entryValue); - } - } - return convertedValue; - } - - private Object convertDataTypeToToscaMap(String innerType, Map<String, DataTypeDefinition> dataTypes, - final boolean isScalarF, JsonElement entryValue) { - Object convertedValue; - if (entryValue.isJsonPrimitive()) { - return json2JavaPrimitive(entryValue.getAsJsonPrimitive()); - } - JsonObject asJsonObjectIn = entryValue.getAsJsonObject(); - - DataTypePropertyConverter.getInstance().mergeDataTypeDefaultValuesWithPropertyValue(asJsonObjectIn, innerType, dataTypes); - Map<String, Object> toscaObjectPresentation = new HashMap<>(); - Set<Entry<String, JsonElement>> entrySetIn = asJsonObjectIn.entrySet(); - - for (Entry<String, JsonElement> entry : entrySetIn) { - String propName = entry.getKey(); - - JsonElement elementValue = entry.getValue(); - Object convValue; - if (isScalarF == false) { - DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); - Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); - PropertyDefinition propertyDefinition = allProperties.get(propName); - if (propertyDefinition == null) { - log.trace("The property {} was not found under data type . Parse as map", propName); - if (elementValue.isJsonPrimitive()) { - convValue = elementValue.getAsString(); - } else { - convValue = handleComplexJsonValue(elementValue); - } - } else { - String type = propertyDefinition.getType(); - ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); - if (propertyType != null) { - if (elementValue.isJsonPrimitive()) { - ToscaValueConverter valueConverter = propertyType.getValueConverter(); - convValue = valueConverter.convertToToscaValue(elementValue.getAsString(), type, dataTypes); - } else { - if (ToscaPropertyType.MAP.equals(type) || ToscaPropertyType.LIST.equals(propertyType)) { - ToscaValueConverter valueConverter = propertyType.getValueConverter(); - String json = gson.toJson(elementValue); - String innerTypeRecursive = propertyDefinition.getSchema().getProperty().getType(); - convValue = valueConverter.convertToToscaValue(json, innerTypeRecursive, dataTypes); - } else { - convValue = handleComplexJsonValue(elementValue); - } - } - } else { - convValue = convertToToscaValue(elementValue.toString(), type, dataTypes); - } - } - } else { - if (elementValue.isJsonPrimitive()) { - convValue = json2JavaPrimitive(elementValue.getAsJsonPrimitive()); - } else { - convValue = handleComplexJsonValue(elementValue); - } - } - if(!isEmptyObjectValue(convValue)){ - toscaObjectPresentation.put(propName, convValue); - } - } - convertedValue = toscaObjectPresentation; - return convertedValue; - } + private static ToscaMapValueConverter mapConverter = new ToscaMapValueConverter(); + + private JsonParser jsonParser = new JsonParser(); + private static final Logger log = Logger.getLogger(ToscaMapValueConverter.class.getName()); + + public static ToscaMapValueConverter getInstance() { + return mapConverter; + } + + private ToscaMapValueConverter() { + + } + + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + if (value == null) { + return value; + } + try { + ToscaPropertyType innerToscaType = ToscaPropertyType.isValidType(innerType); + ToscaValueConverter innerConverter = null; + boolean isScalar = true; + List<PropertyDefinition> allPropertiesRecursive = new ArrayList<>(); + if (innerToscaType != null) { + innerConverter = innerToscaType.getValueConverter(); + } else { + + DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); + if (dataTypeDefinition != null) { + ToscaPropertyType toscaPropertyType = null; + if ((toscaPropertyType = isScalarType(dataTypeDefinition)) != null) { + innerConverter = toscaPropertyType.getValueConverter(); + } else { + isScalar = false; + allPropertiesRecursive.addAll(dataTypeDefinition.getProperties()); + DataTypeDefinition derivedFrom = dataTypeDefinition.getDerivedFrom(); + while ( !derivedFrom.getName().equals("tosca.datatypes.Root") ){ + allPropertiesRecursive.addAll(derivedFrom.getProperties()); + derivedFrom = derivedFrom.getDerivedFrom(); + } + } + } else { + log.debug("inner Tosca Type is null"); + return value; + } + + } + JsonElement jsonElement = null; + try { + StringReader reader = new StringReader(value); + JsonReader jsonReader = new JsonReader(reader); + jsonReader.setLenient(true); + + jsonElement = jsonParser.parse(jsonReader); + + } catch (JsonSyntaxException e) { + log.debug("convertToToscaValue failed to parse json value :", e); + return null; + } + if (jsonElement == null || jsonElement.isJsonNull()) { + log.debug("convertToToscaValue json element is null"); + return null; + } + JsonObject asJsonObject = jsonElement.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = asJsonObject.entrySet(); + + Map<String, Object> toscaMap = new HashMap<>(); + final boolean isScalarF = isScalar; + final ToscaValueConverter innerConverterFinal = innerConverter; + entrySet.forEach(e -> { + convertEntry(innerType, dataTypes, allPropertiesRecursive, toscaMap, isScalarF, innerConverterFinal, e); + }); + return toscaMap; + } catch (JsonParseException e) { + log.debug("Failed to parse json : {}", value, e); + BeEcompErrorManager.getInstance().logBeInvalidJsonInput("List Converter"); + return null; + } + } + + private void convertEntry(String innerType, Map<String, DataTypeDefinition> dataTypes, List<PropertyDefinition> allPropertiesRecursive, Map<String, Object> toscaMap, final boolean isScalarF, final ToscaValueConverter innerConverterFinal, + Entry<String, JsonElement> e) { + log.debug("try convert element {}", e.getValue()); + boolean scalar = false; + String propType = null; + ToscaValueConverter innerConverterProp = innerConverterFinal; + if ( isScalarF ){ + scalar = isScalarF; + propType = innerType; + }else{ + for ( PropertyDefinition pd : allPropertiesRecursive ){ + if ( pd.getName().equals(e.getKey()) ){ + propType = pd.getType(); + DataTypeDefinition pdDataType = dataTypes.get(propType); + ToscaPropertyType toscaPropType = isScalarType(pdDataType); + if ( toscaPropType == null ){ + scalar = false; + }else{ + scalar = true; + propType = toscaPropType.getType(); + innerConverterProp = toscaPropType.getValueConverter(); + } + break; + } + } + } + Object convertedValue = convertDataTypeToToscaObject(propType, dataTypes, innerConverterProp, scalar, e.getValue(), false); + toscaMap.put(e.getKey(), convertedValue); + } + + public Object convertDataTypeToToscaObject(String innerType, Map<String, DataTypeDefinition> dataTypes, ToscaValueConverter innerConverter, final boolean isScalarF, JsonElement entryValue, boolean preserveEmptyValue) { + Object convertedValue = null; + if (isScalarF && entryValue.isJsonPrimitive()) { + log.debug("try convert scalar value {}", entryValue.getAsString()); + if (entryValue.getAsString() == null) { + convertedValue = null; + } else { + convertedValue = innerConverter.convertToToscaValue(entryValue.getAsString(), innerType, dataTypes); + } + } else { + if ( entryValue.isJsonPrimitive() ){ + return handleComplexJsonValue(entryValue); + } + + // ticket 228696523 created / DE272734 / Bug 154492 Fix + if(entryValue instanceof JsonArray) { + ArrayList<Object> toscaObjectPresentationArray = new ArrayList<>(); + JsonArray jsonArray = entryValue.getAsJsonArray(); + + for (JsonElement jsonElement : jsonArray) { + Object convertedDataTypeToToscaMap = convertDataTypeToToscaMap(innerType, dataTypes, isScalarF, jsonElement, preserveEmptyValue); + toscaObjectPresentationArray.add(convertedDataTypeToToscaMap); + } + convertedValue = toscaObjectPresentationArray; + } else { + convertedValue = convertDataTypeToToscaMap(innerType, dataTypes, isScalarF, entryValue, preserveEmptyValue); + } + } + return convertedValue; + } + + private Object convertDataTypeToToscaMap(String innerType, Map<String, DataTypeDefinition> dataTypes, + final boolean isScalarF, JsonElement entryValue, boolean preserveEmptyValue) { + Object convertedValue; + if (entryValue.isJsonPrimitive()) { + return json2JavaPrimitive(entryValue.getAsJsonPrimitive()); + } + JsonObject asJsonObjectIn = entryValue.getAsJsonObject(); + + DataTypePropertyConverter.getInstance().mergeDataTypeDefaultValuesWithPropertyValue(asJsonObjectIn, innerType, dataTypes); + Map<String, Object> toscaObjectPresentation = new HashMap<>(); + Set<Entry<String, JsonElement>> entrySetIn = asJsonObjectIn.entrySet(); + + for (Entry<String, JsonElement> entry : entrySetIn) { + String propName = entry.getKey(); + + JsonElement elementValue = entry.getValue(); + Object convValue; + if (!isScalarF) { + DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); + Map<String, PropertyDefinition> allProperties = getAllProperties(dataTypeDefinition); + PropertyDefinition propertyDefinition = allProperties.get(propName); + if (propertyDefinition == null) { + log.trace("The property {} was not found under data type . Parse as map", propName); + if (elementValue.isJsonPrimitive()) { + convValue = elementValue.getAsString(); + } else { + convValue = handleComplexJsonValue(elementValue); + } + } else { + String type = propertyDefinition.getType(); + ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); + if (propertyType != null) { + if (elementValue.isJsonPrimitive()) { + ToscaValueConverter valueConverter = propertyType.getValueConverter(); + convValue = valueConverter.convertToToscaValue(elementValue.getAsString(), type, dataTypes); + } else { + if (ToscaPropertyType.MAP.equals(type) || ToscaPropertyType.LIST.equals(propertyType)) { + ToscaValueConverter valueConverter = propertyType.getValueConverter(); + String json = gson.toJson(elementValue); + String innerTypeRecursive = propertyDefinition.getSchema().getProperty().getType(); + convValue = valueConverter.convertToToscaValue(json, innerTypeRecursive, dataTypes); + } else { + convValue = handleComplexJsonValue(elementValue); + } + } + } else { + convValue = convertToToscaValue(elementValue.toString(), type, dataTypes); + } + } + } else { + if (elementValue.isJsonPrimitive()) { + convValue = json2JavaPrimitive(elementValue.getAsJsonPrimitive()); + } else { + convValue = handleComplexJsonValue(elementValue); + } + } + if(preserveEmptyValue || !isEmptyObjectValue(convValue)){ + toscaObjectPresentation.put(propName, convValue); + } + } + convertedValue = toscaObjectPresentation; + return convertedValue; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaStringConvertor.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaStringConvertor.java index e228d256c2..01cf47a124 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaStringConvertor.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaStringConvertor.java @@ -20,24 +20,24 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class ToscaStringConvertor implements ToscaValueConverter { - private static ToscaStringConvertor stringConverter = new ToscaStringConvertor(); + private static ToscaStringConvertor stringConverter = new ToscaStringConvertor(); - public static ToscaStringConvertor getInstance() { - return stringConverter; - } + public static ToscaStringConvertor getInstance() { + return stringConverter; + } - private ToscaStringConvertor() { + private ToscaStringConvertor() { - } + } - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - return value; - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + return value; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverter.java index 7e2f8766ba..e57650b8a6 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverter.java @@ -20,158 +20,147 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - +import com.google.gson.*; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; import org.openecomp.sdc.be.model.tosca.ToscaPropertyType; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.openecomp.sdc.common.log.wrappers.Logger; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; +import java.util.*; +import java.util.Map.Entry; public class ToscaValueBaseConverter { - protected Gson gson = new Gson(); - private static Logger log = LoggerFactory.getLogger(ToscaValueBaseConverter.class.getName()); - - protected 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 ToscaPropertyType isScalarType(DataTypeDefinition dataTypeDef) { - - ToscaPropertyType result = null; - - DataTypeDefinition dataType = dataTypeDef; - - while (dataType != null) { - - String name = dataType.getName(); - ToscaPropertyType typeIfScalar = ToscaPropertyType.getTypeIfScalar(name); - if (typeIfScalar != null) { - result = typeIfScalar; - break; - } - - dataType = dataType.getDerivedFrom(); - } - - return result; - } - - public Object handleComplexJsonValue(JsonElement elementValue) { - Object jsonValue = null; - - Map<String, Object> value = new HashMap<String, Object>(); - if (elementValue.isJsonObject()) { - JsonObject jsonOb = elementValue.getAsJsonObject(); - Set<Entry<String, JsonElement>> entrySet = jsonOb.entrySet(); - Iterator<Entry<String, JsonElement>> iteratorEntry = entrySet.iterator(); - while (iteratorEntry.hasNext()) { - Entry<String, JsonElement> entry = iteratorEntry.next(); - if (entry.getValue().isJsonArray()) { - List<Object> array = handleJsonArray(entry.getValue()); - value.put(entry.getKey(), array); - } else { - Object object; - if (entry.getValue().isJsonPrimitive()) { - object = json2JavaPrimitive(entry.getValue().getAsJsonPrimitive()); - } else { - object = handleComplexJsonValue(entry.getValue()); - } - value.put(entry.getKey(), object); - } - } - jsonValue = value; - } else { - if (elementValue.isJsonArray()) { - jsonValue = handleJsonArray(elementValue); - } else { - if (elementValue.isJsonPrimitive()) { - jsonValue = json2JavaPrimitive(elementValue.getAsJsonPrimitive()); - } else { - log.debug("not supported json type {} ", elementValue); - } - } - } - - return jsonValue; - } - - private List<Object> handleJsonArray(JsonElement entry) { - List<Object> array = new ArrayList<>(); - JsonArray jsonArray = entry.getAsJsonArray(); - Iterator<JsonElement> iterator = jsonArray.iterator(); - while (iterator.hasNext()) { - Object object; - JsonElement element = iterator.next(); - if (element.isJsonPrimitive()) { - object = json2JavaPrimitive(element.getAsJsonPrimitive()); - } else { - object = handleComplexJsonValue(element); - } - array.add(object); - } - return array; - } - - public Object json2JavaPrimitive(JsonPrimitive prim) { - if (prim.isBoolean()) { - return prim.getAsBoolean(); - } else if (prim.isString()) { - return prim.getAsString(); - } else if (prim.isNumber()) { - String strRepesentation = prim.getAsString(); - if (strRepesentation.contains(".")) { - return prim.getAsDouble(); - } else { - return prim.getAsInt(); - } - } else { - throw new IllegalStateException(); - } - } - - /** - * checks is received Object empty or equals null or not It is relevant only - * if received Object is instance of String, Map or List class. - * - * @param convertedValue - * @return - */ - static public boolean isEmptyObjectValue(Object convertedValue) { - if (convertedValue == null) { - return true; - } else if (convertedValue instanceof String && ((String) convertedValue).isEmpty()) { - return true; - } else if (convertedValue instanceof Map && ((Map) convertedValue).isEmpty()) { - return true; - } else if (convertedValue instanceof List && ((List) convertedValue).isEmpty()) { - return true; - } - return false; - } + protected Gson gson = new Gson(); + private static final Logger log = Logger.getLogger(ToscaValueBaseConverter.class.getName()); + + protected 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 ToscaPropertyType isScalarType(DataTypeDefinition dataTypeDef) { + + ToscaPropertyType result = null; + + DataTypeDefinition dataType = dataTypeDef; + + while (dataType != null) { + + String name = dataType.getName(); + ToscaPropertyType typeIfScalar = ToscaPropertyType.getTypeIfScalar(name); + if (typeIfScalar != null) { + result = typeIfScalar; + break; + } + + dataType = dataType.getDerivedFrom(); + } + + return result; + } + + public Object handleComplexJsonValue(JsonElement elementValue) { + Object jsonValue = null; + + Map<String, Object> value = new HashMap<>(); + if (elementValue.isJsonObject()) { + JsonObject jsonOb = elementValue.getAsJsonObject(); + Set<Entry<String, JsonElement>> entrySet = jsonOb.entrySet(); + Iterator<Entry<String, JsonElement>> iteratorEntry = entrySet.iterator(); + while (iteratorEntry.hasNext()) { + Entry<String, JsonElement> entry = iteratorEntry.next(); + if (entry.getValue().isJsonArray()) { + List<Object> array = handleJsonArray(entry.getValue()); + value.put(entry.getKey(), array); + } else { + Object object; + if (entry.getValue().isJsonPrimitive()) { + object = json2JavaPrimitive(entry.getValue().getAsJsonPrimitive()); + } else { + object = handleComplexJsonValue(entry.getValue()); + } + value.put(entry.getKey(), object); + } + } + jsonValue = value; + } else { + if (elementValue.isJsonArray()) { + jsonValue = handleJsonArray(elementValue); + } else { + if (elementValue.isJsonPrimitive()) { + jsonValue = json2JavaPrimitive(elementValue.getAsJsonPrimitive()); + } else { + log.debug("not supported json type {} ", elementValue); + } + } + } + + return jsonValue; + } + + private List<Object> handleJsonArray(JsonElement entry) { + List<Object> array = new ArrayList<>(); + JsonArray jsonArray = entry.getAsJsonArray(); + Iterator<JsonElement> iterator = jsonArray.iterator(); + while (iterator.hasNext()) { + Object object; + JsonElement element = iterator.next(); + if (element.isJsonPrimitive()) { + object = json2JavaPrimitive(element.getAsJsonPrimitive()); + } else { + object = handleComplexJsonValue(element); + } + array.add(object); + } + return array; + } + + public Object json2JavaPrimitive(JsonPrimitive prim) { + if (prim.isBoolean()) { + return prim.getAsBoolean(); + } else if (prim.isString()) { + return prim.getAsString(); + } else if (prim.isNumber()) { + String strRepesentation = prim.getAsString(); + if (strRepesentation.contains(".")) { + return prim.getAsDouble(); + } else { + return prim.getAsInt(); + } + } else { + throw new IllegalStateException(); + } + } + + /** + * checks is received Object empty or equals null or not It is relevant only + * if received Object is instance of String, Map or List class. + * + * @param convertedValue + * @return + */ + static public boolean isEmptyObjectValue(Object convertedValue) { + if (convertedValue == null) { + return true; + } else if (convertedValue instanceof String && ((String) convertedValue).isEmpty()) { + return true; + } else if (convertedValue instanceof Map && ((Map) convertedValue).isEmpty()) { + return true; + } else if (convertedValue instanceof List && ((List) convertedValue).isEmpty()) { + return true; + } + return false; + } } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueConverter.java index 1b5d4697be..a9d3cb9544 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueConverter.java @@ -20,11 +20,11 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public interface ToscaValueConverter { - Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes); + Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes); } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueDefaultConverter.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueDefaultConverter.java index b6eb24276e..ca0724dfc0 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueDefaultConverter.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueDefaultConverter.java @@ -20,24 +20,24 @@ package org.openecomp.sdc.be.model.tosca.converters; -import java.util.Map; - import org.openecomp.sdc.be.model.DataTypeDefinition; +import java.util.Map; + public class ToscaValueDefaultConverter implements ToscaValueConverter { - private static ToscaValueDefaultConverter deafultConverter = new ToscaValueDefaultConverter(); + private static ToscaValueDefaultConverter deafultConverter = new ToscaValueDefaultConverter(); - public static ToscaValueDefaultConverter getInstance() { - return deafultConverter; - } + public static ToscaValueDefaultConverter getInstance() { + return deafultConverter; + } - private ToscaValueDefaultConverter() { + private ToscaValueDefaultConverter() { - } + } - @Override - public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { - return value; - } + @Override + public Object convertToToscaValue(String value, String innerType, Map<String, DataTypeDefinition> dataTypes) { + return value; + } } |