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);
*
* @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();
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;
import org.opendaylight.restconf.nb.rfc8040.handlers.RpcServiceHandler;
import org.opendaylight.yangtools.yang.common.YangConstants;
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.data.impl.schema.ImmutableNodes;
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));
}
/**
* @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));
}
/**
*
* @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;
}
}