X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=restconf%2Frestconf-nb-rfc8040%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Frestconf%2Fnb%2Frfc8040%2Frests%2Fservices%2Fimpl%2FRestconfInvokeOperationsServiceImpl.java;h=ff902ddf9dca59079c4f1df14279db935364cf9f;hb=001a72eb617c6fb2f8851837da2850cdadb64255;hp=b14062ee5717d4594c77215bad03cf58ee57569f;hpb=4bcdbecb30803ed0182d1f096f8bb38f8fe4d3c4;p=netconf.git diff --git a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java index b14062ee57..ff902ddf9d 100644 --- a/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java +++ b/restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfInvokeOperationsServiceImpl.java @@ -11,12 +11,11 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Throwables; -import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; -import java.util.Optional; +import java.util.List; import java.util.concurrent.ExecutionException; import javax.ws.rs.Path; import javax.ws.rs.WebApplicationException; @@ -28,7 +27,6 @@ import org.opendaylight.mdsal.dom.api.DOMMountPoint; import org.opendaylight.mdsal.dom.api.DOMRpcException; import org.opendaylight.mdsal.dom.api.DOMRpcResult; import org.opendaylight.mdsal.dom.api.DOMRpcService; -import org.opendaylight.mdsal.dom.api.DOMSchemaService; import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.restconf.common.context.InstanceIdentifierContext; import org.opendaylight.restconf.common.errors.RestconfDocumentedException; @@ -38,18 +36,14 @@ import org.opendaylight.restconf.nb.rfc8040.rests.services.api.RestconfInvokeOpe import org.opendaylight.yangtools.yang.common.ErrorTag; import org.opendaylight.yangtools.yang.common.ErrorType; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.common.RpcError; import org.opendaylight.yangtools.yang.common.RpcResultBuilder; import org.opendaylight.yangtools.yang.common.XMLNamespace; import org.opendaylight.yangtools.yang.common.YangConstants; -import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,20 +71,19 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat @Override public void invokeRpc(final String identifier, final NormalizedNodePayload payload, final UriInfo uriInfo, final AsyncResponse ar) { - final SchemaNode schema = payload.getInstanceIdentifierContext().getSchemaNode(); + final InstanceIdentifierContext context = payload.getInstanceIdentifierContext(); + final EffectiveModelContext schemaContext = context.getSchemaContext(); + final DOMMountPoint mountPoint = context.getMountPoint(); + final SchemaNode schema = context.getSchemaNode(); final QName rpcName = schema.getQName(); - final DOMMountPoint mountPoint = payload.getInstanceIdentifierContext().getMountPoint(); final ListenableFuture future; - final EffectiveModelContext schemaContextRef; if (mountPoint == null) { - schemaContextRef = schemaContextHandler.get(); - // FIXME: this really should be a normal RPC invocation service which has its own interface with JAX-RS if (SAL_REMOTE_NAMESPACE.equals(rpcName.getNamespace())) { if (identifier.contains("create-data-change-event-subscription")) { future = Futures.immediateFuture( - CreateStreamUtil.createDataChangeNotifiStream(payload, schemaContextRef)); + CreateStreamUtil.createDataChangeNotifiStream(payload, schemaContext)); } else { future = Futures.immediateFailedFuture(new RestconfDocumentedException("Unsupported operation", ErrorType.RPC, ErrorTag.OPERATION_NOT_SUPPORTED)); @@ -99,7 +92,6 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat future = invokeRpc(payload.getData(), rpcName, rpcService); } } else { - schemaContextRef = modelContext(mountPoint); future = invokeRpc(payload.getData(), rpcName, mountPoint); } @@ -117,10 +109,7 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat if (resultData == null || ((ContainerNode) resultData).isEmpty()) { ar.resume(new WebApplicationException(Status.NO_CONTENT)); } else { - ar.resume(NormalizedNodePayload.of(new InstanceIdentifierContext<>( - YangInstanceIdentifier.of(schema.getQName()), Absolute.of(schema.getQName()), - (RpcDefinition) schema, mountPoint, schemaContextRef), - resultData)); + ar.resume(NormalizedNodePayload.of(context, resultData)); } } @@ -162,8 +151,8 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat final DOMRpcService rpcService) { return Futures.catching(rpcService.invokeRpc(rpc, nonnullInput(rpc, data)), DOMRpcException.class, - cause -> new DefaultDOMRpcResult(ImmutableList.of(RpcResultBuilder.newError( - RpcError.ErrorType.RPC, "operation-failed", cause.getMessage()))), + cause -> new DefaultDOMRpcResult(List.of(RpcResultBuilder.newError(ErrorType.RPC, ErrorTag.OPERATION_FAILED, + cause.getMessage()))), MoreExecutors.directExecutor()); } @@ -183,10 +172,4 @@ public class RestconfInvokeOperationsServiceImpl implements RestconfInvokeOperat throw new RestconfDocumentedException("Invocation failed", e); } } - - private static EffectiveModelContext modelContext(final DOMMountPoint mountPoint) { - return mountPoint.getService(DOMSchemaService.class) - .flatMap(svc -> Optional.ofNullable(svc.getGlobalContext())) - .orElse(null); - } }