Merge "optimize camunda process instance history"
authorSteve Smokowski <ss835w@att.com>
Mon, 10 Feb 2020 13:38:31 +0000 (13:38 +0000)
committerGerrit Code Review <gerrit@onap.org>
Mon, 10 Feb 2020 13:38:31 +0000 (13:38 +0000)
16 files changed:
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/Application.java
adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/configuration/SecurityConfiguration.java [deleted file]
adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/service/SubscriberService.java
adapters/mso-ve-vnfm-adapter/src/main/resources/application.yaml
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/bbobjects/L3Network.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignNetworkBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/AssignPnfBB.bpmn
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java
common/pom.xml
common/src/main/java/org/onap/so/security/SoBasicWebSecurityConfigurerAdapter.java

index ede499f..e5daf24 100644 (file)
@@ -65,16 +65,19 @@ INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, FL
 ('Service-Macro-Create', '5', 'AssignVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
 ('Service-Macro-Create', '6', 'AssignVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
 ('Service-Macro-Create', '7', 'ConfigAssignVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '8', 'CreateNetworkBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '9', 'ActivateNetworkBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '10', 'CreateVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '11', 'ActivateVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '12', 'CreateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '13', 'ActivateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '14', 'ConfigDeployVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '15', 'ActivateVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '16', 'ActivateNetworkCollectionBB',1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
-('Service-Macro-Create', '17', 'ActivateServiceInstanceBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '8', 'AssignPnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '9', 'WaitForPnfReadyBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '10', 'ActivatePnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '11', 'CreateNetworkBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '12', 'ActivateNetworkBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '13', 'CreateVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '14', 'ActivateVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '15', 'CreateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '16', 'ActivateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '17', 'ConfigDeployVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '18', 'ActivateVnfBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '19', 'ActivateNetworkCollectionBB',1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+('Service-Macro-Create', '20', 'ActivateServiceInstanceBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
 ('Service-Macro-Delete', '1', 'DeactivateVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
 ('Service-Macro-Delete', '2', 'DeleteVfModuleBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
 ('Service-Macro-Delete', '3', 'DeactivateVolumeGroupBB', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
@@ -249,6 +252,7 @@ VALUES
 ('AssignVolumeGroupBB', 'VOLUME_GROUP', 'ASSIGN'),
 ('AssignVfModuleBB', 'VF_MODULE', 'ASSIGN'),
 ('AssignNetworkBB', 'NETWORK', 'ASSIGN'),
+('AssignPnfBB', 'NO_VALIDATE', 'ASSIGN'),
 
 ('UnassignServiceInstanceBB', 'SERVICE', 'UNASSIGN'),
 ('UnassignVnfBB', 'VNF', 'UNASSIGN'),
@@ -261,6 +265,7 @@ VALUES
 ('ActivateVfModuleBB', 'VF_MODULE', 'ACTIVATE'),
 ('ActivateNetworkBB', 'NETWORK', 'ACTIVATE'),
 ('ActivateNetworkCollectionBB', 'NETWORK', 'ACTIVATE'),
+('ActivatePnfBB', 'NO_VALIDATE', 'ACTIVATE'),
 
 ('DeactivateServiceInstanceBB', 'SERVICE', 'DEACTIVATE'),
 ('DeactivateVnfBB', 'VNF', 'DEACTIVATE'),
@@ -285,7 +290,9 @@ VALUES
 ('DeleteNetworkCollectionBB', 'NETWORK', 'DELETE'),
 
 ('ConfigurationScaleOutBB', 'NO_VALIDATE', 'CUSTOM'),
-('GenericVnfHealthCheckBB', 'NO_VALIDATE', 'CUSTOM');
+('GenericVnfHealthCheckBB', 'NO_VALIDATE', 'CUSTOM'),
+
+('WaitForPnfReadyBB', 'NO_VALIDATE', 'CUSTOM');
 
 INSERT INTO orchestration_status_state_transition_directive (resource_type, orchestration_status, target_action, flow_directive)
 VALUES
index e4a6bed..875fddd 100644 (file)
@@ -26,7 +26,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication(scanBasePackages = {"org.onap.so"})
 public class Application {
 
+    public static final String BASIC_PROFILE = "basic";
+
     public static void main(final String... args) {
-        SpringApplication.run(Application.class, args);
+        final SpringApplication springApplication = new SpringApplication(Application.class);
+        springApplication.setAdditionalProfiles(BASIC_PROFILE);
+        springApplication.run(args);
     }
 }
diff --git a/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/configuration/SecurityConfiguration.java b/adapters/mso-ve-vnfm-adapter/src/main/java/org/onap/so/adapters/vevnfm/configuration/SecurityConfiguration.java
deleted file mode 100644 (file)
index cc56048..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SO
- * ================================================================================
- * Copyright (C) 2020 Samsung. All rights reserved.
- * ================================================================================
- * 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.adapters.vevnfm.configuration;
-
-import org.onap.so.security.SoBasicWebSecurityConfigurerAdapter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
-import org.springframework.security.crypto.password.PasswordEncoder;
-
-@Configuration
-@EnableWebSecurity
-public class SecurityConfiguration extends SoBasicWebSecurityConfigurerAdapter {
-
-    @Value("${notification.url}")
-    private String notificationUrl;
-
-    @Value("${notification.username}")
-    private String notificationUsername;
-
-    @Value("${notification.password}")
-    private String notificationPassword;
-
-    @Autowired
-    private PasswordEncoder passwordEncoder;
-
-    @Override
-    protected void configure(final HttpSecurity https) throws Exception {
-        https.csrf().disable().authorizeRequests().antMatchers(notificationUrl).authenticated().and().httpBasic();
-    }
-
-    @Override
-    protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
-        auth.inMemoryAuthentication().withUser(notificationUsername)
-                .password(passwordEncoder.encode(notificationPassword)).authorities("ROLE_USER");
-    }
-}
index aa07ed6..c1a56fb 100644 (file)
@@ -43,11 +43,11 @@ public class SubscriberService {
     @Value("${notification.url}")
     private String notificationUrl;
 
-    @Value("${notification.username}")
-    private String notificationUsername;
+    @Value("${spring.security.usercredentials[0].username}")
+    private String username;
 
-    @Value("${notification.password}")
-    private String notificationPassword;
+    @Value("${spring.security.usercredentials[0].openpass}")
+    private String openpass;
 
     @Autowired
     private SubscribeSender sender;
@@ -62,8 +62,8 @@ public class SubscriberService {
         request.callbackUri(getCallbackUri());
         final SubscriptionsAuthenticationParamsBasic paramsBasic = new SubscriptionsAuthenticationParamsBasic();
         final SubscriptionsAuthentication authentication = new SubscriptionsAuthentication();
-        paramsBasic.setUserName(notificationUsername);
-        paramsBasic.setPassword(notificationPassword);
+        paramsBasic.setUserName(username);
+        paramsBasic.setPassword(openpass);
         authentication.setAuthType(Collections.singletonList(SubscriptionsAuthentication.AuthTypeEnum.BASIC));
         authentication.setParamsBasic(paramsBasic);
         request.authentication(authentication);
index b16fa63..f3ad961 100644 (file)
@@ -22,8 +22,6 @@ system:
 
 notification:
   url: /lcm/v1/vnf/instances/notifications
-  username: admin
-  password: a4b3c2d1
 
 mso:
   key: 07a7159d3bf51a0e53be7a8f89699be7
@@ -36,6 +34,12 @@ vnfm:
   subscription: /vnflcm/v1/subscriptions
 
 spring:
+  security:
+    usercredentials:
+      - username: admin
+        openpass: a4b3c2d1
+        password: '$2a$10$vU.mWyNTsikAxXIA5c269ewCpAbYTiyMS0m1N.kn4F2CSGEnrKN7K'
+        role: USER
   http:
     converters:
       preferred-json-mapper: gson
index 6b3ad1d..554e987 100644 (file)
@@ -100,6 +100,10 @@ public class L3Network implements Serializable, ShallowCopy<L3Network> {
     private List<AggregateRoute> aggregateRoutes = new ArrayList<>();
     @JsonProperty("vpn-binding")
     private List<VpnBinding> vpnBindings = new ArrayList<>();
+    @JsonProperty("line-of-business")
+    private LineOfBusiness lineOfBusiness;
+    @JsonProperty("platform")
+    private Platform platform;
 
     public ModelInfoNetwork getModelInfoNetwork() {
         return modelInfoNetwork;
@@ -313,6 +317,22 @@ public class L3Network implements Serializable, ShallowCopy<L3Network> {
         return vpnBindings;
     }
 
+    public LineOfBusiness getLineOfBusiness() {
+        return lineOfBusiness;
+    }
+
+    public void setLineOfBusiness(LineOfBusiness lineOfBusiness) {
+        this.lineOfBusiness = lineOfBusiness;
+    }
+
+    public Platform getPlatform() {
+        return platform;
+    }
+
+    public void setPlatform(Platform platform) {
+        this.platform = platform;
+    }
+
     @Override
     public boolean equals(final Object other) {
         if (!(other instanceof L3Network)) {
index a479347..145d4c8 100644 (file)
@@ -915,7 +915,7 @@ public class BBInputSetup implements JavaDelegate {
         if (network == null && (parameter.getBbName().equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString())
                 || parameter.getBbName().equalsIgnoreCase(AssignFlows.NETWORK_MACRO.toString()))) {
             network = createNetwork(parameter.getLookupKeyMap(), parameter.getInstanceName(), parameter.getResourceId(),
-                    parameter.getInstanceParams());
+                    parameter.getInstanceParams(), parameter);
             parameter.getServiceInstance().getNetworks().add(network);
         }
         if (network != null) {
@@ -924,12 +924,20 @@ public class BBInputSetup implements JavaDelegate {
     }
 
     protected L3Network createNetwork(Map<ResourceKey, String> lookupKeyMap, String instanceName, String networkId,
-            List<Map<String, String>> instanceParams) {
+            List<Map<String, String>> instanceParams, BBInputSetupParameter parameter) {
         lookupKeyMap.put(ResourceKey.NETWORK_ID, networkId);
         L3Network network = new L3Network();
         network.setNetworkId(networkId);
         network.setNetworkName(instanceName);
         network.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
+        if (parameter != null) {
+            if (parameter.getLineOfBusiness() != null) {
+                network.setLineOfBusiness(this.mapperLayer.mapRequestLineOfBusiness(parameter.getLineOfBusiness()));
+            }
+            if (parameter.getLineOfBusiness() != null) {
+                network.setPlatform(this.mapperLayer.mapRequestPlatform(parameter.getPlatform()));
+            }
+        }
         if (instanceParams != null) {
             for (Map<String, String> params : instanceParams) {
                 network.getCloudParams().putAll(params);
@@ -1284,7 +1292,7 @@ public class BBInputSetup implements JavaDelegate {
         if (collectionNetworkResourceCust != null) {
             if ((bbName.equalsIgnoreCase(AssignFlows.NETWORK_A_LA_CARTE.toString())
                     || bbName.equalsIgnoreCase(AssignFlows.NETWORK_MACRO.toString()))) {
-                L3Network network = createNetwork(lookupKeyMap, null, networkId, null);
+                L3Network network = createNetwork(lookupKeyMap, null, networkId, null, null);
                 serviceInstance.getNetworks().add(network);
                 return network;
             } else {
index a45e803..1acf4ed 100644 (file)
@@ -1262,7 +1262,7 @@ public class BBInputSetupTest {
         verify(SPY_bbInputSetup, times(1)).mapCatalogNetwork(network, modelInfo, service);
 
         instanceName = "networkName2";
-        L3Network network2 = SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, resourceId, null);
+        L3Network network2 = SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, resourceId, null, parameter);
         SPY_bbInputSetup.populateL3Network(parameter);
         verify(SPY_bbInputSetup, times(2)).mapCatalogNetwork(network2, modelInfo, service);
     }
@@ -2832,17 +2832,32 @@ public class BBInputSetupTest {
         expected.setNetworkId(networkId);
         expected.setNetworkName(instanceName);
         expected.setCloudParams(cloudParams);
+        Platform platform = new Platform();
+        platform.setPlatformName("platformName");
+        expected.setPlatform(platform);
+        LineOfBusiness lineOfBusiness = new LineOfBusiness();
+        lineOfBusiness.setLineOfBusinessName("lineOfBusiness");
+        expected.setLineOfBusiness(lineOfBusiness);
         expected.setOrchestrationStatus(OrchestrationStatus.PRECREATED);
         Map<ResourceKey, String> lookupKeyMap = new HashMap<>();
         List<Map<String, String>> instanceParams = new ArrayList<>();
         instanceParams.add(cloudParams);
-        L3Network actual = SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, networkId, instanceParams);
+        org.onap.so.serviceinstancebeans.Platform platformRequest = new org.onap.so.serviceinstancebeans.Platform();
+        org.onap.so.serviceinstancebeans.LineOfBusiness lineOfBusinessRequest =
+                new org.onap.so.serviceinstancebeans.LineOfBusiness();
+        lineOfBusinessRequest.setLineOfBusinessName("lineOfBusiness");
+        platformRequest.setPlatformName("platformName");
+        BBInputSetupParameter parameter = new BBInputSetupParameter.Builder().setRequestId(REQUEST_ID)
+                .setPlatform(platformRequest).setLineOfBusiness(lineOfBusinessRequest).build();
+        L3Network actual =
+                SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, networkId, instanceParams, parameter);
 
         assertThat(actual, sameBeanAs(expected));
         assertEquals("LookupKeyMap is populated", networkId, lookupKeyMap.get(ResourceKey.NETWORK_ID));
 
         expected.getCloudParams().clear();
-        actual = SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, networkId, null);
+
+        actual = SPY_bbInputSetup.createNetwork(lookupKeyMap, instanceName, networkId, null, parameter);
         assertThat(actual, sameBeanAs(expected));
     }
 
index 7c86e96..c48f8b4 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.8.2" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="3.1.2" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="AssignNetworkBB" name="AssignNetworkBB" isExecutable="true">
     <bpmn2:startEvent id="AssignNetworkBB_start">
       <bpmn2:outgoing>SequenceFlow_11op1ih</bpmn2:outgoing>
@@ -21,7 +21,7 @@
       <bpmn2:outgoing>SequenceFlow_0988gld</bpmn2:outgoing>
     </bpmn2:serviceTask>
     <bpmn2:sequenceFlow id="SequenceFlow_017131q" name="Yes" sourceRef="networkFoundByName_ExclusiveGateway" targetRef="ExclusiveGateway_0vtj8n8">
-      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression"><![CDATA[#{AssignNetwork.networkFoundByName(execution.getVariable("gBuildingBlockExecution")) == true}]]></bpmn2:conditionExpression>
+      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">#{AssignNetwork.networkFoundByName(execution.getVariable("gBuildingBlockExecution")) == true}</bpmn2:conditionExpression>
     </bpmn2:sequenceFlow>
     <bpmn2:sequenceFlow id="SequenceFlow_0gkr871" name="No" sourceRef="networkFoundByName_ExclusiveGateway" targetRef="ServiceTask_put_network_in_AAI" />
     <bpmn2:endEvent id="AssignNetworkBB_end">
       <bpmn2:incoming>SequenceFlow_0e08b9t</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0mxc4ri</bpmn2:outgoing>
     </bpmn2:serviceTask>
-    <bpmn2:sequenceFlow id="SequenceFlow_1ctpnpe" sourceRef="ServiceTask_put_network_in_AAI" targetRef="ServiceTask_connect_to_Tenant" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1ctpnpe" sourceRef="ServiceTask_put_network_in_AAI" targetRef="ExclusiveGateway_0g85lk7" />
     <bpmn2:sequenceFlow id="SequenceFlow_0e08b9t" sourceRef="ServiceTask_connect_to_NCIG" targetRef="ServiceTask_connect_to_NCSI" />
     <bpmn2:sequenceFlow id="SequenceFlow_0mxc4ri" sourceRef="ServiceTask_connect_to_NCSI" targetRef="ExclusiveGateway_0vtj8n8" />
     <bpmn2:serviceTask id="ServiceTask_connect_to_Tenant" name="&#10;AAI&#10;Connect&#10;(tenant)&#10;" camunda:expression="${AAICreateTasks.connectNetworkToTenant(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn2:incoming>SequenceFlow_1ctpnpe</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_0lj5jj1</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_0fwcvep</bpmn2:outgoing>
     </bpmn2:serviceTask>
     <bpmn2:serviceTask id="ServiceTask_connect_to_CloudRegion" name="&#10;AAI&#10;Connect&#10;(cloud region)&#10;" camunda:expression="${AAICreateTasks.connectNetworkToCloudRegion(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn2:outgoing>SequenceFlow_017131q</bpmn2:outgoing>
       <bpmn2:outgoing>SequenceFlow_0gkr871</bpmn2:outgoing>
     </bpmn2:inclusiveGateway>
-    <bpmn2:inclusiveGateway id="ExclusiveGateway_0vtj8n8">
-      <bpmn2:incoming>SequenceFlow_017131q</bpmn2:incoming>
-      <bpmn2:incoming>SequenceFlow_0mxc4ri</bpmn2:incoming>
-      <bpmn2:outgoing>SequenceFlow_0jm95hf</bpmn2:outgoing>
-    </bpmn2:inclusiveGateway>
     <bpmn2:sequenceFlow id="SequenceFlow_0jm95hf" sourceRef="ExclusiveGateway_0vtj8n8" targetRef="ServiceTask_get_cloud_region" />
     <bpmn2:sequenceFlow id="SequenceFlow_16hhbw3" sourceRef="ServiceTask_get_cloud_region" targetRef="ServiceTask_assign_network_sdnc" />
     <bpmn2:sequenceFlow id="SequenceFlow_0988gld" sourceRef="ServiceTask_assign_network_aai" targetRef="AssignNetworkBB_end" />
     </bpmn2:callActivity>
     <bpmn2:sequenceFlow id="SequenceFlow_0rt36co" sourceRef="ServiceTask_assign_network_sdnc" targetRef="CallActivity_sdncHandlerCall" />
     <bpmn2:sequenceFlow id="SequenceFlow_1mvf7b9" sourceRef="CallActivity_sdncHandlerCall" targetRef="ServiceTask_assign_network_aai" />
-    <bpmn2:textAnnotation id="TextAnnotation_0dnksb2">    <bpmn2:text>sets Cloud Region on BB execution for SDNC assign</bpmn2:text>
-</bpmn2:textAnnotation>
+    <bpmn2:serviceTask id="Task_0mu8391" name="Create Platform" camunda:expression="${AAICreateTasks.createPlatformForNetwork(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn2:incoming>SequenceFlow_1kslfgw</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0j7rpm9</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:serviceTask id="ServiceTask_0e2crgd" name="Create Lob" camunda:expression="${AAICreateTasks.createLineOfBusinessForNetwork(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn2:incoming>SequenceFlow_0j7rpm9</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0ugp99e</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0lj5jj1" sourceRef="ExclusiveGateway_0g85lk7" targetRef="ServiceTask_connect_to_Tenant" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1kslfgw" sourceRef="ExclusiveGateway_0g85lk7" targetRef="Task_0mu8391" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0j7rpm9" sourceRef="Task_0mu8391" targetRef="ServiceTask_0e2crgd" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0ugp99e" sourceRef="ServiceTask_0e2crgd" targetRef="ExclusiveGateway_0vtj8n8" />
+    <bpmn2:parallelGateway id="ExclusiveGateway_0g85lk7">
+      <bpmn2:incoming>SequenceFlow_1ctpnpe</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0lj5jj1</bpmn2:outgoing>
+      <bpmn2:outgoing>SequenceFlow_1kslfgw</bpmn2:outgoing>
+    </bpmn2:parallelGateway>
+    <bpmn2:inclusiveGateway id="ExclusiveGateway_0vtj8n8">
+      <bpmn2:incoming>SequenceFlow_017131q</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_0mxc4ri</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_0ugp99e</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0jm95hf</bpmn2:outgoing>
+    </bpmn2:inclusiveGateway>
+    <bpmn2:textAnnotation id="TextAnnotation_0dnksb2">
+      <bpmn2:text>sets Cloud Region on BB execution for SDNC assign</bpmn2:text>
+    </bpmn2:textAnnotation>
     <bpmn2:association id="Association_1rsqd3z" sourceRef="ServiceTask_get_cloud_region" targetRef="TextAnnotation_0dnksb2" />
-    <bpmn2:textAnnotation id="TextAnnotation_17jb2vn">    <bpmn2:text>conditionally executed if Network Collection Instance Group exists</bpmn2:text>
-</bpmn2:textAnnotation>
+    <bpmn2:textAnnotation id="TextAnnotation_17jb2vn">
+      <bpmn2:text>conditionally executed if Network Collection Instance Group exists</bpmn2:text>
+    </bpmn2:textAnnotation>
     <bpmn2:association id="Association_15ppe1t" sourceRef="ServiceTask_connect_to_NCIG" targetRef="TextAnnotation_17jb2vn" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="AssignNetworkBB">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_47" bpmnElement="AssignNetworkBB_start">
-        <dc:Bounds x="746" y="-105" width="36" height="36" />
+        <dc:Bounds x="156" y="137" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="739" y="-64" width="50" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1wo7ke9_di" bpmnElement="ServiceTask_get_cloud_region">
-        <dc:Bounds x="1632" y="-127" width="100" height="80" />
+        <dc:Bounds x="1042" y="115" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1ofnl0p_di" bpmnElement="ServiceTask_assign_network_sdnc">
-        <dc:Bounds x="1769" y="-127" width="100" height="80" />
+        <dc:Bounds x="1179" y="115" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="TextAnnotation_0dnksb2_di" bpmnElement="TextAnnotation_0dnksb2">
-        <dc:Bounds x="1576" y="35" width="212" height="30" />
+        <dc:Bounds x="986" y="242" width="212" height="30" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Association_1rsqd3z_di" bpmnElement="Association_1rsqd3z">
-        <di:waypoint xsi:type="dc:Point" x="1682" y="-47" />
-        <di:waypoint xsi:type="dc:Point" x="1682" y="35" />
+        <di:waypoint x="1092" y="195" />
+        <di:waypoint x="1092" y="242" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_1dm3ngd_di" bpmnElement="ServiceTask_put_network_in_AAI">
-        <dc:Bounds x="906" y="-49" width="100" height="80" />
+        <dc:Bounds x="316" y="193" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_18yks1p_di" bpmnElement="ServiceTask_assign_network_aai">
-        <dc:Bounds x="2106" y="-127" width="100" height="80" />
+        <dc:Bounds x="1516" y="115" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_017131q_di" bpmnElement="SequenceFlow_017131q">
-        <di:waypoint xsi:type="dc:Point" x="863" y="-112" />
-        <di:waypoint xsi:type="dc:Point" x="863" y="-161" />
-        <di:waypoint xsi:type="dc:Point" x="1562" y="-161" />
-        <di:waypoint xsi:type="dc:Point" x="1562" y="-112" />
+        <di:waypoint x="273" y="130" />
+        <di:waypoint x="273" y="81" />
+        <di:waypoint x="972" y="81" />
+        <di:waypoint x="972" y="130" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="871.5" y="-151.96931534232883" width="19" height="12" />
+          <dc:Bounds x="282" y="90" width="18" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0gkr871_di" bpmnElement="SequenceFlow_0gkr871">
-        <di:waypoint xsi:type="dc:Point" x="863" y="-62" />
-        <di:waypoint xsi:type="dc:Point" x="863" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="906" y="-9" />
+        <di:waypoint x="273" y="180" />
+        <di:waypoint x="273" y="233" />
+        <di:waypoint x="316" y="233" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="872.125" y="-36.06410256410257" width="14" height="12" />
+          <dc:Bounds x="282" y="206" width="15" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_083u1a5_di" bpmnElement="AssignNetworkBB_end">
-        <dc:Bounds x="2241" y="-105" width="36" height="36" />
+        <dc:Bounds x="1651" y="137" width="36" height="36" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="2214" y="-65" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_11op1ih_di" bpmnElement="SequenceFlow_11op1ih">
-        <di:waypoint xsi:type="dc:Point" x="782" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="838" y="-87" />
+        <di:waypoint x="192" y="155" />
+        <di:waypoint x="248" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="765" y="-102" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0a96yhg_di" bpmnElement="ServiceTask_connect_to_NCIG">
-        <dc:Bounds x="1286" y="-49" width="100" height="80" />
+        <dc:Bounds x="743" y="193" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0mauyto_di" bpmnElement="ServiceTask_connect_to_NCSI">
-        <dc:Bounds x="1422" y="-49" width="100" height="80" />
+        <dc:Bounds x="867" y="193" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1ctpnpe_di" bpmnElement="SequenceFlow_1ctpnpe">
-        <di:waypoint xsi:type="dc:Point" x="1006" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1036" y="-9" />
+        <di:waypoint x="416" y="232" />
+        <di:waypoint x="421" y="232" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="976" y="-24" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0e08b9t_di" bpmnElement="SequenceFlow_0e08b9t">
-        <di:waypoint xsi:type="dc:Point" x="1386" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1422" y="-9" />
+        <di:waypoint x="843" y="233" />
+        <di:waypoint x="867" y="233" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1359" y="-24" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0mxc4ri_di" bpmnElement="SequenceFlow_0mxc4ri">
-        <di:waypoint xsi:type="dc:Point" x="1522" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1562" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1562" y="-62" />
+        <di:waypoint x="917" y="193" />
+        <di:waypoint x="956" y="164" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1497" y="-24" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_019bzpc_di" bpmnElement="ServiceTask_connect_to_Tenant">
-        <dc:Bounds x="1036" y="-49" width="100" height="80" />
+        <dc:Bounds x="515" y="193" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1alvmym_di" bpmnElement="ServiceTask_connect_to_CloudRegion">
-        <dc:Bounds x="1162" y="-49" width="100" height="80" />
+        <dc:Bounds x="622" y="193" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0fwcvep_di" bpmnElement="SequenceFlow_0fwcvep">
-        <di:waypoint xsi:type="dc:Point" x="1136" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1162" y="-9" />
+        <di:waypoint x="565" y="193" />
+        <di:waypoint x="565" y="173" />
+        <di:waypoint x="672" y="173" />
+        <di:waypoint x="672" y="193" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1104" y="-24" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_07z7hcu_di" bpmnElement="SequenceFlow_07z7hcu">
-        <di:waypoint xsi:type="dc:Point" x="1262" y="-9" />
-        <di:waypoint xsi:type="dc:Point" x="1286" y="-9" />
+        <di:waypoint x="722" y="233" />
+        <di:waypoint x="743" y="233" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1229" y="-24" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="TextAnnotation_17jb2vn_di" bpmnElement="TextAnnotation_17jb2vn">
-        <dc:Bounds x="1232" y="86" width="158" height="54" />
+        <dc:Bounds x="777" y="288" width="158" height="54" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="Association_15ppe1t_di" bpmnElement="Association_15ppe1t">
-        <di:waypoint xsi:type="dc:Point" x="1306" y="31" />
-        <di:waypoint xsi:type="dc:Point" x="1267" y="86" />
+        <di:waypoint x="793" y="273" />
+        <di:waypoint x="793" y="288" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="InclusiveGateway_0kiphfm_di" bpmnElement="networkFoundByName_ExclusiveGateway">
-        <dc:Bounds x="838" y="-112" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="898" y="-104" width="73" height="24" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="InclusiveGateway_0pxktc3_di" bpmnElement="ExclusiveGateway_0vtj8n8">
-        <dc:Bounds x="1537" y="-112" width="50" height="50" />
+        <dc:Bounds x="248" y="130" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1562" y="-58" width="0" height="12" />
+          <dc:Bounds x="308" y="138" width="73" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0jm95hf_di" bpmnElement="SequenceFlow_0jm95hf">
-        <di:waypoint xsi:type="dc:Point" x="1587" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="1632" y="-87" />
+        <di:waypoint x="997" y="155" />
+        <di:waypoint x="1042" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1609.5" y="-108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_16hhbw3_di" bpmnElement="SequenceFlow_16hhbw3">
-        <di:waypoint xsi:type="dc:Point" x="1732" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="1769" y="-87" />
+        <di:waypoint x="1142" y="155" />
+        <di:waypoint x="1179" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1750.5" y="-108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0988gld_di" bpmnElement="SequenceFlow_0988gld">
-        <di:waypoint xsi:type="dc:Point" x="2206" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="2241" y="-87" />
+        <di:waypoint x="1616" y="155" />
+        <di:waypoint x="1651" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="2178.5" y="-108" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_0h7upeg_di" bpmnElement="CallActivity_sdncHandlerCall">
-        <dc:Bounds x="1927" y="-127" width="100" height="80" />
+        <dc:Bounds x="1337" y="115" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0rt36co_di" bpmnElement="SequenceFlow_0rt36co">
-        <di:waypoint xsi:type="dc:Point" x="1869" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="1927" y="-87" />
+        <di:waypoint x="1279" y="155" />
+        <di:waypoint x="1337" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="1898" y="-108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1mvf7b9_di" bpmnElement="SequenceFlow_1mvf7b9">
-        <di:waypoint xsi:type="dc:Point" x="2027" y="-87" />
-        <di:waypoint xsi:type="dc:Point" x="2106" y="-87" />
+        <di:waypoint x="1437" y="155" />
+        <di:waypoint x="1516" y="155" />
         <bpmndi:BPMNLabel>
           <dc:Bounds x="2066.5" y="-108" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0z9uk3m_di" bpmnElement="Task_0mu8391">
+        <dc:Bounds x="471" y="305" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0e2crgd_di" bpmnElement="ServiceTask_0e2crgd">
+        <dc:Bounds x="631" y="305" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0lj5jj1_di" bpmnElement="SequenceFlow_0lj5jj1">
+        <di:waypoint x="471" y="232" />
+        <di:waypoint x="515" y="233" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1kslfgw_di" bpmnElement="SequenceFlow_1kslfgw">
+        <di:waypoint x="446" y="257" />
+        <di:waypoint x="446" y="345" />
+        <di:waypoint x="471" y="345" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0j7rpm9_di" bpmnElement="SequenceFlow_0j7rpm9">
+        <di:waypoint x="571" y="343" />
+        <di:waypoint x="631" y="341" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ugp99e_di" bpmnElement="SequenceFlow_0ugp99e">
+        <di:waypoint x="731" y="345" />
+        <di:waypoint x="972" y="345" />
+        <di:waypoint x="972" y="180" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ParallelGateway_02lmom2_di" bpmnElement="ExclusiveGateway_0g85lk7">
+        <dc:Bounds x="421" y="207" width="50" height="50" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="InclusiveGateway_1cof7a3_di" bpmnElement="ExclusiveGateway_0vtj8n8">
+        <dc:Bounds x="947" y="130" width="50" height="50" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
index c860058..1b4470b 100644 (file)
@@ -1,34 +1,38 @@
 <?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1a52v2f" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="2.0.3">
+<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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1a52v2f" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.5.0">
   <bpmn:collaboration id="Collaboration_0go8wi3">
     <bpmn:participant id="Participant_1dwc5st" name="SO&#10;Assign PNF" processRef="AssignPnfBB" />
     <bpmn:participant id="Participant_0gycee4" name="AAI" />
     <bpmn:messageFlow id="MessageFlow_0xh6bkn" sourceRef="CreatePnfEntryInAai" targetRef="Participant_0gycee4" />
   </bpmn:collaboration>
   <bpmn:process id="AssignPnfBB" name="AssignPnfBB" isExecutable="true">
-    <bpmn:sequenceFlow id="SequenceFlow_0l6rtzy" sourceRef="CreatePnfEntryInAai" targetRef="AaiEntryExists" />
     <bpmn:sequenceFlow id="SequenceFlow_1fu9o4x" sourceRef="AssignPnf_StartEvent" targetRef="CreatePnfEntryInAai" />
-    <bpmn:endEvent id="AaiEntryExists" name="AAI entry exists">
-      <bpmn:incoming>SequenceFlow_0l6rtzy</bpmn:incoming>
-    </bpmn:endEvent>
     <bpmn:serviceTask id="CreatePnfEntryInAai" name="Create Pnf entry in AAI" camunda:expression="${AAICreateTasks.createPnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:incoming>SequenceFlow_1fu9o4x</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_0l6rtzy</bpmn:outgoing>
+      <bpmn:outgoing>SequenceFlow_0yrabnf</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:startEvent id="AssignPnf_StartEvent">
       <bpmn:outgoing>SequenceFlow_1fu9o4x</bpmn:outgoing>
     </bpmn:startEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_0yrabnf" sourceRef="CreatePnfEntryInAai" targetRef="Task_UpdatePnfOrchestrationStatusAssigned" />
+    <bpmn:sequenceFlow id="SequenceFlow_1yb16sd" sourceRef="Task_UpdatePnfOrchestrationStatusAssigned" targetRef="AaiEntryExists" />
+    <bpmn:serviceTask id="Task_UpdatePnfOrchestrationStatusAssigned" name="Update Pnf Orchestration Status to Assigned" camunda:expression="${AAIUpdateTasks.updateOrchestrationStatusAssignedPnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0yrabnf</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1yb16sd</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:endEvent id="AaiEntryExists" name="AAI entry exists">
+      <bpmn:incoming>SequenceFlow_1yb16sd</bpmn:incoming>
+    </bpmn:endEvent>
     <bpmn:association id="Association_1le3nwi" sourceRef="AssignPnf_StartEvent" targetRef="TextAnnotation_184cxp4" />
     <bpmn:textAnnotation id="TextAnnotation_184cxp4">
       <bpmn:text>Inputs:
- - pnfName - String
-</bpmn:text>
+ - pnfName - String</bpmn:text>
     </bpmn:textAnnotation>
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_0go8wi3">
       <bpmndi:BPMNShape id="Participant_1dwc5st_di" bpmnElement="Participant_1dwc5st" isHorizontal="true">
-        <dc:Bounds x="160" y="80" width="646" height="391" />
+        <dc:Bounds x="160" y="80" width="738" height="391" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Participant_0gycee4_di" bpmnElement="Participant_0gycee4" isHorizontal="true">
         <dc:Bounds x="260" y="567" width="502" height="60" />
         <di:waypoint x="237" y="203" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_1wfgsdz_di" bpmnElement="AaiEntryExists">
-        <dc:Bounds x="722" y="269" width="36" height="36" />
+        <dc:Bounds x="772" y="269" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="703" y="312" width="77" height="14" />
+          <dc:Bounds x="753" y="312" width="77" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0l6rtzy_di" bpmnElement="SequenceFlow_0l6rtzy">
-        <di:waypoint x="561" y="287" />
-        <di:waypoint x="722" y="287" />
-      </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1fu9o4x_di" bpmnElement="SequenceFlow_1fu9o4x">
         <di:waypoint x="255" y="287" />
         <di:waypoint x="461" y="287" />
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0yrabnf_di" bpmnElement="SequenceFlow_0yrabnf">
+        <di:waypoint x="561" y="287" />
+        <di:waypoint x="620" y="287" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1kmas9h_di" bpmnElement="Task_UpdatePnfOrchestrationStatusAssigned">
+        <dc:Bounds x="620" y="247" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1yb16sd_di" bpmnElement="SequenceFlow_1yb16sd">
+        <di:waypoint x="720" y="287" />
+        <di:waypoint x="772" y="287" />
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 22089da..dab5102 100644 (file)
@@ -31,8 +31,6 @@ import java.util.TreeSet;
 import java.util.UUID;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
-import org.onap.so.client.orchestration.AAIPnfResources;
-import org.onap.so.logger.LoggingAnchor;
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
@@ -62,12 +60,14 @@ import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.orchestration.AAIConfigurationResources;
 import org.onap.so.client.orchestration.AAIInstanceGroupResources;
 import org.onap.so.client.orchestration.AAINetworkResources;
+import org.onap.so.client.orchestration.AAIPnfResources;
 import org.onap.so.client.orchestration.AAIServiceInstanceResources;
 import org.onap.so.client.orchestration.AAIVfModuleResources;
 import org.onap.so.client.orchestration.AAIVnfResources;
 import org.onap.so.client.orchestration.AAIVolumeGroupResources;
 import org.onap.so.client.orchestration.AAIVpnBindingResources;
 import org.onap.so.logger.ErrorCode;
+import org.onap.so.logger.LoggingAnchor;
 import org.onap.so.logger.MessageEnum;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -268,6 +268,23 @@ public class AAICreateTasks {
         }
     }
 
+    /**
+     * This method is used for separating (,) from the string.
+     *
+     * @param str
+     * @throws @return
+     */
+    public void createPlatformForNetwork(BuildingBlockExecution execution) {
+        try {
+            L3Network network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
+            if (network != null) {
+                createPlatformNetwork(network);
+            }
+        } catch (Exception ex) {
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+        }
+    }
+
     /**
      * This method is used for separating (,) from the string.
      *
@@ -277,15 +294,8 @@ public class AAICreateTasks {
     public void createPlatform(BuildingBlockExecution execution) {
         try {
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
-            Platform platform = vnf.getPlatform();
-            if (platform != null) {
-                if (platform.getPlatformName() == null || "".equals(platform.getPlatformName())) {
-                    logger.debug("PlatformName is null in input. Skipping create platform...");
-                } else {
-                    List<String> platforms = splitCDL(platform.getPlatformName());
-                    platforms.stream().forEach(platformName -> aaiVnfResources
-                            .createPlatformandConnectVnf(new Platform(platformName), vnf));
-                }
+            if (vnf != null) {
+                createPlatformVnf(vnf);
             }
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
@@ -293,6 +303,30 @@ public class AAICreateTasks {
 
     }
 
+    protected void createPlatformVnf(GenericVnf vnf) {
+        Platform platform = vnf.getPlatform();
+        if (Strings.isNullOrEmpty(platform.getPlatformName())) {
+            logger.debug("PlatformName is null in input. Skipping create platform...");
+        } else {
+            List<String> platforms = splitCDL(platform.getPlatformName());
+            platforms.stream().forEach(
+                    platformName -> aaiVnfResources.createPlatformandConnectVnf(new Platform(platformName), vnf));
+        }
+    }
+
+    protected void createPlatformNetwork(L3Network network) {
+        Platform platform = network.getPlatform();
+        if (platform != null) {
+            if (Strings.isNullOrEmpty(platform.getPlatformName())) {
+                logger.debug("PlatformName is null in input. Skipping create platform...");
+            } else {
+                List<String> platforms = splitCDL(platform.getPlatformName());
+                platforms.stream().forEach(
+                        platformName -> aaiNetworkResources.createPlatformAndConnectNetwork(platform, network));
+            }
+        }
+    }
+
     /**
      * This method is used for separating (,) from the string.
      *
@@ -312,22 +346,51 @@ public class AAICreateTasks {
     public void createLineOfBusiness(BuildingBlockExecution execution) {
         try {
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
-            LineOfBusiness lineOfBusiness = vnf.getLineOfBusiness();
-            if (lineOfBusiness != null) {
-                if (lineOfBusiness.getLineOfBusinessName() == null
-                        || "".equals(lineOfBusiness.getLineOfBusinessName())) {
-                    logger.info("lineOfBusiness is null in input. Skipping create lineOfBusiness...");
-                } else {
-                    List<String> lineOfBussinesses = splitCDL(lineOfBusiness.getLineOfBusinessName());
-                    lineOfBussinesses.stream().forEach(lobName -> aaiVnfResources
-                            .createLineOfBusinessandConnectVnf(new LineOfBusiness(lobName), vnf));
-                }
+            if (vnf != null) {
+                createLineOfBusinessVnf(vnf);
             }
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
         }
     }
 
+    public void createLineOfBusinessForNetwork(BuildingBlockExecution execution) {
+        try {
+            L3Network network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
+            if (network != null) {
+                createLineOfBusinessNetwork(network);
+            }
+        } catch (Exception ex) {
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+        }
+    }
+
+    protected void createLineOfBusinessVnf(GenericVnf vnf) {
+        LineOfBusiness lineOfBusiness = vnf.getLineOfBusiness();
+        if (lineOfBusiness != null) {
+            if (Strings.isNullOrEmpty(lineOfBusiness.getLineOfBusinessName())) {
+                logger.info("lineOfBusiness is null in input. Skipping create lineOfBusiness...");
+            } else {
+                List<String> lineOfBussinesses = splitCDL(lineOfBusiness.getLineOfBusinessName());
+                lineOfBussinesses.stream().forEach(
+                        lobName -> aaiVnfResources.createLineOfBusinessandConnectVnf(new LineOfBusiness(lobName), vnf));
+            }
+        }
+    }
+
+    protected void createLineOfBusinessNetwork(L3Network network) {
+        LineOfBusiness lineOfBusiness = network.getLineOfBusiness();
+        if (lineOfBusiness != null) {
+            if (Strings.isNullOrEmpty(lineOfBusiness.getLineOfBusinessName())) {
+                logger.info("lineOfBusiness is null in input. Skipping create lineOfBusiness...");
+            } else {
+                List<String> lineOfBussinesses = splitCDL(lineOfBusiness.getLineOfBusinessName());
+                lineOfBussinesses.stream().forEach(lobName -> aaiNetworkResources
+                        .createLineOfBusinessAndConnectNetwork(new LineOfBusiness(lobName), network));
+            }
+        }
+    }
+
     /**
      * This method is used for creating the volume group in A&AI.
      *
index dab3593..4d5494d 100644 (file)
@@ -118,6 +118,15 @@ public class AAIUpdateTasks {
         }
     }
 
+    /**
+     * BPMN access method to update status of Pnf to Assigned in AAI
+     *
+     * @param execution
+     */
+    public void updateOrchestrationStatusAssignedPnf(BuildingBlockExecution execution) {
+        updateOrchestrationStatusForPnf(execution, OrchestrationStatus.ASSIGNED);
+    }
+
     /**
      * BPMN access method to update status of Pnf to Active in AAI
      *
index bc702c9..3af6581 100644 (file)
@@ -30,6 +30,8 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
 import org.onap.so.client.aai.AAIObjectPlurals;
@@ -38,8 +40,8 @@ import org.onap.so.client.aai.entities.AAIEdgeLabel;
 import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
-import org.onap.so.client.graphinventory.entities.uri.Depth;
 import org.onap.so.client.aai.mapper.AAIObjectMapper;
+import org.onap.so.client.graphinventory.entities.uri.Depth;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -76,6 +78,22 @@ public class AAINetworkResources {
                 serviceInstanceURI);
     }
 
+    public void createLineOfBusinessAndConnectNetwork(LineOfBusiness lineOfBusiness, L3Network network) {
+        AAIResourceUri lineOfBusinessURI =
+                AAIUriFactory.createResourceUri(AAIObjectType.LINE_OF_BUSINESS, lineOfBusiness.getLineOfBusinessName());
+        AAIResourceUri networkURI = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId());
+        injectionHelper.getAaiClient().createIfNotExists(lineOfBusinessURI, Optional.of(lineOfBusiness))
+                .connect(networkURI, lineOfBusinessURI);
+    }
+
+    public void createPlatformAndConnectNetwork(Platform platform, L3Network network) {
+        AAIResourceUri platformURI =
+                AAIUriFactory.createResourceUri(AAIObjectType.PLATFORM, platform.getPlatformName());
+        AAIResourceUri networkURI = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId());
+        injectionHelper.getAaiClient().createIfNotExists(platformURI, Optional.of(platform)).connect(networkURI,
+                platformURI);
+    }
+
     public void deleteNetwork(L3Network network) {
         AAIResourceUri networkURI = AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, network.getNetworkId());
         injectionHelper.getAaiClient().delete(networkURI);
index 19877aa..e26009a 100644 (file)
@@ -139,6 +139,25 @@ public class AAIUpdateTasksTest extends BaseTaskTest {
         aaiUpdateTasks.updateOrchestrationStatusActiveService(execution);
     }
 
+    @Test
+    public void updateOrchestrationStatusAssignedPnfTest() throws Exception {
+        Pnf pnf = preparePnfAndExtractForPnf();
+        doNothing().when(aaiPnfResources).updateOrchestrationStatusPnf(pnf, OrchestrationStatus.ASSIGNED);
+
+        aaiUpdateTasks.updateOrchestrationStatusAssignedPnf(execution);
+
+        verify(aaiPnfResources, times(1)).updateOrchestrationStatusPnf(pnf, OrchestrationStatus.ASSIGNED);
+    }
+
+    @Test
+    public void updateOrchestrationStatusAssignedPnfExceptionTest() throws Exception {
+        Pnf pnf = preparePnfAndExtractForPnf();
+        doThrow(RuntimeException.class).when(aaiPnfResources).updateOrchestrationStatusPnf(pnf,
+                OrchestrationStatus.ASSIGNED);
+
+        expectedException.expect(BpmnError.class);
+        aaiUpdateTasks.updateOrchestrationStatusAssignedPnf(execution);
+    }
 
     @Test
     public void updateOrchestrationStatusActivePnfTest() throws Exception {
index 51415af..529841d 100644 (file)
@@ -59,7 +59,7 @@
     <dependency>
       <groupId>org.onap.aai.schema-service</groupId>
       <artifactId>aai-schema</artifactId>
-      <version>1.6.3-SNAPSHOT</version>
+      <version>1.6.3</version>
     </dependency>
     <dependency>
       <groupId>org.modelmapper</groupId>
index c778dde..21176e0 100644 (file)
@@ -28,6 +28,8 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import org.springframework.security.config.annotation.web.builders.WebSecurity;
 import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.web.firewall.StrictHttpFirewall;
 import org.springframework.util.StringUtils;
 
@@ -44,6 +46,12 @@ public class SoBasicWebSecurityConfigurerAdapter extends WebSecurityConfigurerAd
     @Autowired
     private SoUserCredentialConfiguration soUserCredentialConfiguration;
 
+    @Autowired
+    private UserDetailsService userDetailsService;
+
+    @Autowired
+    private BCryptPasswordEncoder passwordEncoder;
+
     @Override
     protected void configure(final HttpSecurity http) throws Exception {
         http.csrf().disable().authorizeRequests().antMatchers("/manage/health", "/manage/info").permitAll()
@@ -61,8 +69,6 @@ public class SoBasicWebSecurityConfigurerAdapter extends WebSecurityConfigurerAd
 
     @Override
     protected void configure(final AuthenticationManagerBuilder auth) throws Exception {
-        auth.userDetailsService(soUserCredentialConfiguration.userDetailsService())
-                .passwordEncoder(soUserCredentialConfiguration.passwordEncoder());
+        auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder);
     }
-
 }