import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.common.YangConstants;
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.stmt.SchemaNodeIdentifier.Absolute;
final class BindingDOMRpcImplementationAdapter implements DOMRpcImplementation {
<T extends RpcService> BindingDOMRpcImplementationAdapter(final AdapterContext adapterContext,
final Class<T> type, final Map<QName, Method> localNameToMethod, final T delegate) {
try {
- this.invoker = SERVICE_INVOKERS.get(type, () -> RpcServiceInvoker.from(localNameToMethod));
+ invoker = SERVICE_INVOKERS.get(type, () -> RpcServiceInvoker.from(localNameToMethod));
} catch (ExecutionException e) {
throw new IllegalArgumentException("Failed to create invokers for type " + type, e);
}
}
@Override
- public ListenableFuture<DOMRpcResult> invokeRpc(final DOMRpcIdentifier rpc, final NormalizedNode input) {
+ public ListenableFuture<DOMRpcResult> invokeRpc(final DOMRpcIdentifier rpc, final ContainerNode input) {
final QName rpcType = rpc.getType();
final CurrentAdapterSerializer serializer = adapterContext.currentSerializer();
final DataObject bindingInput = input != null ? deserialize(serializer, rpcType, input) : null;
}
private DataObject deserialize(final CurrentAdapterSerializer serializer, final QName rpcType,
- final NormalizedNode input) {
+ final ContainerNode input) {
if (ENABLE_CODEC_SHORTCUT && input instanceof BindingLazyContainerNode) {
return ((BindingLazyContainerNode<?>) input).getDataObject();
}
- final ContainerNode container = (ContainerNode) input;
- checkArgument(inputQname.equals(container.getIdentifier().getNodeType()), "Unexpected RPC %s input %s", rpcType,
- input);
- return serializer.fromNormalizedNodeRpcData(Absolute.of(rpcType, inputQname), container);
+ checkArgument(inputQname.equals(input.getIdentifier().getNodeType()),
+ "Unexpected RPC %s input %s", rpcType, input);
+ return serializer.fromNormalizedNodeRpcData(Absolute.of(rpcType, inputQname), input);
}
private ListenableFuture<RpcResult<?>> invoke(final QName rpcType, final DataObject input) {
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
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;
@ExtendWith(MockitoExtension.class)
public void testRpcInputName() {
final var rpcService = mock(DOMRpcService.class);
- final var captor = ArgumentCaptor.forClass(NormalizedNode.class);
+ final var captor = ArgumentCaptor.forClass(ContainerNode.class);
doReturn(Futures.immediateFailedFuture(new Throwable())).when(rpcService).invokeRpc(any(), captor.capture());
final var adapter = (OpendaylightTestRpcServiceService) new RpcServiceAdapter(
OpendaylightTestRpcServiceService.class, adapterContext, rpcService).getProxy();
final var input = captor.getValue();
assertThat(input, instanceOf(ContainerNode.class));
assertSame(NodeIdentifier.create(RockTheHouseInput.QNAME), input.getIdentifier());
- final var body = ((ContainerNode) input).body();
+ final var body = input.body();
assertEquals(1, body.size());
assertEquals(ImmutableNodes.leafNode(QName.create(RockTheHouseInput.QNAME, "zip-code"), "12345"),
body.iterator().next());
import com.google.common.util.concurrent.ListenableFuture;
import org.eclipse.jdt.annotation.NonNull;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
/**
* Interface implemented by an individual RPC implementation. This API allows for dispatch
* @throws NullPointerException if any argument is null
*/
@NonNull ListenableFuture<? extends DOMRpcResult> invokeRpc(@NonNull DOMRpcIdentifier rpc,
- @NonNull NormalizedNode input);
+ @NonNull ContainerNode input);
/**
* Return the relative invocation cost of this implementation. Default implementation return 0.
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
/**
* A {@link DOMService} which allows clients to invoke RPCs. The conceptual model of this service is that of a dynamic
* @return A {@link ListenableFuture} which will return either a result structure, or report a subclass
* of {@link DOMRpcException} reporting a transport error.
*/
- @NonNull ListenableFuture<? extends DOMRpcResult> invokeRpc(@NonNull QName type, @NonNull NormalizedNode input);
+ @NonNull ListenableFuture<? extends DOMRpcResult> invokeRpc(@NonNull QName type, @NonNull ContainerNode input);
/**
* Register a {@link DOMRpcAvailabilityListener} with this service to receive notifications
* about RPC implementations becoming (un)available. The listener will be invoked with the
* current implementations reported and will be kept uptodate as implementations come and go.
* Users should note that using a listener does not necessarily mean that
- * {@link #invokeRpc(QName, NormalizedNode)} will not report a failure due to
+ * {@link #invokeRpc(QName, ContainerNode)} will not report a failure due to
* {@link DOMRpcImplementationNotAvailableException} and need to be ready to handle it.
* Implementations are encouraged to take reasonable precautions to prevent this scenario from
* occurring.
RegImpl(final DOMRpcRouter router, final T listener, final Map<QName, Set<YangInstanceIdentifier>> rpcs) {
super(listener);
this.router = requireNonNull(router);
- this.prevRpcs = requireNonNull(rpcs);
+ prevRpcs = requireNonNull(rpcs);
}
@Override
final Map<Absolute, Set<DOMDataTreeIdentifier>> actions) {
super(listener);
this.router = requireNonNull(router);
- this.prevActions = requireNonNull(actions);
+ prevActions = requireNonNull(actions);
}
@Override
private final class RpcServiceFacade implements DOMRpcService {
@Override
- public ListenableFuture<? extends DOMRpcResult> invokeRpc(final QName type, final NormalizedNode input) {
+ public ListenableFuture<? extends DOMRpcResult> invokeRpc(final QName type, final ContainerNode input) {
final AbstractDOMRpcRoutingTableEntry entry = (AbstractDOMRpcRoutingTableEntry) routingTable.getEntry(type);
if (entry == null) {
return Futures.immediateFailedFuture(
}
static ListenableFuture<? extends DOMRpcResult> invoke(final AbstractDOMRpcRoutingTableEntry entry,
- final NormalizedNode input) {
+ final ContainerNode input) {
if (entry instanceof UnknownDOMRpcRoutingTableEntry) {
return Futures.immediateFailedFuture(
new DOMRpcImplementationNotAvailableException("%s is not resolved to an RPC", entry.getType()));
}
private static ListenableFuture<? extends DOMRpcResult> invokeRoutedRpc(
- final RoutedDOMRpcRoutingTableEntry entry, final NormalizedNode input) {
+ final RoutedDOMRpcRoutingTableEntry entry, final ContainerNode input) {
final Optional<NormalizedNode> maybeKey = NormalizedNodes.findNode(input,
entry.getRpcId().getContextReference());
}
private static ListenableFuture<? extends DOMRpcResult> invokeGlobalRpc(
- final GlobalDOMRpcRoutingTableEntry entry, final NormalizedNode input) {
+ final GlobalDOMRpcRoutingTableEntry entry, final ContainerNode input) {
return entry.getImplementations(YangInstanceIdentifier.empty()).get(0).invokeRpc(entry.getRpcId(), input);
}
}
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
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.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.RpcDefinition;
entry = entry.newInstance(map);
}
- private void assertRpcAvailable(final NormalizedNode input) {
+ private void assertRpcAvailable(final ContainerNode input) {
doReturn(Futures.immediateFuture(result)).when(impl).invokeRpc(any(), any());
final var future = OperationInvocation.invoke(entry, input);
verify(impl).invokeRpc(any(), any());
}
- private void assertRpcUnavailable(final NormalizedNode input) {
+ private void assertRpcUnavailable(final ContainerNode input) {
final var future = OperationInvocation.invoke(entry, input);
final var cause = assertThrows(ExecutionException.class, () -> Futures.getDone(future)).getCause();
assertThat(cause, instanceOf(DOMRpcImplementationNotAvailableException.class));
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
import org.opendaylight.yangtools.yang.data.api.schema.MapNode;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableMapEntryNodeBuilder;
final class TestUtils {
-
private static final MapNode OUTER_LIST = ImmutableNodes.mapNodeBuilder(TestModel.OUTER_LIST_QNAME)
- .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1)).build();
+ .withChild(ImmutableNodes.mapEntry(TestModel.OUTER_LIST_QNAME, TestModel.ID_QNAME, 1))
+ .build();
private static final String TOP_LEVEL_LIST_FOO_KEY_VALUE = "foo";
private static final QName TOP_QNAME = TestModel.ID_QNAME;
private static final QName TOP_LEVEL_LIST_KEY_QNAME = QName.create(TOP_QNAME, "name");
private static final MapEntryNode TOP_LEVEL_LIST_NODE = ImmutableMapEntryNodeBuilder.create()
- .withNodeIdentifier(
- NodeIdentifierWithPredicates.of(
- TOP_LEVEL_LIST_QNAME, TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE))
- .withChild(leafNode(TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE))
- .build();
+ .withNodeIdentifier(NodeIdentifierWithPredicates.of(
+ TOP_LEVEL_LIST_QNAME, TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE))
+ .withChild(leafNode(TOP_LEVEL_LIST_KEY_QNAME, TOP_LEVEL_LIST_FOO_KEY_VALUE))
+ .build();
private static final MapNode CHILD_LIST = ImmutableNodes.mapNodeBuilder(TestModel.TEST_QNAME)
- .withNodeIdentifier(NodeIdentifier.create(TestModel.TEST_QNAME))
- .withChild(TOP_LEVEL_LIST_NODE)
- .build();
+ .withNodeIdentifier(NodeIdentifier.create(TestModel.TEST_QNAME))
+ .withChild(TOP_LEVEL_LIST_NODE)
+ .build();
- static final NormalizedNode TEST_CONTAINER = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME))
- .withChild(OUTER_LIST)
- .build();
+ static final ContainerNode TEST_CONTAINER = Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME))
+ .withChild(OUTER_LIST)
+ .build();
- static final NormalizedNode TEST_CHILD = Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME))
- .withChild(CHILD_LIST)
- .build();
+ static final ContainerNode TEST_CHILD = Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(TestModel.TEST_QNAME))
+ .withChild(CHILD_LIST)
+ .build();
static final String EXCEPTION_TEXT = "TestRpcImplementationException";
}
@Override
- public FluentFuture<DOMRpcResult> invokeRpc(final DOMRpcIdentifier rpc, final NormalizedNode input) {
+ public FluentFuture<DOMRpcResult> invokeRpc(final DOMRpcIdentifier rpc, final ContainerNode input) {
requireNonNull(input);
return unknownRpc;
}
import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
import org.opendaylight.mdsal.dom.api.DOMRpcImplementation;
import org.opendaylight.mdsal.dom.api.DOMRpcResult;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
/**
* Utility implementation which implements {@link DOMRpcImplementation} by forwarding it to
protected abstract @NonNull DOMRpcImplementation delegate();
@Override
- public ListenableFuture<? extends DOMRpcResult> invokeRpc(final DOMRpcIdentifier type, final NormalizedNode input) {
+ public ListenableFuture<? extends DOMRpcResult> invokeRpc(final DOMRpcIdentifier type, final ContainerNode input) {
return delegate().invokeRpc(type, input);
}
}
import org.opendaylight.mdsal.dom.api.DOMRpcService;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
/**
* Utility {@link DOMRpcService} which forwards all requests to a backing delegate instance.
protected abstract @NonNull DOMRpcService delegate();
@Override
- public ListenableFuture<? extends DOMRpcResult> invokeRpc(final QName type, final NormalizedNode input) {
+ public ListenableFuture<? extends DOMRpcResult> invokeRpc(final QName type, final ContainerNode input) {
return delegate().invokeRpc(type, input);
}