Remove blueprint from topology-config-loader 31/93131/11
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 17 Oct 2020 04:11:13 +0000 (06:11 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 26 Oct 2020 13:20:06 +0000 (14:20 +0100)
This is a straight conversion from blueprint to OSGi DS/inject.

JIRA: BGPCEP-929
Change-Id: Ie098c51808c8a4aa11357605f3f802894152f6f3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
config-loader/topology-config-loader/pom.xml
config-loader/topology-config-loader/src/main/java/org/opendaylight/bgpcep/config/loader/topology/NetworkTopologyConfigFileProcessor.java
config-loader/topology-config-loader/src/main/java/org/opendaylight/bgpcep/config/loader/topology/OSGiOpenconfigConfigFileProcessor.java [new file with mode: 0644]
config-loader/topology-config-loader/src/main/resources/OSGI-INF/blueprint/topology-config-loader.xml [deleted file]

index b846227f776f89d333e101538f2776a6a998328d..4f27b9a123b9e4c6111f0559ca87dccea447d48d 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-model-api</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.opendaylight.yangtools</groupId>
-            <artifactId>concepts</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-data-api</artifactId>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.annotation</groupId>
+            <artifactId>javax.annotation-api</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
+
         <!-- test scope dependencies -->
         <dependency>
             <groupId>${project.groupId}</groupId>
index 170262b37d1bb178ed973c32da03c1c705d9c82d..b543ed226594a868c3df0cf12073ceca73b45a6c 100644 (file)
@@ -7,12 +7,14 @@
  */
 package org.opendaylight.bgpcep.config.loader.topology;
 
-import static java.util.Objects.requireNonNull;
-
 import java.util.Collection;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
-import org.opendaylight.bgpcep.config.loader.spi.ConfigFileProcessor;
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+import org.opendaylight.bgpcep.config.loader.spi.AbstractConfigFileProcessor;
 import org.opendaylight.bgpcep.config.loader.spi.ConfigLoader;
 import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.mdsal.binding.api.WriteTransaction;
@@ -21,7 +23,6 @@ import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yangtools.concepts.AbstractRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
@@ -34,38 +35,31 @@ import org.opendaylight.yangtools.yang.model.api.SchemaPath;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public final class NetworkTopologyConfigFileProcessor implements ConfigFileProcessor, AutoCloseable {
-
+@Singleton
+public final class NetworkTopologyConfigFileProcessor extends AbstractConfigFileProcessor {
     private static final Logger LOG = LoggerFactory.getLogger(NetworkTopologyConfigFileProcessor.class);
 
     private static final SchemaPath TOPOLOGY_SCHEMA_PATH = SchemaPath.create(true, NetworkTopology.QNAME);
-    private final BindingNormalizedNodeSerializer bindingSerializer;
-    private AbstractRegistration registration;
-    private final YangInstanceIdentifier topologyYii;
     private static final InstanceIdentifier<Topology> TOPOLOGY_IID =
             InstanceIdentifier.create(NetworkTopology.class).child(Topology.class);
-    private final DataBroker dataBroker;
-    private final ConfigLoader configLoader;
 
+    private final YangInstanceIdentifier topologyYii;
+
+    @Inject
     public NetworkTopologyConfigFileProcessor(final ConfigLoader configLoader, final DataBroker dataBroker) {
-        requireNonNull(configLoader);
-        this.dataBroker = requireNonNull(dataBroker);
-        this.configLoader = requireNonNull(configLoader);
-        this.bindingSerializer = configLoader.getBindingNormalizedNodeSerializer();
-        this.topologyYii = this.bindingSerializer.toYangInstanceIdentifier(TOPOLOGY_IID);
+        super("Network Topology", configLoader, dataBroker);
+        this.topologyYii = configLoader.getBindingNormalizedNodeSerializer().toYangInstanceIdentifier(TOPOLOGY_IID);
     }
 
-    public synchronized void init() {
-        this.registration = this.configLoader.registerConfigFile(this);
-        LOG.info("Network Topology Loader service initiated");
+    @PostConstruct
+    public void init() {
+        start();
     }
 
+    @PreDestroy
     @Override
-    public synchronized void close() {
-        if (this.registration != null) {
-            this.registration.close();
-            this.registration = null;
-        }
+    public void close() {
+        stop();
     }
 
     @Override
@@ -74,7 +68,8 @@ public final class NetworkTopologyConfigFileProcessor implements ConfigFileProce
     }
 
     @Override
-    public synchronized void loadConfiguration(final NormalizedNode<?, ?> dto) {
+    protected void loadConfiguration(final DataBroker dataBroker, final BindingNormalizedNodeSerializer serializer,
+            final NormalizedNode<?, ?> dto) {
         final ContainerNode networkTopologyContainer = (ContainerNode) dto;
         final MapNode topologyList = (MapNode) networkTopologyContainer.getChild(
                 this.topologyYii.getLastPathArgument()).get();
@@ -82,11 +77,11 @@ public final class NetworkTopologyConfigFileProcessor implements ConfigFileProce
         if (networkTopology.isEmpty()) {
             return;
         }
-        final WriteTransaction wtx = this.dataBroker.newWriteOnlyTransaction();
+        final WriteTransaction wtx = dataBroker.newWriteOnlyTransaction();
 
         for (final MapEntryNode topologyEntry : networkTopology) {
             final Map.Entry<InstanceIdentifier<?>, DataObject> bi =
-                    this.bindingSerializer.fromNormalizedNode(this.topologyYii, topologyEntry);
+                    serializer.fromNormalizedNode(topologyYii, topologyEntry);
             if (bi != null) {
                 processTopology((Topology) bi.getValue(), wtx);
             }
diff --git a/config-loader/topology-config-loader/src/main/java/org/opendaylight/bgpcep/config/loader/topology/OSGiOpenconfigConfigFileProcessor.java b/config-loader/topology-config-loader/src/main/java/org/opendaylight/bgpcep/config/loader/topology/OSGiOpenconfigConfigFileProcessor.java
new file mode 100644 (file)
index 0000000..5f4eba8
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. 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.bgpcep.config.loader.topology;
+
+import org.opendaylight.bgpcep.config.loader.spi.AbstractOSGiConfigFileProcessor;
+import org.opendaylight.bgpcep.config.loader.spi.ConfigLoader;
+import org.opendaylight.mdsal.binding.api.DataBroker;
+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;
+
+@Component(immediate = true)
+// FIXME: merge with NetworkTopologyConfigFileProcessor once we have constructor injection
+public final class OSGiOpenconfigConfigFileProcessor extends AbstractOSGiConfigFileProcessor {
+    @Reference
+    DataBroker dataBroker;
+    @Reference
+    ConfigLoader configLoader;
+
+    @Activate
+    void activate() {
+        start(new NetworkTopologyConfigFileProcessor(configLoader, dataBroker));
+    }
+
+    @Deactivate
+    void deactivate() {
+        stop();
+    }
+}
diff --git a/config-loader/topology-config-loader/src/main/resources/OSGI-INF/blueprint/topology-config-loader.xml b/config-loader/topology-config-loader/src/main/resources/OSGI-INF/blueprint/topology-config-loader.xml
deleted file mode 100644 (file)
index 3c86368..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ Copyright (c) 2017 AT&T Intellectual Property. 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
-  -->
-
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-    <reference id="dataBroker" interface="org.opendaylight.mdsal.binding.api.DataBroker"/>
-    <reference id="configLoader" interface="org.opendaylight.bgpcep.config.loader.spi.ConfigLoader"/>
-
-    <bean id="topologyConfigLoader"
-          class="org.opendaylight.bgpcep.config.loader.topology.NetworkTopologyConfigFileProcessor"
-          init-method="init"
-          destroy-method="close">
-        <argument ref="configLoader"/>
-        <argument ref="dataBroker"/>
-    </bean>
-</blueprint>