X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fbroker%2Fimpl%2FRoutedDOMRpcRoutingTableEntry.java;h=1225aa1308d80a590185b538c135d178412186dc;hb=refs%2Fchanges%2F00%2F84600%2F3;hp=e6df966f369a55e391d686646804e91891b584cb;hpb=3927509ec3ecfa32a51b725d2b7155d425f5b877;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java index e6df966f36..1225aa1308 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/broker/impl/RoutedDOMRpcRoutingTableEntry.java @@ -7,12 +7,13 @@ */ package org.opendaylight.controller.md.sal.dom.broker.impl; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + import com.google.common.util.concurrent.CheckedFuture; import com.google.common.util.concurrent.Futures; import java.util.List; import java.util.Map; +import java.util.Optional; import org.opendaylight.controller.md.sal.dom.api.DOMRpcException; import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier; import org.opendaylight.controller.md.sal.dom.api.DOMRpcImplementation; @@ -25,20 +26,23 @@ import org.opendaylight.yangtools.yang.model.api.RpcDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Deprecated final class RoutedDOMRpcRoutingTableEntry extends AbstractDOMRpcRoutingTableEntry { private static final Logger LOG = LoggerFactory.getLogger(RoutedDOMRpcRoutingTableEntry.class); private final DOMRpcIdentifier globalRpcId; private final YangInstanceIdentifier keyId; - private RoutedDOMRpcRoutingTableEntry(final DOMRpcIdentifier globalRpcId, final YangInstanceIdentifier keyId, final Map> impls) { + private RoutedDOMRpcRoutingTableEntry(final DOMRpcIdentifier globalRpcId, final YangInstanceIdentifier keyId, + final Map> impls) { super(globalRpcId.getType(), impls); - this.keyId = Preconditions.checkNotNull(keyId); - this.globalRpcId = Preconditions.checkNotNull(globalRpcId); + this.keyId = requireNonNull(keyId); + this.globalRpcId = requireNonNull(globalRpcId); } - RoutedDOMRpcRoutingTableEntry(final RpcDefinition def, final YangInstanceIdentifier keyId, final Map> impls) { + RoutedDOMRpcRoutingTableEntry(final RpcDefinition def, final YangInstanceIdentifier keyId, + final Map> impls) { super(def.getPath(), impls); - this.keyId = Preconditions.checkNotNull(keyId); + this.keyId = requireNonNull(keyId); this.globalRpcId = DOMRpcIdentifier.create(def.getPath()); } @@ -52,11 +56,23 @@ final class RoutedDOMRpcRoutingTableEntry extends AbstractDOMRpcRoutingTableEntr final Object value = key.getValue(); if (value instanceof YangInstanceIdentifier) { final YangInstanceIdentifier iid = (YangInstanceIdentifier) value; - final List impls = getImplementations(iid); - if (impls != null) { - return impls.get(0).invokeRpc(DOMRpcIdentifier.create(getSchemaPath(), iid), input); + + // Find a DOMRpcImplementation for a specific iid + final List specificImpls = getImplementations(iid); + if (specificImpls != null) { + return specificImpls.get(0).invokeRpc(DOMRpcIdentifier.create(getSchemaPath(), iid), input); } - LOG.debug("No implementation for context {} found", iid); + + 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 mayBeRemoteImpls = getImplementations(YangInstanceIdentifier.empty()); + + if (mayBeRemoteImpls != null) { + return mayBeRemoteImpls.get(0).invokeRpc(DOMRpcIdentifier.create(getSchemaPath(), iid), input); + } + } else { LOG.warn("Ignoring wrong context value {}", value); } @@ -66,12 +82,15 @@ final class RoutedDOMRpcRoutingTableEntry extends AbstractDOMRpcRoutingTableEntr if (impls != null) { return impls.get(0).invokeRpc(globalRpcId, input); } else { - return Futures.immediateFailedCheckedFuture(new DOMRpcImplementationNotAvailableException("No implementation of RPC %s available", getSchemaPath())); + return Futures.immediateFailedCheckedFuture( + new DOMRpcImplementationNotAvailableException("No implementation of RPC %s available", + getSchemaPath())); } } @Override - protected RoutedDOMRpcRoutingTableEntry newInstance(final Map> impls) { + protected RoutedDOMRpcRoutingTableEntry newInstance( + final Map> impls) { return new RoutedDOMRpcRoutingTableEntry(globalRpcId, keyId, impls); } -} \ No newline at end of file +}