- return Futures.immediateFailedFuture(
- new DOMRpcImplementationNotAvailableException("Unsupported RPC entry."));
- }
-
- private static ListenableFuture<DOMRpcResult> invokeRoutedRpc(final RoutedDOMRpcRoutingTableEntry entry,
- final NormalizedNode<?, ?> input) {
- final Optional<NormalizedNode<?, ?>> maybeKey = NormalizedNodes.findNode(input,
- entry.getRpcId().getContextReference());
-
- // Routing key is present, attempt to deliver as a routed RPC
- if (maybeKey.isPresent()) {
- final NormalizedNode<?, ?> key = maybeKey.get();
- final Object value = key.getValue();
- if (value instanceof YangInstanceIdentifier) {
- final YangInstanceIdentifier iid = (YangInstanceIdentifier) value;
-
- // Find a DOMRpcImplementation for a specific iid
- final List<DOMRpcImplementation> specificImpls = entry.getImplementations(iid);
- if (specificImpls != null) {
- return specificImpls.get(0)
- .invokeRpc(DOMRpcIdentifier.create(entry.getType(), iid), input);
- }
-
- LOG.debug("No implementation for context {} found will now look for wildcard id", iid);
-
- // Find a DOMRpcImplementation for a wild card. Usually remote-rpc-connector would register an
- // implementation this way
- final List<DOMRpcImplementation> mayBeRemoteImpls =
- entry.getImplementations(YangInstanceIdentifier.empty());
-
- if (mayBeRemoteImpls != null) {
- return mayBeRemoteImpls.get(0)
- .invokeRpc(DOMRpcIdentifier.create(entry.getType(), iid), input);
- }
-
- } else {
- LOG.warn("Ignoring wrong context value {}", value);
- }
- }