Revert "Fix nested YANG 1.1 Action invocation" 84/90484/2
authorJamo Luhrsen <jluhrsen@gmail.com>
Mon, 22 Jun 2020 17:59:23 +0000 (17:59 +0000)
committerRobert Varga <nite@hq.sk>
Tue, 7 Jul 2020 08:34:03 +0000 (08:34 +0000)
This reverts commit 126f12f7a2f64d88060f6d55e3c738e5d891deed.

Reason for revert: checking if this caused the regression reported in NETCONF-702

Change-Id: I6f65c587f5e9d04e67dcdcaeda12688d206524b5
Signed-off-by: Jamo Luhrsen <jluhrsen@gmail.com>
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/services/impl/RestconfDataServiceImpl.java
restconf/restconf-nb-rfc8040/src/main/java/org/opendaylight/restconf/nb/rfc8040/rests/utils/RestconfInvokeOperationsUtil.java

index e4c24dd8441a70ce063b1a1b4ccecd655837d065..c6a9efbf09d4436560a38ba27d29718bed868f7e 100644 (file)
@@ -253,7 +253,7 @@ public class RestconfDataServiceImpl implements RestconfDataService {
     public Response postData(final NormalizedNodeContext payload, final UriInfo uriInfo) {
         requireNonNull(payload);
         if (payload.getInstanceIdentifierContext().getSchemaNode() instanceof ActionDefinition) {
-            return invokeAction(payload);
+            return invokeAction(payload, uriInfo);
         }
 
         final QueryParams checkedParms = checkQueryParameters(uriInfo);
@@ -356,9 +356,11 @@ public class RestconfDataServiceImpl implements RestconfDataService {
      *
      * @param payload
      *             {@link NormalizedNodeContext} - the body of the operation
+     * @param uriInfo
+     *             URI info
      * @return {@link NormalizedNodeContext} wrapped in {@link Response}
      */
-    public Response invokeAction(final NormalizedNodeContext payload) {
+    public Response invokeAction(final NormalizedNodeContext payload, final UriInfo uriInfo) {
         final InstanceIdentifierContext<?> context = payload.getInstanceIdentifierContext();
         final DOMMountPoint mountPoint = context.getMountPoint();
         final SchemaPath schemaPath = context.getSchemaNode().getPath();
index a5f684dd60b4344196aa2d7634abe2f108dcc8ad..8e1304ea5bfb8682b4683746c4dcd2da6f3d4959 100644 (file)
@@ -8,6 +8,8 @@
 package org.opendaylight.restconf.nb.rfc8040.rests.utils;
 
 import com.google.common.util.concurrent.ListenableFuture;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.CancellationException;
 import javax.ws.rs.core.Response.Status;
@@ -24,6 +26,7 @@ import org.opendaylight.restconf.common.errors.RestconfError.ErrorType;
 import org.opendaylight.restconf.nb.rfc8040.handlers.ActionServiceHandler;
 import org.opendaylight.restconf.nb.rfc8040.handlers.RpcServiceHandler;
 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument;
 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
@@ -134,7 +137,9 @@ public final class RestconfInvokeOperationsUtil {
         if (!mountPointService.isPresent()) {
             throw new RestconfDocumentedException("DomAction service is missing.");
         }
-        return prepareActionResult(mountPointService.get().invokeAction(schemaPath, prepareDataTreeId(yangIId), data));
+
+        return prepareActionResult(mountPointService.get().invokeAction(schemaPath,
+            prepareDataTreeId(yangIId, schemaPath), data));
     }
 
     /**
@@ -149,9 +154,9 @@ public final class RestconfInvokeOperationsUtil {
      * @return {@link DOMActionResult}
      */
     public static DOMActionResult invokeAction(final ContainerNode data, final SchemaPath schemaPath,
-        final ActionServiceHandler actionServiceHandler, final YangInstanceIdentifier yangIId) {
-        return prepareActionResult(actionServiceHandler.get().invokeAction(schemaPath, prepareDataTreeId(yangIId),
-            data));
+            final ActionServiceHandler actionServiceHandler, final YangInstanceIdentifier yangIId) {
+        return prepareActionResult(actionServiceHandler.get().invokeAction(schemaPath,
+            prepareDataTreeId(yangIId, schemaPath), data));
     }
 
     /**
@@ -196,9 +201,22 @@ public final class RestconfInvokeOperationsUtil {
      *
      * @param yangIId
      *             {@link YangInstanceIdentifier}
+     * @param schemaPath
+     *              {@link SchemaPath}
      * @return {@link DOMDataTreeIdentifier} domDataTreeIdentifier
      */
-    private static DOMDataTreeIdentifier prepareDataTreeId(final YangInstanceIdentifier yangIId) {
-        return new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangIId.getParent());
+    private static DOMDataTreeIdentifier prepareDataTreeId(final YangInstanceIdentifier yangIId,
+            final SchemaPath schemaPath) {
+        final List<PathArgument> pathArg = new ArrayList<>();
+        for (PathArgument path : yangIId.getPathArguments()) {
+            if (path.getNodeType().getLocalName().equals(schemaPath.getLastComponent().getLocalName())) {
+                break;
+            }
+            pathArg.add(path);
+        }
+        YangInstanceIdentifier yangInstanceIdentifier = YangInstanceIdentifier.builder().append(pathArg).build();
+        DOMDataTreeIdentifier domDataTreeIdentifier = new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL,
+            yangInstanceIdentifier);
+        return domDataTreeIdentifier;
     }
 }