package org.opendaylight.restconf.nb.rfc8040.rests.utils;
import com.google.common.util.concurrent.ListenableFuture;
-import java.util.Optional;
import java.util.concurrent.CancellationException;
-import javax.ws.rs.core.Response.Status;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
import org.opendaylight.mdsal.dom.api.DOMActionResult;
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
import org.opendaylight.restconf.common.errors.RestconfError.ErrorTag;
-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.common.ErrorType;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.YangConstants;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
* mount point
* @param data
* input data
- * @param schemaPath
- * schema path of data
+ * @param rpc
+ * RPC type
* @return {@link DOMRpcResult}
*/
- public static DOMRpcResult invokeRpcViaMountPoint(final DOMMountPoint mountPoint, final NormalizedNode<?, ?> data,
- final QName schemaPath) {
- final Optional<DOMRpcService> mountPointService = mountPoint.getService(DOMRpcService.class);
- if (mountPointService.isPresent()) {
- return prepareResult(mountPointService.get().invokeRpc(schemaPath, nonnullInput(schemaPath, data)));
- }
- final String errmsg = "RPC service is missing.";
- LOG.debug(errmsg);
- throw new RestconfDocumentedException(errmsg);
+ public static DOMRpcResult invokeRpc(final NormalizedNode data, final QName rpc, final DOMMountPoint mountPoint) {
+ return invokeRpc(data, rpc, mountPoint.getService(DOMRpcService.class).orElseThrow(() -> {
+ final String errmsg = "RPC service is missing.";
+ LOG.debug(errmsg);
+ return new RestconfDocumentedException(errmsg);
+ }));
}
/**
* input data
* @param rpc
* RPC type
- * @param rpcServiceHandler
- * rpc service handler to invoke rpc
+ * @param rpcService
+ * rpc service to invoke rpc
* @return {@link DOMRpcResult}
*/
- public static DOMRpcResult invokeRpc(final NormalizedNode<?, ?> data, final QName rpc,
- final RpcServiceHandler rpcServiceHandler) {
- final DOMRpcService rpcService = rpcServiceHandler.get();
- if (rpcService == null) {
- throw new RestconfDocumentedException(Status.SERVICE_UNAVAILABLE);
- }
-
- return prepareResult(rpcService.invokeRpc(rpc, nonnullInput(rpc, data)));
+ public static DOMRpcResult invokeRpc(final NormalizedNode data, final QName rpc, final DOMRpcService rpcService) {
+ final ListenableFuture<? extends DOMRpcResult> future = rpcService.invokeRpc(rpc, nonnullInput(rpc, data));
+ final RpcResultFactory dataFactory = new RpcResultFactory();
+ FutureCallbackTx.addCallback(future, PostDataTransactionUtil.POST_TX_TYPE, dataFactory);
+ return dataFactory.build();
}
- private static @NonNull NormalizedNode<?, ?> nonnullInput(final QName type, final NormalizedNode<?, ?> input) {
+ private static @NonNull NormalizedNode nonnullInput(final QName type, final NormalizedNode input) {
return input != null ? input
: ImmutableNodes.containerNode(YangConstants.operationInputQName(type.getModule()));
}
}
}
- private static DOMRpcResult prepareResult(final ListenableFuture<? extends DOMRpcResult> rpc) {
- final RpcResultFactory dataFactory = new RpcResultFactory();
- FutureCallbackTx.addCallback(rpc, PostDataTransactionUtil.POST_TX_TYPE, dataFactory);
- return dataFactory.build();
- }
-
/**
* Invoking Action via mount point.
*
* schema path of data
* @return {@link DOMActionResult}
*/
- public static DOMActionResult invokeActionViaMountPoint(final DOMMountPoint mountPoint, final ContainerNode data,
- final Absolute schemaPath, final YangInstanceIdentifier yangIId) {
- final Optional<DOMActionService> mountPointService = mountPoint.getService(DOMActionService.class);
- if (!mountPointService.isPresent()) {
- throw new RestconfDocumentedException("DomAction service is missing.");
- }
- return prepareActionResult(mountPointService.get().invokeAction(schemaPath, prepareDataTreeId(yangIId), data));
+ public static DOMActionResult invokeAction(final ContainerNode data,
+ final Absolute schemaPath, final YangInstanceIdentifier yangIId, final DOMMountPoint mountPoint) {
+ return invokeAction(data, schemaPath, yangIId, mountPoint.getService(DOMActionService.class)
+ .orElseThrow(() -> new RestconfDocumentedException("DomAction service is missing.")));
}
/**
* input data
* @param schemaPath
* schema path of data
- * @param actionServiceHandler
- * action service handler to invoke action
+ * @param actionService
+ * action service to invoke action
* @return {@link DOMActionResult}
*/
public static DOMActionResult invokeAction(final ContainerNode data, final Absolute schemaPath,
- final ActionServiceHandler actionServiceHandler, final YangInstanceIdentifier yangIId) {
- return prepareActionResult(
- actionServiceHandler.get().invokeAction(schemaPath, prepareDataTreeId(yangIId), data));
+ final YangInstanceIdentifier yangIId, final DOMActionService actionService) {
+ final ListenableFuture<? extends DOMActionResult> future = actionService.invokeAction(schemaPath,
+ new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangIId.getParent()), data);
+ final ActionResultFactory dataFactory = new ActionResultFactory();
+ FutureCallbackTx.addCallback(future, PostDataTransactionUtil.POST_TX_TYPE, dataFactory);
+ return dataFactory.build();
}
/**
}
return null;
}
-
- /**
- * Prepare Action Result.
- *
- * @param actionResult
- * {@link DOMActionResult} - action result
- * @return {@link DOMActionResult} result
- */
- private static DOMActionResult prepareActionResult(final ListenableFuture<? extends DOMActionResult> actionResult) {
- final ActionResultFactory dataFactory = new ActionResultFactory();
- FutureCallbackTx.addCallback(actionResult, PostDataTransactionUtil.POST_TX_TYPE, dataFactory);
- return dataFactory.build();
- }
-
- /**
- * Prepare DOMDataTree Identifier.
- *
- * @param yangIId {@link YangInstanceIdentifier}
- * @return {@link DOMDataTreeIdentifier} domDataTreeIdentifier
- */
- private static DOMDataTreeIdentifier prepareDataTreeId(final YangInstanceIdentifier yangIId) {
- return new DOMDataTreeIdentifier(LogicalDatastoreType.OPERATIONAL, yangIId.getParent());
- }
}