X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-remoterpc-connector%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fremote%2Frpc%2FRpcListener.java;h=20f32cb0da4a4a26a625c1ae901d90ea34016ca3;hp=28ff1523cbb676c5bf47d6180d96c9e7f1304230;hb=a2b838f96589b502578fa4e15cef2769f886a378;hpb=1e884647502a8d91f8a57bde8193c60b9bbcce0d diff --git a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcListener.java b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcListener.java index 28ff1523cb..20f32cb0da 100644 --- a/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcListener.java +++ b/opendaylight/md-sal/sal-remoterpc-connector/src/main/java/org/opendaylight/controller/remote/rpc/RpcListener.java @@ -5,60 +5,54 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.remote.rpc; +import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; import akka.actor.ActorRef; -import com.google.common.base.Preconditions; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcAvailabilityListener; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier; import org.opendaylight.controller.remote.rpc.registry.RpcRegistry; -import org.opendaylight.controller.sal.connector.api.RpcRouter; +import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.Messages.AddOrUpdateRoutes; +import org.opendaylight.controller.remote.rpc.registry.RpcRegistry.Messages.RemoveRoutes; +import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener; +import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier; +import org.opendaylight.mdsal.dom.api.DOMRpcImplementation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class RpcListener implements DOMRpcAvailabilityListener{ +/** + * A {@link DOMRpcAvailabilityListener} reacting to RPC implementations different than {@link RemoteRpcImplementation}. + * The knowledge of such implementations is forwarded to {@link RpcRegistry}, which is responsible for advertising + * their presence to other nodes. + */ +final class RpcListener implements DOMRpcAvailabilityListener { + private static final Logger LOG = LoggerFactory.getLogger(RpcListener.class); + + private final ActorRef rpcRegistry; - private static final Logger LOG = LoggerFactory.getLogger(RpcListener.class); - private final ActorRef rpcRegistry; + RpcListener(final ActorRef rpcRegistry) { + this.rpcRegistry = requireNonNull(rpcRegistry); + } - public RpcListener(final ActorRef rpcRegistry) { - this.rpcRegistry = rpcRegistry; - } + @Override + public void onRpcAvailable(final Collection rpcs) { + checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); + LOG.debug("Adding registration for [{}]", rpcs); + + rpcRegistry.tell(new AddOrUpdateRoutes(rpcs), ActorRef.noSender()); + } @Override - public void onRpcAvailable(@Nonnull final Collection rpcs) { - Preconditions.checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); - if (LOG.isDebugEnabled()) { - LOG.debug("Adding registration for [{}]", rpcs); - } - final List> routeIds = new ArrayList<>(); + public void onRpcUnavailable(final Collection rpcs) { + checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); - for (final DOMRpcIdentifier rpc : rpcs) { - final RpcRouter.RouteIdentifier routeId = new RouteIdentifierImpl(null, rpc.getType().getLastComponent(), null); - routeIds.add(routeId); - } - final RpcRegistry.Messages.AddOrUpdateRoutes addRpcMsg = new RpcRegistry.Messages.AddOrUpdateRoutes(routeIds); - rpcRegistry.tell(addRpcMsg, ActorRef.noSender()); + LOG.debug("Removing registration for [{}]", rpcs); + rpcRegistry.tell(new RemoveRoutes(rpcs), ActorRef.noSender()); } @Override - public void onRpcUnavailable(@Nonnull final Collection rpcs) { - Preconditions.checkArgument(rpcs != null, "Input Collection of DOMRpcIdentifier can not be null."); - if(LOG.isDebugEnabled()) { - LOG.debug("Removing registration for [{}]", rpcs); - } - final List> routeIds = new ArrayList<>(); - for (final DOMRpcIdentifier rpc : rpcs) { - final RpcRouter.RouteIdentifier routeId = new RouteIdentifierImpl(null, rpc.getType().getLastComponent(), null); - routeIds.add(routeId); - } - final RpcRegistry.Messages.RemoveRoutes removeRpcMsg = new RpcRegistry.Messages.RemoveRoutes(routeIds); - rpcRegistry.tell(removeRpcMsg, ActorRef.noSender()); + public boolean acceptsImplementation(final DOMRpcImplementation impl) { + return !(impl instanceof RemoteRpcImplementation); } }