aboutsummaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib/openecomp-core-lib
diff options
context:
space:
mode:
authorvempo <vitaliy.emporopulo@amdocs.com>2017-10-22 18:07:39 +0300
committertali orenbach <tali.orenbach@amdocs.com>2017-10-23 07:15:50 +0000
commit372b53d456d8a5ab7467fdc00c666a8e46a4db3b (patch)
treed2e93fd19e1dc96329ff7c877476fc718dc0e8ff /openecomp-be/lib/openecomp-core-lib
parenta9a888c715b4e1395cfc5c2eef6dcab25bf1f7db (diff)
Fix occurences not deserialized properly
add json deserializer for RequirementDefinition Issue-Id : SDC-474 Change-Id: I734a671b02a319fc3e90239bb8b0202c898fe473 Signed-off-by: vempo <vitaliy.emporopulo@amdocs.com> (cherry picked from commit 30e46525c1406fb3b10603606c4efcc033ee58c4)
Diffstat (limited to 'openecomp-be/lib/openecomp-core-lib')
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java87
-rw-r--r--openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java15
2 files changed, 99 insertions, 3 deletions
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java
new file mode 100644
index 0000000000..b341a52c56
--- /dev/null
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/deserializers/RequirementDefinitionDeserializer.java
@@ -0,0 +1,87 @@
+package org.openecomp.core.utilities.deserializers;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+import com.google.gson.JsonPrimitive;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
+
+import java.lang.reflect.Type;
+import java.util.Objects;
+import java.util.Optional;
+
+public class RequirementDefinitionDeserializer implements JsonDeserializer<RequirementDefinition> {
+
+ private static final String CAPABILITY = "capability";
+ private static final String NODE = "node";
+ private static final String RELATIONSHIP = "relationship";
+ private static final String OCCURRENCES = "occurrences";
+
+ @Override
+ public RequirementDefinition deserialize(JsonElement jsonElement, Type type,
+ JsonDeserializationContext jsonDeserializationContext)
+ throws JsonParseException {
+
+ JsonObject jsonObject = jsonElement.getAsJsonObject();
+
+ RequirementDefinition requirementDefinition = new RequirementDefinition();
+ setRequirementValues(jsonObject, requirementDefinition);
+
+ Optional<Object[]> occurrences = handleOccurrences(jsonObject);
+ occurrences.ifPresent(requirementDefinition::setOccurrences);
+
+ return requirementDefinition;
+ }
+
+
+ private void setRequirementValues(JsonObject jsonObject,
+ RequirementDefinition requirementDefinition) {
+
+ JsonElement capabilityElement = jsonObject.get(CAPABILITY);
+ if (!Objects.isNull(capabilityElement)) {
+ requirementDefinition.setCapability(capabilityElement.getAsString());
+ }
+
+ JsonElement nodeElement = jsonObject.get(NODE);
+ if (!Objects.isNull(nodeElement)) {
+ requirementDefinition.setNode(nodeElement.getAsString());
+ }
+
+ JsonElement relationshipElement = jsonObject.get(RELATIONSHIP);
+ if (!Objects.isNull(relationshipElement)) {
+ requirementDefinition.setRelationship(relationshipElement.getAsString());
+ }
+ }
+
+ private Optional<Object[]> handleOccurrences(JsonObject jsonObject) {
+
+ JsonElement occurrencesElement = jsonObject.get(OCCURRENCES);
+
+ if(Objects.isNull(occurrencesElement)){
+ return Optional.empty();
+ }
+
+ JsonArray occurrences = occurrencesElement.getAsJsonArray();
+ Object[] fixedOccurrences = new Object[occurrences.size()];
+
+ for (int i = 0; i < occurrences.size(); i++) {
+ JsonElement currElement = occurrences.get(i);
+
+ // values inside occurrences array can be either String or Integer
+ if (currElement.isJsonPrimitive()) {
+ JsonPrimitive jsonPrimitive = currElement.getAsJsonPrimitive();
+
+ if (jsonPrimitive.isNumber()) {
+ fixedOccurrences[i] = jsonPrimitive.getAsNumber().intValue();
+ } else {
+ fixedOccurrences[i] = jsonPrimitive.getAsString();
+ }
+ }
+ }
+
+ return Optional.of(fixedOccurrences);
+ }
+}
diff --git a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
index 8454bc61a8..c3d32df447 100644
--- a/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
+++ b/openecomp-be/lib/openecomp-core-lib/openecomp-utilities-lib/src/main/java/org/openecomp/core/utilities/json/JsonUtil.java
@@ -32,8 +32,10 @@ import org.everit.json.schema.ValidationException;
import org.everit.json.schema.loader.SchemaLoader;
import org.json.JSONObject;
import org.openecomp.core.utilities.CommonMethods;
+import org.openecomp.core.utilities.deserializers.RequirementDefinitionDeserializer;
import org.openecomp.sdc.logging.api.Logger;
import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.tosca.datatypes.model.RequirementDefinition;
import java.io.BufferedReader;
import java.io.IOException;
@@ -51,6 +53,15 @@ import java.util.stream.Collectors;
*/
public class JsonUtil {
private static final Logger logger = LoggerFactory.getLogger(JsonUtil.class);
+ private static final GsonBuilder gsonBuilder;
+ private static final Gson gson;
+
+ static {
+ gsonBuilder = new GsonBuilder();
+ gsonBuilder.registerTypeAdapter(RequirementDefinition.class, new
+ RequirementDefinitionDeserializer());
+ gson = gsonBuilder.create();
+ }
/**
* Object 2 json string.
@@ -86,9 +97,7 @@ public class JsonUtil {
T typ;
try {
try (Reader br = new StringReader(json)) {
- typ = new Gson().fromJson(br, classOfT);
- } catch (IOException exception) {
- throw exception;
+ typ = gson.fromJson(br, classOfT);
}
} catch (JsonIOException | JsonSyntaxException | IOException exception) {
throw new RuntimeException(exception);