diff options
author | vempo <vitaliy.emporopulo@amdocs.com> | 2017-10-22 18:07:39 +0300 |
---|---|---|
committer | tali orenbach <tali.orenbach@amdocs.com> | 2017-10-23 07:15:50 +0000 |
commit | 372b53d456d8a5ab7467fdc00c666a8e46a4db3b (patch) | |
tree | d2e93fd19e1dc96329ff7c877476fc718dc0e8ff /openecomp-be/lib/openecomp-core-lib | |
parent | a9a888c715b4e1395cfc5c2eef6dcab25bf1f7db (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')
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); |