SO WorkflowAction refactor 75/116275/13
authorpwielebs <piotr.wielebski@nokia.com>
Tue, 8 Dec 2020 07:46:38 +0000 (08:46 +0100)
committerpwielebs <piotr.wielebski@nokia.com>
Thu, 17 Dec 2020 07:35:34 +0000 (08:35 +0100)
- extract traverseUserParamsService() method from WorkflowAction class to UserParamsServiceTraversal class
- move methods used only in traverseUserParamsService() method to UserParamsServiceTraversal class
- change method signature from traverseUserParamsService to getResourceListFromUserParams()
- create WorkFlowActionCommon for duplicated code

Issue-ID: SO-3422
Signed-off-by: pwielebs <piotr.wielebski@nokia.com>
Change-Id: Ic6a567eb7b323939e47335aa7938b83498f7a8f8

bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/BaseTaskTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java

diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/UserParamsServiceTraversal.java
new file mode 100644 (file)
index 0000000..3556cc0
--- /dev/null
@@ -0,0 +1,232 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Nokia
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Tech Mahindra
+ * ================================================================================
+ * 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.so.bpmn.infrastructure.workflow.tasks;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.camunda.bpm.engine.delegate.DelegateExecution;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
+import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
+import org.onap.so.db.catalog.beans.CvnfcCustomization;
+import org.onap.so.db.catalog.beans.VfModuleCustomization;
+import org.onap.so.db.catalog.client.CatalogDbClient;
+import org.onap.so.serviceinstancebeans.Networks;
+import org.onap.so.serviceinstancebeans.Pnfs;
+import org.onap.so.serviceinstancebeans.Service;
+import org.onap.so.serviceinstancebeans.VfModules;
+import org.onap.so.serviceinstancebeans.Vnfs;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.FABRIC_CONFIGURATION;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.USER_PARAM_SERVICE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.WORKFLOW_ACTION_ERROR_MESSAGE;
+
+@Component
+public class UserParamsServiceTraversal {
+
+    private static final Logger logger = LoggerFactory.getLogger(UserParamsServiceTraversal.class);
+
+    private final CatalogDbClient catalogDbClient;
+    private final ExceptionBuilder exceptionBuilder;
+
+    UserParamsServiceTraversal(CatalogDbClient catalogDbClient, ExceptionBuilder exceptionBuilder) {
+        this.catalogDbClient = catalogDbClient;
+        this.exceptionBuilder = exceptionBuilder;
+    }
+
+    protected List<Resource> getResourceListFromUserParams(DelegateExecution execution,
+            List<Map<String, Object>> userParams, String serviceModelVersionId, String requestAction)
+            throws IOException {
+        List<Resource> resourceList = new ArrayList<>();
+        boolean foundVfModuleOrVG = false;
+        String vnfCustomizationUUID = "";
+        String vfModuleCustomizationUUID = "";
+        if (userParams != null) {
+            for (Map<String, Object> params : userParams) {
+                if (params.containsKey(USER_PARAM_SERVICE)) {
+                    ObjectMapper obj = new ObjectMapper();
+                    String input = obj.writeValueAsString(params.get(USER_PARAM_SERVICE));
+                    Service validate = obj.readValue(input, Service.class);
+                    resourceList.add(
+                            new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false));
+                    if (validate.getResources().getVnfs() != null) {
+                        for (Vnfs vnf : validate.getResources().getVnfs()) {
+                            resourceList.add(new Resource(WorkflowType.VNF,
+                                    vnf.getModelInfo().getModelCustomizationId(), false));
+                            if (vnf.getModelInfo() != null && vnf.getModelInfo().getModelCustomizationUuid() != null) {
+                                vnfCustomizationUUID = vnf.getModelInfo().getModelCustomizationUuid();
+                            }
+                            if (vnf.getVfModules() != null) {
+                                for (VfModules vfModule : vnf.getVfModules()) {
+                                    VfModuleCustomization vfModuleCustomization =
+                                            catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(
+                                                    vfModule.getModelInfo().getModelCustomizationUuid());
+                                    if (vfModuleCustomization != null) {
+
+                                        if (vfModuleCustomization.getVfModule() != null
+                                                && vfModuleCustomization.getVfModule().getVolumeHeatTemplate() != null
+                                                && vfModuleCustomization.getVolumeHeatEnv() != null) {
+                                            resourceList.add(new Resource(WorkflowType.VOLUMEGROUP,
+                                                    vfModuleCustomization.getModelCustomizationUUID(), false));
+                                            foundVfModuleOrVG = true;
+                                        }
+
+                                        if ((vfModuleCustomization.getVfModule() != null)
+                                                && ((vfModuleCustomization.getVfModule().getModuleHeatTemplate() != null
+                                                        && vfModuleCustomization.getHeatEnvironment() != null))
+                                                || (vfModuleCustomization.getVfModule().getModelName() != null
+                                                        && vfModuleCustomization.getVfModule().getModelName()
+                                                                .contains("helm"))) {
+                                            foundVfModuleOrVG = true;
+                                            Resource resource = new Resource(WorkflowType.VFMODULE,
+                                                    vfModuleCustomization.getModelCustomizationUUID(), false);
+                                            resource.setBaseVfModule(
+                                                    vfModuleCustomization.getVfModule().getIsBase() != null
+                                                            && vfModuleCustomization.getVfModule().getIsBase());
+                                            resourceList.add(resource);
+                                            if (vfModule.getModelInfo() != null
+                                                    && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
+                                                vfModuleCustomizationUUID =
+                                                        vfModule.getModelInfo().getModelCustomizationUuid();
+                                            }
+                                            if (!vnfCustomizationUUID.isEmpty()
+                                                    && !vfModuleCustomizationUUID.isEmpty()) {
+                                                List<CvnfcConfigurationCustomization> configs =
+                                                        traverseCatalogDbForConfiguration(
+                                                                validate.getModelInfo().getModelVersionId(),
+                                                                vnfCustomizationUUID, vfModuleCustomizationUUID);
+                                                for (CvnfcConfigurationCustomization config : configs) {
+                                                    Resource configResource = new Resource(WorkflowType.CONFIGURATION,
+                                                            config.getConfigurationResource().getModelUUID(), false);
+                                                    resource.setVnfCustomizationId(
+                                                            vnf.getModelInfo().getModelCustomizationId());
+                                                    resource.setVfModuleCustomizationId(
+                                                            vfModule.getModelInfo().getModelCustomizationId());
+                                                    resourceList.add(configResource);
+                                                }
+                                            }
+                                        }
+                                        if (!foundVfModuleOrVG) {
+                                            buildAndThrowException(execution,
+                                                    "Could not determine if vfModule was a vfModule or volume group. Heat template and Heat env are null");
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    if (validate.getResources().getPnfs() != null) {
+                        for (Pnfs pnf : validate.getResources().getPnfs()) {
+                            resourceList.add(new Resource(WorkflowType.PNF,
+                                    pnf.getModelInfo().getModelCustomizationId(), false));
+                        }
+                    }
+                    if (validate.getResources().getNetworks() != null) {
+                        for (Networks network : validate.getResources().getNetworks()) {
+                            resourceList.add(new Resource(WorkflowType.NETWORK,
+                                    network.getModelInfo().getModelCustomizationId(), false));
+                        }
+                        if (requestAction.equals(CREATE_INSTANCE)) {
+                            String networkColCustId =
+                                    queryCatalogDbForNetworkCollection(execution, serviceModelVersionId);
+                            if (networkColCustId != null) {
+                                resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, networkColCustId, false));
+                            }
+                        }
+                    }
+                    break;
+                }
+            }
+        }
+        return resourceList;
+    }
+
+
+    private List<CvnfcConfigurationCustomization> traverseCatalogDbForConfiguration(String serviceModelUUID,
+            String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
+        List<CvnfcConfigurationCustomization> configurations = new ArrayList<>();
+        try {
+            List<CvnfcCustomization> cvnfcCustomizations = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
+                    vnfCustomizationUUID, vfModuleCustomizationUUID);
+            for (CvnfcCustomization cvnfc : cvnfcCustomizations) {
+                for (CvnfcConfigurationCustomization customization : cvnfc.getCvnfcConfigurationCustomization()) {
+                    if (customization.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
+                        configurations.add(customization);
+                    }
+                }
+            }
+            logger.debug("found {} fabric configuration(s)", configurations.size());
+            return configurations;
+        } catch (Exception ex) {
+            logger.error("Error in finding configurations", ex);
+            return configurations;
+        }
+    }
+
+    private String queryCatalogDbForNetworkCollection(DelegateExecution execution, String serviceModelVersionId) {
+        org.onap.so.db.catalog.beans.Service service = catalogDbClient.getServiceByID(serviceModelVersionId);
+        if (service != null) {
+            CollectionResourceCustomization networkCollection = this.findCatalogNetworkCollection(execution, service);
+            if (networkCollection != null) {
+                return networkCollection.getModelCustomizationUUID();
+            }
+        }
+        return null;
+    }
+
+    private CollectionResourceCustomization findCatalogNetworkCollection(DelegateExecution execution,
+            org.onap.so.db.catalog.beans.Service service) {
+        CollectionResourceCustomization networkCollection = null;
+        int count = 0;
+        for (CollectionResourceCustomization collectionCustom : service.getCollectionResourceCustomizations()) {
+            if (catalogDbClient.getNetworkCollectionResourceCustomizationByID(
+                    collectionCustom.getModelCustomizationUUID()) != null) {
+                networkCollection = collectionCustom;
+                count++;
+            }
+        }
+        if (count == 0) {
+            return null;
+        } else if (count > 1) {
+            buildAndThrowException(execution,
+                    "Found multiple Network Collections in the Service model, only one per Service is supported.");
+        }
+        return networkCollection;
+    }
+
+    private void buildAndThrowException(DelegateExecution execution, String msg) {
+        logger.error(msg);
+        execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
+    }
+}
index 5d95f97..79c846b 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.lang3.SerializationUtils;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.javatuples.Pair;
@@ -76,8 +66,6 @@ import org.onap.so.client.orchestration.AAIEntityNotFoundException;
 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
-import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
-import org.onap.so.db.catalog.beans.CvnfcCustomization;
 import org.onap.so.db.catalog.beans.InstanceGroup;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
@@ -86,28 +74,35 @@ import org.onap.so.db.catalog.client.CatalogDbClient;
 import org.onap.so.serviceinstancebeans.CloudConfiguration;
 import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.ModelType;
-import org.onap.so.serviceinstancebeans.Networks;
-import org.onap.so.serviceinstancebeans.Pnfs;
 import org.onap.so.serviceinstancebeans.RelatedInstance;
 import org.onap.so.serviceinstancebeans.RelatedInstanceList;
 import org.onap.so.serviceinstancebeans.RequestDetails;
-import org.onap.so.serviceinstancebeans.Service;
 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
-import org.onap.so.serviceinstancebeans.VfModules;
-import org.onap.so.serviceinstancebeans.Vnfs;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.FABRIC_CONFIGURATION;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.USER_PARAM_SERVICE;
+import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.WORKFLOW_ACTION_ERROR_MESSAGE;
 
 @Component
 public class WorkflowAction {
 
-    private static final String WORKFLOW_ACTION_ERROR_MESSAGE = "WorkflowActionErrorMessage";
     private static final String SERVICE_INSTANCES = "serviceInstances";
     private static final String SERVICE_INSTANCE = "serviceInstance";
     private static final String VF_MODULES = "vfModules";
@@ -123,14 +118,11 @@ public class WorkflowAction {
     private static final String NETWORKCOLLECTION = "NetworkCollection";
     private static final String CONFIGURATION = "Configuration";
     private static final String ASSIGNINSTANCE = "assignInstance";
-    private static final String CREATEINSTANCE = "createInstance";
     private static final String REPLACEINSTANCE = "replaceInstance";
     private static final String REPLACEINSTANCERETAINASSIGNMENTS = "replaceInstanceRetainAssignments";
-    private static final String USERPARAMSERVICE = "service";
     private static final String SUPPORTEDTYPES =
             "vnfs|vfModules|networks|networkCollections|volumeGroups|serviceInstances|instanceGroups";
     private static final String HOMINGSOLUTION = "Homing_Solution";
-    private static final String FABRIC_CONFIGURATION = "FabricConfiguration";
     private static final String SERVICE_TYPE_TRANSPORT = "TRANSPORT";
     private static final String SERVICE_TYPE_BONDING = "BONDING";
     private static final String CLOUD_OWNER = "DEFAULT";
@@ -167,6 +159,8 @@ public class WorkflowAction {
     private VrfValidation vrfValidation;
     @Autowired
     private Environment environment;
+    @Autowired
+    private UserParamsServiceTraversal userParamsServiceTraversal;
 
     public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
         this.bbInputSetupUtils = bbInputSetupUtils;
@@ -238,7 +232,7 @@ public class WorkflowAction {
                                 requestDetails, requestAction, resourceId, flowsToExecute, vnfType, orchFlows,
                                 apiVersion, resourceKey, replaceInfo);
                     } else {
-                        if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                        if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATE_INSTANCE)) {
                             addConfigBuildingBlocksToFlowsToExecuteList(execution, sIRequest, requestId,
                                     workflowResourceIds, requestDetails, requestAction, resourceId, flowsToExecute,
                                     vnfType, apiVersion, resourceKey, replaceInfo, orchFlows);
@@ -255,36 +249,41 @@ public class WorkflowAction {
                         }
                     }
                 } else {
-                    boolean foundRelated = false;
                     boolean containsService = false;
                     List<Resource> resourceList = new ArrayList<>();
                     List<Pair<WorkflowType, String>> aaiResourceIds = new ArrayList<>();
+                    List<Map<String, Object>> userParams =
+                            sIRequest.getRequestDetails().getRequestParameters().getUserParams();
                     if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(ASSIGNINSTANCE)) {
                         // SERVICE-MACRO-ASSIGN will always get user params with a
                         // service.
-                        if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+
+                        if (userParams != null) {
                             containsService = isContainsService(sIRequest);
                             if (containsService) {
-                                traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
+                                resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution,
+                                        userParams, serviceInstanceId, requestAction);
                             }
                         } else {
                             buildAndThrowException(execution,
                                     "Service-Macro-Assign request details must contain user params with a service");
                         }
-                    } else if (resourceType == WorkflowType.SERVICE && requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                    } else if (resourceType == WorkflowType.SERVICE
+                            && requestAction.equalsIgnoreCase(CREATE_INSTANCE)) {
                         // SERVICE-MACRO-CREATE will get user params with a service,
                         // a service with a network, a service with a
-                        // networkcollection, OR an empty service.
+                        // network collection, OR an empty service.
                         // If user params is just a service or null and macro
                         // queries the SI and finds a VNF, macro fails.
 
-                        if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
+                        if (userParams != null) {
                             containsService = isContainsService(sIRequest);
                         }
                         if (containsService) {
-                            foundRelated = traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
+                            resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution,
+                                    userParams, serviceInstanceId, requestAction);
                         }
-                        if (!foundRelated) {
+                        if (!foundRelated(resourceList)) {
                             traverseCatalogDbService(execution, sIRequest, resourceList, aaiResourceIds);
                         }
                     } else if (resourceType == WorkflowType.SERVICE
@@ -333,15 +332,15 @@ public class WorkflowAction {
                         logger.info("Sorting for Vlan Tagging");
                         flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
                     }
-                    // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
+                    // By default, enable homing at VNF level for CREATE_INSTANCE and ASSIGNINSTANCE
                     if (resourceType == WorkflowType.SERVICE
-                            && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
+                            && (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGNINSTANCE))
                             && resourceList.stream().anyMatch(x -> WorkflowType.VNF.equals(x.getResourceType()))) {
                         execution.setVariable(HOMING, true);
                         execution.setVariable("calledHoming", false);
                     }
                     if (resourceType == WorkflowType.SERVICE && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE)
-                            || requestAction.equalsIgnoreCase(CREATEINSTANCE))) {
+                            || requestAction.equalsIgnoreCase(CREATE_INSTANCE))) {
                         generateResourceIds(flowsToExecute, resourceList, serviceInstanceId);
                     } else {
                         updateResourceIdsFromAAITraversal(flowsToExecute, resourceList, aaiResourceIds,
@@ -351,9 +350,8 @@ public class WorkflowAction {
             }
             // If the user set "Homing_Solution" to "none", disable homing, else if "Homing_Solution" is specified,
             // enable it.
-            if (sIRequest.getRequestDetails().getRequestParameters() != null
-                    && sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
-                List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
+            List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+            if (sIRequest.getRequestDetails().getRequestParameters() != null && userParams != null) {
                 for (Map<String, Object> params : userParams) {
                     if (params.containsKey(HOMINGSOLUTION)) {
                         execution.setVariable(HOMING, !"none".equals(params.get(HOMINGSOLUTION)));
@@ -400,14 +398,12 @@ public class WorkflowAction {
 
     private boolean isContainsService(ServiceInstancesRequest sIRequest) {
         boolean containsService;
-        List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
-        containsService = userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
+        List<Map<String, Object>> userParams = sIRequest.getRequestDetails().getRequestParameters().getUserParams();
+        containsService = userParams.stream().anyMatch(param -> param.containsKey(USER_PARAM_SERVICE));
         return containsService;
     }
 
-    private List<Map<String, Object>> getListOfUserParams(ServiceInstancesRequest sIRequest) {
-        return sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-    }
+
 
     private List<ExecuteBuildingBlock> loadExecuteBuildingBlocks(DelegateExecution execution, String requestId,
             String errorMessage) {
@@ -625,6 +621,18 @@ public class WorkflowAction {
         return flowsToExecuteConfigs;
     }
 
+    protected void buildAndThrowException(DelegateExecution execution, String msg) {
+        logger.error(msg);
+        execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
+    }
+
+    protected void buildAndThrowException(DelegateExecution execution, String msg, Exception ex) {
+        logger.error(msg, ex);
+        execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg + ex.getMessage());
+        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg + ex.getMessage());
+    }
+
     protected List<OrchestrationFlow> getVfModuleReplaceBuildingBlocks(ConfigBuildingBlocksDataObject dataObj)
             throws Exception {
 
@@ -1214,150 +1222,6 @@ public class WorkflowAction {
         }
     }
 
-    protected boolean traverseUserParamsService(DelegateExecution execution, List<Resource> resourceList,
-            ServiceInstancesRequest sIRequest, String requestAction) throws IOException {
-        boolean foundRelated = false;
-        boolean foundVfModuleOrVG = false;
-        String vnfCustomizationUUID = "";
-        String vfModuleCustomizationUUID = "";
-        if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
-            List<Map<String, Object>> userParams = getListOfUserParams(sIRequest);
-            for (Map<String, Object> params : userParams) {
-                if (params.containsKey(USERPARAMSERVICE)) {
-                    ObjectMapper obj = new ObjectMapper();
-                    String input = obj.writeValueAsString(params.get(USERPARAMSERVICE));
-                    Service validate = obj.readValue(input, Service.class);
-                    resourceList.add(
-                            new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false));
-                    if (validate.getResources().getVnfs() != null) {
-                        for (Vnfs vnf : validate.getResources().getVnfs()) {
-                            resourceList.add(new Resource(WorkflowType.VNF,
-                                    vnf.getModelInfo().getModelCustomizationId(), false));
-                            foundRelated = true;
-                            if (vnf.getModelInfo() != null && vnf.getModelInfo().getModelCustomizationUuid() != null) {
-                                vnfCustomizationUUID = vnf.getModelInfo().getModelCustomizationUuid();
-                            }
-                            if (vnf.getVfModules() != null) {
-                                for (VfModules vfModule : vnf.getVfModules()) {
-                                    VfModuleCustomization vfModuleCustomization =
-                                            catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID(
-                                                    vfModule.getModelInfo().getModelCustomizationUuid());
-                                    if (vfModuleCustomization != null) {
-
-                                        if (vfModuleCustomization.getVfModule() != null
-                                                && vfModuleCustomization.getVfModule().getVolumeHeatTemplate() != null
-                                                && vfModuleCustomization.getVolumeHeatEnv() != null) {
-                                            resourceList.add(new Resource(WorkflowType.VOLUMEGROUP,
-                                                    vfModuleCustomization.getModelCustomizationUUID(), false));
-                                            foundVfModuleOrVG = true;
-                                        }
-
-                                        if ((vfModuleCustomization.getVfModule() != null)
-                                                && ((vfModuleCustomization.getVfModule().getModuleHeatTemplate() != null
-                                                        && vfModuleCustomization.getHeatEnvironment() != null))
-                                                || (vfModuleCustomization.getVfModule().getModelName() != null
-                                                        && vfModuleCustomization.getVfModule().getModelName()
-                                                                .contains("helm"))) {
-                                            foundVfModuleOrVG = true;
-                                            Resource resource = new Resource(WorkflowType.VFMODULE,
-                                                    vfModuleCustomization.getModelCustomizationUUID(), false);
-                                            resource.setBaseVfModule(
-                                                    vfModuleCustomization.getVfModule().getIsBase() != null
-                                                            && vfModuleCustomization.getVfModule().getIsBase());
-                                            resourceList.add(resource);
-                                            if (vfModule.getModelInfo() != null
-                                                    && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
-                                                vfModuleCustomizationUUID =
-                                                        vfModule.getModelInfo().getModelCustomizationUuid();
-                                            }
-                                            if (!vnfCustomizationUUID.isEmpty()
-                                                    && !vfModuleCustomizationUUID.isEmpty()) {
-                                                List<CvnfcConfigurationCustomization> configs =
-                                                        traverseCatalogDbForConfiguration(
-                                                                validate.getModelInfo().getModelVersionId(),
-                                                                vnfCustomizationUUID, vfModuleCustomizationUUID);
-                                                for (CvnfcConfigurationCustomization config : configs) {
-                                                    Resource configResource = new Resource(WorkflowType.CONFIGURATION,
-                                                            config.getConfigurationResource().getModelUUID(), false);
-                                                    resource.setVnfCustomizationId(
-                                                            vnf.getModelInfo().getModelCustomizationId());
-                                                    resource.setVfModuleCustomizationId(
-                                                            vfModule.getModelInfo().getModelCustomizationId());
-                                                    resourceList.add(configResource);
-                                                }
-                                            }
-                                        }
-                                        if (!foundVfModuleOrVG) {
-                                            buildAndThrowException(execution,
-                                                    "Could not determine if vfModule was a vfModule or volume group. Heat template and Heat env are null");
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    if (validate.getResources().getPnfs() != null) {
-                        for (Pnfs pnf : validate.getResources().getPnfs()) {
-                            resourceList.add(new Resource(WorkflowType.PNF,
-                                    pnf.getModelInfo().getModelCustomizationId(), false));
-                            foundRelated = true;
-                        }
-                    }
-                    if (validate.getResources().getNetworks() != null) {
-                        for (Networks network : validate.getResources().getNetworks()) {
-                            resourceList.add(new Resource(WorkflowType.NETWORK,
-                                    network.getModelInfo().getModelCustomizationId(), false));
-                            foundRelated = true;
-                        }
-                        if (requestAction.equals(CREATEINSTANCE)) {
-                            String networkColCustId = queryCatalogDBforNetworkCollection(execution, sIRequest);
-                            if (networkColCustId != null) {
-                                resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, networkColCustId, false));
-                                foundRelated = true;
-                            }
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-        return foundRelated;
-    }
-
-    protected List<CvnfcConfigurationCustomization> traverseCatalogDbForConfiguration(String serviceModelUUID,
-            String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
-        List<CvnfcConfigurationCustomization> configurations = new ArrayList<>();
-        try {
-            List<CvnfcCustomization> cvnfcCustomizations = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
-                    vnfCustomizationUUID, vfModuleCustomizationUUID);
-            for (CvnfcCustomization cvnfc : cvnfcCustomizations) {
-                for (CvnfcConfigurationCustomization customization : cvnfc.getCvnfcConfigurationCustomization()) {
-                    if (customization.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
-                        configurations.add(customization);
-                    }
-                }
-            }
-            logger.debug("found {} fabric configuration(s)", configurations.size());
-            return configurations;
-        } catch (Exception ex) {
-            logger.error("Error in finding configurations", ex);
-            return configurations;
-        }
-    }
-
-    protected String queryCatalogDBforNetworkCollection(DelegateExecution execution,
-            ServiceInstancesRequest sIRequest) {
-        org.onap.so.db.catalog.beans.Service service =
-                catalogDbClient.getServiceByID(sIRequest.getRequestDetails().getModelInfo().getModelVersionId());
-        if (service != null) {
-            CollectionResourceCustomization networkCollection = this.findCatalogNetworkCollection(execution, service);
-            if (networkCollection != null) {
-                return networkCollection.getModelCustomizationUUID();
-            }
-        }
-        return null;
-    }
-
     protected WorkflowResourceIds populateResourceIdsFromApiHandler(DelegateExecution execution) {
         return WorkflowResourceIdsUtils.getWorkflowResourceIdsFromExecution(execution);
     }
@@ -1442,7 +1306,7 @@ public class WorkflowAction {
     protected List<ExecuteBuildingBlock> sortExecutionPathByObjectForVlanTagging(List<ExecuteBuildingBlock> orchFlows,
             String requestAction) {
         List<ExecuteBuildingBlock> sortedOrchFlows = new ArrayList<>();
-        if (requestAction.equals(CREATEINSTANCE)) {
+        if (requestAction.equals(CREATE_INSTANCE)) {
             for (ExecuteBuildingBlock ebb : orchFlows) {
                 if (ebb.getBuildingBlock().getBpmnFlowName().equals("AssignNetworkBB")) {
                     String key = ebb.getBuildingBlock().getKey();
@@ -1555,7 +1419,7 @@ public class WorkflowAction {
             } else if (orchFlow.getFlowName().contains(VFMODULE) || (orchFlow.getFlowName().contains(CONTROLLER)
                     && (VFMODULE).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
                 List<Resource> vfModuleResourcesSorted;
-                if (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE)
+                if (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGNINSTANCE)
                         || requestAction.equals("activateInstance")) {
                     vfModuleResourcesSorted = sortVfModulesByBaseFirst(resourceList.stream()
                             .filter(x -> WorkflowType.VFMODULE == x.getResourceType()).collect(Collectors.toList()));
@@ -1686,18 +1550,6 @@ public class WorkflowAction {
         return listToExecute;
     }
 
-    protected void buildAndThrowException(DelegateExecution execution, String msg, Exception ex) {
-        logger.error(msg, ex);
-        execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg + ex.getMessage());
-        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg + ex.getMessage());
-    }
-
-    protected void buildAndThrowException(DelegateExecution execution, String msg) {
-        logger.error(msg);
-        execution.setVariable(WORKFLOW_ACTION_ERROR_MESSAGE, msg);
-        exceptionBuilder.buildAndThrowWorkflowException(execution, 7000, msg);
-    }
-
     public void handleRuntimeException(DelegateExecution execution) {
         StringBuilder wfeExpMsg = new StringBuilder("Runtime error ");
         String runtimeErrorMessage;
@@ -1724,7 +1576,7 @@ public class WorkflowAction {
     protected boolean isRequestMacroServiceResume(boolean aLaCarte, WorkflowType resourceType, String requestAction,
             String serviceInstanceId) {
         return (!aLaCarte && resourceType == WorkflowType.SERVICE
-                && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE) || requestAction.equalsIgnoreCase(CREATEINSTANCE))
+                && (requestAction.equalsIgnoreCase(ASSIGNINSTANCE) || requestAction.equalsIgnoreCase(CREATE_INSTANCE))
                 && (serviceInstanceId != null && serviceInstanceId.trim().length() > 1)
                 && (bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId) != null));
     }
@@ -1875,6 +1727,17 @@ public class WorkflowAction {
         return generatedResourceId;
     }
 
+    protected boolean foundRelated(List<Resource> resourceList) {
+        return (containsWorkflowType(resourceList, WorkflowType.VNF)
+                || containsWorkflowType(resourceList, WorkflowType.PNF)
+                || containsWorkflowType(resourceList, WorkflowType.NETWORK)
+                || containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION));
+    }
+
+    protected boolean containsWorkflowType(List<Resource> resourceList, WorkflowType workflowType) {
+        return resourceList.stream().anyMatch(resource -> resource.getResourceType().equals(workflowType));
+    }
+
     private void fillExecutionDefault(DelegateExecution execution) {
         execution.setVariable("sentSyncResponse", false);
         execution.setVariable(HOMING, false);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java
new file mode 100644 (file)
index 0000000..bffa259
--- /dev/null
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Nokia
+ * ================================================================================
+ * Modifications Copyright (c) 2020 Tech Mahindra
+ * ================================================================================
+ * 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.so.bpmn.infrastructure.workflow.tasks;
+
+public final class WorkflowActionConstants {
+
+    static final String USER_PARAM_SERVICE = "service";
+    static final String CREATE_INSTANCE = "createInstance";
+    static final String FABRIC_CONFIGURATION = "FabricConfiguration";
+    static final String WORKFLOW_ACTION_ERROR_MESSAGE = "WorkflowActionErrorMessage";
+}
index e8ce828..ab83aca 100644 (file)
@@ -24,7 +24,6 @@ package org.onap.so.bpmn;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.common.data.TestDataSetup;
 import org.onap.so.bpmn.infrastructure.flowspecific.tasks.AssignNetworkBBUtils;
@@ -33,8 +32,6 @@ import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
 import org.onap.aaiclient.client.aai.AAIResourcesClient;
-import org.onap.aaiclient.client.aai.entities.AAIResultWrapper;
-import org.onap.aaiclient.client.aai.entities.Relationships;
 import org.onap.so.client.aai.mapper.AAIObjectMapper;
 import org.onap.so.client.adapter.network.mapper.NetworkAdapterObjectMapper;
 import org.onap.so.client.appc.ApplicationControllerAction;
@@ -162,5 +159,4 @@ public abstract class BaseTaskTest extends TestDataSetup {
 
     @Mock
     protected NamingRequestObject namingRequestObject;
-
 }
index 7f22c51..0a3f74c 100644 (file)
@@ -35,6 +35,7 @@ import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyList;
 import static org.mockito.ArgumentMatchers.anyObject;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
@@ -127,6 +128,10 @@ public class WorkflowActionTest extends BaseTaskTest {
 
     @Mock
     protected Environment environment;
+
+    @Mock
+    protected UserParamsServiceTraversal userParamsServiceTraversal;
+
     @InjectMocks
     protected WorkflowAction workflowAction;
     private DelegateExecution execution;
@@ -286,6 +291,8 @@ public class WorkflowActionTest extends BaseTaskTest {
         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
+        when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+                .thenReturn(prepareListWithResources());
         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
@@ -334,6 +341,8 @@ public class WorkflowActionTest extends BaseTaskTest {
         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
+        when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+                .thenReturn(prepareListWithResources());
         when(environment.getProperty("org.onap.so.cloud-owner")).thenReturn("att-aic");
         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
                 false, "att-aic")).thenReturn(northBoundRequest);
@@ -606,6 +615,8 @@ public class WorkflowActionTest extends BaseTaskTest {
         VfModuleCustomization vfModuleCustomization3 = vfModuleCustomization2;
         vfModuleCustomization3.setModelCustomizationUUID("72d9d1cd-f46d-447a-abdb-451d6fb05fa8");
 
+        when(userParamsServiceTraversal.getResourceListFromUserParams(any(), anyList(), anyString(), anyString()))
+                .thenReturn(prepareListWithResources());
         when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
                 false, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
         when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f"))
@@ -622,6 +633,7 @@ public class WorkflowActionTest extends BaseTaskTest {
                 "ActivateVolumeGroupBB", "CreateVfModuleBB", "CreateVfModuleBB", "CreateVfModuleBB",
                 "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVfModuleBB", "ActivateVnfBB",
                 "ActivateServiceInstanceBB");
+
         assertEquals(3, ebbs.get(0).getWorkflowResourceIds().getServiceInstanceId().length());
         int randomUUIDLength = UUID.randomUUID().toString().length();
         assertEquals(randomUUIDLength, ebbs.get(1).getWorkflowResourceIds().getVnfId().length());
@@ -3100,6 +3112,32 @@ public class WorkflowActionTest extends BaseTaskTest {
         }
     }
 
+    @Test
+    public void foundRelatedTest() {
+        List<Resource> resourceList = new ArrayList<>();
+        resourceList.add(new Resource(WorkflowType.PNF, "model customization id", false));
+        resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
+        resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
+        resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
+
+        assertEquals(workflowAction.foundRelated(resourceList), true);
+    }
+
+    @Test
+    public void containsWorkflowTypeTest() {
+        List<Resource> resourceList = new ArrayList<>();
+        resourceList.add(new Resource(WorkflowType.PNF, "resource id", false));
+        resourceList.add(new Resource(WorkflowType.VNF, "model customization id", false));
+        resourceList.add(new Resource(WorkflowType.NETWORK, "model customization id", false));
+        resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION, "model customization id", false));
+
+        assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.PNF), true);
+        assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.VNF), true);
+        assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORK), true);
+        assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION), true);
+        assertEquals(workflowAction.containsWorkflowType(resourceList, WorkflowType.CONFIGURATION), false);
+    }
+
     private List<Pair<WorkflowType, String>> getExpectedResourceIds() {
         List<Pair<WorkflowType, String>> resourceIds = new ArrayList<>();
         resourceIds.add(new Pair<WorkflowType, String>(WorkflowType.VNF, "testVnfId1"));
@@ -3141,4 +3179,15 @@ public class WorkflowActionTest extends BaseTaskTest {
     private String readBpmnRequestFromFile(String fileName) throws IOException {
         return new String(Files.readAllBytes(Paths.get("src/test/resources/__files/" + fileName)));
     }
+
+    private List<Resource> prepareListWithResources() {
+        List<Resource> resourceList = new ArrayList<>();
+        resourceList.add(new Resource(WorkflowType.SERVICE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
+        resourceList.add(new Resource(WorkflowType.VNF, "ab153b6e-c364-44c0-bef6-1f2982117f04", false));
+        resourceList.add(new Resource(WorkflowType.VOLUMEGROUP, "a25e8e8c-58b8-4eec-810c-97dcc1f5cb7f", false));
+        resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
+        resourceList.add(new Resource(WorkflowType.VFMODULE, "3c40d244-808e-42ca-b09a-256d83d19d0a", false));
+        resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false));
+        return resourceList;
+    }
 }