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%2Frestconf%2Fimpl%2FRestconfImpl.java;h=4c005c6ae5e9e109604a1890cd5ee0c5f81d264a;hb=fe4049d34de103016d11f3a9050853c6380646d3;hp=bb7547d3302f1d172c1271416c08e0895ac46398;hpb=73c9fecf86aad02761df47fe0cc943af4ea1f2bc;p=controller.git diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java index bb7547d330..4c005c6ae5 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/RestconfImpl.java @@ -50,10 +50,10 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.InstanceIdentifierBuilder; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.MutableCompositeNode; import org.opendaylight.yangtools.yang.data.api.Node; import org.opendaylight.yangtools.yang.data.api.SimpleNode; @@ -427,12 +427,12 @@ public class RestconfImpl implements RestconfService { rpc.getQName(), "path")); final Object pathValue = pathNode == null ? null : pathNode.getValue(); - if (!(pathValue instanceof InstanceIdentifier)) { + if (!(pathValue instanceof YangInstanceIdentifier)) { throw new RestconfDocumentedException("Instance identifier was not normalized correctly.", ErrorType.APPLICATION, ErrorTag.OPERATION_FAILED); } - final InstanceIdentifier pathIdentifier = ((InstanceIdentifier) pathValue); + final YangInstanceIdentifier pathIdentifier = ((YangInstanceIdentifier) pathValue); String streamName = null; if (!Iterables.isEmpty(pathIdentifier.getPathArguments())) { String fullRestconfIdentifier = this.controllerContext.toFullRestconfIdentifier(pathIdentifier); @@ -490,7 +490,13 @@ public class RestconfImpl implements RestconfService { } final String identifierDecoded = controllerContext.urlPathArgDecode(identifierEncoded); - RpcDefinition rpc = controllerContext.getRpcDefinition(identifierDecoded); + + RpcDefinition rpc = null; + if (mountPoint == null) { + rpc = controllerContext.getRpcDefinition(identifierDecoded); + } else { + rpc = findRpc(mountPoint.getSchemaContext(), identifierDecoded); + } if (rpc == null) { throw new RestconfDocumentedException("RPC does not exist.", ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT); @@ -504,6 +510,25 @@ public class RestconfImpl implements RestconfService { } + private RpcDefinition findRpc(final SchemaContext schemaContext, final String identifierDecoded) { + final String[] splittedIdentifier = identifierDecoded.split(":"); + if (splittedIdentifier.length != 2) { + throw new RestconfDocumentedException(identifierDecoded + + " couldn't be splitted to 2 parts (module:rpc name)", ErrorType.APPLICATION, + ErrorTag.INVALID_VALUE); + } + for (Module module : schemaContext.getModules()) { + if (module.getName().equals(splittedIdentifier[0])) { + for (RpcDefinition rpcDefinition : module.getRpcs()) { + if (rpcDefinition.getQName().getLocalName().equals(splittedIdentifier[1])) { + return rpcDefinition; + } + } + } + } + return null; + } + private StructuredData callRpc(final RpcExecutor rpcExecutor, final CompositeNode payload, boolean prettyPrint) { if (rpcExecutor == null) { throw new RestconfDocumentedException("RPC does not exist.", ErrorType.RPC, ErrorTag.UNKNOWN_ELEMENT); @@ -918,17 +943,17 @@ public class RestconfImpl implements RestconfService { private InstanceIdWithSchemaNode addLastIdentifierFromData(final InstanceIdWithSchemaNode identifierWithSchemaNode, final CompositeNode data, final DataSchemaNode schemaOfData) { - InstanceIdentifier instanceIdentifier = null; + YangInstanceIdentifier instanceIdentifier = null; if (identifierWithSchemaNode != null) { instanceIdentifier = identifierWithSchemaNode.getInstanceIdentifier(); } - final InstanceIdentifier iiOriginal = instanceIdentifier; + final YangInstanceIdentifier iiOriginal = instanceIdentifier; InstanceIdentifierBuilder iiBuilder = null; if (iiOriginal == null) { - iiBuilder = InstanceIdentifier.builder(); + iiBuilder = YangInstanceIdentifier.builder(); } else { - iiBuilder = InstanceIdentifier.builder(iiOriginal); + iiBuilder = YangInstanceIdentifier.builder(iiOriginal); } if ((schemaOfData instanceof ListSchemaNode)) { @@ -938,7 +963,7 @@ public class RestconfImpl implements RestconfService { iiBuilder.node(schemaOfData.getQName()); } - InstanceIdentifier instance = iiBuilder.toInstance(); + YangInstanceIdentifier instance = iiBuilder.toInstance(); MountInstance mountPoint = null; if (identifierWithSchemaNode != null) { mountPoint = identifierWithSchemaNode.getMountPoint();