X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=packetcable-policy-server%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fpacketcable%2Fprovider%2FPacketcableProvider.java;h=87f54000ee597809a522f13eefea3b1a6ad0ad87;hb=refs%2Fchanges%2F06%2F24406%2F3;hp=6f68360d5b2459e3af00a86d8a5845e1fd259956;hpb=d1183db825887a4388827863935ab2701ff20c75;p=packetcable.git diff --git a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PacketcableProvider.java b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PacketcableProvider.java index 6f68360..87f5400 100644 --- a/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PacketcableProvider.java +++ b/packetcable-policy-server/src/main/java/org/opendaylight/controller/packetcable/provider/PacketcableProvider.java @@ -1,10 +1,26 @@ package org.opendaylight.controller.packetcable.provider; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import javax.annotation.concurrent.ThreadSafe; + import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.AsyncReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; +import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix; import org.opendaylight.yang.gen.v1.urn.packetcable.rev150327.Ccap; @@ -19,21 +35,16 @@ import org.opendaylight.yang.gen.v1.urn.packetcable.rev150327.pcmm.qos.gates.app import org.opendaylight.yang.gen.v1.urn.packetcable.rev150327.pcmm.qos.gates.apps.SubsKey; import org.opendaylight.yang.gen.v1.urn.packetcable.rev150327.pcmm.qos.gates.apps.subs.Gates; import org.opendaylight.yang.gen.v1.urn.packetcable.rev150327.pcmm.qos.gates.apps.subs.GatesKey; +import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.osgi.framework.BundleContext; +import org.osgi.framework.FrameworkUtil; +import org.osgi.framework.ServiceRegistration; import org.pcmm.rcd.IPCMMClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.concurrent.ThreadSafe; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - /** * Called by ODL framework to start this bundle. * @@ -41,7 +52,7 @@ import java.util.concurrent.Executors; * TODO - Remove some of these state maps and move some of this into the PCMMService */ @ThreadSafe -public class PacketcableProvider implements DataChangeListener, AutoCloseable { +public class PacketcableProvider implements BindingAwareProvider, DataChangeListener, AutoCloseable { private static final Logger logger = LoggerFactory.getLogger(PacketcableProvider.class); @@ -52,7 +63,12 @@ public class PacketcableProvider implements DataChangeListener, AutoCloseable { /** * The ODL object used to broker messages throughout the framework */ - private final DataBroker dataBroker; + private DataBroker dataBroker; + + private ServiceRegistration packetcableProviderRegistration; + + private ListenerRegistration ccapDataChangeListenerRegistration; + private ListenerRegistration qosDataChangeListenerRegistration; /** * The thread pool executor @@ -75,18 +91,44 @@ public class PacketcableProvider implements DataChangeListener, AutoCloseable { /** * Constructor */ - public PacketcableProvider(final DataBroker dataBroker) { + public PacketcableProvider() { logger.info("Starting provider"); - this.dataBroker = dataBroker; executor = Executors.newCachedThreadPool(); } + @Override + public void onSessionInitiated(ProviderContext session) { + logger.info("Packetcable Session Initiated"); + + dataBroker = session.getSALService(DataBroker.class); + + BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); + packetcableProviderRegistration = context.registerService(PacketcableProvider.class, this, null); + + ccapDataChangeListenerRegistration = + dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + PacketcableProvider.ccapIID, this, DataBroker.DataChangeScope.SUBTREE ); + + qosDataChangeListenerRegistration = + dataBroker.registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, + PacketcableProvider.qosIID, this, DataBroker.DataChangeScope.SUBTREE ); + } /** * Implemented from the AutoCloseable interface. */ @Override public void close() throws ExecutionException, InterruptedException { executor.shutdown(); + if (packetcableProviderRegistration != null) { + packetcableProviderRegistration.unregister(); + } + if (ccapDataChangeListenerRegistration != null) { + ccapDataChangeListenerRegistration.close(); + } + + if (qosDataChangeListenerRegistration != null) { + qosDataChangeListenerRegistration.close(); + } } public InetAddress getInetAddress(final String subId){ @@ -484,5 +526,4 @@ public class PacketcableProvider implements DataChangeListener, AutoCloseable { } } } - }