Refactor class/instance loading and resolving in the SLI module 39/94939/6
authorSamuel Kontris <samuel.kontris@pantheon.tech>
Wed, 4 Sep 2019 13:31:48 +0000 (15:31 +0200)
committerDan Timoney <dtimoney@att.com>
Tue, 15 Oct 2019 18:19:47 +0000 (18:19 +0000)
Code from the static class SvcLogicAdaptorFactory is moved
to the SvcLogicClassResolver class.

Class SvcLogicClassResolver is created as a bean in the blueprint xml
file, not as singleton directly in the code. Then is injected via
blueprint into the SvcLogicServiceImpl.

Methods registerExecutor and unregisterExecutor from
the SvcLogicServiceImpl class are removed - are not used anywhere.

This change causes compilation error in the northbound repository.
Fix for this error is here:
https://gerrit.onap.org/r/#/c/ccsdk/sli/northbound/+/95053/

Issue-ID: CCSDK-1688
Change-Id: I26ce01b761ab5d17f1cc19e39af581b1963658a5
Signed-off-by: Samuel Kontris <samuel.kontris@pantheon.tech>
sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicAdaptorFactory.java [deleted file]
sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicClassResolver.java
sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicServiceImpl.java
sli/provider/src/main/resources/OSGI-INF/blueprint/sli-blueprint.xml
sli/provider/src/main/resources/org/opendaylight/blueprint/sli-blueprint.xml
sli/provider/src/test/java/org/onap/ccsdk/sli/core/sli/provider/ITCaseSvcLogicGraphExecutor.java
sliapi/provider/src/test/java/org/onap/ccsdk/sli/core/sliapi/TestSliapiProvider.java

diff --git a/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicAdaptorFactory.java b/sli/provider/src/main/java/org/onap/ccsdk/sli/core/sli/provider/SvcLogicAdaptorFactory.java
deleted file mode 100644 (file)
index 540c04e..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP : CCSDK
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights
- *                                             reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.ccsdk.sli.core.sli.provider;
-
-import java.util.HashMap;
-
-import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class SvcLogicAdaptorFactory {
-
-       private static final Logger LOG = LoggerFactory
-                       .getLogger(SvcLogicAdaptorFactory.class);
-
-       private static HashMap<String, SvcLogicAdaptor> adaptorMap = new HashMap<>();
-
-       public static void registerAdaptor(SvcLogicAdaptor adaptor) {
-               String name = adaptor.getClass().getName();
-               LOG.info("Registering adaptor " + name);
-               adaptorMap.put(name, adaptor);
-
-       }
-
-       public static void unregisterAdaptor(String name) {
-               if (adaptorMap.containsKey(name)) {
-                       LOG.info("Unregistering " + name);
-                       adaptorMap.remove(name);
-               }
-       }
-
-    public static SvcLogicAdaptor getInstance(String name) {
-        if (adaptorMap.containsKey(name)) {
-            return adaptorMap.get(name);
-        } else {
-
-            SvcLogicAdaptor adaptor = (SvcLogicAdaptor) SvcLogicClassResolver.getInstance().resolve(name);
-
-            if (adaptor != null) {
-                registerAdaptor(adaptor);
-            }
-
-            return adaptor;
-        }
-    }
-}
index f10976a..08e957f 100644 (file)
@@ -1,5 +1,6 @@
 package org.onap.ccsdk.sli.core.sli.provider;
 
+import java.util.HashMap;
 import org.onap.ccsdk.sli.core.sli.SvcLogicAdaptor;
 import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin;
 import org.onap.ccsdk.sli.core.sli.SvcLogicRecorder;
@@ -13,17 +14,40 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class SvcLogicClassResolver implements SvcLogicResolver {
+
        private static final Logger LOG = LoggerFactory.getLogger(SvcLogicClassResolver.class);
-       private static SvcLogicClassResolver instance = new SvcLogicClassResolver();
+       private static HashMap<String, SvcLogicAdaptor> adaptorMap = new HashMap<>();
+
+       public void registerAdaptor(SvcLogicAdaptor adaptor) {
+               String name = adaptor.getClass().getName();
+               LOG.info("Registering adaptor " + name);
+               adaptorMap.put(name, adaptor);
+
+       }
 
-       private SvcLogicClassResolver() {
+       public void unregisterAdaptor(String name) {
+               if (adaptorMap.containsKey(name)) {
+                       LOG.info("Unregistering " + name);
+                       adaptorMap.remove(name);
+               }
        }
 
-       public static SvcLogicClassResolver getInstance() {
-               return instance;
+       private SvcLogicAdaptor getAdaptorInstance(String name) {
+               if (adaptorMap.containsKey(name)) {
+                       return adaptorMap.get(name);
+               } else {
+
+                       SvcLogicAdaptor adaptor = (SvcLogicAdaptor) resolve(name);
+
+                       if (adaptor != null) {
+                               registerAdaptor(adaptor);
+                       }
+
+                       return adaptor;
+               }
        }
 
-       public Object resolve(String className) {
+       private Object resolve(String className) {
 
                Bundle bundle = FrameworkUtil.getBundle(SvcLogicClassResolver.class);
 
@@ -68,7 +92,7 @@ public class SvcLogicClassResolver implements SvcLogicResolver {
 
        @Override
        public SvcLogicAdaptor getSvcLogicAdaptor(String adaptorName) {
-               return SvcLogicAdaptorFactory.getInstance(adaptorName);
+               return getAdaptorInstance(adaptorName);
        }
 
 }
index 0d49366..9e91b75 100755 (executable)
@@ -32,13 +32,11 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicException;
 import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
-import org.onap.ccsdk.sli.core.sli.provider.base.AbstractSvcLogicNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider;
+import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicResolver;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicServiceImplBase;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
@@ -46,45 +44,23 @@ import org.slf4j.MDC;
 public class SvcLogicServiceImpl extends SvcLogicServiceImplBase implements SvcLogicService {
 
     private static final Logger LOG = LoggerFactory.getLogger(SvcLogicServiceImpl.class);
-    protected BundleContext bctx = null;
 
-    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider) throws SvcLogicException {
+    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, SvcLogicResolver resolver)
+            throws SvcLogicException {
         super(null);
-        this.resolver = SvcLogicClassResolver.getInstance();
+        this.resolver = resolver;
         properties = resourceProvider.getProperties();
         this.store = getStore();
     }
 
-    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, DbLibService dbSvc)
-            throws SvcLogicException {
+    public SvcLogicServiceImpl(SvcLogicPropertiesProvider resourceProvider, DbLibService dbSvc,
+            SvcLogicResolver resolver) throws SvcLogicException {
         super(null);
-        this.resolver = SvcLogicClassResolver.getInstance();
+        this.resolver = resolver;
         properties = resourceProvider.getProperties();
         this.store = new SvcLogicDblibStore(dbSvc);
     }
 
-    public void registerExecutor(ServiceReference sr) {
-        String nodeName = (String) sr.getProperty("nodeType");
-        if (nodeName != null) {
-            AbstractSvcLogicNodeExecutor executor;
-            try {
-                executor = (AbstractSvcLogicNodeExecutor) bctx.getService(sr);
-            } catch (Exception e) {
-                LOG.error("Cannot get service executor for {}", nodeName, e);
-                return;
-            }
-            registerExecutor(nodeName, executor);
-        }
-    }
-
-    public void unregisterExecutor(ServiceReference sr) {
-        String nodeName = (String) sr.getProperty("nodeType");
-
-        if (nodeName != null) {
-            unregisterExecutor(nodeName);
-        }
-    }
-
     @Override
     public Properties execute(String module, String rpc, String version, String mode, Properties props)
             throws SvcLogicException {
index bb14477..d88cf33 100644 (file)
@@ -5,17 +5,18 @@
 
     <bean id="propProvider" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl" />
     <reference id="dblibService" interface="org.onap.ccsdk.sli.core.dblib.DbLibService" />
+    <bean id="svcLogicClassResolver" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver" />
 
     <bean id="svcLogicService" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl">
         <argument ref="propProvider" />
-        <argument ref="dblibService"/>
+        <argument ref="dblibService" />
+        <argument ref="svcLogicClassResolver" />
     </bean>
 
-
     <service ref="svcLogicService">
         <interfaces>
             <value>org.onap.ccsdk.sli.core.sli.provider.SvcLogicService</value>
         </interfaces>
     </service>
 
-</blueprint>
\ No newline at end of file
+</blueprint>
index bb14477..d88cf33 100644 (file)
@@ -5,17 +5,18 @@
 
     <bean id="propProvider" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl" />
     <reference id="dblibService" interface="org.onap.ccsdk.sli.core.dblib.DbLibService" />
+    <bean id="svcLogicClassResolver" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver" />
 
     <bean id="svcLogicService" class="org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl">
         <argument ref="propProvider" />
-        <argument ref="dblibService"/>
+        <argument ref="dblibService" />
+        <argument ref="svcLogicClassResolver" />
     </bean>
 
-
     <service ref="svcLogicService">
         <interfaces>
             <value>org.onap.ccsdk.sli.core.sli.provider.SvcLogicService</value>
         </interfaces>
     </service>
 
-</blueprint>
\ No newline at end of file
+</blueprint>
index 6092d1f..ad439cd 100644 (file)
@@ -33,7 +33,6 @@ import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Properties;
-
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -44,6 +43,7 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicGraph;
 import org.onap.ccsdk.sli.core.sli.SvcLogicParser;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
+import org.onap.ccsdk.sli.core.sli.provider.base.AbstractSvcLogicNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.BlockNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.BreakNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.CallNodeExecutor;
@@ -61,7 +61,6 @@ import org.onap.ccsdk.sli.core.sli.provider.base.ReserveNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.ReturnNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.SaveNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.SetNodeExecutor;
-import org.onap.ccsdk.sli.core.sli.provider.base.AbstractSvcLogicNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.SvcLogicPropertiesProvider;
 import org.onap.ccsdk.sli.core.sli.provider.base.SwitchNodeExecutor;
 import org.onap.ccsdk.sli.core.sli.provider.base.UpdateNodeExecutor;
@@ -98,6 +97,8 @@ public class ITCaseSvcLogicGraphExecutor {
         }
     };
 
+    private static SvcLogicClassResolver svcLogicClassResolver;
+
     @BeforeClass
     public static void setUpBeforeClass() throws Exception {
 
@@ -115,7 +116,8 @@ public class ITCaseSvcLogicGraphExecutor {
         SvcLogicParser parser = new SvcLogicParser();
 
         SvcLogicPropertiesProvider resourceProvider = new SvcLogicPropertiesProviderImpl();
-        SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider);
+        svcLogicClassResolver = new SvcLogicClassResolver();
+        SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider, svcLogicClassResolver);
 
         for (String nodeType : BUILTIN_NODES.keySet()) {
             svc.registerExecutor(nodeType, BUILTIN_NODES.get(nodeType));
@@ -165,7 +167,7 @@ public class ITCaseSvcLogicGraphExecutor {
                     return svcprops;
                 }
             };
-            SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider);
+            SvcLogicServiceImpl svc = new SvcLogicServiceImpl(resourceProvider, svcLogicClassResolver);
             SvcLogicStore store = svc.getStore();
             assertNotNull(store);
             for (String nodeType : BUILTIN_NODES.keySet()) {
index c898fff..f48cf78 100644 (file)
@@ -18,13 +18,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.Future;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.onap.ccsdk.sli.core.sli.SvcLogicParser;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStore;
 import org.onap.ccsdk.sli.core.sli.SvcLogicStoreFactory;
+import org.onap.ccsdk.sli.core.sli.provider.SvcLogicClassResolver;
 import org.onap.ccsdk.sli.core.sli.provider.SvcLogicPropertiesProviderImpl;
 import org.onap.ccsdk.sli.core.sli.provider.SvcLogicServiceImpl;
 import org.onap.ccsdk.sli.core.sli.provider.base.AbstractSvcLogicNodeExecutor;
@@ -124,7 +124,8 @@ public class TestSliapiProvider {
         SvcLogicParser.activate("sli", "healthcheck", "1.0.0", "sync", store);
 
         // Create a ServiceLogicService and initialize it
-        SvcLogicServiceImpl svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl());
+        SvcLogicServiceImpl svc = new SvcLogicServiceImpl(new SvcLogicPropertiesProviderImpl(),
+                new SvcLogicClassResolver());
         for (String nodeType : BUILTIN_NODES.keySet()) {
             svc.registerExecutor(nodeType, BUILTIN_NODES.get(nodeType));
         }