ClientLib Support For Multiple Controllers 07/35807/2
authorvidhyasree <sn141y@att.com>
Wed, 14 Mar 2018 18:31:16 +0000 (14:31 -0400)
committerRanda Maher <rx196w@att.com>
Wed, 14 Mar 2018 23:30:27 +0000 (23:30 +0000)
-APPC client library should support multiple controllers
-To support MSO added string controllerType

Issue-ID: APPC-683
Change-Id: Ief8416cb0912acc26015cb8271432de92a0af7dd
Signed-off-by: vidhyasree <sn141y@att.com>
appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/api/AppcLifeCycleManagerServiceFactory.java
appc-client/client-kit/src/main/java/org/onap/appc/client/lcm/impl/business/AppcLifeCycleManagerServiceFactoryImpl.java
appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBMessagingService.java
appc-client/client-lib/src/main/java/org/onap/appc/client/impl/protocol/UEBPropertiesKeys.java

index c0d2daa..8613f29 100644 (file)
@@ -9,15 +9,15 @@
  * 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.
- * 
+ *
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
@@ -39,6 +39,15 @@ public interface AppcLifeCycleManagerServiceFactory {
      */
     LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties) throws AppcClientException;
 
+    /**
+     * Creates a new stateful LCM API given a controller type
+     * @param context application context parameters
+     * @param properties configures the behaviour of the LCM
+     * @return a new stateful LCM API
+     * @throws AppcClientException in case of problem in instantiation
+     */
+    LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties, String controllerType) throws AppcClientException;
+
     /**
      * performs a shutdown of LCM API.
      * in case of graceful, will try and execute the remaining requests, otherwise, will force the shutdown right away
@@ -46,4 +55,12 @@ public interface AppcLifeCycleManagerServiceFactory {
      */
     void shutdownLifeCycleManager(boolean isForceShutdown);
 
+
+    /**
+     * performs a shutdown of LCM API, given a controller type
+     * in case of graceful, will try and execute the remaining requests, otherwise, will force the shutdown right away
+     * @param isForceShutdown - boolean. If true to perform force shutdown, other to perform graceful shutdown.
+     */
+    void shutdownLifeCycleManager(boolean isForceShutdown, String controllerType);
+
 }
index b8ab36b..400d6c6 100644 (file)
@@ -9,21 +9,23 @@
  * 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.
- * 
+ *
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
 package org.onap.appc.client.lcm.impl.business;
 
+import java.util.HashMap;
+
 import org.onap.appc.client.lcm.api.AppcLifeCycleManagerServiceFactory;
 import org.onap.appc.client.lcm.api.ApplicationContext;
 import org.onap.appc.client.lcm.api.LifeCycleManagerStateful;
@@ -34,28 +36,94 @@ import java.util.Properties;
 
 public class AppcLifeCycleManagerServiceFactoryImpl implements AppcLifeCycleManagerServiceFactory {
 
-    private LifeCycleManagerStateful lifeCycleManagerStateful;
-    private LCMRequestProcessor lcmRequestProcessor;
+    class AppcLifeCycleManagerServiceFactoryImplData {
+
+        private LifeCycleManagerStateful _lifeCycleManagerStateful;
+        private LCMRequestProcessor _lcmRequestProcessor;
+
+        AppcLifeCycleManagerServiceFactoryImplData(LifeCycleManagerStateful lifeCycleManagerStateful,
+                                                   LCMRequestProcessor lcmRequestProcessor) {
+
+            _lifeCycleManagerStateful = lifeCycleManagerStateful;
+            _lcmRequestProcessor = lcmRequestProcessor;
+        }
+
+        LifeCycleManagerStateful getLifeCycleManagerStateful() {
+            return _lifeCycleManagerStateful;
+        }
+
+        LCMRequestProcessor getLCMRequestProcessor() {
+            return _lcmRequestProcessor;
+        }
+    }
+
+    private HashMap<String, AppcLifeCycleManagerServiceFactoryImplData> lcmMap = new HashMap<String, AppcLifeCycleManagerServiceFactoryImplData>();
 
     @Override
-    public synchronized LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context, Properties properties) throws AppcClientException{
+    public synchronized LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context,
+                                                                                Properties properties) throws AppcClientException {
+        String cType = properties.getProperty("controllerType");
+        if (cType == null || cType.length() == 0)
+        {
+            cType = "APPC";
+            properties.put("controllerType", cType);
+        }
+
+        AppcLifeCycleManagerServiceFactoryImplData lcmData = lcmMap.get(cType);
+        LifeCycleManagerStateful lifeCycleManagerStateful = null;
+        LCMRequestProcessor lcmRequestProcessor = null;
+
+        if (lcmData != null) {
+            lifeCycleManagerStateful = lcmData.getLifeCycleManagerStateful();
+            lcmRequestProcessor = lcmData.getLCMRequestProcessor();
+        }
+
         if (lifeCycleManagerStateful == null) {
             lcmRequestProcessor = new LCMRequestProcessor(context, properties);
-            lifeCycleManagerStateful = (LifeCycleManagerStateful) Proxy.newProxyInstance(LifeCycleManagerStateful.class.getClassLoader(), new Class<?>[]{LifeCycleManagerStateful.class}, new RPCInvocator(lcmRequestProcessor));
-        }
-        else {
+            lifeCycleManagerStateful = (LifeCycleManagerStateful) Proxy.newProxyInstance(
+                    LifeCycleManagerStateful.class.getClassLoader(), new Class<?>[] { LifeCycleManagerStateful.class },
+                    new RPCInvocator(lcmRequestProcessor));
+            lcmMap.put(cType,
+                    new AppcLifeCycleManagerServiceFactoryImplData(lifeCycleManagerStateful, lcmRequestProcessor));
+        } else {
             throw new IllegalStateException("already instansiated LifeCycleManagerStateful instance");
         }
         return lifeCycleManagerStateful;
     }
 
+    public LifeCycleManagerStateful createLifeCycleManagerStateful(ApplicationContext context,
+                                                                   Properties properties, String controllerType) throws AppcClientException {
+        if (controllerType != null && controllerType.length() != 0)
+            properties.put("controllerType", controllerType.toUpperCase());
+        return createLifeCycleManagerStateful(context, properties);
+    }
+
     @Override
     public void shutdownLifeCycleManager(boolean isForceShutdown) {
-        if(lcmRequestProcessor != null){
-            lcmRequestProcessor.shutdown(isForceShutdown);
+
+        shutdownLifeCycleManager(isForceShutdown, "APPC");
+    }
+
+    @Override
+    public void shutdownLifeCycleManager(boolean isForceShutdown, String controllerType) {
+        if (controllerType == null || controllerType.length() == 0)
+            controllerType = "APPC";
+        else
+            controllerType = controllerType.toUpperCase();
+
+        AppcLifeCycleManagerServiceFactoryImplData lcmData = lcmMap.get(controllerType);
+        LCMRequestProcessor lcmRequestProcessor = null;
+
+        if (lcmData != null) {
+            lcmRequestProcessor = lcmData.getLCMRequestProcessor();
         }
-        else{
-            throw new IllegalStateException("The life cycle manager library wasn't instantiated properly, therefore the shutdown event will not be handled");
+
+        if (lcmRequestProcessor != null) {
+            lcmRequestProcessor.shutdown(isForceShutdown);
+        } else {
+            throw new IllegalStateException(
+                    "The life cycle manager library wasn't instantiated properly, therefore the shutdown event will not be handled");
         }
     }
+
 }
index 5c92a00..0a9e1a6 100644 (file)
@@ -9,15 +9,15 @@
  * 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.
- * 
+ *
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
@@ -49,11 +49,17 @@ class UEBMessagingService implements MessagingService {
     @Override
     @SuppressWarnings("Since15")
     public void init(Properties props)
-        throws IOException, GeneralSecurityException, NoSuchFieldException, IllegalAccessException {
+            throws IOException, GeneralSecurityException, NoSuchFieldException, IllegalAccessException {
 
         if (props != null) {
             String readTopic = props.getProperty(UEBPropertiesKeys.TOPIC_READ);
             String writeTopic = props.getProperty(UEBPropertiesKeys.TOPIC_WRITE);
+            String cType = props.getProperty(UEBPropertiesKeys.CONTROLLER_TYPE);
+            if (cType != null && cType.length()!= 0 && (!cType.equals("APPC")))
+            {
+                readTopic = cType + "-" + readTopic;
+                writeTopic = cType + "-" + writeTopic;
+            }
             String apiKey = props.getProperty(UEBPropertiesKeys.AUTH_USER);
             String apiSecret = props.getProperty(UEBPropertiesKeys.AUTH_SECRET);
             String readTimeoutString = props.getProperty(UEBPropertiesKeys.TOPIC_READ_TIMEOUT, DEFAULT_READ_TIMEOUT_MS);
index 5c1916f..81f109a 100644 (file)
@@ -9,15 +9,15 @@
  * 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.
- * 
+ *
  * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
@@ -33,4 +33,5 @@ class UEBPropertiesKeys {
     static final String AUTH_USER = "client.key";
     static final String AUTH_SECRET = "client.secret";
     static final String HOSTS = "poolMembers";
+    static final String CONTROLLER_TYPE = "controllerType";
 }