Bump upstreams
[bgpcep.git] / data-change-counter / src / main / java / org / opendaylight / protocol / data / change / counter / TopologyDataChangeCounterDeployer.java
index 2ae8da05018aa1be7f7c6ceaa09c91b19203e1dc..0583d5bb2e122a41bc0357e6c44bcd10afa33ab7 100644 (file)
@@ -9,84 +9,96 @@ package org.opendaylight.protocol.data.change.counter;
 
 import static java.util.Objects.requireNonNull;
 
-import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import javax.annotation.Nonnull;
-import javax.annotation.concurrent.GuardedBy;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.eclipse.jdt.annotation.NonNull;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+import org.opendaylight.mdsal.binding.api.DataTreeChangeListener;
+import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
+import org.opendaylight.mdsal.binding.api.DataTreeModification;
+import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgpcep.data.change.counter.config.rev170424.DataChangeCounterConfig;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.concepts.Registration;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class TopologyDataChangeCounterDeployer implements DataTreeChangeListener<DataChangeCounterConfig>,
-    AutoCloseable {
+@Singleton
+@Component(service = { })
+public final class TopologyDataChangeCounterDeployer implements DataTreeChangeListener<DataChangeCounterConfig>,
+        AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(TopologyDataChangeCounterDeployer.class);
     private static final InstanceIdentifier<DataChangeCounterConfig> DATA_CHANGE_COUNTER_IID =
-        InstanceIdentifier.builder(DataChangeCounterConfig.class).build();
-    private final DataBroker dataBroker;
+            InstanceIdentifier.builder(DataChangeCounterConfig.class).build();
+
+    private final @NonNull DataBroker dataBroker;
     @GuardedBy("this")
     private final Map<String, TopologyDataChangeCounter> counters = new HashMap<>();
-    private ListenerRegistration<TopologyDataChangeCounterDeployer> registration;
+    @GuardedBy("this")
+    private Registration registration;
 
-    public TopologyDataChangeCounterDeployer(final DataBroker dataBroker) {
+    @Inject
+    @Activate
+    public TopologyDataChangeCounterDeployer(@Reference final DataBroker dataBroker) {
         this.dataBroker = requireNonNull(dataBroker);
+        registration = dataBroker.registerTreeChangeListener(
+            DataTreeIdentifier.of(LogicalDatastoreType.CONFIGURATION, DATA_CHANGE_COUNTER_IID), this);
+        LOG.info("Data change counter Deployer started");
     }
 
-    public synchronized void register() {
-        this.registration = this.dataBroker.registerDataTreeChangeListener(
-            new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, DATA_CHANGE_COUNTER_IID), this);
-        LOG.info("Data change counter Deployer initiated");
+    @Deactivate
+    @PreDestroy
+    @Override
+    public synchronized void close() {
+        if (registration != null) {
+            registration.close();
+            registration = null;
+        }
+        counters.values().forEach(TopologyDataChangeCounter::close);
+        counters.clear();
+        LOG.info("Data change counter Deployer stopped");
     }
 
-
     @Override
-    public synchronized void onDataTreeChanged(@Nonnull final Collection<DataTreeModification<DataChangeCounterConfig>> changes) {
-        for (final DataTreeModification<DataChangeCounterConfig> dataTreeModification : changes) {
-            final DataObjectModification<DataChangeCounterConfig> rootNode = dataTreeModification.getRootNode();
-            switch (dataTreeModification.getRootNode().getModificationType()) {
+    public synchronized void onDataTreeChanged(final List<DataTreeModification<DataChangeCounterConfig>> changes) {
+        for (var change : changes) {
+            final var rootNode = change.getRootNode();
+            switch (rootNode.modificationType()) {
                 case DELETE:
-                    deleteCounterChange(rootNode.getDataBefore().getCounterId());
+                    deleteCounterChange(rootNode.dataBefore().getCounterId());
                     break;
                 case SUBTREE_MODIFIED:
                 case WRITE:
-                    final DataChangeCounterConfig change = rootNode.getDataAfter();
-                    chandleCounterChange(change.getCounterId(), change.getTopologyName());
+                    final var counterConfig = rootNode.dataAfter();
+                    handleCounterChange(counterConfig.getCounterId(), counterConfig.getTopologyName());
+                    break;
+                default:
+                    LOG.error("Unhandled modification Type: {}", rootNode.modificationType());
                     break;
             }
         }
     }
 
-    public synchronized void deleteCounterChange(final String counterId) {
-        final TopologyDataChangeCounter oldCounter = this.counters.remove(counterId);
+    private synchronized void deleteCounterChange(final String counterId) {
+        final var oldCounter = counters.remove(counterId);
         if (oldCounter != null) {
             LOG.info("Data change counter Deployer deleted: {}", counterId);
             oldCounter.close();
         }
     }
 
-    public synchronized void chandleCounterChange(final String counterId, final String topologyName) {
+    private synchronized void handleCounterChange(final String counterId, final String topologyName) {
         deleteCounterChange(counterId);
         LOG.info("Data change counter Deployer created: {} / {}", counterId, topologyName);
-
-        final TopologyDataChangeCounter counter = new TopologyDataChangeCounter(this.dataBroker, counterId, topologyName);
-        this.counters.put(counterId, counter);
-    }
-
-    @Override
-    public synchronized void close() throws Exception {
-        LOG.info("Closing Data change counter Deployer");
-
-        if (this.registration != null) {
-            this.registration.close();
-            this.registration = null;
-        }
+        counters.put(counterId, new TopologyDataChangeCounter(dataBroker, counterId, topologyName));
     }
 }