Merge "WorkflowAction, traverseAAIService refactoring stage 1"
authorLukasz Muszkieta <lukasz.muszkieta@nokia.com>
Mon, 6 Jul 2020 15:11:35 +0000 (15:11 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 6 Jul 2020 15:11:35 +0000 (15:11 +0000)
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/WorkflowActionBBTasks.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java

index fc8a54b..2921cad 100644 (file)
@@ -144,6 +144,7 @@ public class WorkflowAction {
     private static final String VOLUMEGROUP_DELETE_PATTERN = "(Un|De)(.*)Volume(.*)";
     private static final String VOLUMEGROUP_CREATE_PATTERN = "(A|C)(.*)Volume(.*)";
     private static final String CONTROLLER = "Controller";
+    private static final String DEFAULT_CLOUD_OWNER = "org.onap.so.cloud-owner";
 
     @Autowired
     protected BBInputSetup bbInputSetup;
@@ -159,10 +160,8 @@ public class WorkflowAction {
     private WorkflowActionExtractResourcesAAI workflowActionUtils;
     @Autowired
     private VrfValidation vrfValidation;
-
     @Autowired
     private Environment environment;
-    private String defaultCloudOwner = "org.onap.so.cloud-owner";
 
     public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) {
         this.bbInputSetupUtils = bbInputSetupUtils;
@@ -222,18 +221,6 @@ public class WorkflowAction {
                                 cloudOwner, serviceType);
                     }
                     Resource resourceKey = getResourceKey(sIRequest, resourceType);
-                    if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
-                        List<ExecuteBuildingBlock> configBuildingBlocks = getConfigBuildingBlocks(
-                                new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest).setOrchFlows(orchFlows)
-                                        .setRequestId(requestId).setResourceKey(resourceKey).setApiVersion(apiVersion)
-                                        .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(true)
-                                        .setVnfType(vnfType).setWorkflowResourceIds(workflowResourceIds)
-                                        .setRequestDetails(requestDetails).setExecution(execution));
-
-                        flowsToExecute.addAll(configBuildingBlocks);
-                    }
-                    orchFlows = orchFlows.stream().filter(item -> !item.getFlowName().contains(FABRIC_CONFIGURATION))
-                            .collect(Collectors.toList());
 
                     if ((requestAction.equalsIgnoreCase(REPLACEINSTANCE)
                             || requestAction.equalsIgnoreCase(REPLACEINSTANCERETAINASSIGNMENTS))
@@ -245,12 +232,48 @@ public class WorkflowAction {
                                         .setResourceId(resourceId).setRequestAction(requestAction).setaLaCarte(true)
                                         .setVnfType(vnfType).setWorkflowResourceIds(workflowResourceIds)
                                         .setRequestDetails(requestDetails).setExecution(execution));
-                    }
-                    for (OrchestrationFlow orchFlow : orchFlows) {
-                        ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
-                                apiVersion, resourceId, requestAction, true, vnfType, workflowResourceIds,
-                                requestDetails, false, null, null, false);
-                        flowsToExecute.add(ebb);
+                        for (OrchestrationFlow orchFlow : orchFlows) {
+                            if (orchFlow.getFlowName().contains(CONFIGURATION)) {
+                                List<OrchestrationFlow> configOrchFlows = new ArrayList<>();
+                                configOrchFlows.add(orchFlow);
+                                List<ExecuteBuildingBlock> configBuildingBlocks =
+                                        getConfigBuildingBlocks(new ConfigBuildingBlocksDataObject()
+                                                .setsIRequest(sIRequest).setOrchFlows(configOrchFlows)
+                                                .setRequestId(requestId).setResourceKey(resourceKey)
+                                                .setApiVersion(apiVersion).setResourceId(resourceId)
+                                                .setRequestAction(requestAction).setaLaCarte(true).setVnfType(vnfType)
+                                                .setWorkflowResourceIds(workflowResourceIds)
+                                                .setRequestDetails(requestDetails).setExecution(execution));
+                                flowsToExecute.addAll(configBuildingBlocks);
+                            } else {
+                                ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
+                                        apiVersion, resourceId, requestAction, true, vnfType, workflowResourceIds,
+                                        requestDetails, false, null, null, false);
+                                flowsToExecute.add(ebb);
+                            }
+                        }
+                    } else {
+                        if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                            List<ExecuteBuildingBlock> configBuildingBlocks =
+                                    getConfigBuildingBlocks(new ConfigBuildingBlocksDataObject().setsIRequest(sIRequest)
+                                            .setOrchFlows(orchFlows).setRequestId(requestId).setResourceKey(resourceKey)
+                                            .setApiVersion(apiVersion).setResourceId(resourceId)
+                                            .setRequestAction(requestAction).setaLaCarte(true).setVnfType(vnfType)
+                                            .setWorkflowResourceIds(workflowResourceIds)
+                                            .setRequestDetails(requestDetails).setExecution(execution));
+
+                            flowsToExecute.addAll(configBuildingBlocks);
+                        }
+                        orchFlows =
+                                orchFlows.stream().filter(item -> !item.getFlowName().contains(FABRIC_CONFIGURATION))
+                                        .collect(Collectors.toList());
+
+                        for (OrchestrationFlow orchFlow : orchFlows) {
+                            ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
+                                    apiVersion, resourceId, requestAction, true, vnfType, workflowResourceIds,
+                                    requestDetails, false, null, null, false);
+                            flowsToExecute.add(ebb);
+                        }
                     }
                 } else {
                     boolean foundRelated = false;
@@ -263,11 +286,8 @@ public class WorkflowAction {
                         if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
                             List<Map<String, Object>> userParams =
                                     sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                            for (Map<String, Object> params : userParams) {
-                                if (params.containsKey(USERPARAMSERVICE)) {
-                                    containsService = true;
-                                }
-                            }
+                            containsService =
+                                    userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
                             if (containsService) {
                                 traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
                             }
@@ -285,11 +305,8 @@ public class WorkflowAction {
                         if (sIRequest.getRequestDetails().getRequestParameters().getUserParams() != null) {
                             List<Map<String, Object>> userParams =
                                     sIRequest.getRequestDetails().getRequestParameters().getUserParams();
-                            for (Map<String, Object> params : userParams) {
-                                if (params.containsKey(USERPARAMSERVICE)) {
-                                    containsService = true;
-                                }
-                            }
+                            containsService =
+                                    userParams.stream().anyMatch(param -> param.containsKey(USERPARAMSERVICE));
                         }
                         if (containsService) {
                             foundRelated = traverseUserParamsService(execution, resourceList, sIRequest, requestAction);
@@ -317,13 +334,13 @@ public class WorkflowAction {
                     } else {
                         buildAndThrowException(execution, "Current Macro Request is not supported");
                     }
-                    String foundObjects = "";
+                    StringBuilder foundObjects = new StringBuilder();
                     for (WorkflowType type : WorkflowType.values()) {
-                        foundObjects = foundObjects + type + " - " + resourceList.stream()
-                                .filter(x -> type.equals(x.getResourceType())).collect(Collectors.toList()).size()
-                                + "    ";
+                        foundObjects.append(type).append(" - ").append(
+                                (int) resourceList.stream().filter(x -> type.equals(x.getResourceType())).count())
+                                .append("    ");
                     }
-                    logger.info("Found {}", foundObjects);
+                    logger.info("Found {}", foundObjects.toString());
 
                     if (orchFlows == null || orchFlows.isEmpty()) {
                         orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, isALaCarte,
@@ -343,8 +360,7 @@ public class WorkflowAction {
                     // By default, enable homing at VNF level for CREATEINSTANCE and ASSIGNINSTANCE
                     if (resourceType == WorkflowType.SERVICE
                             && (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE))
-                            && !resourceList.stream().filter(x -> WorkflowType.VNF.equals(x.getResourceType()))
-                                    .collect(Collectors.toList()).isEmpty()) {
+                            && resourceList.stream().anyMatch(x -> WorkflowType.VNF.equals(x.getResourceType()))) {
                         execution.setVariable("homing", true);
                         execution.setVariable("calledHoming", false);
                     }
@@ -365,11 +381,7 @@ public class WorkflowAction {
                         sIRequest.getRequestDetails().getRequestParameters().getUserParams();
                 for (Map<String, Object> params : userParams) {
                     if (params.containsKey(HOMINGSOLUTION)) {
-                        if ("none".equals(params.get(HOMINGSOLUTION))) {
-                            execution.setVariable("homing", false);
-                        } else {
-                            execution.setVariable("homing", true);
-                        }
+                        execution.setVariable("homing", !"none".equals(params.get(HOMINGSOLUTION)));
                     }
                 }
             }
@@ -424,7 +436,7 @@ public class WorkflowAction {
             return cloudConfiguration.getCloudOwner();
         }
         logger.warn("cloud owner value not found in request details, it will be set as default");
-        return environment.getProperty(defaultCloudOwner);
+        return environment.getProperty(DEFAULT_CLOUD_OWNER);
     }
 
     protected <T> List<T> getRelatedResourcesInVfModule(String vnfId, String vfModuleId, Class<T> resultClass,
@@ -490,7 +502,7 @@ public class WorkflowAction {
         String vfModuleId = dataObj.getWorkflowResourceIds().getVfModuleId();
 
         String vnfCustomizationUUID = bbInputSetupUtils.getAAIGenericVnf(vnfId).getModelCustomizationId();
-        String vfModuleCustomizationUUID = "";
+        String vfModuleCustomizationUUID;
         org.onap.aai.domain.yang.VfModule aaiVfModule = bbInputSetupUtils.getAAIVfModule(vnfId, vfModuleId);
 
         if (aaiVfModule == null) {
@@ -551,8 +563,7 @@ public class WorkflowAction {
         boolean rebuildVolumeGroups = false;
         if (dataObj.getRequestDetails().getRequestParameters() != null
                 && dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups() != null) {
-            rebuildVolumeGroups =
-                    dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups().booleanValue();
+            rebuildVolumeGroups = dataObj.getRequestDetails().getRequestParameters().getRebuildVolumeGroups();
         }
 
         Optional<VolumeGroup> volumeGroupFromVfModule =
@@ -605,7 +616,7 @@ public class WorkflowAction {
         }
         Relationships relationships = relationshipsOp.get();
         List<AAIResultWrapper> vnfcResultWrappers = relationships.getByType(AAIObjectType.VNFC);
-        if (vnfcResultWrappers.size() > 1 || vnfcResultWrappers.isEmpty()) {
+        if (vnfcResultWrappers.size() != 1) {
             logger.debug("Too many vnfcs or no vnfc found that are related to configuration");
         }
         Optional<Vnfc> vnfcOp = vnfcResultWrappers.get(0).asBean(Vnfc.class);
@@ -643,11 +654,10 @@ public class WorkflowAction {
             logger.debug(pair.getValue0() + ", " + pair.getValue1());
         }
 
-        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)).forEach(type -> {
-            resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
-                    .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
-                            retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId));
-        });
+        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
+                .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
+                        .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
+                                retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId)));
     }
 
     private String retrieveAAIResourceId(List<Pair<WorkflowType, String>> aaiResourceIds, WorkflowType resource) {
@@ -664,11 +674,10 @@ public class WorkflowAction {
 
     private void generateResourceIds(List<ExecuteBuildingBlock> flowsToExecute, List<Resource> resourceList,
             String serviceInstanceId) {
-        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE)).forEach(type -> {
-            resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
-                    .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(), null,
-                            resource.getVirtualLinkKey(), serviceInstanceId));
-        });
+        Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
+                .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
+                        .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource.getResourceId(),
+                                null, resource.getVirtualLinkKey(), serviceInstanceId)));
     }
 
     protected void updateWorkflowResourceIds(List<ExecuteBuildingBlock> flowsToExecute, WorkflowType resourceType,
@@ -923,8 +932,7 @@ public class WorkflowAction {
     }
 
     private boolean isNetworkCollectionInTheResourceList(List<Resource> resourceList) {
-        return !(resourceList.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
-                .collect(Collectors.toList()).isEmpty());
+        return resourceList.stream().anyMatch(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType());
     }
 
     private boolean isVnfCustomizationsInTheService(org.onap.so.db.catalog.beans.Service service) {
@@ -1121,12 +1129,9 @@ public class WorkflowAction {
                                             foundVfModuleOrVG = true;
                                             Resource resource = new Resource(WorkflowType.VFMODULE,
                                                     vfModuleCustomization.getModelCustomizationUUID(), false);
-                                            if (vfModuleCustomization.getVfModule().getIsBase() != null
-                                                    && vfModuleCustomization.getVfModule().getIsBase()) {
-                                                resource.setBaseVfModule(true);
-                                            } else {
-                                                resource.setBaseVfModule(false);
-                                            }
+                                            resource.setBaseVfModule(
+                                                    vfModuleCustomization.getVfModule().getIsBase() != null
+                                                            && vfModuleCustomization.getVfModule().getIsBase());
                                             resourceList.add(resource);
                                             if (vfModule.getModelInfo() != null
                                                     && vfModule.getModelInfo().getModelCustomizationUuid() != null) {
@@ -1416,7 +1421,7 @@ public class WorkflowAction {
                         true, false);
             } else if (orchFlow.getFlowName().contains(VFMODULE) || (orchFlow.getFlowName().contains(CONTROLLER)
                     && (VFMODULE).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
-                List<Resource> vfModuleResourcesSorted = null;
+                List<Resource> vfModuleResourcesSorted;
                 if (requestAction.equals(CREATEINSTANCE) || requestAction.equals(ASSIGNINSTANCE)
                         || requestAction.equals("activateInstance")) {
                     vfModuleResourcesSorted = sortVfModulesByBaseFirst(resourceList.stream()
@@ -1425,10 +1430,10 @@ public class WorkflowAction {
                     vfModuleResourcesSorted = sortVfModulesByBaseLast(resourceList.stream()
                             .filter(x -> WorkflowType.VFMODULE == x.getResourceType()).collect(Collectors.toList()));
                 }
-                for (int i = 0; i < vfModuleResourcesSorted.size(); i++) {
-                    flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, vfModuleResourcesSorted.get(i),
-                            apiVersion, resourceId, requestAction, false, vnfType, workflowResourceIds, requestDetails,
-                            false, null, null, false));
+                for (Resource resource : vfModuleResourcesSorted) {
+                    flowsToExecute.add(buildExecuteBuildingBlock(orchFlow, requestId, resource, apiVersion, resourceId,
+                            requestAction, false, vnfType, workflowResourceIds, requestDetails, false, null, null,
+                            false));
                 }
             } else if (orchFlow.getFlowName().contains(VOLUMEGROUP)) {
                 if (requestAction.equalsIgnoreCase(REPLACEINSTANCE)
@@ -1464,8 +1469,8 @@ public class WorkflowAction {
                 new BuildingBlock().setBpmnFlowName(orchFlow.getFlowName()).setMsoId(UUID.randomUUID().toString())
                         .setIsVirtualLink(isVirtualLink).setVirtualLinkKey(virtualLinkKey)
                         .setKey(Optional.ofNullable(resource).map(Resource::getResourceId).orElse(""));
-        Optional.ofNullable(orchFlow.getBpmnAction()).ifPresent(action -> buildingBlock.setBpmnAction(action));
-        Optional.ofNullable(orchFlow.getBpmnScope()).ifPresent(scope -> buildingBlock.setBpmnScope(scope));
+        Optional.ofNullable(orchFlow.getBpmnAction()).ifPresent(buildingBlock::setBpmnAction);
+        Optional.ofNullable(orchFlow.getBpmnScope()).ifPresent(buildingBlock::setBpmnScope);
 
         if (resource != null
                 && (orchFlow.getFlowName().contains(VOLUMEGROUP) && (requestAction.equalsIgnoreCase(REPLACEINSTANCE)
@@ -1480,16 +1485,21 @@ public class WorkflowAction {
                 .setRequestDetails(requestDetails);
 
         if (resource != null && (isConfiguration || resource.getResourceType().equals(WorkflowType.CONFIGURATION))) {
-            ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
-            Optional.ofNullable(vnfcName).ifPresent(name -> configurationResourceKeys.setVnfcName(name));
-            configurationResourceKeys.setCvnfcCustomizationUUID(resource.getCvnfModuleCustomizationId());
-            configurationResourceKeys.setVfModuleCustomizationUUID(resource.getVfModuleCustomizationId());
-            configurationResourceKeys.setVnfResourceCustomizationUUID(resource.getVnfCustomizationId());
+            ConfigurationResourceKeys configurationResourceKeys = getConfigurationResourceKeys(resource, vnfcName);
             executeBuildingBlock.setConfigurationResourceKeys(configurationResourceKeys);
         }
         return executeBuildingBlock;
     }
 
+    private ConfigurationResourceKeys getConfigurationResourceKeys(Resource resource, String vnfcName) {
+        ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+        Optional.ofNullable(vnfcName).ifPresent(configurationResourceKeys::setVnfcName);
+        configurationResourceKeys.setCvnfcCustomizationUUID(resource.getCvnfModuleCustomizationId());
+        configurationResourceKeys.setVfModuleCustomizationUUID(resource.getVfModuleCustomizationId());
+        configurationResourceKeys.setVnfResourceCustomizationUUID(resource.getVnfCustomizationId());
+        return configurationResourceKeys;
+    }
+
     protected List<OrchestrationFlow> queryNorthBoundRequestCatalogDb(DelegateExecution execution, String requestAction,
             WorkflowType resourceName, boolean aLaCarte, String cloudOwner) {
         return this.queryNorthBoundRequestCatalogDb(execution, requestAction, resourceName, aLaCarte, cloudOwner, "");
@@ -1498,7 +1508,7 @@ public class WorkflowAction {
     protected List<OrchestrationFlow> queryNorthBoundRequestCatalogDb(DelegateExecution execution, String requestAction,
             WorkflowType resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
         List<OrchestrationFlow> listToExecute = new ArrayList<>();
-        NorthBoundRequest northBoundRequest = null;
+        NorthBoundRequest northBoundRequest;
         if (serviceType.equalsIgnoreCase(SERVICE_TYPE_TRANSPORT)
                 || serviceType.equalsIgnoreCase(SERVICE_TYPE_BONDING)) {
             northBoundRequest =
@@ -1579,7 +1589,7 @@ public class WorkflowAction {
     }
 
     protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails) throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails) throws DuplicateNameException {
         String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId();
         String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType();
         if (instanceName != null) {
@@ -1643,8 +1653,7 @@ public class WorkflowAction {
     }
 
     protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<GenericVnf> vnf = bbInputSetupUtils
                 .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName);
         if (vnf.isPresent()) {
@@ -1688,8 +1697,7 @@ public class WorkflowAction {
     }
 
     protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<VolumeGroup> volumeGroup =
                 bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName);
         if (volumeGroup.isPresent()) {
@@ -1707,8 +1715,7 @@ public class WorkflowAction {
     }
 
     protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName,
-            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds)
-            throws DuplicateNameException, MultipleObjectsFoundException {
+            RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException {
         Optional<org.onap.aai.domain.yang.Configuration> configuration =
                 bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance(
                         workflowResourceIds.getServiceInstanceId(), instanceName);
index 9d68b5a..6cb522e 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.workflow.tasks;
 
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-import javax.persistence.EntityNotFoundException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.camunda.bpm.engine.delegate.DelegateExecution;
-import org.onap.aai.domain.yang.GenericVnf;
-import org.onap.aai.domain.yang.InstanceGroup;
-import org.onap.aai.domain.yang.L3Network;
-import org.onap.aai.domain.yang.ServiceInstance;
-import org.onap.aai.domain.yang.VfModule;
-import org.onap.aai.domain.yang.Vnfc;
-import org.onap.aai.domain.yang.VolumeGroup;
+import org.onap.aai.domain.yang.*;
+import org.onap.aaiclient.client.aai.AAIObjectType;
+import org.onap.aaiclient.client.aai.entities.Configuration;
 import org.onap.so.bpmn.common.DelegateExecutionImpl;
 import org.onap.so.bpmn.common.listener.db.RequestsDbListenerRunner;
 import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
@@ -44,8 +36,6 @@ import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
 import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
-import org.onap.aaiclient.client.aai.AAIObjectType;
-import org.onap.aaiclient.client.aai.entities.Configuration;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.client.CatalogDbClient;
@@ -58,8 +48,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import javax.persistence.EntityNotFoundException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.stream.Collectors;
 
 @Component
 public class WorkflowActionBBTasks {
@@ -108,11 +103,7 @@ public class WorkflowActionBBTasks {
 
         execution.setVariable("buildingBlock", ebb);
         currentSequence++;
-        if (currentSequence >= flowsToExecute.size()) {
-            execution.setVariable(COMPLETED, true);
-        } else {
-            execution.setVariable(COMPLETED, false);
-        }
+        execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
         execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
     }
 
@@ -152,7 +143,7 @@ public class WorkflowActionBBTasks {
     protected Long getPercentProgress(int completedBBs, int totalBBs) {
         double ratio = (completedBBs / (totalBBs * 1.0));
         int percentProgress = (int) (ratio * 95);
-        return new Long(percentProgress + 5);
+        return (long) (percentProgress + 5);
     }
 
     protected String getStatusMessage(String completedBB, String nextBB, int completedBBs, int remainingBBs) {
@@ -222,7 +213,7 @@ public class WorkflowActionBBTasks {
             final boolean aLaCarte = (boolean) execution.getVariable(G_ALACARTE);
             final String resourceName = (String) execution.getVariable("resourceName");
             String statusMessage = (String) execution.getVariable("StatusMessage");
-            String macroAction = "";
+            String macroAction;
             if (statusMessage == null) {
                 if (aLaCarte) {
                     macroAction = "ALaCarte-" + resourceName + "-" + action + " request was executed correctly.";
@@ -237,7 +228,7 @@ public class WorkflowActionBBTasks {
             request.setEndTime(endTime);
             request.setFlowStatus("Successfully completed all Building Blocks");
             request.setStatusMessage(macroAction);
-            request.setProgress(Long.valueOf(100));
+            request.setProgress(100L);
             request.setRequestStatus("COMPLETE");
             request.setLastModifiedBy("CamundaBPMN");
             requestsDbListener.post(request, new DelegateExecutionImpl(execution));
@@ -294,14 +285,11 @@ public class WorkflowActionBBTasks {
             List<ExecuteBuildingBlock> flowsToExecute =
                     (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 
-            List<ExecuteBuildingBlock> flowsToExecuteChangeBBs = new ArrayList();
-            for (int i = 0; i < flowsToExecute.size(); i++) {
-                if (flowsToExecute.get(i).getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
-                    flowsToExecuteChangeBBs.add(flowsToExecute.get(i));
-                }
-            }
+            List<ExecuteBuildingBlock> flowsToExecuteChangeBBs = flowsToExecute.stream()
+                    .filter(buildingBlock -> buildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change"))
+                    .collect(Collectors.toList());
 
-            List<ExecuteBuildingBlock> rollbackFlows = new ArrayList();
+            List<ExecuteBuildingBlock> rollbackFlows = new ArrayList<>();
             int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
             int listSize = flowsToExecute.size();
 
@@ -339,25 +327,24 @@ public class WorkflowActionBBTasks {
             }
 
             String handlingCode = (String) execution.getVariable(HANDLINGCODE);
-            List<ExecuteBuildingBlock> rollbackFlowsFiltered = new ArrayList<>();
-            rollbackFlowsFiltered.addAll(rollbackFlows);
+            List<ExecuteBuildingBlock> rollbackFlowsFiltered = new ArrayList<>(rollbackFlows);
             if ("RollbackToAssigned".equals(handlingCode) || ROLLBACKTOCREATED.equals(handlingCode)) {
-                for (int i = 0; i < rollbackFlows.size(); i++) {
-                    if (rollbackFlows.get(i).getBuildingBlock().getBpmnFlowName().contains("Unassign") && !rollbackFlows
-                            .get(i).getBuildingBlock().getBpmnFlowName().contains("FabricConfiguration")) {
-                        rollbackFlowsFiltered.remove(rollbackFlows.get(i));
-                    } else if (rollbackFlows.get(i).getBuildingBlock().getBpmnFlowName().contains("Delete")
+                for (ExecuteBuildingBlock rollbackFlow : rollbackFlows) {
+                    if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("Unassign")
+                            && !rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("FabricConfiguration")) {
+                        rollbackFlowsFiltered.remove(rollbackFlow);
+                    } else if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("Delete")
                             && ROLLBACKTOCREATED.equals(handlingCode)) {
-                        rollbackFlowsFiltered.remove(rollbackFlows.get(i));
+                        rollbackFlowsFiltered.remove(rollbackFlow);
                     }
                 }
             }
 
-            List<ExecuteBuildingBlock> rollbackFlowsFilteredNonChangeBBs = new ArrayList();
+            List<ExecuteBuildingBlock> rollbackFlowsFilteredNonChangeBBs = new ArrayList<>();
             if (action.equals(REPLACEINSTANCE) && resourceName.equals(VFMODULE)) {
-                for (int i = 0; i < rollbackFlowsFiltered.size(); i++) {
-                    if (!rollbackFlowsFiltered.get(i).getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
-                        rollbackFlowsFilteredNonChangeBBs.add(rollbackFlowsFiltered.get(i));
+                for (ExecuteBuildingBlock executeBuildingBlock : rollbackFlowsFiltered) {
+                    if (!executeBuildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
+                        rollbackFlowsFilteredNonChangeBBs.add(executeBuildingBlock);
                     }
                 }
                 rollbackFlowsFiltered.clear();
@@ -366,10 +353,7 @@ public class WorkflowActionBBTasks {
             }
 
             workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
-            if (rollbackFlows.isEmpty())
-                execution.setVariable("isRollbackNeeded", false);
-            else
-                execution.setVariable("isRollbackNeeded", true);
+            execution.setVariable("isRollbackNeeded", !rollbackFlows.isEmpty());
             execution.setVariable("flowsToExecute", rollbackFlowsFiltered);
             execution.setVariable(HANDLINGCODE, "PreformingRollback");
             execution.setVariable("isRollback", true);
@@ -456,9 +440,8 @@ public class WorkflowActionBBTasks {
                     ExecuteBuildingBlock addConfigBB = getExecuteBBForConfig(ADD_FABRIC_CONFIGURATION_BB, ebb,
                             configurationId, configurationResourceKeys);
                     flowsToExecute.add(addConfigBB);
-                    flowsToExecute.stream()
-                            .forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
-                                    executeBB.getBuildingBlock().getBpmnFlowName()));
+                    flowsToExecute.forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
+                            executeBB.getBuildingBlock().getBpmnFlowName()));
                     execution.setVariable("flowsToExecute", flowsToExecute);
                     execution.setVariable(COMPLETED, false);
                 } else {
@@ -493,12 +476,10 @@ public class WorkflowActionBBTasks {
 
         WorkflowResourceIds workflowResourceIds = ebb.getWorkflowResourceIds();
         workflowResourceIds.setConfigurationId(configurationId);
-        ExecuteBuildingBlock configBB = new ExecuteBuildingBlock().setaLaCarte(ebb.isaLaCarte())
-                .setApiVersion(ebb.getApiVersion()).setRequestAction(ebb.getRequestAction())
-                .setVnfType(ebb.getVnfType()).setRequestId(ebb.getRequestId())
+        return new ExecuteBuildingBlock().setaLaCarte(ebb.isaLaCarte()).setApiVersion(ebb.getApiVersion())
+                .setRequestAction(ebb.getRequestAction()).setVnfType(ebb.getVnfType()).setRequestId(ebb.getRequestId())
                 .setRequestDetails(ebb.getRequestDetails()).setBuildingBlock(buildingBlock)
                 .setWorkflowResourceIds(workflowResourceIds).setConfigurationResourceKeys(configurationResourceKeys);
-        return configBB;
     }
 
     protected void setInstanceName(String resourceId, WorkflowType resourceType, InfraActiveRequests request) {
@@ -522,9 +503,7 @@ public class WorkflowActionBBTasks {
             } else if (resourceType == WorkflowType.VOLUMEGROUP && request.getVolumeGroupName() == null) {
                 Optional<VolumeGroup> volumeGroup =
                         bbInputSetupUtils.getRelatedVolumeGroupByIdFromVnf(request.getVnfId(), resourceId);
-                if (volumeGroup.isPresent()) {
-                    request.setVolumeGroupName(volumeGroup.get().getVolumeGroupName());
-                }
+                volumeGroup.ifPresent(group -> request.setVolumeGroupName(group.getVolumeGroupName()));
             } else if (resourceType == WorkflowType.NETWORK && request.getNetworkName() == null) {
                 L3Network network = bbInputSetupUtils.getAAIL3Network(resourceId);
                 if (network != null) {
index a736d85..b538718 100644 (file)
@@ -54,6 +54,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.anyObject;
 import static org.mockito.ArgumentMatchers.anyString;
@@ -173,7 +174,7 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
         workflowActionBBTasks.selectBB(execution);
         boolean success = (boolean) execution.getVariable("completed");
         int currentSequence = (int) execution.getVariable("gCurrentSequence");
-        assertEquals(false, success);
+        assertFalse(success);
         assertEquals(1, currentSequence);
     }
 
index e24eaf0..cf8d98e 100644 (file)
@@ -140,6 +140,11 @@ public class WorkflowActionTest extends BaseTaskTest {
             "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB", "UnassignVolumeGroupBB",
             "AssignVolumeGroupBB", "ChangeModelVfModuleBB", "CreateVolumeGroupBB", "ActivateVolumeGroupBB",
             "CreateVfModuleBB", "ActivateVfModuleBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
+    private List<OrchestrationFlow> replaceVfModuleWithFabricOrchFlows = createFlowList("DeleteFabricConfigurationBB",
+            "DeactivateVfModuleBB", "DeleteVfModuleATTBB", "DeactivateVolumeGroupBB", "DeleteVolumeGroupBB",
+            "UnassignVFModuleBB", "UnassignVolumeGroupBB", "AssignVolumeGroupBB", "AssignVfModuleBB",
+            "CreateVfModuleBB", "ActivateVfModuleBB", "AddFabricConfigurationBB", "CreateVolumeGroupBB",
+            "ActivateVolumeGroupBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
 
     @Before
     public void before() throws Exception {
@@ -1359,6 +1364,74 @@ public class WorkflowActionTest extends BaseTaskTest {
                 "ChangeModelServiceInstanceBB");
     }
 
+    @Test
+    public void selectExecutionListALaCarteVfModuleWithFabricKeepVolumeGroupReplaceTest() throws Exception {
+        String gAction = "replaceInstance";
+        String resource = "VfModule";
+        execution.setVariable("mso-request-id", "00f704ca-c5e5-4f95-a72c-6889db7b0688");
+        execution.setVariable("requestAction", gAction);
+        String bpmnRequest =
+                new String(Files.readAllBytes(Paths.get("src/test/resources/__files/VfModuleCreateWithFabric.json")));
+        execution.setVariable("bpmnRequest", bpmnRequest);
+        execution.setVariable("aLaCarte", true);
+        execution.setVariable("apiVersion", "7");
+        execution.setVariable("requestUri",
+                "v7/serviceInstances/f647e3ef-6d2e-4cd3-bff4-8df4634208de/vnfs/b80b16a5-f80d-4ffa-91c8-bd47c7438a3d/vfModules/1234");
+        execution.setVariable("vnfId", "b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
+        execution.setVariable("vfModuleId", "1234");
+
+        org.onap.aai.domain.yang.GenericVnf vnf = new org.onap.aai.domain.yang.GenericVnf();
+        vnf.setVnfId("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d");
+        vnf.setModelCustomizationId("modelCustomizationId");
+        when(bbSetupUtils.getAAIGenericVnf(any())).thenReturn(vnf);
+
+        org.onap.aai.domain.yang.VfModule vfModuleFromAAI = new org.onap.aai.domain.yang.VfModule();
+        vfModuleFromAAI.setModelCustomizationId("modelCustomizationId");
+        vfModuleFromAAI.setVfModuleId("1234");
+        when(bbSetupUtils.getAAIVfModule(any(), any())).thenReturn(vfModuleFromAAI);
+
+        VolumeGroup volumeGroup = new VolumeGroup();
+        volumeGroup.setVolumeGroupId("volumeGroupId");
+        doReturn(Optional.of(volumeGroup)).when(bbSetupUtils)
+                .getRelatedVolumeGroupFromVfModule("b80b16a5-f80d-4ffa-91c8-bd47c7438a3d", "1234");
+
+        VfModuleCustomization vfModuleCustomization = new VfModuleCustomization();
+        vfModuleCustomization.setVolumeHeatEnv(new HeatEnvironment());
+        org.onap.so.db.catalog.beans.VfModule vfModule = new org.onap.so.db.catalog.beans.VfModule();
+        vfModule.setVolumeHeatTemplate(new HeatTemplate());
+        vfModuleCustomization.setVfModule(vfModule);
+        when(catalogDbClient.getVfModuleCustomizationByModelCuztomizationUUID("9a6d01fd-19a7-490a-9800-460830a12e0b"))
+                .thenReturn(vfModuleCustomization);
+        List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+        org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+        vnfc.setModelInvariantId("modelInvariantId");
+        vnfc.setVnfcName("testVnfcName");
+        vnfcs.add(vnfc);
+        doReturn(vnfcs).when(SPY_workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+        List<org.onap.aai.domain.yang.Configuration> configurations =
+                new ArrayList<org.onap.aai.domain.yang.Configuration>();
+        org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration();
+        configuration.setConfigurationId("configurationId");
+        configuration.setModelCustomizationId("modelCustimizationId");
+        configuration.setConfigurationName("testConfigurationName");
+        configurations.add(configuration);
+        doReturn(configurations).when(SPY_workflowAction).getRelatedResourcesInVnfc(any(), any(), any());
+
+        doReturn("testVnfcName").when(SPY_workflowAction).getVnfcNameForConfiguration(any());
+
+        NorthBoundRequest northBoundRequest = new NorthBoundRequest();
+        northBoundRequest.setOrchestrationFlowList(replaceVfModuleWithFabricOrchFlows);
+        when(catalogDbClient.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(gAction, resource,
+                true, "my-custom-cloud-owner")).thenReturn(northBoundRequest);
+        SPY_workflowAction.selectExecutionList(execution);
+        List<ExecuteBuildingBlock> ebbs = (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+
+        assertEqualsBulkFlowName(ebbs, "DeleteFabricConfigurationBB", "DeactivateVfModuleBB", "DeleteVfModuleATTBB",
+                "UnassignVFModuleBB", "AssignVfModuleBB", "CreateVfModuleBB", "ActivateVfModuleBB",
+                "AddFabricConfigurationBB", "ChangeModelVnfBB", "ChangeModelServiceInstanceBB");
+    }
+
     @Test
     public void selectExecutionListALaCarteVfModuleKeepVolumeGroupReplaceRetainAssignmentsTest() throws Exception {
         String gAction = "replaceInstanceRetainAssignments";