Merge "Heat bridge cron 2.0, changes due to cloud and"
authorByung-Woo Jun <byung-woo.jun@est.tech>
Thu, 17 Sep 2020 02:43:26 +0000 (02:43 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 17 Sep 2020 02:43:26 +0000 (02:43 +0000)
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/catalogrest/QueryServiceMacroHolder.java
asdc-controller/src/main/java/org/onap/so/asdc/client/ASDCController.java
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/DoHandleOofRequest.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateCommunicationService.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/CreateSliceService.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateCommunicationService.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoHandleOofRequest.bpmn
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/AllottedResource.java

index 305d52a..89fd9a0 100644 (file)
@@ -37,10 +37,11 @@ public class QueryServiceMacroHolder extends CatalogQuery {
             + "\t\t\"modelUuid\"          : <SERVICE_MODEL_UUID>,\n"
             + "\t\t\"modelInvariantUuid\" : <SERVICE_MODEL_INVARIANT_ID>,\n"
             + "\t\t\"modelVersion\"       : <SERVICE_MODEL_VERSION>\n" + "\t},\n"
-            + "\t\"serviceType\"        : <SERVICE_TYPE>,\n" + "\t\"serviceRole\"        : <SERVICE_ROLE>,\n"
-            + "\t\"environmentContext\" : <ENVIRONMENT_CONTEXT>,\n" + "\t\"resourceOrder\"      : <RESOURCE_ORDER>,\n"
-            + "\t\"workloadContext\"    : <WORKLOAD_CONTEXT>,\n" + "<_SERVICEVNFS_>,\n" + "<_SERVICENETWORKS_>,\n"
-            + "<_SERVICEINFO_>,\n" + "<_SERVICEPROXY_>,\n" + "<_SERVICEALLOTTEDRESOURCES_>\n" + "\t}}";
+            + "\t\"serviceCategory\"    : <SERVICE_CATEGORY>,\n" + "\t\"serviceType\"        : <SERVICE_TYPE>,\n"
+            + "\t\"serviceRole\"        : <SERVICE_ROLE>,\n" + "\t\"environmentContext\" : <ENVIRONMENT_CONTEXT>,\n"
+            + "\t\"resourceOrder\"      : <RESOURCE_ORDER>,\n" + "\t\"workloadContext\"    : <WORKLOAD_CONTEXT>,\n"
+            + "<_SERVICEVNFS_>,\n" + "<_SERVICENETWORKS_>,\n" + "<_SERVICEINFO_>,\n" + "<_SERVICEPROXY_>,\n"
+            + "<_SERVICEALLOTTEDRESOURCES_>\n" + "\t}}";
 
     public QueryServiceMacroHolder() {
         super();
@@ -80,6 +81,7 @@ public class QueryServiceMacroHolder extends CatalogQuery {
         put(valueMap, "SERVICE_MODEL_VERSION", service.getModelVersion());
         put(valueMap, "SERVICE_TYPE", service.getServiceType());
         put(valueMap, "SERVICE_ROLE", service.getServiceRole());
+        put(valueMap, "SERVICE_CATEGORY", service.getCategory());
         put(valueMap, "ENVIRONMENT_CONTEXT", service.getEnvironmentContext());
         put(valueMap, "WORKLOAD_CONTEXT", service.getWorkloadContext());
         put(valueMap, "RESOURCE_ORDER", service.getResourceOrder());
index 61c0cdb..44ea2a2 100644 (file)
@@ -971,8 +971,10 @@ public class ASDCController {
     private void processNsstNotification(INotificationData iNotif, ToscaResourceStructure toscaResourceStructure) {
         Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
         try {
-            if (serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY).equalsIgnoreCase("NSST")) {
-
+            String category = serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY);
+            boolean isNeedInital = (category.contains("NSST") || category.equalsIgnoreCase("TN Network Requirement"))
+                    && iNotif.getResources().isEmpty();
+            if (isNeedInital) {
                 String artifactContent = null;
                 List<IArtifactInfo> serviceArtifacts = iNotif.getServiceArtifacts();
                 Optional<IArtifactInfo> artifactOpt = serviceArtifacts.stream()
@@ -986,14 +988,18 @@ public class ASDCController {
                     artifactContent = zipParserInstance.parseJsonForZip(filePath);
                     logger.debug(
                             "serviceArtifact parsing success! serviceArtifactUUID: " + artifactInfo.getArtifactUUID());
+
+                    ResourceStructure resourceStructure = new VfResourceStructure(iNotif, new ResourceInstance());
+                    resourceStructure.setResourceType(ResourceType.OTHER);
+                    toscaInstaller.installNsstService(toscaResourceStructure, (VfResourceStructure) resourceStructure,
+                            artifactContent);
                 } else {
                     logger.debug("serviceArtifact is null");
+                    toscaInstaller.installNsstService(toscaResourceStructure, null, null);
                 }
-                ResourceStructure resourceStructure = new VfResourceStructure(iNotif, new ResourceInstance());
-                resourceStructure.setResourceType(ResourceType.OTHER);
-                toscaInstaller.installTheNsstService(toscaResourceStructure, (VfResourceStructure) resourceStructure,
-                        artifactContent);
+
             }
+
         } catch (IOException e) {
             logger.error("serviceArtifact parse failure for service uuid:  "
                     + serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CATEGORY));
index d023df3..49fef1d 100644 (file)
@@ -2870,7 +2870,15 @@ public class ToscaResourceInstaller {
         List<Input> serviceInputs = sdcCsarHelper.getServiceInputs();
         if (!serviceInputs.isEmpty()) {
             serviceInputList = new ArrayList<>();
-            serviceInputs.forEach(input -> {
+            List<Input> filterList;
+            filterList = serviceInputs.stream()
+                    .filter(input -> !SKIP_POST_INST_CONF.equals(input.getName())
+                            && !CDS_MODEL_NAME.equalsIgnoreCase(input.getName())
+                            && !CDS_MODEL_VERSION.equalsIgnoreCase(input.getName())
+                            && !CONTROLLER_ACTOR.equalsIgnoreCase(input.getName()))
+                    .collect(Collectors.toList());
+
+            filterList.forEach(input -> {
                 Map<String, Object> serviceInputMap = new HashMap<>();
                 serviceInputMap.put("name", input.getName());
                 serviceInputMap.put("type", input.getType());
@@ -2894,7 +2902,7 @@ public class ToscaResourceInstaller {
     }
 
     @Transactional(rollbackFor = {ArtifactInstallerException.class})
-    public void installTheNsstService(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct,
+    public void installNsstService(ToscaResourceStructure toscaResourceStruct, VfResourceStructure vfResourceStruct,
             String artifactContent) {
         createToscaCsar(toscaResourceStruct);
         createService(toscaResourceStruct, vfResourceStruct);
@@ -2925,6 +2933,10 @@ public class ToscaResourceInstaller {
     }
 
     private void createServiceInfo(ToscaResourceStructure toscaResourceStruct, Service service) {
+        if (!service.getServiceInfos().isEmpty()) {
+            return;
+        }
+
         List<ServiceInfo> serviceInfos = new ArrayList<>();
 
         ServiceInfo serviceInfo = new ServiceInfo();
@@ -2945,42 +2957,67 @@ public class ToscaResourceInstaller {
         ISdcCsarHelper helper = toscaResourceStruct.getSdcCsarHelper();
         String typeName = helper.getServiceSubstitutionMappingsTypeName();
         Optional<NodeTemplate> nodeTemplate = helper.getServiceNodeTemplates().stream().findAny();
-        List<Object> serviceProperties = new ArrayList<>();
-        Map<String, Object> servicePropertiesMap;
+
         if (nodeTemplate.isPresent()) {
+            String serviceUUID = nodeTemplate.get().getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID);
             LinkedHashMap<String, Object> customDef = nodeTemplate.get().getCustomDef();
-            Optional<String> machKey =
-                    customDef.keySet().stream().filter(key -> key.equalsIgnoreCase(typeName)).findFirst();
-            if (machKey.isPresent()) {
-                Object obj = customDef.get(machKey.get());
-                try {
-                    if (obj instanceof Map) {
-                        Object properties = ((HashMap) obj).get("properties");
-                        if (null != properties) {
-                            for (Object propertyName : ((Map) properties).keySet()) {
-                                servicePropertiesMap = new HashMap<>();
-                                servicePropertiesMap.put("name", propertyName);
-                                Object object = ((Map) properties).get(propertyName);
-                                for (Object entry : ((Map) object).entrySet()) {
-                                    servicePropertiesMap.put((String) ((Map.Entry) entry).getKey(),
-                                            ((Map.Entry) entry).getValue());
-                                }
-                                servicePropertiesMap.remove("description");
-                                serviceProperties.add(servicePropertiesMap);
+            List<Object> serviceProperties = getPropertiesFromCustomDef(customDef, typeName);
+
+            try {
+                propertiesJson = objectMapper.writeValueAsString(serviceProperties);
+                propertiesJson = propertiesJson.replace("\"", "\\\"");
+            } catch (JsonProcessingException e) {
+                logger.error("serviceProperties could not be deserialized for service uuid:  " + serviceUUID);
+            } catch (Exception ex) {
+                logger.error("service properties parsing failed. service uuid:" + serviceUUID);
+            }
+
+        } else {
+            logger.debug("ServiceNodeTemplates is null");
+        }
+        return propertiesJson;
+    }
+
+    private static List<Object> getPropertiesFromCustomDef(LinkedHashMap<String, Object> customDef,
+            final String typeName) {
+        Optional<String> machKey =
+                customDef.keySet().stream().filter(key -> key.equalsIgnoreCase(typeName)).findFirst();
+        Map<String, Object> servicePropertiesMap;
+        List<Object> serviceProperties = new ArrayList<>();
+
+        if (machKey.isPresent()) {
+            Object obj = customDef.get(machKey.get());
+            if (obj instanceof Map) {
+                Object properties = ((HashMap) obj).get("properties");
+                if (null != properties) {
+                    for (Object propertyName : ((Map) properties).keySet()) {
+                        if (propertyName.toString().split("_").length >= 2) {
+                            continue;
+                        }
+
+                        servicePropertiesMap = new HashMap<>();
+                        servicePropertiesMap.put("name", propertyName);
+                        Object object = ((Map) properties).get(propertyName);
+                        for (Object entry : ((Map) object).entrySet()) {
+                            servicePropertiesMap.put((String) ((Map.Entry) entry).getKey(),
+                                    ((Map.Entry) entry).getValue());
+                        }
+
+                        String type = servicePropertiesMap.get("type").toString();
+                        if (type.split("\\.").length >= 2) {
+                            List<Object> subProperties = getPropertiesFromCustomDef(customDef, type);
+                            if (subProperties.size() > 0) {
+                                serviceProperties.addAll(subProperties);
                             }
-                            propertiesJson = objectMapper.writeValueAsString(serviceProperties);
-                            propertiesJson = propertiesJson.replace("\"", "\\\"");
+                            continue;
                         }
+                        servicePropertiesMap.remove("description");
+                        serviceProperties.add(servicePropertiesMap);
                     }
-                } catch (JsonProcessingException e) {
-                    logger.error("serviceProperties could not be deserialized for service uuid:  "
-                            + nodeTemplate.get().getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
                 }
             }
-        } else {
-            logger.debug("ServiceNodeTemplates is null");
         }
-        return propertiesJson;
+        return serviceProperties;
     }
 }
 
index ebc5f4a..644cf5e 100644 (file)
@@ -79,7 +79,7 @@ class DoHandleOofRequest extends AbstractServiceTaskProcessor {
                oofRequestPayload.setApiPath(apiPath)
                oofRequestPayload.setRequestDetails(requestDetails)
                ObjectMapper objectMapper = new ObjectMapper()
-               String requestJson = objectMapper.writeValueAsString(oofRequestPayload)
+               String requestJson = objectMapper.writeValueAsString(oofRequestPayload)
                execution.setVariable("oofRequestPayload", requestJson)
        }
        
index 12cd0dd..f8eafe7 100644 (file)
@@ -184,7 +184,7 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
         logger.debug(Prefix + "prepareInitOperationStatus Start")
 
         String serviceId = execution.getVariable("serviceInstanceId")
-        // 生成 operationId
+        //operationId is generated
         String operationId = execution.getVariable("operationId")
         logger.debug("Generated new operation for Service Instance serviceId:" + serviceId + " operationId:" + operationId)
 
@@ -370,20 +370,23 @@ class CreateCommunicationService extends AbstractServiceTaskProcessor {
 
 
             for (String e2eInput in e2eInputs) {
-                if (jsonUtil.getJsonValue(e2eInput, "type") == "integer") {
+                key = jsonUtil.getJsonValue(e2eInput, "name")
+                String type = jsonUtil.getJsonValue(e2eInput, "type")
+                if (type == "integer") {
                     def temp
-                    key = jsonUtil.getJsonValue(e2eInput, "name")
                     value = csInputMap.containsKey(key) ? csInputMap.getOrDefault(key, 0) : (isBlank(temp = jsonUtil.getJsonValue(e2eInput, "default")) ? 0 : temp)
 
                     e2eInputMap.put(key, value as Integer)
-                } else {
-                    e2eInputMap.put(key = jsonUtil.getJsonValue(e2eInput, "name"), csInputMap.containsKey(key)
+                } else if(type == "string") {
+                    e2eInputMap.put(key, csInputMap.containsKey(key)
                             ? csInputMap.getOrDefault(key, null) : (jsonUtil.getJsonValue(e2eInput, "default")))
+
                 }
             }
 
+            //TODO
             e2eInputMap.put("sNSSAI", execution.getVariable("sNSSAI_id"))
-           e2eInputMap.put("sST", execution.getVariable("csServiceType"))
+               e2eInputMap.put("sST", execution.getVariable("csServiceType"))
             execution.setVariable("e2eInputMap", e2eInputMap)
             execution.setVariable("e2eServiceType", e2eServiceDecomposition.getServiceType())
             execution.setVariable("e2eModelInvariantUuid", e2eServiceDecomposition.getModelInfo().getModelInvariantUuid())
index 389f0a0..dcbaf74 100644 (file)
@@ -181,7 +181,7 @@ public class CreateSliceService extends AbstractServiceTaskProcessor {
     public void prepareSelectNSTRequest(DelegateExecution execution) {
         logger.debug("Start prepareSelectNSTRequest")
         String requestId = execution.getVariable("msoRequestId")
-       String messageType = "NSTSelectionResponse"
+           String messageType = "NSTSelectionResponse"
         Map<String, Object> serviceProfile = execution.getVariable("serviceProfile")
                execution.setVariable("nstSelectionUrl", "/api/oof/v1/selection/nst")
                execution.setVariable("nstSelection_messageType",messageType)
index 26dcaa7..7cdb084 100644 (file)
@@ -158,11 +158,11 @@ class DoCreateCommunicationService extends AbstractServiceTaskProcessor{
             String sNSSAI_id = generateNSSAI(serviceInstanceId)
 
             execution.setVariable("sNSSAI_id", sNSSAI_id)
-            // 创建service
+            // create communication service
             String serviceInstanceName = execution.getVariable("serviceInstanceName")
             String subscriptionServiceType = execution.getVariable("subscriptionServiceType")
             String csServiceType = execution.getVariable("csServiceType")
-            String aaiServiceRole = "communication-service" //待确定
+            String aaiServiceRole = "communication-service"
 
             String oStatus = "processing"
             String uuiRequest = execution.getVariable("uuiRequest")
index 7ca1a62..d6b2516 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0nlt5gi" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.1.1">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0nlt5gi" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.4.1">
   <bpmn:process id="DoHandleOofRequest" name="DoHandleOofRequest" isExecutable="true">
     <bpmn:startEvent id="StartEvent_1">
       <bpmn:outgoing>Flow_1jorico</bpmn:outgoing>
@@ -10,8 +10,7 @@
       <bpmn:outgoing>Flow_013jfci</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.common.scripts.*
 def oofHandler = new DoHandleOofRequest()
-oofHandler .callOofAdapter(execution)
-</bpmn:script>
+oofHandler.callOofAdapter(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="Flow_1jorico" sourceRef="StartEvent_1" targetRef="Activity_0tki17o" />
     <bpmn:scriptTask id="Activity_0tki17o" name="Preprocess Request" scriptFormat="groovy">
@@ -19,8 +18,7 @@ oofHandler .callOofAdapter(execution)
       <bpmn:outgoing>Flow_1fbzzqg</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.common.scripts.*
 def oofHandler = new DoHandleOofRequest()
-oofHandler .preProcessRequest(execution)
-</bpmn:script>
+oofHandler .preProcessRequest(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:subProcess id="Activity_02ru8n9" name="Sub-process for FalloutHandler and Rollback" triggeredByEvent="true">
       <bpmn:startEvent id="Event_1r00tca">
index 19e875f..3827c0e 100644 (file)
@@ -38,6 +38,8 @@ import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import com.openpojo.business.annotation.BusinessKey;
+import org.hibernate.annotations.NotFound;
+import org.hibernate.annotations.NotFoundAction;
 import uk.co.blackpepper.bowman.annotation.LinkedResource;
 import uk.co.blackpepper.bowman.annotation.RemoteResource;
 
@@ -76,6 +78,7 @@ public class AllottedResource implements Serializable {
     private Date created;
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "allottedResource")
+    @NotFound(action = NotFoundAction.IGNORE)
     private Set<AllottedResourceCustomization> allotedResourceCustomization;
 
     @Override