<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>
*/
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;
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;
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
}
@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();
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);
}
--- /dev/null
+/*
+ * 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();
+ }
+}
+++ /dev/null
-<?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>