import org.opendaylight.yangtools.yang.model.api.Module
import org.opendaylight.yangtools.yang.model.api.RpcDefinition
import org.opendaylight.yangtools.yang.model.api.SchemaContext
-import org.opendaylight.yangtools.yang.model.api.SchemaServiceListener
+import org.opendaylight.yangtools.yang.model.api.SchemaContextListener
import org.opendaylight.yangtools.yang.model.api.type.IdentityrefTypeDefinition
import org.slf4j.LoggerFactory
import static com.google.common.base.Preconditions.*
import static javax.ws.rs.core.Response.Status.*
-class ControllerContext implements SchemaServiceListener {
+class ControllerContext implements SchemaContextListener {
val static LOG = LoggerFactory.getLogger(ControllerContext)
val static ControllerContext INSTANCE = new ControllerContext
val static NULL_VALUE = "null"
private def toUriString(Object object) {
if(object === null) return "";
-// return object.toString.replace("/",URI_SLASH_PLACEHOLDER)
return URLEncoder.encode(object.toString,URI_ENCODING_CHAR_SET)
}
+ "\" cannot contain \"null\" value as a key."
)
}
- keyValues.addKeyValue(listNode.getDataChildByName(key), uriKeyValue);
+ keyValues.addKeyValue(listNode.getDataChildByName(key), uriKeyValue, mountPoint);
i = i + 1;
}
consumed = consumed + i;
}
}
- private def void addKeyValue(HashMap<QName, Object> map, DataSchemaNode node, String uriValue) {
+ private def void addKeyValue(HashMap<QName, Object> map, DataSchemaNode node, String uriValue, MountInstance mountPoint) {
checkNotNull(uriValue);
checkArgument(node instanceof LeafSchemaNode);
val urlDecoded = URLDecoder.decode(uriValue);
val typedef = (node as LeafSchemaNode).type;
- var decoded = TypeDefinitionAwareCodec.from(typedef)?.deserialize(urlDecoded)
+ var decoded = RestCodec.from(typedef, mountPoint)?.deserialize(urlDecoded)
+ var additionalInfo = ""
if(decoded === null) {
var baseType = RestUtil.resolveBaseTypeFrom(typedef)
if(baseType instanceof IdentityrefTypeDefinition) {
decoded = toQName(urlDecoded)
+ additionalInfo = "For key which is of type identityref it should be in format module_name:identity_name."
}
}
+ if (decoded === null) {
+ throw new ResponseException(BAD_REQUEST, uriValue + " from URI can't be resolved. "+ additionalInfo )
+ }
+
map.put(node.QName, decoded);
}
decodedPathArgs.add(URLDecoder.decode(pathArg, URI_ENCODING_CHAR_SET))
}
return decodedPathArgs
+ }
+
+ def urlPathArgDecode(String pathArg) {
+ if (pathArg !== null) {
+ return URLDecoder.decode(pathArg, URI_ENCODING_CHAR_SET)
+ }
+ return null
}
}