+/*
+ * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
package org.opendaylight.controller.sal.rest.impl;
import java.io.InputStream;
import java.util.Map.Entry;
import java.util.Set;
+import org.opendaylight.controller.sal.rest.impl.RestUtil.PrefixMapingFromJson;
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 org.opendaylight.controller.sal.restconf.impl.SimpleNodeWrapper;
import com.google.common.collect.Lists;
import com.google.gson.JsonElement;
JsonParser parser = new JsonParser();
JsonElement rootElement = parser.parse(new InputStreamReader(entityStream));
+ if( rootElement.isJsonNull() )
+ {
+ //no content, so return null to indicate no input
+ return null;
+ }
+
if (!rootElement.isJsonObject()) {
throw new UnsupportedFormatException("Root element of Json has to be Object");
}
private void addChildToParent(String childName, JsonElement childType, CompositeNodeWrapper parent) {
if (childType.isJsonObject()) {
- CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFor(childName),
- getLocalNameFor(childName));
+ CompositeNodeWrapper child = new CompositeNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName));
parent.addValue(child);
for (Entry<String, JsonElement> childOfChild : childType.getAsJsonObject().entrySet()) {
addChildToParent(childOfChild.getKey(), childOfChild.getValue(), child);
}
} else if (childType.isJsonPrimitive()) {
JsonPrimitive childPrimitive = childType.getAsJsonPrimitive();
- String value = childPrimitive.getAsString();
+ String value = childPrimitive.getAsString().trim();
parent.addValue(new SimpleNodeWrapper(getNamespaceFor(childName), getLocalNameFor(childName),
resolveValueOfElement(value)));
}
private URI getNamespaceFor(String jsonElementName) {
String[] moduleNameAndLocalName = jsonElementName.split(":");
- if (moduleNameAndLocalName.length != 2) { // it is not "moduleName:localName"
+ // it is not "moduleName:localName"
+ if (moduleNameAndLocalName.length != 2) {
return null;
}
return URI.create(moduleNameAndLocalName[0]);
private String getLocalNameFor(String jsonElementName) {
String[] moduleNameAndLocalName = jsonElementName.split(":");
- if (moduleNameAndLocalName.length != 2) { // it is not "moduleName:localName"
+ // it is not "moduleName:localName"
+ if (moduleNameAndLocalName.length != 2) {
return jsonElementName;
}
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) {
+ // it could be instance-identifier Built-In Type
+ if (value.startsWith("/")) {
+ IdentityValuesDTO resolvedValue = RestUtil.asInstanceIdentifier(value, new PrefixMapingFromJson());
+ if (resolvedValue != null) {
+ return resolvedValue;
+ }
+ }
+ // it could be identityref Built-In Type
URI namespace = getNamespaceFor(value);
- return namespace == null ? value : new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null);
+ if (namespace != null) {
+ return new IdentityValuesDTO(namespace.toString(), getLocalNameFor(value), null,value);
+ }
+ // it is not "prefix:value" but just "value"
+ return value;
}
}