import java.util.stream.Collectors;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
-import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.netconf.api.ModifyAction;
-import org.opendaylight.netconf.sal.connect.netconf.sal.KeepaliveSalFacade.KeepaliveDOMRpcService;
-import org.opendaylight.netconf.sal.connect.netconf.sal.SchemalessNetconfDeviceRpc;
+import org.opendaylight.netconf.sal.connect.api.NetconfRpcService;
+import org.opendaylight.netconf.sal.connect.api.RemoteDeviceServices.Rpcs;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.copy.config.input.target.ConfigTarget;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.base._1._0.rev110601.get.config.input.source.ConfigSource;
import org.opendaylight.yangtools.rfc8528.data.api.MountPointContext;
private static final LeafNode<String> NETCONF_ERROR_OPTION_ROLLBACK =
ImmutableNodes.leafNode(NETCONF_ERROR_OPTION_NODEID, ROLLBACK_ON_ERROR_OPTION);
- private final DOMRpcService rpc;
+ private final NetconfRpcService rpc;
private final MountPointContext mountContext;
private final RpcStructureTransformer transformer;
- public NetconfBaseOps(final DOMRpcService rpc, final MountPointContext mountContext) {
+ public NetconfBaseOps(final Rpcs rpc, final MountPointContext mountContext) {
this.rpc = requireNonNull(rpc);
this.mountContext = requireNonNull(mountContext);
- if (rpc instanceof KeepaliveDOMRpcService keepAlive
- && keepAlive.getDeviceRpc() instanceof SchemalessNetconfDeviceRpc) {
+ if (rpc instanceof Rpcs.Schemaless) {
transformer = new SchemalessRpcStructureTransformer();
- } else {
+ } else if (rpc instanceof Rpcs.Normalized) {
transformer = new NetconfRpcStructureTransformer(mountContext);
+ } else {
+ throw new IllegalStateException("Unhandled rpcs " + rpc);
}
}
public ListenableFuture<? extends DOMRpcResult> lock(final FutureCallback<DOMRpcResult> callback,
final NodeIdentifier datastore) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_LOCK_QNAME, getLockContent(datastore)));
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_LOCK_QNAME, getLockContent(datastore)));
}
private static <T> ListenableFuture<T> addCallback(final FutureCallback<? super T> callback,
}
public ListenableFuture<? extends DOMRpcResult> lockCandidate(final FutureCallback<DOMRpcResult> callback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_LOCK_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_LOCK_QNAME,
getLockContent(NETCONF_CANDIDATE_NODEID)));
}
public ListenableFuture<? extends DOMRpcResult> lockRunning(final FutureCallback<DOMRpcResult> callback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_LOCK_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_LOCK_QNAME,
getLockContent(NETCONF_RUNNING_NODEID)));
}
public ListenableFuture<? extends DOMRpcResult> unlock(final FutureCallback<DOMRpcResult> callback,
final NodeIdentifier datastore) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_UNLOCK_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_UNLOCK_QNAME,
getUnLockContent(datastore)));
}
public ListenableFuture<? extends DOMRpcResult> unlockRunning(final FutureCallback<DOMRpcResult> callback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_UNLOCK_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_UNLOCK_QNAME,
getUnLockContent(NETCONF_RUNNING_NODEID)));
}
public ListenableFuture<? extends DOMRpcResult> unlockCandidate(final FutureCallback<DOMRpcResult> callback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_UNLOCK_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_UNLOCK_QNAME,
getUnLockContent(NETCONF_CANDIDATE_NODEID)));
}
public ListenableFuture<? extends DOMRpcResult> discardChanges(final FutureCallback<DOMRpcResult> callback) {
// FIXME: eliminate null
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_DISCARD_CHANGES_QNAME, null));
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_DISCARD_CHANGES_QNAME, null));
}
public ListenableFuture<? extends DOMRpcResult> commit(final FutureCallback<DOMRpcResult> callback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_COMMIT_QNAME, COMMIT_RPC_CONTENT));
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_COMMIT_QNAME, COMMIT_RPC_CONTENT));
}
public ListenableFuture<? extends DOMRpcResult> validate(final FutureCallback<DOMRpcResult> callback,
final NodeIdentifier datastore) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_VALIDATE_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_VALIDATE_QNAME,
getValidateContent(requireNonNull(datastore))));
}
public ListenableFuture<? extends DOMRpcResult> copyConfig(final FutureCallback<DOMRpcResult> callback,
final NodeIdentifier sourceDatastore, final NodeIdentifier targetDatastore) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_COPY_CONFIG_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_COPY_CONFIG_QNAME,
getCopyConfigContent(sourceDatastore, targetDatastore)));
}
public ListenableFuture<? extends DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback,
final NodeIdentifier datastore, final Optional<YangInstanceIdentifier> filterPath) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_GET_CONFIG_QNAME, nonEmptyFilter(filterPath)
- .map(path -> NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID,
- getSourceNode(datastore), transformer.toFilterStructure(path)))
- .orElseGet(() -> NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, getSourceNode(datastore)))));
+ final var source = getSourceNode(datastore);
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_GET_CONFIG_QNAME,
+ nonEmptyFilter(filterPath)
+ .map(path -> NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, source,
+ transformer.toFilterStructure(path)))
+ .orElseGet(() -> NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID, source))));
}
private ListenableFuture<? extends DOMRpcResult> getConfig(final FutureCallback<DOMRpcResult> callback,
rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_CONFIG_NODEID,
getSourceNode(datastore), getSubtreeFilterFromRootFields(fields));
}
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_GET_CONFIG_QNAME, rpcInput));
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_GET_CONFIG_QNAME, rpcInput));
}
/**
public ListenableFuture<? extends DOMRpcResult> get(final FutureCallback<DOMRpcResult> callback,
final Optional<YangInstanceIdentifier> filterPath) {
- return addCallback(requireNonNull(callback),
- rpc.invokeRpc(NETCONF_GET_QNAME, nonEmptyFilter(filterPath)
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_GET_QNAME,
+ nonEmptyFilter(filterPath)
.map(path -> NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID,
toFilterStructure(path, mountContext.getEffectiveModelContext())))
.orElse(NetconfMessageTransformUtil.GET_RPC_CONTENT)));
} else {
rpcInput = NetconfMessageTransformUtil.wrap(NETCONF_GET_NODEID, getSubtreeFilterFromRootFields(fields));
}
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_GET_QNAME, rpcInput));
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_GET_QNAME, rpcInput));
}
private static boolean containsEmptyPath(final List<YangInstanceIdentifier> fields) {
final FutureCallback<? super DOMRpcResult> callback, final NodeIdentifier datastore,
final DataContainerChild editStructure, final Optional<ModifyAction> modifyAction,
final boolean rollback) {
- return addCallback(requireNonNull(callback), rpc.invokeRpc(NETCONF_EDIT_CONFIG_QNAME,
+ return addCallback(requireNonNull(callback), rpc.invokeNetconf(NETCONF_EDIT_CONFIG_QNAME,
getEditConfigContent(requireNonNull(datastore), requireNonNull(editStructure), modifyAction, rollback)));
}