diff options
Diffstat (limited to 'catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java')
-rw-r--r-- | catalog-model/src/main/java/org/openecomp/sdc/be/model/tosca/converters/ListConverter.java | 357 |
1 files changed, 174 insertions, 183 deletions
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); + } } |