X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fimpl%2FJsonReader.java;h=f4c5034776ec1e83fa5022c7a68223d139d3060a;hp=a2ae1c9f7f248e81218f9862e4247376ae47dc75;hb=9212fed678702583f4a555641208cf1c7b45b829;hpb=5da475147b19f8d9e601813da1e356f2c677d131 diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java index a2ae1c9f7f..f4c5034776 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonReader.java @@ -7,7 +7,9 @@ import java.util.Map.Entry; import java.util.Set; import org.opendaylight.controller.sal.restconf.impl.CompositeNodeWrapper; +import org.opendaylight.controller.sal.restconf.impl.EmptyNodeWrapper; import org.opendaylight.controller.sal.restconf.impl.SimpleNodeWrapper; +import org.opendaylight.controller.sal.restconf.impl.IdentityValuesDTO; import com.google.common.collect.Lists; import com.google.gson.JsonElement; @@ -51,8 +53,8 @@ class JsonReader { } private CompositeNodeWrapper createStructureWithRoot(String rootObjectName, JsonObject rootObject) { - CompositeNodeWrapper firstNode = new CompositeNodeWrapper(getNamespaceFrom(rootObjectName), - getLocalNameFrom(rootObjectName)); + CompositeNodeWrapper firstNode = new CompositeNodeWrapper(getNamespaceFor(rootObjectName), + getLocalNameFor(rootObjectName)); for (Entry childOfFirstNode : rootObject.entrySet()) { addChildToParent(childOfFirstNode.getKey(), childOfFirstNode.getValue(), firstNode); } @@ -61,15 +63,15 @@ class JsonReader { private void addChildToParent(String childName, JsonElement childType, CompositeNodeWrapper parent) { if (childType.isJsonObject()) { - CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFrom(childName), - getLocalNameFrom(childName)); + CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFor(childName), + getLocalNameFor(childName)); parent.addValue(child); for (Entry childOfChild : childType.getAsJsonObject().entrySet()) { addChildToParent(childOfChild.getKey(), childOfChild.getValue(), child); } } else if (childType.isJsonArray()) { if (childType.getAsJsonArray().size() == 1 && childType.getAsJsonArray().get(0).isJsonNull()) { - parent.addValue(new SimpleNodeWrapper(getNamespaceFrom(childName), getLocalNameFrom(childName), null)); + parent.addValue(new EmptyNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName))); } else { for (JsonElement childOfChildType : childType.getAsJsonArray()) { @@ -79,24 +81,36 @@ class JsonReader { } else if (childType.isJsonPrimitive()) { JsonPrimitive childPrimitive = childType.getAsJsonPrimitive(); String value = childPrimitive.getAsString(); - parent.addValue(new SimpleNodeWrapper(getNamespaceFrom(childName), getLocalNameFrom(childName), value)); + parent.addValue(new SimpleNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName), + resolveValueOfElement(value))); } } - private URI getNamespaceFrom(String jsonElementName) { - int indexOfDelimeter = jsonElementName.lastIndexOf(':'); - if (indexOfDelimeter == -1) { + private URI getNamespaceFor(String jsonElementName) { + String[] moduleNameAndLocalName = jsonElementName.split(":"); + if (moduleNameAndLocalName.length != 2) { // it is not "moduleName:localName" return null; } - return URI.create(jsonElementName.substring(0, indexOfDelimeter)); + return URI.create(moduleNameAndLocalName[0]); } - private String getLocalNameFrom(String jsonElementName) { - int indexOfDelimeter = jsonElementName.lastIndexOf(':'); - if (indexOfDelimeter == -1) { + private String getLocalNameFor(String jsonElementName) { + String[] moduleNameAndLocalName = jsonElementName.split(":"); + if (moduleNameAndLocalName.length != 2) { // it is not "moduleName:localName" return jsonElementName; } - return jsonElementName.substring(indexOfDelimeter + 1, jsonElementName.length()); + return moduleNameAndLocalName[1]; + } + + /** + * @param value + * value of json element + * @return if value is "moduleName:localName" then {@link IdentityValuesDTO} else + * the same string as parameter "value" + */ + private Object resolveValueOfElement(String value) { + URI namespace = getNamespaceFor(value); + return namespace == null ? value : new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null); } }