Merge "[WIP] WorkflowAction refactoring"
authorLukasz Muszkieta <lukasz.muszkieta@nokia.com>
Mon, 22 Jun 2020 13:20:53 +0000 (13:20 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 22 Jun 2020 13:20:53 +0000 (13:20 +0000)
1  2 
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java

@@@ -176,25 -176,32 +176,32 @@@ public class WorkflowAction 
              final String bpmnRequest = (String) execution.getVariable(BBConstants.G_BPMN_REQUEST);
              ServiceInstancesRequest sIRequest =
                      new ObjectMapper().readValue(bpmnRequest, ServiceInstancesRequest.class);
-             RequestDetails requestDetails = sIRequest.getRequestDetails();
-             String uri = (String) execution.getVariable(BBConstants.G_URI);
              final String requestId = (String) execution.getVariable(BBConstants.G_REQUEST_ID);
-             final boolean aLaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE);
+             String uri = (String) execution.getVariable(BBConstants.G_URI);
              boolean isResume = isUriResume(uri);
-             String requestAction = (String) execution.getVariable(BBConstants.G_ACTION);
+             final boolean isALaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE);
+             Resource resource = getResource(bbInputSetupUtils, isResume, isALaCarte, uri, requestId);
              WorkflowResourceIds workflowResourceIds = populateResourceIdsFromApiHandler(execution);
-             Resource resource = getResource(bbInputSetupUtils, isResume, aLaCarte, uri, requestId);
+             RequestDetails requestDetails = sIRequest.getRequestDetails();
+             String requestAction = (String) execution.getVariable(BBConstants.G_ACTION);
              String resourceId = getResourceId(resource, requestAction, requestDetails, workflowResourceIds);
              WorkflowType resourceType = resource.getResourceType();
              String serviceInstanceId = getServiceInstanceId(execution, resourceId, resourceType);
              fillExecution(execution, requestDetails.getRequestInfo().getSuppressRollback(), resourceId, resourceType);
              List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
-             if (isRequestMacroServiceResume(aLaCarte, resourceType, requestAction, serviceInstanceId)) {
+             if (isRequestMacroServiceResume(isALaCarte, resourceType, requestAction, serviceInstanceId)) {
                  flowsToExecute = bbInputSetupUtils.loadOriginalFlowExecutionPath(requestId);
                  if (flowsToExecute == null) {
                      buildAndThrowException(execution, "Could not resume Macro flow. Error loading execution path.");
                  }
-             } else if (aLaCarte && isResume) {
+             } else if (isALaCarte && isResume) {
                  flowsToExecute = bbInputSetupUtils.loadOriginalFlowExecutionPath(requestId);
                  if (flowsToExecute == null) {
                      buildAndThrowException(execution,
                  final String apiVersion = (String) execution.getVariable(BBConstants.G_APIVERSION);
                  final String serviceType =
                          Optional.ofNullable((String) execution.getVariable(BBConstants.G_SERVICE_TYPE)).orElse("");
-                 if (aLaCarte) {
+                 if (isALaCarte) {
                      if (orchFlows == null || orchFlows.isEmpty()) {
                          orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, true,
                                  cloudOwner, serviceType);
                      }
                      Resource resourceKey = getResourceKey(sIRequest, resourceType);
-                     boolean isConfiguration = isConfiguration(orchFlows);
-                     if (isConfiguration && !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));
+                     if (isConfiguration(orchFlows) && !requestAction.equalsIgnoreCase(CREATEINSTANCE)) {
+                         ConfigBuildingBlocksDataObject configBuildingBlocksDataObject =
+                                 new ConfigBuildingBlocksDataObject();
+                         configBuildingBlocksDataObject.setsIRequest(sIRequest);
+                         configBuildingBlocksDataObject.setOrchFlows(orchFlows);
+                         configBuildingBlocksDataObject.setRequestId(requestId);
+                         configBuildingBlocksDataObject.setResourceKey(resourceKey);
+                         configBuildingBlocksDataObject.setApiVersion(apiVersion);
+                         configBuildingBlocksDataObject.setResourceId(resourceId);
+                         configBuildingBlocksDataObject.setRequestAction(requestAction);
+                         configBuildingBlocksDataObject.setaLaCarte(true);
+                         configBuildingBlocksDataObject.setVnfType(vnfType);
+                         configBuildingBlocksDataObject.setWorkflowResourceIds(workflowResourceIds);
+                         configBuildingBlocksDataObject.setRequestDetails(requestDetails);
+                         configBuildingBlocksDataObject.setExecution(execution);
+                         List<ExecuteBuildingBlock> configBuildingBlocks =
+                                 getConfigBuildingBlocks(configBuildingBlocksDataObject);
  
                          flowsToExecute.addAll(configBuildingBlocks);
                      }
                              || requestAction.equalsIgnoreCase(REPLACEINSTANCERETAINASSIGNMENTS))
                              && resourceType.equals(WorkflowType.VFMODULE)) {
                          logger.debug("Build a BB list for replacing BB modules");
-                         orchFlows = getVfModuleReplaceBuildingBlocks(
-                                 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));
+                         ConfigBuildingBlocksDataObject configBuildingBlocksDataObject =
+                                 new ConfigBuildingBlocksDataObject();
+                         configBuildingBlocksDataObject.setsIRequest(sIRequest);
+                         configBuildingBlocksDataObject.setOrchFlows(orchFlows);
+                         configBuildingBlocksDataObject.setRequestId(requestId);
+                         configBuildingBlocksDataObject.setResourceKey(resourceKey);
+                         configBuildingBlocksDataObject.setApiVersion(apiVersion);
+                         configBuildingBlocksDataObject.setResourceId(resourceId);
+                         configBuildingBlocksDataObject.setRequestAction(requestAction);
+                         configBuildingBlocksDataObject.setaLaCarte(true);
+                         configBuildingBlocksDataObject.setVnfType(vnfType);
+                         configBuildingBlocksDataObject.setWorkflowResourceIds(workflowResourceIds);
+                         configBuildingBlocksDataObject.setRequestDetails(requestDetails);
+                         configBuildingBlocksDataObject.setExecution(execution);
+                         orchFlows = getVfModuleReplaceBuildingBlocks(configBuildingBlocksDataObject);
                      }
                      for (OrchestrationFlow orchFlow : orchFlows) {
                          ExecuteBuildingBlock ebb = buildExecuteBuildingBlock(orchFlow, requestId, resourceKey,
                      logger.info("Found {}", foundObjects);
  
                      if (orchFlows == null || orchFlows.isEmpty()) {
-                         orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, aLaCarte,
+                         orchFlows = queryNorthBoundRequestCatalogDb(execution, requestAction, resourceType, isALaCarte,
                                  cloudOwner, serviceType);
                      }
                      boolean vnfReplace = false;
                      }
                      flowsToExecute = buildExecuteBuildingBlockList(orchFlows, resourceList, requestId, apiVersion,
                              resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, vnfReplace);
 -                    if (!resourceList.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
 -                            .collect(Collectors.toList()).isEmpty()) {
 +                    if (isNetworkCollectionInTheResourceList(resourceList)) {
                          logger.info("Sorting for Vlan Tagging");
                          flowsToExecute = sortExecutionPathByObjectForVlanTagging(flowsToExecute, requestAction);
                      }
  
      protected void traverseNetworkCollection(DelegateExecution execution, List<Resource> resourceList,
              org.onap.so.db.catalog.beans.Service service) {
 -        if (service.getVnfCustomizations() == null || service.getVnfCustomizations().isEmpty()) {
 +        if (isVnfCustomizationsEmpty(service)) {
              List<CollectionResourceCustomization> customizations = service.getCollectionResourceCustomizations();
              if (customizations.isEmpty()) {
                  logger.debug("No Collections found. CollectionResourceCustomization list is empty.");
              } else {
                  CollectionResourceCustomization collectionResourceCustomization =
                          findCatalogNetworkCollection(execution, service);
 -                if (collectionResourceCustomization != null) {
 -                    resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION,
 -                            collectionResourceCustomization.getModelCustomizationUUID(), false));
 -                    logger.debug("Found a network collection");
 -                    if (collectionResourceCustomization.getCollectionResource() != null) {
 -                        if (collectionResourceCustomization.getCollectionResource().getInstanceGroup() != null) {
 -                            String toscaNodeType = collectionResourceCustomization.getCollectionResource()
 -                                    .getInstanceGroup().getToscaNodeType();
 -                            if (toscaNodeType != null && toscaNodeType.contains(NETWORKCOLLECTION)) {
 -                                int minNetworks = 0;
 -                                org.onap.so.db.catalog.beans.InstanceGroup instanceGroup =
 -                                        collectionResourceCustomization.getCollectionResource().getInstanceGroup();
 -                                CollectionResourceInstanceGroupCustomization collectionInstCust = null;
 -                                if (!instanceGroup.getCollectionInstanceGroupCustomizations().isEmpty()) {
 -                                    for (CollectionResourceInstanceGroupCustomization collectionInstanceGroupTemp : instanceGroup
 -                                            .getCollectionInstanceGroupCustomizations()) {
 -                                        if (collectionInstanceGroupTemp.getModelCustomizationUUID().equalsIgnoreCase(
 -                                                collectionResourceCustomization.getModelCustomizationUUID())) {
 -                                            collectionInstCust = collectionInstanceGroupTemp;
 -                                            break;
 -                                        }
 -                                    }
 -                                    if (collectionInstCust != null
 -                                            && collectionInstCust.getSubInterfaceNetworkQuantity() != null) {
 -                                        minNetworks = collectionInstCust.getSubInterfaceNetworkQuantity();
 -                                    }
 -                                }
 -                                logger.debug("minNetworks: {}", minNetworks);
 -                                CollectionNetworkResourceCustomization collectionNetworkResourceCust = null;
 -                                for (CollectionNetworkResourceCustomization collectionNetworkTemp : instanceGroup
 -                                        .getCollectionNetworkResourceCustomizations()) {
 -                                    if (collectionNetworkTemp.getNetworkResourceCustomization()
 -                                            .getModelCustomizationUUID().equalsIgnoreCase(
 -                                                    collectionResourceCustomization.getModelCustomizationUUID())) {
 -                                        collectionNetworkResourceCust = collectionNetworkTemp;
 -                                        break;
 -                                    }
 -                                }
 -                                for (int i = 0; i < minNetworks; i++) {
 -                                    if (collectionNetworkResourceCust != null && collectionInstCust != null) {
 -                                        Resource resource = new Resource(WorkflowType.VIRTUAL_LINK,
 -                                                collectionNetworkResourceCust.getModelCustomizationUUID(), false);
 -                                        resource.setVirtualLinkKey(Integer.toString(i));
 -                                        resourceList.add(resource);
 -                                    }
 +                traverseNetworkCollectionResourceCustomization(resourceList, collectionResourceCustomization);
 +            }
 +            traverseNetworkCollectionCustomization(resourceList, service);
 +        } else {
 +            buildAndThrowException(execution,
 +                    "Cannot orchestrate Service-Macro-Create without user params with a vnf. Please update ASDC model for new macro orchestration support or add service_recipe records to route to old macro flows");
 +        }
 +    }
 +
 +    private void traverseNetworkCollectionResourceCustomization(List<Resource> resourceList,
 +            CollectionResourceCustomization collectionResourceCustomization) {
 +        if (collectionResourceCustomization != null) {
 +            resourceList.add(new Resource(WorkflowType.NETWORKCOLLECTION,
 +                    collectionResourceCustomization.getModelCustomizationUUID(), false));
 +            logger.debug("Found a network collection");
 +            if (collectionResourceCustomization.getCollectionResource() != null) {
 +                if (collectionResourceCustomization.getCollectionResource().getInstanceGroup() != null) {
 +                    String toscaNodeType = collectionResourceCustomization.getCollectionResource().getInstanceGroup()
 +                            .getToscaNodeType();
 +                    if (toscaNodeType != null && toscaNodeType.contains(NETWORKCOLLECTION)) {
 +                        int minNetworks = 0;
 +                        org.onap.so.db.catalog.beans.InstanceGroup instanceGroup =
 +                                collectionResourceCustomization.getCollectionResource().getInstanceGroup();
 +                        CollectionResourceInstanceGroupCustomization collectionInstCust = null;
 +                        if (!instanceGroup.getCollectionInstanceGroupCustomizations().isEmpty()) {
 +                            for (CollectionResourceInstanceGroupCustomization collectionInstanceGroupTemp : instanceGroup
 +                                    .getCollectionInstanceGroupCustomizations()) {
 +                                if (collectionInstanceGroupTemp.getModelCustomizationUUID().equalsIgnoreCase(
 +                                        collectionResourceCustomization.getModelCustomizationUUID())) {
 +                                    collectionInstCust = collectionInstanceGroupTemp;
 +                                    break;
                                  }
 -                            } else {
 -                                logger.debug("Instance Group tosca node type does not contain NetworkCollection:  {}",
 -                                        toscaNodeType);
                              }
 -                        } else {
 -                            logger.debug("No Instance Group found for network collection.");
 +                            if (collectionInstCust != null
 +                                    && collectionInstCust.getSubInterfaceNetworkQuantity() != null) {
 +                                minNetworks = collectionInstCust.getSubInterfaceNetworkQuantity();
 +                            }
 +                        }
 +                        logger.debug("minNetworks: {}", minNetworks);
 +                        CollectionNetworkResourceCustomization collectionNetworkResourceCust = null;
 +                        for (CollectionNetworkResourceCustomization collectionNetworkTemp : instanceGroup
 +                                .getCollectionNetworkResourceCustomizations()) {
 +                            if (collectionNetworkTemp.getNetworkResourceCustomization().getModelCustomizationUUID()
 +                                    .equalsIgnoreCase(collectionResourceCustomization.getModelCustomizationUUID())) {
 +                                collectionNetworkResourceCust = collectionNetworkTemp;
 +                                break;
 +                            }
 +                        }
 +                        for (int i = 0; i < minNetworks; i++) {
 +                            if (collectionNetworkResourceCust != null && collectionInstCust != null) {
 +                                Resource resource = new Resource(WorkflowType.VIRTUAL_LINK,
 +                                        collectionNetworkResourceCust.getModelCustomizationUUID(), false);
 +                                resource.setVirtualLinkKey(Integer.toString(i));
 +                                resourceList.add(resource);
 +                            }
                          }
                      } else {
 -                        logger.debug("No Network Collection found. collectionResource is null");
 +                        logger.debug("Instance Group tosca node type does not contain NetworkCollection:  {}",
 +                                toscaNodeType);
                      }
                  } else {
 -                    logger.debug("No Network Collection Customization found");
 -                }
 -            }
 -            if (resourceList.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
 -                    .collect(Collectors.toList()).isEmpty()) {
 -                if (service.getNetworkCustomizations() == null) {
 -                    logger.debug("No networks were found on this service model");
 -                } else {
 -                    for (int i = 0; i < service.getNetworkCustomizations().size(); i++) {
 -                        resourceList.add(new Resource(WorkflowType.NETWORK,
 -                                service.getNetworkCustomizations().get(i).getModelCustomizationUUID(), false));
 -                    }
 +                    logger.debug("No Instance Group found for network collection.");
                  }
 +            } else {
 +                logger.debug("No Network Collection found. collectionResource is null");
              }
          } else {
 -            buildAndThrowException(execution,
 -                    "Cannot orchestrate Service-Macro-Create without user params with a vnf. Please update ASDC model for new macro orchestration support or add service_recipe records to route to old macro flows");
 +            logger.debug("No Network Collection Customization found");
 +        }
 +    }
 +
 +    private void traverseNetworkCollectionCustomization(List<Resource> resourceList,
 +            org.onap.so.db.catalog.beans.Service service) {
 +        if (isNetworkCollectionInTheResourceList(resourceList)) {
 +            return;
 +        }
 +        if (service.getNetworkCustomizations() == null) {
 +            logger.debug("No networks were found on this service model");
 +            return;
 +        }
 +        for (int i = 0; i < service.getNetworkCustomizations().size(); i++) {
 +            resourceList.add(new Resource(WorkflowType.NETWORK,
 +                    service.getNetworkCustomizations().get(i).getModelCustomizationUUID(), false));
          }
      }
  
 +    private boolean isNetworkCollectionInTheResourceList(List<Resource> resourceList) {
 +        return !(resourceList.stream().filter(x -> WorkflowType.NETWORKCOLLECTION == x.getResourceType())
 +                .collect(Collectors.toList()).isEmpty());
 +    }
 +
 +    private boolean isVnfCustomizationsEmpty(org.onap.so.db.catalog.beans.Service service) {
 +        return service.getVnfCustomizations() == null || service.getVnfCustomizations().isEmpty();
 +    }
 +
      protected void traverseAAIService(DelegateExecution execution, List<Resource> resourceList, String resourceId,
              List<Pair<WorkflowType, String>> aaiResourceIds) {
          try {
              resourceId = workflowResourceIds.getVolumeGroupId();
          }
  
-         ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock().setApiVersion(apiVersion)
-                 .setaLaCarte(aLaCarte).setRequestAction(requestAction).setResourceId(resourceId).setVnfType(vnfType)
-                 .setWorkflowResourceIds(workflowResourceIds).setRequestId(requestId).setBuildingBlock(buildingBlock)
-                 .setRequestDetails(requestDetails);
+         ExecuteBuildingBlock executeBuildingBlock = new ExecuteBuildingBlock();
+         executeBuildingBlock.setApiVersion(apiVersion);
+         executeBuildingBlock.setaLaCarte(aLaCarte);
+         executeBuildingBlock.setRequestAction(requestAction);
+         executeBuildingBlock.setResourceId(resourceId);
+         executeBuildingBlock.setVnfType(vnfType);
+         executeBuildingBlock.setWorkflowResourceIds(workflowResourceIds);
+         executeBuildingBlock.setRequestId(requestId);
+         executeBuildingBlock.setBuildingBlock(buildingBlock);
+         executeBuildingBlock.setRequestDetails(requestDetails);
  
          if (resource != null && (isConfiguration || resource.getResourceType().equals(WorkflowType.CONFIGURATION))) {
              ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();