X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FBrokerImpl.java;h=c15582e95393ee00a81b5b0f9b8432f564fb395c;hp=e4bd0343cfcf62999d3becca52177eaf8d366bcd;hb=3b144c5e66f5e4d14ec881fb553d118e53efd82a;hpb=a7c406fb9bde71ea847cf4f132650ff4c1ef1449 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java index e4bd0343cf..c15582e953 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/BrokerImpl.java @@ -7,9 +7,6 @@ */ package org.opendaylight.controller.sal.dom.broker; -import com.google.common.base.Preconditions; -import com.google.common.util.concurrent.ListenableFuture; - import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -17,22 +14,29 @@ import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.common.api.routing.RouteChangeListener; import org.opendaylight.controller.sal.core.api.Broker; +import org.opendaylight.controller.sal.core.api.BrokerService; import org.opendaylight.controller.sal.core.api.Consumer; import org.opendaylight.controller.sal.core.api.Provider; +import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation; +import org.opendaylight.controller.sal.core.api.RpcImplementation; +import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; +import org.opendaylight.controller.sal.core.api.RpcRegistrationListener; +import org.opendaylight.controller.sal.core.api.RpcRoutingContext; +import org.opendaylight.controller.sal.dom.broker.spi.RpcRouter; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.CompositeNode; +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.osgi.framework.BundleContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.opendaylight.controller.sal.dom.broker.spi.RpcRouter; -import org.opendaylight.controller.sal.core.api.RpcRegistrationListener; -import org.opendaylight.controller.sal.core.api.RpcProvisionRegistry; -import org.opendaylight.controller.sal.core.api.RpcImplementation; -import org.opendaylight.controller.sal.core.api.RpcRoutingContext; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.controller.sal.core.api.RoutedRpcDefaultImplementation; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.ClassToInstanceMap; +import com.google.common.collect.ImmutableClassToInstanceMap; +import com.google.common.util.concurrent.ListenableFuture; public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { private final static Logger log = LoggerFactory.getLogger(BrokerImpl.class); @@ -43,12 +47,18 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { private final Set providerSessions = Collections .synchronizedSet(new HashSet()); - private BundleContext bundleContext = null; - private AutoCloseable deactivator = null; private RpcRouter router = null; + private final ClassToInstanceMap services; + + public BrokerImpl(final RpcRouter router,final ClassToInstanceMap services) { + this.router = Preconditions.checkNotNull(router, "RPC Router must not be null"); + this.services = ImmutableClassToInstanceMap.copyOf(services); + } + + @Override public ConsumerSession registerConsumer(final Consumer consumer, final BundleContext ctx) { @@ -79,8 +89,9 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { private void checkPredicates(final Provider prov) { Preconditions.checkNotNull(prov, "Provider should not be null."); for (ProviderContextImpl session : providerSessions) { - if (prov.equals(session.getProvider())) + if (prov.equals(session.getProvider())) { throw new IllegalStateException("Provider already registered"); + } } } @@ -88,23 +99,22 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { private void checkPredicates(final Consumer cons) { Preconditions.checkNotNull(cons, "Consumer should not be null."); for (ConsumerContextImpl session : sessions) { - if (cons.equals(session.getConsumer())) + if (cons.equals(session.getConsumer())) { throw new IllegalStateException("Consumer already registered"); + } } } // Private Factory methods private ConsumerContextImpl newSessionFor(final Consumer provider, final BundleContext ctx) { - ConsumerContextImpl ret = new ConsumerContextImpl(provider, ctx); - ret.setBroker(this); + ConsumerContextImpl ret = new ConsumerContextImpl(provider, this); return ret; } private ProviderContextImpl newSessionFor(final Provider provider, final BundleContext ctx) { - ProviderContextImpl ret = new ProviderContextImpl(provider, ctx); - ret.setBroker(this); + ProviderContextImpl ret = new ProviderContextImpl(provider, this); return ret; } @@ -164,21 +174,6 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { return router.invokeRpc(rpc, input); } - /** - * @return the bundleContext - */ - public BundleContext getBundleContext() { - return bundleContext; - } - - /** - * @param bundleContext - * the bundleContext to set - */ - public void setBundleContext(final BundleContext bundleContext) { - this.bundleContext = bundleContext; - } - /** * @return the deactivator */ @@ -208,4 +203,21 @@ public class BrokerImpl implements Broker, RpcProvisionRegistry, AutoCloseable { public void setRouter(final RpcRouter router) { this.router = router; } + + protected Optional getGlobalService(final Class service) { + return Optional.fromNullable(services.getInstance(service)); + } + + + @Override + public ConsumerSession registerConsumer(Consumer cons) { + return registerConsumer(cons,null); + } + + + @Override + public ProviderSession registerProvider(Provider prov) { + return registerProvider(prov,null); + } + }