Merge "Set networkName value to the name from L3network"
diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
index 723bed1..8cacf85 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatEnvironmentEntry.java
@@ -58,9 +58,12 @@
                 return;
             byte[] b = this.rawEntry.toString().getBytes();
             MsoYamlEditorWithEnvt yaml = new MsoYamlEditorWithEnvt(b);
-            this.parameters = yaml.getParameterListFromEnvt();
-            // this.resources = yaml.getResourceListFromEnvt();
-            StringBuilder sb = this.getResourceRegistryRawEntry();
+            StringBuilder sb = null;
+            if (yaml != null) {
+                this.parameters = yaml.getParameterListFromEnvt();
+                // this.resources = yaml.getResourceListFromEnvt();
+                sb = this.getResourceRegistryRawEntry();
+            }
             if (sb == null) {
                 this.resourceRegistryEntryRaw = new StringBuilder("");
             } else {
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
index 5dff470..d9f47f5 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/network/MsoNetworkAdapterImpl.java
@@ -1294,15 +1294,23 @@
         // Resource Property
         List<ContrailPolicyRef> prlist = new ArrayList<>();
         int index = 1;
-        for (String pf : pFqdns) {
-            if (!commonUtils.isNullOrEmpty(pf)) {
-                ContrailPolicyRef pr = new ContrailPolicyRef();
-                ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0");
-                pr.setSeq(refSeq);
-                index++;
-                logger.debug("Contrail PolicyRefs Data:{}", pr);
-                prlist.add(pr);
+
+        if (pFqdns != null) {
+            for (String pf : pFqdns) {
+                if (!commonUtils.isNullOrEmpty(pf)) {
+                    ContrailPolicyRef pr = new ContrailPolicyRef();
+                    ContrailPolicyRefSeq refSeq = new ContrailPolicyRefSeq(String.valueOf(index), "0");
+                    pr.setSeq(refSeq);
+                    index++;
+                    logger.debug("Contrail PolicyRefs Data:{}", pr);
+                    prlist.add(pr);
+                }
             }
+        } else {
+            String error = "Null pFqdns at start of mergePolicyRefs";
+            logger.error(LoggingAnchor.THREE, MessageEnum.RA_MARSHING_ERROR, ErrorCode.BusinessProcesssError.getValue(),
+                    error);
+            throw new MsoAdapterException(error);
         }
 
         JsonNode node = null;
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
index b76316b..b2dbd97 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/ExtractPojosForBB.java
@@ -60,7 +60,7 @@
                     if (gBBInput.getCustomer().getServiceSubscription() == null
                             && gBBInput.getServiceInstance() != null) {
                         result = Optional.of((T) gBBInput.getServiceInstance());
-                    } else {
+                    } else if (gBBInput.getCustomer().getServiceSubscription() != null) {
                         result = lookupObjectInList(
                                 gBBInput.getCustomer().getServiceSubscription().getServiceInstances(), value);
                     }
diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
index d099cbe..b6bccdb 100644
--- a/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
+++ b/bpmn/MSOCoreBPMN/src/test/java/org/onap/so/bpmn/core/xml/XmlToolTest.java
@@ -28,7 +28,7 @@
     private String encodeResponseNamespace =
             "<Response xmlns:ns2=\"http://ecomp.att.com/mso/request/types/v1\">good</Response>";
     private String attribute = "<Response>good&\"bad\"</Response>";
-    private String updatedAttribute = "&lt;Response&gt;good&amp;&quot;bad&quot;&lt;/Response&gt;";
+    // private String updatedAttribute = "&lt;Response&gt;good&amp;&quot;bad&quot;&lt;/Response&gt;";
 
     private String content = "<dummy><configuration-event>" + "<event-type>test</event-type>"
             + "<event-correlator-type>test</event-correlator-type>" + "<event-correlator>123</event-correlator>"
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
index e3540ec..583e3e1 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
@@ -77,7 +77,6 @@
 
     private static final Logger logger = LoggerFactory.getLogger(AAICreateTasks.class);
     private static final String networkTypeProvider = "PROVIDER";
-    private static final String A_LA_CARTE = "aLaCarte";
     private static String NETWORK_COLLECTION_NAME = "networkCollectionName";
     private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList";
     private static String HEAT_STACK_ID = "heatStackId";
@@ -107,12 +106,8 @@
 
     public void createServiceInstance(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
-            if (Boolean.TRUE.equals(alaCarte) && aaiSIResources.checkInstanceServiceNameInUse(serviceInstance)) {
-                throw new DuplicateNameException("service-instance", serviceInstance.getServiceInstanceName());
-            }
             Customer customer = execution.getGeneralBuildingBlock().getCustomer();
             aaiSIResources.createServiceInstance(serviceInstance, customer);
         } catch (Exception ex) {
@@ -199,11 +194,7 @@
 
     public void createVnf(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVnfResources.checkNameInUse(vnf.getVnfName())) {
-                throw new DuplicateNameException("generic-vnf", vnf.getVnfName());
-            }
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             execution.setVariable("homing", Boolean.TRUE.equals(vnf.isCallHoming()));
@@ -262,10 +253,6 @@
             GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
             VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID);
             CloudRegion cloudRegion = gBBInput.getCloudRegion();
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVolumeGroupResources.checkNameInUse(volumeGroup)) {
-                throw new DuplicateNameException("volume-group", volumeGroup.getVolumeGroupName());
-            }
             aaiVolumeGroupResources.createVolumeGroup(volumeGroup, cloudRegion);
             aaiVolumeGroupResources.connectVolumeGroupToVnf(genericVnf, volumeGroup, cloudRegion);
             aaiVolumeGroupResources.connectVolumeGroupToTenant(volumeGroup, cloudRegion);
@@ -278,10 +265,6 @@
         try {
             GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
             VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
-            if (Boolean.TRUE.equals(alaCarte) && aaiVfModuleResources.checkNameInUse(vfModule)) {
-                throw new DuplicateNameException("vf-module", vfModule.getVfModuleName());
-            }
             int moduleIndex = 0;
             if (vfModule.getModelInfoVfModule() != null
                     && !Boolean.TRUE.equals(vfModule.getModelInfoVfModule().getIsBaseBoolean())) {
@@ -327,14 +310,9 @@
      */
     public void createNetwork(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiNetworkResources.checkNetworkNameInUse(l3network.getNetworkName())) {
-                throw new DuplicateNameException("l3Network", l3network.getNetworkName());
-            }
             // set default to false. ToBe updated by SDNC
             l3network.setIsBoundToVpn(false);
             // define is bound to vpn flag as true if NEUTRON_NETWORK_TYPE is PROVIDER
@@ -385,16 +363,11 @@
      */
     public void createNetworkCollectionInstanceGroup(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             InstanceGroup instanceGroup = serviceInstance.getCollection().getInstanceGroup();
             // set name generated for NetworkCollection/NetworkCollectionInstanceGroup in previous step of the BB flow
             instanceGroup.setInstanceGroupName(execution.getVariable(NETWORK_COLLECTION_NAME));
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiInstanceGroupResources.checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName())) {
-                throw new DuplicateNameException("instance-group", instanceGroup.getInstanceGroupName());
-            }
             // put shell in AAI
             aaiNetworkResources.createNetworkInstanceGroup(instanceGroup);
         } catch (Exception ex) {
@@ -511,12 +484,7 @@
 
     public void createConfiguration(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiConfigurationResources.checkConfigurationNameInUse(configuration.getConfigurationName())) {
-                throw new DuplicateNameException("configuration", configuration.getConfigurationName());
-            }
             aaiConfigurationResources.createConfiguration(configuration);
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
@@ -525,14 +493,9 @@
 
     public void createInstanceGroupVnf(BuildingBlockExecution execution) {
         try {
-            Boolean alaCarte = execution.getVariable(A_LA_CARTE);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             InstanceGroup instanceGroup = extractPojosForBB.extractByKey(execution, ResourceKey.INSTANCE_GROUP_ID);
-            if (Boolean.TRUE.equals(alaCarte)
-                    && aaiInstanceGroupResources.checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName())) {
-                throw new DuplicateNameException("instance-group", instanceGroup.getInstanceGroupName());
-            }
             aaiInstanceGroupResources.createInstanceGroupandConnectServiceInstance(instanceGroup, serviceInstance);
         } catch (Exception ex) {
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
index b889493..ed3ec75 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
@@ -60,7 +60,6 @@
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
-import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.onap.so.client.aai.entities.uri.AAIResourceUri;
@@ -130,14 +129,6 @@
     }
 
     @Test
-    public void createServiceInstanceNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiServiceInstanceResources).checkInstanceServiceNameInUse(serviceInstance);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createServiceInstance(execution);
-    }
-
-    @Test
     public void createServiceInstanceExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -162,14 +153,6 @@
     }
 
     @Test
-    public void createVolumeGroupDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiVolumeGroupResources).checkNameInUse(volumeGroup);
-        aaiCreateTasks.createVolumeGroup(execution);
-    }
-
-    @Test
     public void createVolumeGroupExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -349,14 +332,6 @@
     }
 
     @Test
-    public void createVnfDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiVnfResources).checkNameInUse(genericVnf.getVnfName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createVnf(execution);
-    }
-
-    @Test
     public void createVnfExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
         lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, "notfound");
@@ -386,14 +361,6 @@
     }
 
     @Test
-    public void createVfModuleDuplicateNameTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiVfModuleResources).checkNameInUse(vfModule);
-        aaiCreateTasks.createVfModule(execution);
-    }
-
-    @Test
     public void createServiceSubscriptionTest() {
         doNothing().when(aaiServiceInstanceResources).createServiceSubscription(customer);
         aaiCreateTasks.createServiceSubscription(execution);
@@ -441,14 +408,6 @@
     }
 
     @Test
-    public void createNetworkNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        doReturn(true).when(aaiNetworkResources).checkNetworkNameInUse(network.getNetworkName());
-        aaiCreateTasks.createNetwork(execution);
-    }
-
-    @Test
     public void createNetworkExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
 
@@ -560,15 +519,6 @@
     }
 
     @Test
-    public void createConfigurationNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiConfigurationResources)
-                .checkConfigurationNameInUse(configuration.getConfigurationName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createConfiguration(execution);
-    }
-
-    @Test
     public void connectVnfToCloudRegionTest() throws Exception {
         gBBInput = execution.getGeneralBuildingBlock();
         doNothing().when(aaiVnfResources).connectVnfToCloudRegion(genericVnf, gBBInput.getCloudRegion());
@@ -609,15 +559,6 @@
     }
 
     @Test
-    public void createInstanceGroupVnfNameInUseExceptionTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-        doReturn(true).when(aaiInstanceGroupResources)
-                .checkInstanceGroupNameInUse(instanceGroup.getInstanceGroupName());
-        execution.setVariable("aLaCarte", Boolean.TRUE);
-        aaiCreateTasks.createInstanceGroupVnf(execution);
-    }
-
-    @Test
     public void createInstanceGroupVnfExceptionTest() throws Exception {
         expectedException.expect(BpmnError.class);
         doThrow(RuntimeException.class).when(aaiInstanceGroupResources)
diff --git a/mso-api-handlers/mso-requests-db-repositories/pom.xml b/mso-api-handlers/mso-requests-db-repositories/pom.xml
index f890dab..4dbf22c 100644
--- a/mso-api-handlers/mso-requests-db-repositories/pom.xml
+++ b/mso-api-handlers/mso-requests-db-repositories/pom.xml
@@ -30,7 +30,6 @@
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-rest</artifactId>
-      <optional>true</optional>
     </dependency>
     <dependency>
       <groupId>com.h2database</groupId>
diff --git a/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java
new file mode 100644
index 0000000..575e5ff
--- /dev/null
+++ b/mso-api-handlers/mso-requests-db-repositories/src/main/java/org/onap/so/db/request/configuration/ExposeEntityIdResourceConfiguration.java
@@ -0,0 +1,21 @@
+package org.onap.so.db.request.configuration;
+
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
+import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurerAdapter;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ExposeEntityIdResourceConfiguration extends RepositoryRestConfigurerAdapter {
+
+    /**
+     * Spring Data Rest hides the ID by default, in order to have it in the JSON you have to manually configure that for
+     * your entity
+     *
+     * @param config
+     */
+    @Override
+    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
+        config.exposeIdsFor(RequestProcessingData.class);
+    }
+}
diff --git a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
index 7a24d14..4d16d9c 100644
--- a/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
+++ b/mso-api-handlers/mso-requests-db/src/main/java/org/onap/so/db/request/client/RequestsDbClient.java
@@ -354,7 +354,7 @@
 
     public void updateRequestProcessingData(RequestProcessingData requestProcessingData) {
         HttpHeaders headers = getHttpHeaders();
-        URI uri = getUri(requestProcessingDataURI);
+        URI uri = getUri(requestProcessingDataURI + "/" + requestProcessingData.getId());
         HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
         restTemplate.put(uri, entity);
     }
diff --git a/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java b/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java
new file mode 100644
index 0000000..fdbc04a
--- /dev/null
+++ b/mso-api-handlers/mso-requests-db/src/test/java/org/onap/so/db/request/client/RequestDbClientTest.java
@@ -0,0 +1,35 @@
+package org.onap.so.db.request.client;
+
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isA;
+import static org.mockito.Mockito.times;
+import java.net.URI;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.onap.so.db.request.beans.RequestProcessingData;
+import org.springframework.http.HttpEntity;
+import org.springframework.web.client.RestTemplate;
+
+
+@RunWith(MockitoJUnitRunner.class)
+public class RequestDbClientTest {
+
+    @InjectMocks
+    protected RequestsDbClient requestsDbClient;
+
+    @Mock
+    protected RestTemplate restTemplate;
+
+    @Test
+    public void updateRequestProcessingDataTest() {
+        RequestProcessingData requestProcessingData = new RequestProcessingData();
+        requestProcessingData.setId(1);
+        URI uri = URI.create("/requestProcessingData/1");
+        requestsDbClient.updateRequestProcessingData(requestProcessingData);
+        Mockito.verify(restTemplate, times(1)).put(eq(uri), isA(HttpEntity.class));
+    }
+}