Fix Nested YANG 1.1 Action invocation
[netconf.git] / restconf / restconf-nb-rfc8040 / src / main / java / org / opendaylight / restconf / nb / rfc8040 / rests / utils / RestconfInvokeOperationsUtil.java
index 8e1304ea5bfb8682b4683746c4dcd2da6f3d4959..417b9781d32e64803cb35c7016d51d78faa40fb3 100644 (file)
@@ -8,8 +8,6 @@
 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;
@@ -26,7 +24,6 @@ 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;
@@ -137,9 +134,7 @@ public final class RestconfInvokeOperationsUtil {
         if (!mountPointService.isPresent()) {
             throw new RestconfDocumentedException("DomAction service is missing.");
         }
-
-        return prepareActionResult(mountPointService.get().invokeAction(schemaPath,
-            prepareDataTreeId(yangIId, schemaPath), data));
+        return prepareActionResult(mountPointService.get().invokeAction(schemaPath, prepareDataTreeId(yangIId), data));
     }
 
     /**
@@ -155,8 +150,8 @@ public final class RestconfInvokeOperationsUtil {
      */
     public static DOMActionResult invokeAction(final ContainerNode data, final SchemaPath schemaPath,
             final ActionServiceHandler actionServiceHandler, final YangInstanceIdentifier yangIId) {
-        return prepareActionResult(actionServiceHandler.get().invokeAction(schemaPath,
-            prepareDataTreeId(yangIId, schemaPath), data));
+        return prepareActionResult(
+            actionServiceHandler.get().invokeAction(schemaPath, prepareDataTreeId(yangIId), data));
     }
 
     /**
@@ -199,24 +194,10 @@ public final class RestconfInvokeOperationsUtil {
     /**
      * Prepare DOMDataTree Identifier.
      *
-     * @param yangIId
-     *             {@link YangInstanceIdentifier}
-     * @param schemaPath
-     *              {@link SchemaPath}
+     * @param yangIId {@link YangInstanceIdentifier}
      * @return {@link DOMDataTreeIdentifier} domDataTreeIdentifier
      */
-    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;
+    private static DOMDataTreeIdentifier prepareDataTreeId(final YangInstanceIdentifier yangIId) {
+        return new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangIId.getParent());
     }
 }