diff options
Diffstat (limited to 'catalog-model/src')
4 files changed, 107 insertions, 42 deletions
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 67894bdade..f449f7841b 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 @@ -17,6 +17,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.openecomp.sdc.be.model.tosca.converters; import com.google.gson.JsonArray; @@ -32,7 +33,6 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import org.jetbrains.annotations.Nullable; import org.openecomp.sdc.be.config.BeEcompErrorManager; import org.openecomp.sdc.be.model.DataTypeDefinition; import org.openecomp.sdc.be.model.PropertyDefinition; @@ -93,12 +93,11 @@ public class ToscaListValueConverter extends ToscaValueBaseConverter implements final boolean isScalarF = isScalar; final ToscaValueConverter innerConverterFinal = innerConverter; asJsonArray.forEach(e -> { - Object convertedValue = null; + Object convertedValue; if (isScalarF) { - if (e.isJsonPrimitive()) { - String jsonAsString = e.getAsString(); - log.debug("try to convert scalar value {}", jsonAsString); - convertedValue = innerConverterFinal.convertToToscaValue(jsonAsString, innerType, dataTypes); + if (isJsonElementAJsonPrimitive(e)) { + log.debug("try to convert scalar value {}", e.getAsString()); + convertedValue = innerConverterFinal.convertToToscaValue(e.getAsString(), innerType, dataTypes); } else { convertedValue = handleComplexJsonValue(e); } @@ -154,16 +153,4 @@ public class ToscaListValueConverter extends ToscaValueBaseConverter implements return null; } } - - private JsonElement parseToJson(final String value) { - try { - final StringReader reader = new StringReader(value); - final JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - return JsonParser.parseReader(jsonReader); - } catch (final JsonSyntaxException e) { - log.debug("convertToToscaValue failed to parse json value :", e); - 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 2cc868b17c..76d9d2bf47 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 @@ -17,6 +17,7 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.openecomp.sdc.be.model.tosca.converters; import com.google.gson.JsonArray; @@ -67,7 +68,7 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T } else { DataTypeDefinition dataTypeDefinition = dataTypes.get(innerType); if (dataTypeDefinition != null) { - ToscaPropertyType toscaPropertyType = null; + ToscaPropertyType toscaPropertyType; if ((toscaPropertyType = isScalarType(dataTypeDefinition)) != null) { innerConverter = toscaPropertyType.getValueConverter(); } else { @@ -85,15 +86,7 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T } } JsonElement jsonElement; - try { - StringReader reader = new StringReader(value); - JsonReader jsonReader = new JsonReader(reader); - jsonReader.setLenient(true); - jsonElement = JsonParser.parseReader(jsonReader); - } catch (JsonSyntaxException e) { - log.debug("convertToToscaValue failed to parse json value :", e); - return null; - } + jsonElement = parseToJson(value); if (jsonElement == null || jsonElement.isJsonNull()) { log.debug("convertToToscaValue json element is null"); return null; @@ -127,9 +120,7 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T propType = pd.getType(); final DataTypeDefinition pdDataType = dataTypes.get(propType); final ToscaPropertyType toscaPropType = isScalarType(pdDataType); - if (toscaPropType == null) { - scalar = false; - } else { + if (toscaPropType != null) { scalar = true; propType = toscaPropType.getType(); innerConverterProp = toscaPropType.getValueConverter(); @@ -144,14 +135,9 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T 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 "); - if (entryValue.getAsString() == null) { - convertedValue = null; - } else { - convertedValue = innerConverter.convertToToscaValue(entryValue.getAsString(), innerType, dataTypes); - } + Object convertedValue; + if (isScalarF && isJsonElementAJsonPrimitive(entryValue)) { + return innerConverter.convertToToscaValue(entryValue.getAsString(), innerType, dataTypes); } else { if (entryValue.isJsonPrimitive()) { return handleComplexJsonValue(entryValue); @@ -201,11 +187,11 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T String type = propertyDefinition.getType(); ToscaPropertyType propertyType = ToscaPropertyType.isValidType(type); if (propertyType != null) { - if (elementValue.isJsonPrimitive()) { + if (isJsonElementAJsonPrimitive(elementValue)) { ToscaValueConverter valueConverter = propertyType.getValueConverter(); convValue = valueConverter.convertToToscaValue(elementValue.getAsString(), type, dataTypes); } else { - if (ToscaPropertyType.MAP.equals(type) || ToscaPropertyType.LIST.equals(propertyType)) { + if (ToscaPropertyType.MAP.equals(propertyType) || ToscaPropertyType.LIST.equals(propertyType)) { ToscaValueConverter valueConverter = propertyType.getValueConverter(); String json = gson.toJson(elementValue); String innerTypeRecursive = propertyDefinition.getSchema().getProperty().getType(); @@ -219,7 +205,7 @@ public class ToscaMapValueConverter extends ToscaValueBaseConverter implements T } } } else { - if (elementValue.isJsonPrimitive()) { + if (isJsonElementAJsonPrimitive(elementValue)) { convValue = json2JavaPrimitive(elementValue.getAsJsonPrimitive()); } else { convValue = handleComplexJsonValue(elementValue); 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 7505d2af88..c9b5db8e87 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 @@ -17,13 +17,18 @@ * limitations under the License. * ============LICENSE_END========================================================= */ + package org.openecomp.sdc.be.model.tosca.converters; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; +import com.google.gson.stream.JsonReader; +import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -91,6 +96,9 @@ public class ToscaValueBaseConverter { return handleJsonArray(jsonElement); } if (jsonElement.isJsonPrimitive()) { + if (!isJsonElementAJsonPrimitive(jsonElement)) { + return handleComplexJsonValue(parseToJson(jsonElement.getAsString())); + } return json2JavaPrimitive(jsonElement.getAsJsonPrimitive()); } log.debug("JSON type '{}' not supported", jsonElement); @@ -137,4 +145,28 @@ public class ToscaValueBaseConverter { } throw new IllegalStateException(String.format("JSON primitive not supported: %s", jsonPrimitive)); } + + public JsonElement parseToJson(final String value) { + try { + final StringReader reader = new StringReader(value); + final JsonReader jsonReader = new JsonReader(reader); + jsonReader.setLenient(true); + return JsonParser.parseReader(jsonReader); + } catch (final JsonSyntaxException e) { + log.debug("convertToToscaValue failed to parse json value :", e); + return null; + } + } + + public boolean isJsonElementAJsonPrimitive(JsonElement jsonElement) { + if (!jsonElement.isJsonPrimitive()) { + return false; + } + String elementAsString = jsonElement.getAsString(); + JsonElement elementAsJson = parseToJson(elementAsString); + if (elementAsJson.isJsonPrimitive() || elementAsJson.isJsonNull()) { + return true; + } + return false; + } } diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverterTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverterTest.java index 5387b46dd6..13b2be5ce5 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverterTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/tosca/converters/ToscaValueBaseConverterTest.java @@ -26,6 +26,8 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonNull; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import java.util.HashMap; @@ -145,4 +147,62 @@ class ToscaValueBaseConverterTest { assertEquals(innerObject.get("float").getAsDouble(), objectPropertyAsMap.get("float")); assertNull(objectPropertyAsMap.get("null")); } + + @Test + void testParseToJson() { + final JsonElement result1 = converter.parseToJson(""); + assertTrue(result1.isJsonNull()); + + final JsonElement result2 = converter.parseToJson("testString"); + assertTrue(result2.isJsonPrimitive()); + + final JsonElement result3 = converter.parseToJson("1"); + assertTrue(result3.isJsonPrimitive()); + + final JsonElement result4 = converter.parseToJson("true"); + assertTrue(result4.isJsonPrimitive()); + + final JsonElement result5 = converter.parseToJson("{\"get_property\":[\"relatedParty_0\",\"name\"]}"); + assertTrue(result5.isJsonObject()); + + final JsonElement result6 = converter.parseToJson("[\"relatedParty_0\",\"name\"]"); + assertTrue(result6.isJsonArray()); + + } + + @Test + void testIsJsonElementAJsonPrimitive() { + + JsonElement emptyStringEle = new JsonPrimitive(""); + final Boolean result1 = converter.isJsonElementAJsonPrimitive(emptyStringEle); + assertTrue(result1); + + JsonElement stringEle = new JsonPrimitive("testString"); + final Boolean result2 = converter.isJsonElementAJsonPrimitive(stringEle); + assertTrue(result2); + + JsonElement toscaFunctionEle = new JsonPrimitive("{\"get_property\":[\"relatedParty_0\",\"name\"]}"); + final Boolean result3 = converter.isJsonElementAJsonPrimitive(toscaFunctionEle); + assertFalse(result3); + + JsonElement jsonObjectEle = new JsonObject(); + final Boolean result4 = converter.isJsonElementAJsonPrimitive(jsonObjectEle); + assertFalse(result4); + + JsonElement jsonArrayEle = new JsonArray(); + final Boolean result5 = converter.isJsonElementAJsonPrimitive(jsonArrayEle); + assertFalse(result5); + + JsonElement intEle = new JsonPrimitive(123); + final Boolean result6 = converter.isJsonElementAJsonPrimitive(intEle); + assertTrue(result6); + + JsonElement boolEle = new JsonPrimitive(true); + final Boolean result7 = converter.isJsonElementAJsonPrimitive(boolEle); + assertTrue(result7); + + JsonElement nullEle = new JsonNull(); + final Boolean result8 = converter.isJsonElementAJsonPrimitive(nullEle); + assertFalse(result8); + } } |