Convert aaa-filterchain to OSGi DS 98/91598/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 23 Jul 2020 20:42:29 +0000 (22:42 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 23 Jul 2020 20:44:47 +0000 (22:44 +0200)
Declarative services make things easier than hand-written blueprint.

Change-Id: Ib4d768c6bf6e2ebd15a6574e217d92e0c16c0f2b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
aaa-filterchain/pom.xml
aaa-filterchain/src/main/java/org/opendaylight/aaa/filterchain/configuration/impl/CustomFilterAdapterConfigurationImpl.java
aaa-filterchain/src/main/resources/OSGI-INF/blueprint/aaa-filterchain.xml [deleted file]
aaa-filterchain/src/test/java/org/opendaylight/aaa/filterchain/configuration/impl/CustomFilterAdapterConfigurationImplTest.java

index 1adf189f9f761447c8eed2396c0c38fafb45f01b..f3700f73a22201ab9e8e99c749aefb71e1225101 100644 (file)
   <packaging>bundle</packaging>
 
   <dependencies>
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.apache.felix.dependencymanager</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>osgi.cmpn</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>org.osgi.core</artifactId>
-    </dependency>
     <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
     </dependency>
-
-    <!-- Testing Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-core</artifactId>
-      <scope>test</scope>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.cmpn</artifactId>
     </dependency>
   </dependencies>
+
   <build>
     <plugins>
       <plugin>
index f19ac567a51f69aebed3f156b3d07f82b5db3a1b..9191ced463568c45242af0b0ff0aa4072784d66e 100644 (file)
@@ -31,12 +31,20 @@ import javax.servlet.ServletException;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration;
 import org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterListener;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+import org.osgi.service.component.annotations.ReferencePolicy;
+import org.osgi.service.component.annotations.ReferencePolicyOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
  * Implementation of CustomFilterAdapterConfiguration.
  */
+@Component(immediate = true, configurationPid = "org.opendaylight.aaa.filterchain")
 public final class CustomFilterAdapterConfigurationImpl implements CustomFilterAdapterConfiguration {
     private static final Logger LOG = LoggerFactory.getLogger(CustomFilterAdapterConfigurationImpl.class);
 
@@ -65,13 +73,12 @@ public final class CustomFilterAdapterConfigurationImpl implements CustomFilterA
 
     private volatile List<FilterDTO> instanceFilterDTOs = Collections.emptyList();
 
-    public CustomFilterAdapterConfigurationImpl(final Map<String, String> properties) {
+    @Activate
+    void activate(final Map<String, String> properties) {
         update(properties);
     }
 
-    public void close() {
-    }
-
+    @Modified
     // Invoked in response to configuration admin changes
     public void update(final Map<String, String> properties) {
         if (properties != null) {
@@ -83,26 +90,26 @@ public final class CustomFilterAdapterConfigurationImpl implements CustomFilterA
     }
 
     // Invoked when a Filter OSGi service is added
-    public void onFilterAdded(final Filter filter, final Map<String, String> properties) {
+    @Reference(cardinality = ReferenceCardinality.MULTIPLE,
+            policy = ReferencePolicy.DYNAMIC, policyOption = ReferencePolicyOption.GREEDY)
+    public void addFilter(final Filter filter) {
         if (filter == null) {
             return;
         }
 
         LOG.info("Custom Filter {} added", filter);
-
         this.instanceFilterDTOs = ImmutableList.<FilterDTO>builder().addAll(instanceFilterDTOs)
                 .add(FilterDTO.createFilterDTO(filter)).build();
         updateListeners();
     }
 
     // Invoked when a Filter OSGi service is removed
-    public void onFilterRemoved(final Filter filter, final Map<String, String> properties) {
+    public void removeFilter(final Filter filter) {
         if (filter == null) {
             return;
         }
 
         LOG.info("Custom Filter {} removed", filter);
-
         FilterDTO toRemove = FilterDTO.createFilterDTO(filter);
         this.instanceFilterDTOs = ImmutableList.copyOf(instanceFilterDTOs.stream().filter(dto -> !dto.equals(toRemove))
                 .collect(Collectors.toList()));
@@ -222,7 +229,7 @@ public final class CustomFilterAdapterConfigurationImpl implements CustomFilterA
 
         @Override
         public Enumeration<String> getInitParameterNames() {
-            return filterConfig != null ? new Enumeration<String>() {
+            return filterConfig != null ? new Enumeration<>() {
                 final Iterator<String> keySet = filterConfig.keySet().iterator();
 
                 @Override
diff --git a/aaa-filterchain/src/main/resources/OSGI-INF/blueprint/aaa-filterchain.xml b/aaa-filterchain/src/main/resources/OSGI-INF/blueprint/aaa-filterchain.xml
deleted file mode 100644 (file)
index ca3fcc3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
-           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0">
-
-  <cm:cm-properties id="initialProperties" persistent-id="org.opendaylight.aaa.filterchain"/>
-
-  <bean id="adapterConfig"
-      class="org.opendaylight.aaa.filterchain.configuration.impl.CustomFilterAdapterConfigurationImpl"
-      destroy-method="close">
-    <cm:managed-properties persistent-id="org.opendaylight.aaa.filterchain"
-            update-strategy="component-managed" update-method="update" />
-    <argument ref="initialProperties" />
-  </bean>
-
-  <reference-list interface="javax.servlet.Filter" availability="optional">
-    <reference-listener bind-method="onFilterAdded" unbind-method="onFilterRemoved"
-        ref="adapterConfig"/>
-  </reference-list>
-
-  <service ref="adapterConfig"
-      interface="org.opendaylight.aaa.filterchain.configuration.CustomFilterAdapterConfiguration"/>
-
-</blueprint>
index e3b409ad42bea6c79dc26638d393574f6188ddcc..2b21e63a640149a366120f433225e3e35a90ddb0 100644 (file)
@@ -13,7 +13,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertSame;
 import static org.mockito.Mockito.mock;
 
-import com.google.common.collect.ImmutableMap;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
@@ -45,7 +44,7 @@ public class CustomFilterAdapterConfigurationImplTest {
         }
     }
 
-    private final CustomFilterAdapterConfigurationImpl config = new CustomFilterAdapterConfigurationImpl(null);
+    private final CustomFilterAdapterConfigurationImpl config = new CustomFilterAdapterConfigurationImpl();
     private final TestCustomFilterAdapterListener listener = new TestCustomFilterAdapterListener();
 
     @Before
@@ -177,12 +176,12 @@ public class CustomFilterAdapterConfigurationImplTest {
     @Test
     public void testFilterAddedAndRemoved() {
         Filter mockFilter = mock(Filter.class);
-        config.onFilterAdded(mockFilter, ImmutableMap.of());
+        config.addFilter(mockFilter);
 
         assertEquals(1, listener.updatedInjectedFilters.size());
         assertSame(mockFilter, listener.updatedInjectedFilters.get(0));
 
-        config.onFilterRemoved(mockFilter, ImmutableMap.of());
+        config.removeFilter(mockFilter);
 
         assertEquals(0, listener.updatedInjectedFilters.size());
     }