Make Resources in service-decomp configurable 13/61113/4
authorTait,Trevor(rt0435) <rtait@amdocs.com>
Fri, 17 Aug 2018 17:40:21 +0000 (13:40 -0400)
committerTait,Trevor(rt0435) <rtait@amdocs.com>
Sat, 18 Aug 2018 19:06:06 +0000 (15:06 -0400)
Issue-ID: SDNC-317
Change-Id: I6dadf7b01d867564118a107364ddc97a6667daf8
Signed-off-by: Tait,Trevor(rt0435) <rtait@amdocs.com>
pomba/service-decomposition/config/application.properties
pomba/service-decomposition/src/main/java/org/onap/sdnc/apps/pomba/servicedecomposition/AAIConfiguration.java
pomba/service-decomposition/src/main/java/org/onap/sdnc/apps/pomba/servicedecomposition/service/SpringServiceImpl.java
pomba/service-decomposition/src/main/java/org/onap/sdnc/apps/pomba/servicedecomposition/util/RestUtil.java

index cd118f0..3dfea70 100644 (file)
@@ -30,6 +30,7 @@ aai.keyStoreType=PKCS12
 aai.securityProtocol=TLS
 aai.connectionTimeout=5000
 aai.readTimeout=1000
+aai.resourceList=vnfc,vserver,l3-network
 
 aai.serviceInstancePath=/aai/v13/nodes/service-instance/{0}
 
index fedb64c..214c4d1 100644 (file)
@@ -25,54 +25,45 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class AAIConfiguration {
-    @Autowired
     @Value("${aai.host}")
     private String host;
 
-    @Autowired
     @Value("${aai.port}")
     private String port;
 
-    @Autowired
     @Value("${aai.httpProtocol}")
     private String httpProtocol;
 
-    @Autowired
     @Value("${aai.trustStorePath}")
     private String trustStorePath;
 
-    @Autowired
     @Value("${aai.keyStorePath}")
     private String keyStorePath;
 
-    @Autowired
     @Value("${aai.keyStorePassword}")
     private String keyStorePassword;
 
-    @Autowired
     @Value("${aai.keyManagerFactoryAlgorithm}")
     private String keyManagerFactoryAlgorithm;
 
-    @Autowired
     @Value("${aai.keyStoreType}")
     private String keyStoreType;
 
-    @Autowired
     @Value("${aai.securityProtocol}")
     private String securityProtocol;
 
-    @Autowired
     @Value("${aai.connectionTimeout}")
     private Integer connectionTimeout;
 
-    @Autowired
     @Value("${aai.readTimeout}")
     private Integer readTimeout;
 
-    @Autowired
     @Value("${aai.serviceInstancePath}")
     private String serviceInstancePath;
 
+    @Value("${aai.resourceList}")
+    private String resourceList;
+
     @Bean(name="aaiClient")
     public RestClient restClient() {
         return new RestClient()
@@ -92,4 +83,8 @@ public class AAIConfiguration {
         return this.serviceInstancePath;
     }
 
+    @Bean(name="aaiResourceList")
+    public String getResourceList() {
+        return this.resourceList;
+    }
 }
index 4c61434..384115e 100644 (file)
@@ -41,6 +41,9 @@ public class SpringServiceImpl implements SpringService {
     @Autowired
     private String aaiServiceInstancePath;
 
+    @Autowired
+    private String aaiResourceList;
+
     @Override
     public String decomposeService(String fromAppId,
                                    String transactionId,
@@ -49,7 +52,7 @@ public class SpringServiceImpl implements SpringService {
 
 
         log.info("Querying A&AI for service instance " + serviceInstanceId);
-        JSONObject serviceInstance = RestUtil.retrieveAAIModelData(aaiClient, aaiBaseUrl, aaiServiceInstancePath,
+        JSONObject serviceInstance = RestUtil.retrieveAAIModelData(aaiClient, aaiBaseUrl, aaiServiceInstancePath, aaiResourceList,
                 transactionId, serviceInstanceId, adapter);
         return serviceInstance.toString();
     }
index 3043269..c9e2c50 100644 (file)
@@ -24,18 +24,15 @@ import static org.onap.sdnc.apps.pomba.servicedecomposition.exception.DiscoveryE
 import static org.onap.sdnc.apps.pomba.servicedecomposition.exception.DiscoveryException.Error.SERVICE_RELATIONSHIP_PARSE_ERROR;
 
 import com.sun.jersey.core.util.MultivaluedMapImpl;
-
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.Response.Status;
-
 import org.json.JSONArray;
 import org.json.JSONObject;
 import org.onap.aai.restclient.client.OperationResult;
@@ -55,24 +52,25 @@ public class RestUtil {
     private static final String FROM_APP_ID = "X-FromAppId";
     private static final String APP_NAME = "aaiCtxBuilder";
 
-    // Service Catalog
-    public enum Catalog {
-
-        VNF("generic-vnf"), VNFC("vnfc"), VSERVER("vserver"), L3NETWORK("l3-network");
+    private static final Resource GENERIC_VNF = new Resource("generic-vnf");
 
-        private final String resourceName;
-        private final String collectionName;
+    public static class Resource {
+        private String resourceName;
+        private String collectionName;
 
-        private Catalog(String objName) {
-            this.resourceName = objName;
-            this.collectionName = objName + "s"; // make plural
+        private Resource(String resource) {
+            this.resourceName = resource;
+            this.collectionName = resource + "s";
         }
 
-        public String objName() {
-            return resourceName;
+        private String getResourceName() {
+            return this.resourceName;
         }
-    };
 
+        private String getCollectionName() {
+            return this.collectionName;
+        }
+    }
 
     private static final String JSON_ATT_RELATED_TO = "related-to";
     private static final String JSON_ATT_RELATED_LINK = "related-link";
@@ -114,7 +112,7 @@ public class RestUtil {
      * @return
      * @throws DiscoveryException
      */
-    public static JSONObject retrieveAAIModelData(RestClient aaiClient, String baseURL, String aaiServiceInstancePath,
+    public static JSONObject retrieveAAIModelData(RestClient aaiClient, String baseURL, String aaiServiceInstancePath, String aaiResourceList,
             String transactionId, String serviceInstanceId, ONAPLogAdapter adapter) throws DiscoveryException {
 
         // Follow two variables for transform purpose
@@ -133,7 +131,7 @@ public class RestUtil {
         logger.info("The number of the relationships for service instance id {} is: {}", serviceInstanceId,
                 relationMap.size());
 
-        JSONObject response = processVNFRelationMap(aaiClient, baseURL, transactionId, relationMap, serviceInstancePayload);
+        JSONObject response = processVNFRelationMap(aaiClient, aaiResourceList, baseURL, transactionId, relationMap, serviceInstancePayload);
         return response;
     }
 
@@ -145,65 +143,43 @@ public class RestUtil {
      * @param relationMap
      * @throws DiscoveryException
      */
-    private static JSONObject processVNFRelationMap(RestClient aaiClient, String baseURL, String transactionId,
+    private static JSONObject processVNFRelationMap(RestClient aaiClient, String aaiResourceList, String baseURL, String transactionId,
             HashMap<String, List<String>> relationMap, JSONObject serviceInstancePayload) throws DiscoveryException {
         List<JSONObject> vnfLst = new ArrayList<JSONObject>(); // List of the VNF JSON along with related resources
 
         JSONObject response = serviceInstancePayload;
 
+        List<Resource> resourceTypes = getResourceTypes(aaiResourceList);
 
-        if (relationMap.get(Catalog.VNF.resourceName) != null) {
-            List<JSONObject> vnfList = processResourceList(aaiClient, baseURL, transactionId, Catalog.VNF.resourceName,
-                    relationMap.get(Catalog.VNF.resourceName));
+        if (relationMap.get(GENERIC_VNF.getResourceName()) != null) {
+            List<JSONObject> vnfList = processResourceList(aaiClient, baseURL, transactionId, GENERIC_VNF.getResourceName(),
+                    relationMap.get(GENERIC_VNF.getResourceName()));
             // Logic to Create the Generic VNF JSON and extract further relationships
             for (JSONObject vnfPayload : vnfList) {
-                List<String> vnfcLinkLst = extractRelatedLink(vnfPayload, Catalog.VNFC.resourceName);
-                if (vnfcLinkLst != null && !vnfcLinkLst.isEmpty()) {
-                    logger.info("The number of the API call for vnfc is:" + vnfcLinkLst.size());
-                    List<JSONObject> vnfcList = processResourceList(aaiClient, baseURL, transactionId,
-                            Catalog.VNFC.resourceName, vnfcLinkLst);
-                    if (vnfcList != null) {
-                        vnfPayload.put(Catalog.VNFC.collectionName, vnfcList);
-                    }
-                } else {
-                    logger.info("No vnfc found for vnf-id:" + vnfPayload.getString("vnf-id"));
-                }
-
-                List<String> networkLinkLst = extractRelatedLink(vnfPayload, Catalog.L3NETWORK.resourceName);
-                if (networkLinkLst != null && !networkLinkLst.isEmpty()) {
-                    logger.info("The number of the API call for l3-network is:" + networkLinkLst.size());
-                    List<JSONObject> networkList = processResourceList(aaiClient, baseURL, transactionId,
-                            Catalog.L3NETWORK.resourceName, networkLinkLst);
-                    if (networkList != null) {
-                        vnfPayload.put(Catalog.L3NETWORK.collectionName, networkList);
-                    }
-                } else {
-                    logger.info("No l3-network found for vnf-id:" + vnfPayload.getString("vnf-id"));
-                }
-                List<String> vserverLinkLst = extractRelatedLink(vnfPayload, Catalog.VSERVER.resourceName);
-                if (vserverLinkLst != null && !vserverLinkLst.isEmpty()) {
-                    logger.info("The number of the API call for vserver is:" + vserverLinkLst.size());
-                    List<JSONObject> vserverList = processResourceList(aaiClient, baseURL, transactionId,
-                            Catalog.VSERVER.resourceName, vserverLinkLst);
-                    if (vserverList != null) {
-                        vnfPayload.put(Catalog.VSERVER.collectionName, vserverList);
+                for (Resource resourceType : resourceTypes) {
+                    List<String> vnfcLinkLst = extractRelatedLink(vnfPayload, resourceType.getResourceName());
+                    if (vnfcLinkLst != null && !vnfcLinkLst.isEmpty()) {
+                        logger.info("The number of the API call for vnfc is:" + vnfcLinkLst.size());
+                        List<JSONObject> vnfcList = processResourceList(aaiClient, baseURL, transactionId,
+                                resourceType.getResourceName(), vnfcLinkLst);
+                        if (vnfcList != null) {
+                            vnfPayload.put(resourceType.getCollectionName(), vnfcList);
+                        }
+                    } else {
+                        logger.info("No " + resourceType.getResourceName() + " found for vnf-id:" + vnfPayload.getString("vnf-id"));
                     }
-                } else {
-                    logger.info("No vserver found for vnf-id:" + vnfPayload.getString("vnf-id"));
                 }
-
-                // Add final vnf payload to list
-                vnfLst.add(vnfPayload);
+            // Add final vnf payload to list
+            vnfLst.add(vnfPayload);
             }
         } else {
-            logger.info("No generic vnf found for :" + serviceInstancePayload.getString("service-instance-id"));
+            logger.info("No " + GENERIC_VNF.getResourceName() +  " found for :" + serviceInstancePayload.getString("service-instance-id"));
         }
 
         // Add generic vnf with related resource payload to response
         if (vnfLst != null && !vnfLst.isEmpty()) {
-            response.put(Catalog.VNF.collectionName, vnfLst);
+            response.put(GENERIC_VNF.getCollectionName(), vnfLst);
         }
-
         return response;
 
     }
@@ -225,7 +201,7 @@ public class RestUtil {
             String resourceURL = aaiBaseURL + resourceLink;
             // With latest AAI development, in order to retrieve the both generic VNF + vf_module, we can use
             // one API call but with depth=2
-            if (resourceType.equals(Catalog.VNF.resourceName)) {
+            if (resourceType.equals(GENERIC_VNF.getResourceName())) {
                 resourceURL += DEPTH;
             }
 
@@ -371,4 +347,13 @@ public class RestUtil {
         return headers;
     }
 
+    private static List<Resource> getResourceTypes(String aaiResourceList) {
+        List<Resource> resources = new ArrayList<Resource>();
+        String[] resourceList = aaiResourceList.split(",");
+        for (int i = 0; i < resourceList.length; i++) {
+                resources.add(new Resource(resourceList[i]));
+        }
+        return resources;
+    }
+
 }