Convert mdsal-eos-binding-adapter to OSGi DS 98/91798/3
authorRobert Varga <robert.varga@pantheon.tech>
Fri, 31 Jul 2020 12:00:34 +0000 (14:00 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 31 Jul 2020 13:47:25 +0000 (15:47 +0200)
This is very simple component, use OSGi DS to activate it. This
exposes our inability to test it, hence disable the corresponding
feature. That test was incomplete due to us relying on ODL blueprint
namespace, which was missing anyway.

JIRA: MDSAL-524
Change-Id: I06ad20c47ee357732d084389ada15b05d5a63b34
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
entityownership/mdsal-eos-binding-adapter/pom.xml
entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/BindingDOMEntityOwnershipServiceAdapter.java
entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/OSGiEntityOwnershipService.java [new file with mode: 0644]
entityownership/mdsal-eos-binding-adapter/src/main/resources/org/opendaylight/blueprint/eos-binding.xml [deleted file]
features/odl-mdsal-eos-binding/pom.xml

index 1771390d2afb812cbb9ea655187aa2f7fbabd097..24f4451a0acce87c0ef7ca40c4c53e9925d92b04 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-common</artifactId>
         </dependency>
+        <dependency>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <scope>provided</scope>
+            <optional>true</optional>
+        </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
+            <artifactId>osgi.cmpn</artifactId>
         </dependency>
 
         <dependency>
index 3c696b122f0e6abab4aa9b6283883b37ea262ffe..605276661c7f8453e1f108f3fb2c02e5d0ca1ee4 100644 (file)
@@ -10,6 +10,8 @@ package org.opendaylight.mdsal.eos.binding.dom.adapter;
 import static java.util.Objects.requireNonNull;
 
 import java.util.Optional;
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import org.eclipse.jdt.annotation.NonNull;
 import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
 import org.opendaylight.mdsal.eos.binding.api.Entity;
@@ -27,10 +29,12 @@ import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
  *
  * @author Thomas Pantelis
  */
+@Singleton
 public class BindingDOMEntityOwnershipServiceAdapter implements EntityOwnershipService, AutoCloseable {
     private final @NonNull DOMEntityOwnershipService domService;
     private final @NonNull AdapterContext adapterContext;
 
+    @Inject
     public BindingDOMEntityOwnershipServiceAdapter(final @NonNull DOMEntityOwnershipService domService,
             final @NonNull AdapterContext adapterContext) {
         this.domService = requireNonNull(domService);
diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/OSGiEntityOwnershipService.java b/entityownership/mdsal-eos-binding-adapter/src/main/java/org/opendaylight/mdsal/eos/binding/dom/adapter/OSGiEntityOwnershipService.java
new file mode 100644 (file)
index 0000000..3746d80
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * 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.mdsal.eos.binding.dom.adapter;
+
+import com.google.common.annotations.Beta;
+import java.util.Optional;
+import org.opendaylight.mdsal.binding.dom.adapter.AdapterContext;
+import org.opendaylight.mdsal.eos.binding.api.Entity;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipCandidateRegistration;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListener;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipListenerRegistration;
+import org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService;
+import org.opendaylight.mdsal.eos.common.api.CandidateAlreadyRegisteredException;
+import org.opendaylight.mdsal.eos.common.api.EntityOwnershipState;
+import org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService;
+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;
+
+@Beta
+@Component(immediate = true, property = "type=default")
+public final class OSGiEntityOwnershipService implements EntityOwnershipService {
+    private static final Logger LOG = LoggerFactory.getLogger(OSGiEntityOwnershipService.class);
+
+    @Reference
+    DOMEntityOwnershipService domService = null;
+    @Reference
+    AdapterContext adapterContext = null;
+
+    private BindingDOMEntityOwnershipServiceAdapter delegate;
+
+    @Override
+    public EntityOwnershipCandidateRegistration registerCandidate(final Entity entity)
+            throws CandidateAlreadyRegisteredException {
+        return delegate.registerCandidate(entity);
+    }
+
+    @Override
+    public EntityOwnershipListenerRegistration registerListener(final String entityType,
+            final EntityOwnershipListener listener) {
+        return delegate.registerListener(entityType, listener);
+    }
+
+    @Override
+    public Optional<EntityOwnershipState> getOwnershipState(final Entity forEntity) {
+        return delegate.getOwnershipState(forEntity);
+    }
+
+    @Override
+    public boolean isCandidateRegistered(final Entity forEntity) {
+        return delegate.isCandidateRegistered(forEntity);
+    }
+
+    @Activate
+    void activate() {
+        LOG.info("Entity Ownership Service adapter starting");
+        delegate = new BindingDOMEntityOwnershipServiceAdapter(domService, adapterContext);
+        LOG.info("Entity Ownership Service adapter started");
+    }
+
+    @Deactivate
+    void deactivate() {
+        LOG.info("Entity Ownership Service adapter stopping");
+        delegate.close();
+        delegate = null;
+        LOG.info("Entity Ownership Service adapter stopped");
+
+    }
+}
diff --git a/entityownership/mdsal-eos-binding-adapter/src/main/resources/org/opendaylight/blueprint/eos-binding.xml b/entityownership/mdsal-eos-binding-adapter/src/main/resources/org/opendaylight/blueprint/eos-binding.xml
deleted file mode 100644 (file)
index bb1937b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0">
-
-  <!-- Binding EntityOwnershipService -->
-
-  <reference id="domEntityOwnershipService" interface="org.opendaylight.mdsal.eos.dom.api.DOMEntityOwnershipService"/>
-
-  <reference id="conversionCodec" interface="org.opendaylight.mdsal.binding.dom.adapter.AdapterContext"/>
-
-  <bean id="bindingEntityOwnershipService" class="org.opendaylight.mdsal.eos.binding.dom.adapter.BindingDOMEntityOwnershipServiceAdapter"
-          destroy-method="close">
-    <argument ref="domEntityOwnershipService"/>
-    <argument ref="conversionCodec"/>
-  </bean>
-
-  <service ref="bindingEntityOwnershipService" interface="org.opendaylight.mdsal.eos.binding.api.EntityOwnershipService"
-        odl:type="default"/>
-</blueprint>
index 589be2ff9da8c06730cfa576151a73db6235bf24..a4f3cf7a27d7fcd73efdfa75dc6d8b6d6686f2dc 100644 (file)
     <name>OpenDaylight :: MD-SAL :: EOS :: Binding</name>
     <description>Entity Ownership Service Binding support</description>
 
+    <properties>
+        <!-- FIXME: remove this once we can plug in a testing dependency -->
+        <skip.karaf.featureTest>true</skip.karaf.featureTest>
+    </properties>
+
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.mdsal</groupId>