X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-api%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fcore%2Fapi%2FAbstractConsumer.java;h=99a38ca43a5be68fd3c9bad328e20ab98d0578a4;hb=03abf047ba966c53f4901d36ae5198156d66dc05;hp=5e13aad49918ccf6c4e79a08f5411abd31066c10;hpb=2887eded48bd70a9e332e98530f23304ce153bc7;p=controller.git diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java index 5e13aad499..99a38ca43a 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/sal/core/api/AbstractConsumer.java @@ -1,3 +1,10 @@ +/* + * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * 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.sal.core.api; import java.util.Collection; @@ -6,35 +13,66 @@ import java.util.Collections; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceReference; +import org.osgi.util.tracker.ServiceTracker; +import org.osgi.util.tracker.ServiceTrackerCustomizer; -public abstract class AbstractConsumer implements Consumer, BundleActivator { +public abstract class AbstractConsumer implements Consumer, BundleActivator,ServiceTrackerCustomizer { + + + + + private BundleContext context; + private ServiceTracker tracker; + private Broker broker; - Broker broker; - ServiceReference brokerRef; @Override public final void start(BundleContext context) throws Exception { - brokerRef = context.getServiceReference(Broker.class); - broker = context.getService(brokerRef); - + this.context = context; this.startImpl(context); - - broker.registerConsumer(this,context); + tracker = new ServiceTracker<>(context, Broker.class, this); + tracker.open(); } - public abstract void startImpl(BundleContext context); + @Override public final void stop(BundleContext context) throws Exception { + stopImpl(context); broker = null; - if(brokerRef != null) { - context.ungetService(brokerRef); - } + tracker.close(); + } + + protected void startImpl(BundleContext context) { + // NOOP + } + protected void stopImpl(BundleContext context) { + // NOOP } - @Override public Collection getConsumerFunctionality() { return Collections.emptySet(); } + + @Override + public Broker addingService(ServiceReference reference) { + if(broker == null) { + broker = context.getService(reference); + broker.registerConsumer(this, context); + return broker; + } + + return null; + } + + @Override + public void modifiedService(ServiceReference reference, Broker service) { + // NOOP + } + + @Override + public void removedService(ServiceReference reference, Broker service) { + stopImpl(context); + } }