X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-rest-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Frest%2Fimpl%2FJsonToCompositeNodeReader.java;h=2834fa15c1fee42df91917b0b3a39193abb51639;hb=43f89a73d733c3c43a875b3724b5a68470894450;hp=082675b6d135e4fa3be05017a34a2ff584da9008;hpb=5ce59af75c7f53e05fccb55b6cf03350ab0eebac;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeReader.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeReader.java index 082675b6d1..2834fa15c1 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeReader.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/rest/impl/JsonToCompositeNodeReader.java @@ -13,14 +13,12 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.stream.JsonReader; - import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; -import java.util.Map.Entry; import java.util.Iterator; +import java.util.Map.Entry; import java.util.Set; - import org.opendaylight.controller.sal.rest.gson.JsonParser; import org.opendaylight.controller.sal.rest.impl.RestUtil.PrefixMapingFromJson; import org.opendaylight.controller.sal.restconf.impl.CompositeNodeWrapper; @@ -30,20 +28,22 @@ import org.opendaylight.controller.sal.restconf.impl.SimpleNodeWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @deprecated class will be removed in Lithium release + */ +@Deprecated class JsonToCompositeNodeReader { - private static final Logger LOG = LoggerFactory.getLogger(JsonReader.class); + private static final Logger LOG = LoggerFactory.getLogger(JsonToCompositeNodeReader.class); private static final Splitter COLON_SPLITTER = Splitter.on(':'); private JsonToCompositeNodeReader() { } - public static CompositeNodeWrapper read(final InputStream entityStream) - throws UnsupportedFormatException { - JsonParser parser = new JsonParser(); + public static CompositeNodeWrapper read(final InputStream entityStream) throws UnsupportedFormatException { + final JsonParser parser = new JsonParser(); - JsonElement rootElement = parser.parse(new JsonReader( - new InputStreamReader(entityStream))); + final JsonElement rootElement = parser.parse(new JsonReader(new InputStreamReader(entityStream))); if (rootElement.isJsonNull()) { // no content, so return null to indicate no input return null; @@ -53,15 +53,14 @@ class JsonToCompositeNodeReader { throw new UnsupportedFormatException("Root element of Json has to be Object"); } - Set> entrySetsOfRootJsonObject = - rootElement.getAsJsonObject().entrySet(); + final Set> entrySetsOfRootJsonObject = rootElement.getAsJsonObject().entrySet(); if (entrySetsOfRootJsonObject.size() != 1) { throw new UnsupportedFormatException("Json Object should contain one element"); } - Entry childEntry = entrySetsOfRootJsonObject.iterator().next(); - String firstElementName = childEntry.getKey(); - JsonElement firstElementType = childEntry.getValue(); + final Entry childEntry = entrySetsOfRootJsonObject.iterator().next(); + final String firstElementName = childEntry.getKey(); + final JsonElement firstElementType = childEntry.getValue(); if (firstElementType.isJsonObject()) { // container in yang return createStructureWithRoot(firstElementName, firstElementType.getAsJsonObject()); @@ -69,7 +68,7 @@ class JsonToCompositeNodeReader { if (firstElementType.isJsonArray()) { // list in yang if (firstElementType.getAsJsonArray().size() == 1) { - JsonElement firstElementInArray = firstElementType.getAsJsonArray().get(0); + final JsonElement firstElementInArray = firstElementType.getAsJsonArray().get(0); if (firstElementInArray.isJsonObject()) { return createStructureWithRoot(firstElementName, firstElementInArray.getAsJsonObject()); } @@ -81,23 +80,22 @@ class JsonToCompositeNodeReader { "First element in Json Object has to be \"Object\" or \"Array with one Object element\". Other scenarios are not supported yet."); } - private static CompositeNodeWrapper createStructureWithRoot(final String rootObjectName, - final JsonObject rootObject) { - CompositeNodeWrapper firstNode = new CompositeNodeWrapper(getNamespaceFor(rootObjectName), + private static CompositeNodeWrapper createStructureWithRoot(final String rootObjectName, final JsonObject rootObject) { + final CompositeNodeWrapper firstNode = new CompositeNodeWrapper(getNamespaceFor(rootObjectName), getLocalNameFor(rootObjectName)); - for (Entry childOfFirstNode : rootObject.entrySet()) { + for (final Entry childOfFirstNode : rootObject.entrySet()) { addChildToParent(childOfFirstNode.getKey(), childOfFirstNode.getValue(), firstNode); } return firstNode; } private static void addChildToParent(final String childName, final JsonElement childType, - final CompositeNodeWrapper parent) { + final CompositeNodeWrapper parent) { if (childType.isJsonObject()) { - CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFor(childName), + final CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName)); parent.addValue(child); - for (Entry childOfChild : childType.getAsJsonObject().entrySet()) { + for (final Entry childOfChild : childType.getAsJsonObject().entrySet()) { addChildToParent(childOfChild.getKey(), childOfChild.getValue(), child); } } else if (childType.isJsonArray()) { @@ -105,13 +103,13 @@ class JsonToCompositeNodeReader { parent.addValue(new EmptyNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName))); } else { - for (JsonElement childOfChildType : childType.getAsJsonArray()) { + for (final JsonElement childOfChildType : childType.getAsJsonArray()) { addChildToParent(childName, childOfChildType, parent); } } } else if (childType.isJsonPrimitive()) { - JsonPrimitive childPrimitive = childType.getAsJsonPrimitive(); - String value = childPrimitive.getAsString().trim(); + final JsonPrimitive childPrimitive = childType.getAsJsonPrimitive(); + final String value = childPrimitive.getAsString().trim(); parent.addValue(new SimpleNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName), resolveValueOfElement(value))); } else { @@ -119,14 +117,29 @@ class JsonToCompositeNodeReader { } } + /** + * Transform input value to URI instance. + * + * Input string has to be in format moduleName:localName. moduleName part is then transformed to URI instance. + * If moduleName part contains character like "<" or ">" then null value is returned because they + * aren't valid URI characters. + * + * @param jsonElementName + * value in format moduleName:localName + * @return + */ private static URI getNamespaceFor(final String jsonElementName) { final Iterator it = COLON_SPLITTER.split(jsonElementName).iterator(); - // The string needs to me in form "moduleName:localName" + // The string needs to be in form "moduleName:localName" if (it.hasNext()) { final String maybeURI = it.next(); if (Iterators.size(it) == 1) { - return URI.create(maybeURI); + try { + return URI.create(maybeURI); + } catch (final IllegalArgumentException e) { + LOG.debug("Value {} couldn't be interpreted as URI.", maybeURI); + } } } @@ -144,14 +157,14 @@ class JsonToCompositeNodeReader { private static Object resolveValueOfElement(final String value) { // it could be instance-identifier Built-In Type if (!value.isEmpty() && value.charAt(0) == '/') { - IdentityValuesDTO resolvedValue = RestUtil.asInstanceIdentifier(value, new PrefixMapingFromJson()); + final IdentityValuesDTO resolvedValue = RestUtil.asInstanceIdentifier(value, new PrefixMapingFromJson()); if (resolvedValue != null) { return resolvedValue; } } - // it could be identityref Built-In Type - URI namespace = getNamespaceFor(value); + // it could be identityref Built-In Type therefore it is necessary to look at value as module_name:local_name + final URI namespace = getNamespaceFor(value); if (namespace != null) { return new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null, value); }