Merge "update the committers list with Ramesh"
authorByung-Woo Jun <byung-woo.jun@est.tech>
Tue, 8 Dec 2020 12:55:38 +0000 (12:55 +0000)
committerGerrit Code Review <gerrit@onap.org>
Tue, 8 Dec 2020 12:55:38 +0000 (12:55 +0000)
80 files changed:
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java
adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java
adapters/mso-catalog-db-adapter/src/test/resources/ExpectedServiceResourceEscaped.json [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql
adapters/mso-cnf-adapter/src/main/java/org/onap/so/adapters/cnf/model/InstanceResponse.java
adapters/mso-cnf-adapter/src/main/java/org/onap/so/adapters/cnf/rest/CnfAdapterRest.java
adapters/mso-cnf-adapter/src/main/java/org/onap/so/adapters/cnf/service/CnfAdapterService.java
adapters/mso-cnf-adapter/src/test/java/org/onap/so/adapters/cnf/rest/CnfAdapterRestTest.java
adapters/mso-cnf-adapter/src/test/java/org/onap/so/adapters/cnf/service/CnfAdapterServiceTest.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/consts/NssmfAdapterConsts.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/enums/ActionType.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/BaseNssmfManager.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/ExternalNssmfManager.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/InternalNssmfManager.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/ExternalAnNssmfManager.java
adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java [new file with mode: 0644]
adapters/mso-nssmf-adapter/src/main/resources/subnetCapability.json
adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/NssmfAdapterRestTest.java
adapters/mso-nssmf-adapter/src/test/java/org/onap/so/adapters/nssmf/service/impl/NssmfManagerServiceImplTest.java
adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/openstack/AaiClientPropertiesImpl.java
asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
asdc-controller/src/main/java/org/onap/so/asdc/tenantIsolation/AaiClientPropertiesImpl.java
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/RequestDBUtil.groovy
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtils.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AAIPropertiesImpl.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupUtilsTest.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AllocateSliceSubnet.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/AnNssmfutils.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateAccessNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSIandNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoAllocateNSSI.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy
bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnAllocateNssi.groovy
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateNSIandNSSI.bpmn
bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoAllocateTransportNSSI.bpmn
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/CnfAdapterClient.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/cnf/entities/InstanceResponse.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/AttributeNameValue.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/vnf/mapper/VnfAdapterVfModuleObjectMapper.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasksTest.java
common/pom.xml
common/src/main/java/org/onap/so/beans/nsmf/AdditionalProperties.java
common/src/main/java/org/onap/so/beans/nsmf/AllocateAnNssi.java
common/src/main/java/org/onap/so/beans/nsmf/AllocateCnNssi.java
common/src/main/java/org/onap/so/beans/nsmf/AllocateTnNssi.java
common/src/main/java/org/onap/so/beans/nsmf/AnSliceProfile.java
common/src/main/java/org/onap/so/beans/nsmf/CnSliceProfile.java
common/src/main/java/org/onap/so/beans/nsmf/ConnectionLink.java
common/src/main/java/org/onap/so/beans/nsmf/EndPoint.java
common/src/main/java/org/onap/so/beans/nsmf/NssiResponse.java
common/src/main/java/org/onap/so/beans/nsmf/PerfReqUrllc.java
common/src/main/java/org/onap/so/beans/nsmf/PnfErrorList.java
common/src/main/java/org/onap/so/beans/nsmf/ResponseDescriptor.java
common/src/main/java/org/onap/so/beans/nsmf/ResponseHistory.java
common/src/main/java/org/onap/so/beans/nsmf/SliceProfileAdapter.java
common/src/main/java/org/onap/so/beans/nsmf/SliceTaskInfo.java
common/src/main/java/org/onap/so/beans/nsmf/TnSliceProfile.java
common/src/main/java/org/onap/so/beans/nsmf/TransportSliceNetwork.java
common/src/main/java/org/onap/so/beans/nsmf/VnfErrorList.java
common/src/main/java/org/onap/so/client/AddCacheHeaders.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/CacheFactory.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/CacheProperties.java [new file with mode: 0644]
common/src/main/java/org/onap/so/client/RestClient.java
common/src/main/java/org/onap/so/client/RestClientSSL.java
common/src/main/java/org/onap/so/client/RestProperties.java
common/src/test/java/org/onap/so/client/RestClientTest.java
common/src/test/resources/logback-test.xml
graph-inventory/aai-client/pom.xml
graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java [new file with mode: 0644]
graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java [new file with mode: 0644]
graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java [new file with mode: 0644]
graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/aai/AAIProperties.java
graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/graphinventory/GraphInventoryRestClient.java
graph-inventory/aai-client/src/test/java/org/onap/aaiclient/client/aai/AAIRestClientTest.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/tenantisolation/AaiClientPropertiesImpl.java
so-etsi-nfvo/so-etsi-nfvo-ns-lcm/so-etsi-nfvo-ns-lcm-bpmn-flows/src/main/java/org/onap/so/etsi/nfvo/ns/lcm/bpmn/flows/extclients/aai/AaiPropertiesImpl.java

index aa039c6..3f1e99c 100644 (file)
@@ -36,6 +36,7 @@ import javax.ws.rs.core.GenericEntity;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
 import org.onap.so.adapters.catalogdb.catalogrest.CatalogQuery;
 import org.onap.so.adapters.catalogdb.catalogrest.CatalogQueryException;
@@ -89,6 +90,7 @@ public class CatalogDbAdapterRest {
     protected static Logger logger = LoggerFactory.getLogger(CatalogDbAdapterRest.class);
     private static final boolean IS_ARRAY = true;
     private static final String NETWORK_SERVICE = "network service";
+    private static final String RESOURCE_INPUT_FILTER = "resourceInput";
 
     @Autowired
     private VnfCustomizationRepository vnfCustomizationRepo;
@@ -144,8 +146,8 @@ public class CatalogDbAdapterRest {
     @Transactional(readOnly = true)
     @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
     public Response serviceVnfs(@PathParam("version") String version,
-            @PathParam("vnfModelCustomizationUuid") String vnfUuid) {
-        return serviceVnfsImpl(version, !IS_ARRAY, vnfUuid, null, null, null, null);
+            @PathParam("vnfModelCustomizationUuid") String vnfUuid, @QueryParam("filter") String filter) {
+        return serviceVnfsImpl(version, !IS_ARRAY, vnfUuid, null, null, null, null, filter);
     }
 
     @GET
@@ -155,12 +157,12 @@ public class CatalogDbAdapterRest {
     public Response serviceVnfs(@PathParam("version") String version,
             @QueryParam("vnfModelCustomizationUuid") String vnfUuid, @QueryParam("serviceModelUuid") String smUuid,
             @QueryParam("serviceModelInvariantUuid") String smiUuid, @QueryParam("serviceModelVersion") String smVer,
-            @QueryParam("serviceModelName") String smName) {
-        return serviceVnfsImpl(version, IS_ARRAY, vnfUuid, smUuid, smiUuid, smVer, smName);
+            @QueryParam("serviceModelName") String smName, @QueryParam("filter") String filter) {
+        return serviceVnfsImpl(version, IS_ARRAY, vnfUuid, smUuid, smiUuid, smVer, smName, filter);
     }
 
     public Response serviceVnfsImpl(String version, boolean isArray, String vnfUuid, String serviceModelUUID,
-            String smiUuid, String smVer, String smName) {
+            String smiUuid, String smVer, String smName, String filter) {
         QueryServiceVnfs qryResp = null;
         int respStatus = HttpStatus.SC_OK;
         List<VnfResourceCustomization> ret = new ArrayList<>();
@@ -188,9 +190,16 @@ public class CatalogDbAdapterRest {
                 respStatus = HttpStatus.SC_NOT_FOUND;
                 qryResp = new QueryServiceVnfs();
             } else if (service == null && !ret.isEmpty()) {
+                if (StringUtils.isNotEmpty(filter) && RESOURCE_INPUT_FILTER.equalsIgnoreCase(filter)) {
+                    ret.forEach(vnfCustomization -> vnfCustomization.setResourceInput(null));
+                }
                 qryResp = new QueryServiceVnfs(ret);
             } else if (service != null) {
-                qryResp = new QueryServiceVnfs(service.getVnfCustomizations());
+                ret = service.getVnfCustomizations();
+                if (StringUtils.isNotEmpty(filter) && RESOURCE_INPUT_FILTER.equalsIgnoreCase(filter)) {
+                    ret.forEach(vnfCustomization -> vnfCustomization.setResourceInput(null));
+                }
+                qryResp = new QueryServiceVnfs(ret);
             }
             logger.debug("serviceVnfs qryResp= {}", qryResp);
             return respond(version, respStatus, isArray, qryResp);
@@ -290,7 +299,7 @@ public class CatalogDbAdapterRest {
     public Response serviceResources(@PathParam("version") String version,
             @QueryParam("serviceModelUuid") String modelUUID,
             @QueryParam("serviceModelInvariantUuid") String modelInvariantUUID,
-            @QueryParam("serviceModelVersion") String modelVersion) {
+            @QueryParam("serviceModelVersion") String modelVersion, @QueryParam("filter") String filter) {
 
         QueryServiceMacroHolder qryResp;
         int respStatus = HttpStatus.SC_OK;
@@ -305,6 +314,10 @@ public class CatalogDbAdapterRest {
 
                 if (serv != null) {
                     ret.setNetworkResourceCustomizations(new ArrayList(serv.getNetworkCustomizations()));
+                    if (StringUtils.isNotEmpty(filter) && RESOURCE_INPUT_FILTER.equalsIgnoreCase(filter)) {
+                        serv.getVnfCustomizations()
+                                .forEach(vnfCustomization -> vnfCustomization.setResourceInput(null));
+                    }
                     ret.setVnfResourceCustomizations(new ArrayList(serv.getVnfCustomizations()));
                     ret.setAllottedResourceCustomizations(new ArrayList(serv.getAllottedCustomizations()));
                 }
index 3906229..48ef132 100644 (file)
@@ -23,10 +23,13 @@ package org.onap.so.adapters.catalogdb.catalogrest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.List;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import org.json.JSONException;
+import org.json.simple.parser.ParseException;
 import org.junit.Test;
 import org.onap.so.adapters.catalogdb.CatalogDbAdapterBaseTest;
 import org.onap.so.db.catalog.beans.ProcessingFlags;
@@ -66,13 +69,9 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
 
     HttpHeaders headers = new HttpHeaders();
 
-    private final String expectedServiceResourceResponse =
-            "{\r\n\"serviceResources\": {\r\n\"modelInfo\": {\r\n\"modelName\": \"MSOTADevInfra_vSAMP10a_Service\",\r\n\"modelUuid\": \"5df8b6de-2083-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"9647dfc4-2083-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\"\r\n},\r\n\"serviceType\": \"NA\",\r\n\"serviceRole\": \"NA\",\r\n\"environmentContext\": \"Luna\",\r\n\"workloadContext\": \"Oxygen\",\r\n\"serviceVnfs\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10a\",\r\n\"modelUuid\": \"ff2ae348-214a-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"2fff5b20-214b-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"68dc9a92-214c-11e7-93ae-92361f002671\",\r\n\"modelInstanceName\": \"vSAMP10a 1\"\r\n},\r\n\"toscaNodeType\": \"VF\",\r\n\"nfFunction\": \"vSAMP\",\r\n\"nfType\": \"vSAMP\",\r\n\"nfRole\": \"vSAMP\",\r\n\"nfNamingCode\": \"vSAMP\",\r\n\"multiStageDesign\": null,\r\n\"vfModules\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::base::module-0\",\r\n\"modelUuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"cb82ffd8-252a-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": true,\r\n\"vfModuleLabel\": \"base\",\r\n\"initialCount\": 1,\r\n\"hasVolumeGroup\": false\r\n},\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::PCM::module-1\",\r\n\"modelUuid\": \"066de97e-253e-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"64efd51a-2544-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"b4ea86b4-253f-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": false,\r\n\"vfModuleLabel\": \"PCM\",\r\n\"initialCount\": 0,\r\n\"hasVolumeGroup\": false\r\n}\r\n]\r\n}\r\n],\r\n\"serviceNetworks\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"CONTRAIL30_GNDIRECT\",\r\n\"modelUuid\": \"10b36f65-f4e6-4be6-ae49-9596dc1c47fc\",\r\n\"modelInvariantUuid\": \"ce4ff476-9641-4e60-b4d5-b4abbec1271d\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"3bdbb104-476c-483e-9f8b-c095b3d308ac\",\r\n\"modelInstanceName\": \"CONTRAIL30_GNDIRECT 9\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"networkType\": \"\",\r\n\"networkTechnology\": \"\",\r\n\"networkRole\": \"\",\r\n\"networkScope\": \"\"\r\n}\r\n],\r\n\"serviceAllottedResources\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"Tunnel_Xconn\",\r\n\"modelUuid\": \"f6b7d4c6-e8a4-46e2-81bc-31cad5072842\",\r\n\"modelInvariantUuid\": \"b7a1b78e-6b6b-4b36-9698-8c9530da14af\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"367a8ba9-057a-4506-b106-fbae818597c6\",\r\n\"modelInstanceName\": \"Sec_Tunnel_Xconn 11\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"allottedResourceType\": \"\",\r\n\"allottedResourceRole\": null,\r\n\"providingServiceModelName\": null,\r\n\"providingServiceModelInvariantUuid\": null,\r\n\"providingServiceModelUuid\": null,\r\n\"nfFunction\": null,\r\n\"nfType\": null,\r\n\"nfRole\": null,\r\n\"nfNamingCode\": null\r\n}\r\n]\r\n}\r\n}";
-
     private final String expectedServiceResourceResponsev2 =
             "{\r\n\"serviceResources\": {\r\n\"modelInfo\": {\r\n\"modelName\": \"MSOTADevInfra_vSAMP10a_Service\",\r\n\"modelUuid\": \"5df8b6de-2083-11e7-93ae-92361f002672\",\r\n\"modelInvariantUuid\": \"9647dfc4-2083-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2.0\"\r\n},\r\n\"serviceType\": \"NA\",\r\n\"serviceRole\": \"NA\",\r\n\"environmentContext\": \"Luna\",\r\n\"workloadContext\": \"Oxygen\",\r\n\"serviceVnfs\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10a\",\r\n\"modelUuid\": \"ff2ae348-214a-11e7-93ae-92361f002672\",\r\n\"modelInvariantUuid\": \"2fff5b20-214b-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2.0\",\r\n\"modelCustomizationUuid\": \"68dc9a92-214c-11e7-93ae-92361f002672\",\r\n\"modelInstanceName\": \"vSAMP10a 2\"\r\n},\r\n\"toscaNodeType\": \"VF\",\r\n\"nfFunction\": \"vSAMP\",\r\n\"nfType\": \"vSAMP\",\r\n\"nfRole\": \"vSAMP\",\r\n\"nfNamingCode\": \"vSAMP\",\r\n\"multiStageDesign\": null,\r\n\"vfModules\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::base::module-0\",\r\n\"modelUuid\": \"20c4431c-246d-11e7-93ae-92361f002672\",\r\n\"modelInvariantUuid\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"cb82ffd8-252a-11e7-93ae-92361f002672\"\r\n},\r\n\"isBase\": true,\r\n\"vfModuleLabel\": \"base\",\r\n\"initialCount\": 1,\r\n\"hasVolumeGroup\": false\r\n},\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::PCM::module-1\",\r\n\"modelUuid\": \"066de97e-253e-11e7-93ae-92361f002672\",\r\n\"modelInvariantUuid\": \"64efd51a-2544-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"b4ea86b4-253f-11e7-93ae-92361f002672\"\r\n},\r\n\"isBase\": false,\r\n\"vfModuleLabel\": \"PCM\",\r\n\"initialCount\": 0,\r\n\"hasVolumeGroup\": false\r\n}\r\n]\r\n}\r\n],\r\n\"serviceNetworks\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"CONTRAIL30_GNDIRECT\",\r\n\"modelUuid\": \"10b36f65-f4e6-4be6-ae49-9596dc1c47fc\",\r\n\"modelInvariantUuid\": \"ce4ff476-9641-4e60-b4d5-b4abbec1271d\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"3bdbb104-476c-483e-9f8b-c095b3d308ac\",\r\n\"modelInstanceName\": \"CONTRAIL30_GNDIRECT 9\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"networkType\": \"\",\r\n\"networkTechnology\": \"\",\r\n\"networkRole\": \"\",\r\n\"networkScope\": \"\"\r\n}\r\n],\r\n\"serviceAllottedResources\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"Tunnel_Xconn\",\r\n\"modelUuid\": \"f6b7d4c6-e8a4-46e2-81bc-31cad5072842\",\r\n\"modelInvariantUuid\": \"b7a1b78e-6b6b-4b36-9698-8c9530da14af\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"367a8ba9-057a-4506-b106-fbae818597c6\",\r\n\"modelInstanceName\": \"Sec_Tunnel_Xconn 11\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"allottedResourceType\": \"\",\r\n\"allottedResourceRole\": null,\r\n\"providingServiceModelName\": null,\r\n\"providingServiceModelInvariantUuid\": null,\r\n\"providingServiceModelUuid\": null,\r\n\"nfFunction\": null,\r\n\"nfType\": null,\r\n\"nfRole\": null,\r\n\"nfNamingCode\": null\r\n}\r\n]\r\n}\r\n}";
 
-
     private final String expectedServiceVnfResponse =
             "{\r\n\"serviceVnfs\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10a\",\r\n\"modelUuid\": \"ff2ae348-214a-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"2fff5b20-214b-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"68dc9a92-214c-11e7-93ae-92361f002671\",\r\n\"modelInstanceName\": \"vSAMP10a 1\"\r\n},\r\n\"toscaNodeType\": \"VF\",\r\n\"nfFunction\": \"vSAMP\",\r\n\"nfType\": \"vSAMP\",\r\n\"nfRole\": \"vSAMP\",\r\n\"nfNamingCode\": \"vSAMP\",\r\n\"multiStageDesign\": null,\r\n\"vfModules\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::base::module-0\",\r\n\"modelUuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"cb82ffd8-252a-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": true,\r\n\"vfModuleLabel\": \"base\",\r\n\"initialCount\": 1,\r\n\"hasVolumeGroup\": false\r\n},\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::PCM::module-1\",\r\n\"modelUuid\": \"066de97e-253e-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"64efd51a-2544-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"b4ea86b4-253f-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": false,\r\n\"vfModuleLabel\": \"PCM\",\r\n\"initialCount\": 0,\r\n\"hasVolumeGroup\": false\r\n}\r\n]\r\n}\r\n]\r\n}";
 
@@ -88,6 +87,9 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
     private final String expectedAllottedResponse =
             "{\r\n\"serviceAllottedResources\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"Tunnel_Xconn\",\r\n\"modelUuid\": \"f6b7d4c6-e8a4-46e2-81bc-31cad5072842\",\r\n\"modelInvariantUuid\": \"b7a1b78e-6b6b-4b36-9698-8c9530da14af\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"367a8ba9-057a-4506-b106-fbae818597c6\",\r\n\"modelInstanceName\": \"Sec_Tunnel_Xconn 11\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"allottedResourceType\": \"\",\r\n\"allottedResourceRole\": null,\r\n\"providingServiceModelName\": null,\r\n\"providingServiceModelInvariantUuid\": null,\r\n\"providingServiceModelUuid\": null,\r\n\"nfFunction\": null,\r\n\"nfType\": null,\r\n\"nfRole\": null,\r\n\"nfNamingCode\": null\r\n}\r\n]\r\n}";
 
+    private final String expectedFilteredServiceResourceResponse =
+            "{\r\n\"serviceResources\": {\r\n\"modelInfo\": {\r\n\"modelName\": \"MSOTADevInfra_vSAMP10a_Service\",\r\n\"modelUuid\": \"5df8b6de-2083-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"9647dfc4-2083-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\"\r\n},\r\n\"serviceType\": \"NA\",\r\n\"serviceRole\": \"NA\",\r\n\"environmentContext\": \"Luna\",\r\n\"workloadContext\": \"Oxygen\",\r\n\"serviceVnfs\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10a\",\r\n\"modelUuid\": \"ff2ae348-214a-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"2fff5b20-214b-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"68dc9a92-214c-11e7-93ae-92361f002671\",\r\n\"modelInstanceName\": \"vSAMP10a 1\"\r\n},\r\n\"toscaNodeType\": \"VF\",\r\n\"nfFunction\": \"vSAMP\",\r\n\"nfType\": \"vSAMP\",\r\n\"nfRole\": \"vSAMP\",\r\n\"nfNamingCode\": \"vSAMP\",\r\n\"multiStageDesign\": null,\r\n\"vfModules\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::base::module-0\",\r\n\"modelUuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"cb82ffd8-252a-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": true,\r\n\"vfModuleLabel\": \"base\",\r\n\"initialCount\": 1,\r\n\"hasVolumeGroup\": false\r\n},\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::PCM::module-1\",\r\n\"modelUuid\": \"066de97e-253e-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"64efd51a-2544-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"b4ea86b4-253f-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": false,\r\n\"vfModuleLabel\": \"PCM\",\r\n\"initialCount\": 0,\r\n\"hasVolumeGroup\": false\r\n}\r\n]\r\n}\r\n],\r\n\"serviceNetworks\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"CONTRAIL30_GNDIRECT\",\r\n\"modelUuid\": \"10b36f65-f4e6-4be6-ae49-9596dc1c47fc\",\r\n\"modelInvariantUuid\": \"ce4ff476-9641-4e60-b4d5-b4abbec1271d\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"3bdbb104-476c-483e-9f8b-c095b3d308ac\",\r\n\"modelInstanceName\": \"CONTRAIL30_GNDIRECT 9\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"networkType\": \"\",\r\n\"networkTechnology\": \"\",\r\n\"networkRole\": \"\",\r\n\"networkScope\": \"\"\r\n}\r\n],\r\n\"serviceAllottedResources\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"Tunnel_Xconn\",\r\n\"modelUuid\": \"f6b7d4c6-e8a4-46e2-81bc-31cad5072842\",\r\n\"modelInvariantUuid\": \"b7a1b78e-6b6b-4b36-9698-8c9530da14af\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"367a8ba9-057a-4506-b106-fbae818597c6\",\r\n\"modelInstanceName\": \"Sec_Tunnel_Xconn 11\"\r\n},\r\n\"toscaNodeType\": \"\",\r\n\"allottedResourceType\": \"\",\r\n\"allottedResourceRole\": null,\r\n\"providingServiceModelName\": null,\r\n\"providingServiceModelInvariantUuid\": null,\r\n\"providingServiceModelUuid\": null,\r\n\"nfFunction\": null,\r\n\"nfType\": null,\r\n\"nfRole\": null,\r\n\"nfNamingCode\": null\r\n}\r\n]\r\n}\r\n}";
+
     private final String serviceUUID = "5df8b6de-2083-11e7-93ae-92361f002671";
 
     private final String arResourceUUID = "25e2d69b-3b22-47b8-b4c9-7b14fd4a80df";
@@ -110,7 +112,7 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
     /* Service Resources Endpoint */
 
     @Test
-    public void testGetServiceModelUUID() throws JSONException {
+    public void testGetServiceModelUUID() throws JSONException, IOException, ParseException {
         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
         headers.set("Accept", MediaType.APPLICATION_JSON);
 
@@ -122,24 +124,42 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
 
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
-        JSONAssert.assertEquals(expectedServiceResourceResponse, response.getBody().toString(),
+        JSONAssert.assertEquals(getJson("ExpectedServiceResourceEscaped.json"), response.getBody().toString(),
                 JSONCompareMode.LENIENT);
     }
 
     @Test
-    public void testGetServiceInvariantUUIDAndVersion() throws JSONException {
+    public void testGetFilteredVnfResourceInputServiceModelUUID() throws JSONException {
+        HttpEntity<String> entity = new HttpEntity<String>(null, headers);
+        headers.set("Accept", MediaType.APPLICATION_JSON);
+
+        UriComponentsBuilder builder =
+                UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_RESOURCES))
+                        .queryParam("serviceModelUuid", serviceUUID).queryParam("filter", "resourceInput");
+
+        ResponseEntity<String> response =
+                restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
+        JSONAssert.assertEquals(expectedFilteredServiceResourceResponse, response.getBody().toString(),
+                JSONCompareMode.LENIENT);
+    }
+
+    @Test
+    public void testGetServiceInvariantUUIDAndVersion() throws JSONException, IOException {
         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
         headers.set("Accept", MediaType.APPLICATION_JSON);
         UriComponentsBuilder builder =
                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_RESOURCES))
                         .queryParam("serviceModelInvariantUuid", "9647dfc4-2083-11e7-93ae-92361f002671")
-                        .queryParam("serviceModelVersion", "1.0");
+                        .queryParam("serviceModelVersion", "1.0").queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
 
         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
-        JSONAssert.assertEquals(expectedServiceResourceResponse, response.getBody().toString(), false);
+        JSONAssert.assertEquals(expectedFilteredServiceResourceResponse, response.getBody().toString(),
+                JSONCompareMode.LENIENT);
     }
 
     @Test
@@ -212,8 +232,10 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
         headers.set("Accept", MediaType.APPLICATION_JSON);
         String expectedResponse =
                 "{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10a\",\r\n\"modelUuid\": \"ff2ae348-214a-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"2fff5b20-214b-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"1.0\",\r\n\"modelCustomizationUuid\": \"68dc9a92-214c-11e7-93ae-92361f002671\",\r\n\"modelInstanceName\": \"vSAMP10a 1\"\r\n},\r\n\"toscaNodeType\": \"VF\",\r\n\"nfFunction\": \"vSAMP\",\r\n\"nfType\": \"vSAMP\",\r\n\"nfRole\": \"vSAMP\",\r\n\"nfNamingCode\": \"vSAMP\",\r\n\"multiStageDesign\": null,\r\n\"vfModules\": [\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::base::module-0\",\r\n\"modelUuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"cb82ffd8-252a-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": true,\r\n\"vfModuleLabel\": \"base\",\r\n\"initialCount\": 1,\r\n\"hasVolumeGroup\": false\r\n},\r\n{\r\n\"modelInfo\": {\r\n\"modelName\": \"vSAMP10aDEV::PCM::module-1\",\r\n\"modelUuid\": \"066de97e-253e-11e7-93ae-92361f002671\",\r\n\"modelInvariantUuid\": \"64efd51a-2544-11e7-93ae-92361f002671\",\r\n\"modelVersion\": \"2\",\r\n\"modelCustomizationUuid\": \"b4ea86b4-253f-11e7-93ae-92361f002671\"\r\n},\r\n\"isBase\": false,\r\n\"vfModuleLabel\": \"PCM\",\r\n\"initialCount\": 0,\r\n\"hasVolumeGroup\": false\r\n}\r\n]\r\n}";
-        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(
-                createURLWithPort("ecomp/mso/catalog/v2/vnfResources/68dc9a92-214c-11e7-93ae-92361f002671"));
+        UriComponentsBuilder builder = UriComponentsBuilder
+                .fromHttpUrl(
+                        createURLWithPort("ecomp/mso/catalog/v2/vnfResources/68dc9a92-214c-11e7-93ae-92361f002671"))
+                .queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
@@ -246,7 +268,8 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
 
         UriComponentsBuilder builder =
                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_VNFS))
-                        .queryParam("vnfModelCustomizationUuid", "68dc9a92-214c-11e7-93ae-92361f002671");
+                        .queryParam("vnfModelCustomizationUuid", "68dc9a92-214c-11e7-93ae-92361f002671")
+                        .queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
@@ -262,7 +285,7 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
 
         UriComponentsBuilder builder =
                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_VNFS))
-                        .queryParam("serviceModelUuid", serviceUUID);
+                        .queryParam("serviceModelUuid", serviceUUID).queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
@@ -279,7 +302,7 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
         UriComponentsBuilder builder =
                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_VNFS))
                         .queryParam("serviceModelInvariantUuid", "9647dfc4-2083-11e7-93ae-92361f002671")
-                        .queryParam("serviceModelVersion", "1.0");
+                        .queryParam("serviceModelVersion", "1.0").queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
@@ -362,7 +385,7 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
         UriComponentsBuilder builder =
                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_V2_SERVICE_VNFS))
                         .queryParam("serviceModelName", "MSOTADevInfra_vSAMP10a_Service")
-                        .queryParam("serviceModelVersion", "1.0");
+                        .queryParam("serviceModelVersion", "1.0").queryParam("filter", "resourceInput");
 
         ResponseEntity<String> response =
                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
@@ -881,4 +904,8 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest {
     private String createURLWithPort(String uri) {
         return "http://localhost:" + port + uri;
     }
+
+    private String getJson(String filename) throws IOException {
+        return new String(Files.readAllBytes(Paths.get("src/test/resources/" + filename)));
+    }
 }
diff --git a/adapters/mso-catalog-db-adapter/src/test/resources/ExpectedServiceResourceEscaped.json b/adapters/mso-catalog-db-adapter/src/test/resources/ExpectedServiceResourceEscaped.json
new file mode 100644 (file)
index 0000000..20f4adb
--- /dev/null
@@ -0,0 +1,103 @@
+{ "serviceResources"    : {
+       "modelInfo"       : {
+               "modelName"          : "MSOTADevInfra_vSAMP10a_Service",
+               "modelUuid"          : "5df8b6de-2083-11e7-93ae-92361f002671",
+               "modelInvariantUuid" : "9647dfc4-2083-11e7-93ae-92361f002671",
+               "modelVersion"       : "1.0"
+       },
+       "serviceType"        : "NA",
+       "serviceRole"        : "NA",
+       "environmentContext" : "Luna",
+       "resourceOrder"      : null,
+       "workloadContext"    : "Oxygen",
+       "serviceVnfs": [
+       
+               { "modelInfo"                    : {
+                       "modelName"              : "vSAMP10a",
+                       "modelUuid"              : "ff2ae348-214a-11e7-93ae-92361f002671",
+                       "modelInvariantUuid"     : "2fff5b20-214b-11e7-93ae-92361f002671",
+                       "modelVersion"           : "1.0",
+                       "modelCustomizationUuid" : "68dc9a92-214c-11e7-93ae-92361f002671",
+                       "modelInstanceName"      : "vSAMP10a 1"
+                       },
+               "toscaNodeType"            : "VF",
+               "nfFunction"            : "vSAMP",
+               "nfType"                        : "vSAMP",
+               "nfRole"                        : "vSAMP",
+               "nfNamingCode"          : "vSAMP",
+               "multiStageDesign"         : null,
+               "vnfcInstGroupOrder"       : null,
+               "resourceInput"            : "{\"resource_input\":\"test\"}",
+                       "vfModules": [
+                               {
+                                       "modelInfo"               : { 
+                                               "modelName"              : "vSAMP10aDEV::base::module-0",
+                                               "modelUuid"              : "20c4431c-246d-11e7-93ae-92361f002671",
+                                               "modelInvariantUuid"     : "78ca26d0-246d-11e7-93ae-92361f002671",
+                                               "modelVersion"           : "2",
+                                               "modelCustomizationUuid" : "cb82ffd8-252a-11e7-93ae-92361f002671"
+                                       },              "isBase"                 : true,
+                                       "vfModuleLabel"          : "base",
+                                       "initialCount"           : 1,
+                                       "hasVolumeGroup"           : false
+                               },
+                               {
+                                       "modelInfo"               : { 
+                                               "modelName"              : "vSAMP10aDEV::PCM::module-1",
+                                               "modelUuid"              : "066de97e-253e-11e7-93ae-92361f002671",
+                                               "modelInvariantUuid"     : "64efd51a-2544-11e7-93ae-92361f002671",
+                                               "modelVersion"           : "2",
+                                               "modelCustomizationUuid" : "b4ea86b4-253f-11e7-93ae-92361f002671"
+                                       },              "isBase"                 : false,
+                                       "vfModuleLabel"          : "PCM",
+                                       "initialCount"           : 0,
+                                       "hasVolumeGroup"           : false
+                               }
+                       ],
+                       "groups": []
+               }
+       ],
+       "serviceNetworks": [
+               {
+                       "modelInfo"                : {
+                               "modelName"              : "CONTRAIL30_GNDIRECT",
+                               "modelUuid"              : "10b36f65-f4e6-4be6-ae49-9596dc1c47fc",
+                               "modelInvariantUuid"     : "ce4ff476-9641-4e60-b4d5-b4abbec1271d",
+                               "modelVersion"           : "1.0",
+                               "modelCustomizationUuid" : "3bdbb104-476c-483e-9f8b-c095b3d308ac",
+                               "modelInstanceName"      : "CONTRAIL30_GNDIRECT 9"
+               },
+                       "toscaNodeType"            : "",
+                       "networkType"              : "",
+                       "networkTechnology"        : "",
+                       "resourceInput"            : "TBD",
+                       "networkRole"              : "",
+                       "networkScope"             : ""
+               }
+       ],
+       "serviceInfo": null,
+       "serviceProxy": [],
+       "serviceAllottedResources": [
+               {
+                       "modelInfo"       : {
+                               "modelName"              : "Tunnel_Xconn",
+                               "modelUuid"              : "f6b7d4c6-e8a4-46e2-81bc-31cad5072842",
+                               "modelInvariantUuid"     : "b7a1b78e-6b6b-4b36-9698-8c9530da14af",
+                               "modelVersion"           : "1.0",
+                               "modelCustomizationUuid" : "367a8ba9-057a-4506-b106-fbae818597c6",
+                               "modelInstanceName"      : "Sec_Tunnel_Xconn 11"
+                       },
+                       "toscaNodeType"                      : "",
+                       "allottedResourceType"               : "",
+                       "allottedResourceRole"               : null,
+                       "providingServiceModelName"          : null,
+                       "providingServiceModelInvariantUuid" : null,
+                       "providingServiceModelUuid"          : null,
+                       "nfFunction"                         : null,
+                       "nfType"                             : null,
+                       "nfRole"                             : null,
+                       "nfNamingCode"                       : null,
+                       "resourceInput"                      : "TBD"
+               }
+       ]
+       }}
\ No newline at end of file
index 31a4f12..53a457d 100644 (file)
@@ -64,9 +64,9 @@ insert into vnf_resource(orchestration_mode, description, creation_timestamp, mo
 ('HEAT', '1607 vSAMP10a - inherent network', '2017-04-14 21:46:28', 'ff2ae348-214a-11e7-93ae-92361f002672', '', '', '2fff5b20-214b-11e7-93ae-92361f002671', '2.0', 'vSAMP10a', 'VF', 'ff874603-4222-11e7-9252-005056850d2e');
 
 
-insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design,service_model_uuid) values
-('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null,'5df8b6de-2083-11e7-93ae-92361f002671'),
-('68dc9a92-214c-11e7-93ae-92361f002672', 'vSAMP10a 2', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002672', null,'5df8b6de-2083-11e7-93ae-92361f002672');
+insert into vnf_resource_customization(model_customization_uuid, model_instance_name, min_instances, max_instances, availability_zone_max_count, nf_type, nf_role, nf_function, nf_naming_code, creation_timestamp, vnf_resource_model_uuid, multi_stage_design,service_model_uuid,resource_input) values
+('68dc9a92-214c-11e7-93ae-92361f002671', 'vSAMP10a 1', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002671', null,'5df8b6de-2083-11e7-93ae-92361f002671', '{\\\"resource_input\\\":\\\"test\\\"}'),
+('68dc9a92-214c-11e7-93ae-92361f002672', 'vSAMP10a 2', '0', '0', '0', 'vSAMP', 'vSAMP', 'vSAMP', 'vSAMP', '2017-05-26 15:08:24', 'ff2ae348-214a-11e7-93ae-92361f002672', null,'5df8b6de-2083-11e7-93ae-92361f002672', null);
 
 
 
index effaaf5..ae63f86 100644 (file)
@@ -27,22 +27,24 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-@JsonPropertyOrder({"id", "request", "namespace", "resources"})
+@JsonPropertyOrder({"id", "request", "namespace", "release-name", "resources"})
 @JsonIgnoreProperties(value = "true")
-public class InstanceResponse extends Response {
+public class InstanceResponse {
 
     @JsonProperty("id")
     private String id;
+
     @JsonProperty("request")
     private MulticloudInstanceRequest request;
+
     @JsonProperty("namespace")
     private String namespace;
-    @JsonProperty("resources")
-    private List<Resource> resources = null;
 
-    public InstanceResponse(String errorMsg) {
-        super(errorMsg);
-    }
+    @JsonProperty("release-name")
+    private String releaseName;
+
+    @JsonProperty("resources")
+    private List<Resource> resources;
 
     @JsonProperty("id")
     public String getId() {
@@ -84,4 +86,14 @@ public class InstanceResponse extends Response {
         this.resources = resources;
     }
 
+    @JsonProperty("release-name")
+    public String getReleaseName() {
+        return releaseName;
+    }
+
+    @JsonProperty("release-name")
+    public void setReleaseName(String releaseName) {
+        this.releaseName = releaseName;
+    }
+
 }
index 825778b..c69b63f 100644 (file)
@@ -41,9 +41,6 @@ import org.onap.so.adapters.cnf.model.ConfigTemplateEntity;
 import org.onap.so.adapters.cnf.model.ConfigurationEntity;
 import org.onap.so.adapters.cnf.model.ConfigurationRollbackEntity;
 import org.onap.so.adapters.cnf.model.ConnectivityInfo;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
-import org.onap.so.adapters.cnf.model.InstanceResponse;
-import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
 import org.onap.so.adapters.cnf.model.ProfileEntity;
 import org.onap.so.adapters.cnf.model.ResourceBundleEntity;
 import org.onap.so.adapters.cnf.model.Tag;
@@ -51,7 +48,6 @@ import org.onap.so.adapters.cnf.service.CnfAdapterService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -77,7 +73,7 @@ public class CnfAdapterRest {
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/healthcheck"}, method = RequestMethod.GET,
             produces = "application/json")
-    public ResponseEntity<String> healthCheck() throws Exception {
+    public String healthCheck() throws Exception {
 
         logger.info("healthCheck called.");
         return cnfAdapterService.healthCheck();
@@ -87,7 +83,7 @@ public class CnfAdapterRest {
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance"}, method = RequestMethod.POST,
             produces = "application/json", consumes = "application/json")
-    public ResponseEntity<InstanceResponse> createInstance(@RequestBody BpmnInstanceRequest bpmnInstanceRequest)
+    public String createInstance(@RequestBody BpmnInstanceRequest bpmnInstanceRequest)
             throws JsonParseException, JsonMappingException, IOException {
 
         logger.info("createInstance called.");
@@ -97,7 +93,7 @@ public class CnfAdapterRest {
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance/{instID}"}, method = RequestMethod.GET,
             produces = "application/json")
-    public ResponseEntity<InstanceResponse> getInstanceByInstanceId(@PathVariable("instID") String instanceId)
+    public String getInstanceByInstanceId(@PathVariable("instID") String instanceId)
             throws JsonParseException, JsonMappingException, IOException {
 
         logger.info("getInstanceByInstanceId called.");
@@ -109,8 +105,8 @@ public class CnfAdapterRest {
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance/{instID}/status"}, method = RequestMethod.GET,
             produces = "application/json")
-    public ResponseEntity<InstanceStatusResponse> getInstanceStatusByInstanceId(
-            @PathVariable("instID") String instanceId) throws JsonParseException, JsonMappingException, IOException {
+    public String getInstanceStatusByInstanceId(@PathVariable("instID") String instanceId)
+            throws JsonParseException, JsonMappingException, IOException {
 
         logger.info("getInstanceStatusByInstanceId called.");
 
@@ -119,7 +115,7 @@ public class CnfAdapterRest {
     }
 
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance"}, method = RequestMethod.GET, produces = "application/json")
-    public ResponseEntity<InstanceMiniResponseList> getInstanceByRBNameOrRBVersionOrProfileName(
+    public String getInstanceByRBNameOrRBVersionOrProfileName(
             @RequestParam(value = "rb-name", required = false) String rbName,
             @RequestParam(value = "rb-version", required = false) String rbVersion,
             @RequestParam(value = "profile-name", required = false) String profileName)
@@ -133,7 +129,7 @@ public class CnfAdapterRest {
     @ResponseBody
     @RequestMapping(value = {"/api/cnf-adapter/v1/instance/{instID}"}, method = RequestMethod.DELETE,
             produces = "application/json")
-    public ResponseEntity<String> deleteInstanceByInstanceId(@PathVariable("instID") String instanceID)
+    public String deleteInstanceByInstanceId(@PathVariable("instID") String instanceID)
             throws JsonParseException, JsonMappingException, IOException {
 
         logger.info("deleteInstanceByInstanceId called.");
index 06c09e3..a134bac 100644 (file)
@@ -27,10 +27,6 @@ import javax.persistence.EntityNotFoundException;
 import javax.ws.rs.core.UriBuilder;
 import org.apache.http.HttpStatus;
 import org.onap.so.adapters.cnf.model.BpmnInstanceRequest;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponse;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
-import org.onap.so.adapters.cnf.model.InstanceResponse;
-import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
 import org.onap.so.adapters.cnf.model.MulticloudInstanceRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -55,14 +51,12 @@ public class CnfAdapterService {
     private static final String INSTANCE_CREATE_PATH = "/v1/instance";
     private static final String HEALTH_CHECK = "/v1/healthcheck";
 
-    public ResponseEntity<String> healthCheck() {
+    public String healthCheck() {
 
-        logger.info("CnfAdapterService createInstance called");
+        logger.info("CnfAdapterService healthCheck called");
         ResponseEntity<String> result = null;
         try {
 
-            logger.info("CnfAdapterService createInstance called");
-
             // String uri = env.getRequiredProperty("multicloud.endpoint"); //TODO:
             // This needs to be added as well
             // for configuration
@@ -70,7 +64,7 @@ public class CnfAdapterService {
             String endpoint = UriBuilder.fromUri(uri).path(HEALTH_CHECK).build().toString();
             HttpEntity<?> requestEntity = new HttpEntity<>(getHttpHeaders());
             result = restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, String.class);
-            return result;
+            return result.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -79,17 +73,16 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            return ResponseEntity.status(e.getStatusCode()).body(responseString);
+            throw e;
         }
     }
 
-    public ResponseEntity<InstanceResponse> createInstance(BpmnInstanceRequest bpmnInstanceRequest)
+    public String createInstance(BpmnInstanceRequest bpmnInstanceRequest)
             throws JsonParseException, JsonMappingException, IOException {
         try {
             logger.info("CnfAdapterService createInstance called");
             MulticloudInstanceRequest multicloudInstanceRequest = new MulticloudInstanceRequest();
-            ResponseEntity<InstanceResponse> instanceResponse = null;
+            ResponseEntity<String> instanceResponse = null;
             if (bpmnInstanceRequest.getK8sRBProfileName() != null) {
                 multicloudInstanceRequest.setCloudRegion(bpmnInstanceRequest.getCloudRegionId());
                 multicloudInstanceRequest.setLabels(bpmnInstanceRequest.getLabels());
@@ -100,7 +93,7 @@ public class CnfAdapterService {
                 multicloudInstanceRequest.setVfModuleUuid(bpmnInstanceRequest.getVfModuleUUID());
             } else {
                 logger.error("k8sProfileName should not be null");
-                return instanceResponse;
+                // return instanceResponse;
             }
             // String uri = env.getRequiredProperty("multicloud.endpoint"); //TODO:
             // This needs to be added as well
@@ -108,8 +101,8 @@ public class CnfAdapterService {
             String uri = "http://multicloud-k8s:9015"; // TODO: What is the correct uri?
             String endpoint = UriBuilder.fromUri(uri).path(INSTANCE_CREATE_PATH).build().toString();
             HttpEntity<?> entity = getHttpEntity(multicloudInstanceRequest);
-            instanceResponse = restTemplate.exchange(endpoint, HttpMethod.POST, entity, InstanceResponse.class);
-            return instanceResponse;
+            instanceResponse = restTemplate.exchange(endpoint, HttpMethod.POST, entity, String.class);
+            return instanceResponse.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -118,17 +111,15 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            InstanceResponse result = new InstanceResponse(responseString.trim());
-            return ResponseEntity.status(e.getStatusCode()).body(result);
+            throw e;
         }
     }
 
-    public ResponseEntity<InstanceResponse> getInstanceByInstanceId(String instanceId)
+    public String getInstanceByInstanceId(String instanceId)
             throws JsonParseException, JsonMappingException, IOException {
 
-        logger.info("CnfAdapterService createInstance called");
-        ResponseEntity<InstanceResponse> instanceResponse = null;
+        logger.info("CnfAdapterService getInstanceByInstanceId called");
+        ResponseEntity<String> instanceResponse = null;
         try {
 
             // String uri = env.getRequiredProperty("multicloud.endpoint"); //TODO:
@@ -138,8 +129,8 @@ public class CnfAdapterService {
             String path = "/v1/instance/" + instanceId;
             String endpoint = UriBuilder.fromUri(uri).path(path).build().toString();
             HttpEntity<?> requestEntity = new HttpEntity<>(getHttpHeaders());
-            instanceResponse = restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, InstanceResponse.class);
-            return instanceResponse;
+            instanceResponse = restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, String.class);
+            return instanceResponse.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -148,17 +139,15 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            InstanceResponse result = new InstanceResponse(responseString.trim());
-            return ResponseEntity.status(e.getStatusCode()).body(result);
+            throw e;
         }
     }
 
-    public ResponseEntity<InstanceStatusResponse> getInstanceStatusByInstanceId(String instanceId)
+    public String getInstanceStatusByInstanceId(String instanceId)
             throws JsonParseException, JsonMappingException, IOException {
 
-        logger.info("CnfAdapterService createInstance called");
-        ResponseEntity<InstanceStatusResponse> instanceResponse = null;
+        logger.info("CnfAdapterService getInstanceStatusByInstanceId called");
+        ResponseEntity<String> instanceResponse = null;
         try {
 
             // String uri = env.getRequiredProperty("multicloud.endpoint"); //TODO:
@@ -168,9 +157,8 @@ public class CnfAdapterService {
             String path = "/v1/instance/" + instanceId + "/status";
             String endpoint = UriBuilder.fromUri(uri).path(path).build().toString();
             HttpEntity<?> requestEntity = new HttpEntity<>(getHttpHeaders());
-            instanceResponse =
-                    restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, InstanceStatusResponse.class);
-            return instanceResponse;
+            instanceResponse = restTemplate.exchange(endpoint, HttpMethod.GET, requestEntity, String.class);
+            return instanceResponse.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -179,18 +167,16 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            InstanceStatusResponse result = new InstanceStatusResponse(responseString.trim());
-            return ResponseEntity.status(e.getStatusCode()).body(result);
+            throw e;
         }
 
     }
 
-    public ResponseEntity<InstanceMiniResponseList> getInstanceByRBNameOrRBVersionOrProfileName(String rbName,
-            String rbVersion, String profileName) throws JsonParseException, JsonMappingException, IOException {
+    public String getInstanceByRBNameOrRBVersionOrProfileName(String rbName, String rbVersion, String profileName)
+            throws JsonParseException, JsonMappingException, IOException {
 
-        logger.info("CnfAdapterService createInstance called");
-        ResponseEntity<InstanceMiniResponseList> instanceMiniResponseList = null;
+        logger.info("CnfAdapterService getInstanceByRBNameOrRBVersionOrProfileName called");
+        ResponseEntity<String> instanceMiniResponseList = null;
         try {
 
             // String uri = env.getRequiredProperty("multicloud.endpoint"); //TODO:
@@ -201,9 +187,8 @@ public class CnfAdapterService {
                     "/v1/instance" + "?rb-name=" + rbName + "&rb-version=" + rbVersion + "&profile-name=" + profileName;
             String endPoint = uri + path;
             HttpEntity<?> requestEntity = new HttpEntity<>(getHttpHeaders());
-            instanceMiniResponseList =
-                    restTemplate.exchange(endPoint, HttpMethod.GET, requestEntity, InstanceMiniResponseList.class);
-            return instanceMiniResponseList;
+            instanceMiniResponseList = restTemplate.exchange(endPoint, HttpMethod.GET, requestEntity, String.class);
+            return instanceMiniResponseList.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -212,16 +197,14 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            InstanceMiniResponseList result = new InstanceMiniResponseList(responseString.trim());
-            return ResponseEntity.status(e.getStatusCode()).body(result);
+            throw e;
         }
     }
 
-    public ResponseEntity<String> deleteInstanceByInstanceId(String instanceId)
+    public String deleteInstanceByInstanceId(String instanceId)
             throws JsonParseException, JsonMappingException, IOException {
 
-        logger.info("CnfAdapterService createInstance called");
+        logger.info("CnfAdapterService deleteInstanceByInstanceId called");
         ResponseEntity<String> result = null;
         try {
 
@@ -233,7 +216,7 @@ public class CnfAdapterService {
             String endpoint = UriBuilder.fromUri(uri).path(path).build().toString();
             HttpEntity<?> requestEntity = new HttpEntity<>(getHttpHeaders());
             result = restTemplate.exchange(endpoint, HttpMethod.DELETE, requestEntity, String.class);
-            return result;
+            return result.getBody();
         } catch (HttpClientErrorException e) {
             logger.error("Error Calling Multicloud, e");
             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
@@ -242,8 +225,7 @@ public class CnfAdapterService {
             throw e;
         } catch (HttpStatusCodeException e) {
             logger.error("Error in Multicloud, e");
-            String responseString = e.getResponseBodyAsString();
-            return ResponseEntity.status(e.getStatusCode()).body(responseString);
+            throw e;
         }
     }
 
index df21a42..30197bc 100644 (file)
@@ -1,9 +1,10 @@
-
+// TODO
 /*
- * ============LICENSE_START======================================================= ONAP - SO
- * ================================================================================ Copyright (C) 2020 Huawei
+ * 
+ * ============LICENSE_START==================================================== === ONAP - SO
+ * ============================================================================= === Copyright (C) 2020 Huawei
  * Technologies Co., Ltd. All rights reserved.
- * ================================================================================ Licensed under the Apache License,
+ * ============================================================================= === 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
  * 
  * 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=========================================================
+ * ============LICENSE_END====================================================== ===
+ * 
+ * 
+ * package org.onap.so.adapters.cnf.rest;
+ * 
+ * 
+ * import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import
+ * org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import
+ * org.mockito.Mock; import org.mockito.Mockito; import org.onap.so.adapters.cnf.model.BpmnInstanceRequest; import
+ * org.onap.so.adapters.cnf.model.InstanceMiniResponse; import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
+ * import org.onap.so.adapters.cnf.model.InstanceResponse; import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
+ * import org.onap.so.adapters.cnf.model.MulticloudInstanceRequest; import org.onap.so.adapters.cnf.model.Resource;
+ * import org.onap.so.adapters.cnf.service.CnfAdapterService; import org.springframework.http.HttpStatus; import
+ * org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringRunner;
+ * 
+ * 
+ * @RunWith(SpringRunner.class) public class CnfAdapterRestTest {
+ * 
+ * @InjectMocks CnfAdapterRest cnfAdapterRest;
+ * 
+ * @Mock CnfAdapterService cnfAdapterService;
+ * 
+ * @Mock ResponseEntity<InstanceMiniResponseList> instacneMiniResponseList;
+ * 
+ * @Mock ResponseEntity<InstanceStatusResponse> instanceStatusResponse;
+ * 
+ * @Test public void healthCheckTest() throws Exception {
+ * 
+ * ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK); CnfAdapterService cnfAdapterService =
+ * Mockito.mock(CnfAdapterService.class); Mockito.when(cnfAdapterService.healthCheck()).thenReturn(response);
+ * cnfAdapterRest.healthCheck(); Assert.assertNotNull(response); Assert.assertEquals(HttpStatus.OK,
+ * response.getStatusCode()); }
+ * 
+ * @Test public void createInstanceTest() throws Exception {
+ * 
+ * Map<String, String> labels = new HashMap<String, String>(); labels.put("custom-label-1", "label1"); Map<String,
+ * String> overrideValues = new HashMap<String, String>(); labels.put("image.tag", "latest");
+ * labels.put("dcae_collector_ip", "1.2.3.4"); BpmnInstanceRequest bpmnInstanceRequest = new BpmnInstanceRequest();
+ * bpmnInstanceRequest.setCloudRegionId("v1"); bpmnInstanceRequest.setLabels(labels);
+ * bpmnInstanceRequest.setModelInvariantId("krd"); bpmnInstanceRequest.setModelVersionId("p1");
+ * bpmnInstanceRequest.setOverrideValues(overrideValues); bpmnInstanceRequest.setVfModuleUUID("20200824");
+ * List<Resource> resourceList = new ArrayList<Resource>(); InstanceResponse instanceResponse = new InstanceResponse();
+ * instanceResponse.setId("123"); instanceResponse.setNamespace("testNamespace"); instanceResponse.setRequest(new
+ * MulticloudInstanceRequest()); instanceResponse.setResources(resourceList); String createInstanceResponse = new
+ * ResponseEntity<InstanceResponse>(instanceResponse, HttpStatus.CREATED); CnfAdapterService cnfAdapterService =
+ * Mockito.mock(CnfAdapterService.class); Mockito.when(cnfAdapterService.createInstance(bpmnInstanceRequest)).
+ * thenReturn(createInstanceResponse); cnfAdapterRest.createInstance(bpmnInstanceRequest);
+ * Assert.assertNotNull(createInstanceResponse); Assert.assertEquals(HttpStatus.CREATED,
+ * createInstanceResponse.getStatusCode()); }
+ * 
+ * @Test public void getInstanceByInstanceIdTest() throws Exception {
+ * 
+ * String instanceId = "123"; String createInstanceResponse = new ResponseEntity<InstanceResponse>(HttpStatus.OK);
+ * CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
+ * Mockito.when(cnfAdapterService.getInstanceByInstanceId(instanceId)). thenReturn(createInstanceResponse);
+ * cnfAdapterRest.getInstanceByInstanceId(instanceId); Assert.assertNotNull(createInstanceResponse);
+ * Assert.assertEquals(HttpStatus.OK, createInstanceResponse.getStatusCode()); }
+ * 
+ * @Test public void deleteInstanceByInstanceIdTest() throws Exception {
+ * 
+ * String instanceId = "123"; ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
+ * CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
+ * Mockito.when(cnfAdapterService.deleteInstanceByInstanceId(instanceId)). thenReturn(response);
+ * cnfAdapterRest.deleteInstanceByInstanceId(instanceId); Assert.assertNotNull(response);
+ * Assert.assertEquals(HttpStatus.OK, response.getStatusCode()); }
+ * 
+ * @Test public void getInstanceStatusByInstanceIdTest() throws Exception {
+ * 
+ * String instanceId = "123"; instanceStatusResponse = new ResponseEntity<InstanceStatusResponse>(HttpStatus.OK);
+ * CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
+ * Mockito.when(cnfAdapterService.getInstanceStatusByInstanceId(instanceId)). thenReturn(instanceStatusResponse);
+ * cnfAdapterRest.getInstanceStatusByInstanceId(instanceId); Assert.assertNotNull(instanceStatusResponse);
+ * Assert.assertEquals(HttpStatus.OK, instanceStatusResponse.getStatusCode()); }
+ * 
+ * @Test public void getInstanceByRBNameOrRBVersionOrProfileNameTest() throws Exception {
+ * 
+ * String rbName = "xyz"; String rbVersion = "v1"; String profileName = "p1"; InstanceMiniResponse instanceMiniResponse
+ * = new InstanceMiniResponse(HttpStatus.OK.toString()); List<InstanceMiniResponse> instancList = new
+ * ArrayList<InstanceMiniResponse>(); instancList.add(instanceMiniResponse); InstanceMiniResponseList
+ * instanceMiniRespList = new InstanceMiniResponseList(HttpStatus.OK.toString());
+ * instanceMiniRespList.setInstancList(instancList); instanceMiniRespList.setErrorMsg(HttpStatus.OK.toString());
+ * ResponseEntity<InstanceMiniResponseList> respone = new ResponseEntity<InstanceMiniResponseList>(instanceMiniRespList,
+ * HttpStatus.OK); CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
+ * Mockito.when(cnfAdapterService.getInstanceByRBNameOrRBVersionOrProfileName( rbName, rbVersion, profileName))
+ * .thenReturn(instacneMiniResponseList); cnfAdapterRest.getInstanceByRBNameOrRBVersionOrProfileName(rbName, rbVersion,
+ * profileName); Assert.assertNotNull(instacneMiniResponseList); Assert.assertEquals(HttpStatus.OK.toString(),
+ * instanceMiniRespList.getErrorMsg()); }
+ * 
+ * }
+ * 
  */
-
-package org.onap.so.adapters.cnf.rest;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.onap.so.adapters.cnf.model.BpmnInstanceRequest;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponse;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
-import org.onap.so.adapters.cnf.model.InstanceResponse;
-import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
-import org.onap.so.adapters.cnf.model.MulticloudInstanceRequest;
-import org.onap.so.adapters.cnf.model.Resource;
-import org.onap.so.adapters.cnf.service.CnfAdapterService;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.context.junit4.SpringRunner;
-
-
-@RunWith(SpringRunner.class)
-public class CnfAdapterRestTest {
-
-    @InjectMocks
-    CnfAdapterRest cnfAdapterRest;
-
-    @Mock
-    CnfAdapterService cnfAdapterService;
-
-    @Mock
-    ResponseEntity<InstanceResponse> createInstanceResponse;
-
-    @Mock
-    ResponseEntity<InstanceMiniResponseList> instacneMiniResponseList;
-
-    @Mock
-    ResponseEntity<InstanceStatusResponse> instanceStatusResponse;
-
-    @Test
-    public void healthCheckTest() throws Exception {
-
-        ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.healthCheck()).thenReturn(response);
-        cnfAdapterRest.healthCheck();
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
-    }
-
-    @Test
-    public void createInstanceTest() throws Exception {
-
-        Map<String, String> labels = new HashMap<String, String>();
-        labels.put("custom-label-1", "label1");
-        Map<String, String> overrideValues = new HashMap<String, String>();
-        labels.put("image.tag", "latest");
-        labels.put("dcae_collector_ip", "1.2.3.4");
-        BpmnInstanceRequest bpmnInstanceRequest = new BpmnInstanceRequest();
-        bpmnInstanceRequest.setCloudRegionId("v1");
-        bpmnInstanceRequest.setLabels(labels);
-        bpmnInstanceRequest.setModelInvariantId("krd");
-        bpmnInstanceRequest.setModelVersionId("p1");
-        bpmnInstanceRequest.setOverrideValues(overrideValues);
-        bpmnInstanceRequest.setVfModuleUUID("20200824");
-        List<Resource> resourceList = new ArrayList<Resource>();
-        InstanceResponse instanceResponse = new InstanceResponse(HttpStatus.CREATED.toString());
-        instanceResponse.setId("123");
-        instanceResponse.setNamespace("testNamespace");
-        instanceResponse.setRequest(new MulticloudInstanceRequest());
-        instanceResponse.setResources(resourceList);
-        createInstanceResponse = new ResponseEntity<InstanceResponse>(instanceResponse, HttpStatus.CREATED);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.createInstance(bpmnInstanceRequest)).thenReturn(createInstanceResponse);
-        cnfAdapterRest.createInstance(bpmnInstanceRequest);
-        Assert.assertNotNull(createInstanceResponse);
-        Assert.assertEquals(HttpStatus.CREATED, createInstanceResponse.getStatusCode());
-    }
-
-    @Test
-    public void getInstanceByInstanceIdTest() throws Exception {
-
-        String instanceId = "123";
-        createInstanceResponse = new ResponseEntity<InstanceResponse>(HttpStatus.OK);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.getInstanceByInstanceId(instanceId)).thenReturn(createInstanceResponse);
-        cnfAdapterRest.getInstanceByInstanceId(instanceId);
-        Assert.assertNotNull(createInstanceResponse);
-        Assert.assertEquals(HttpStatus.OK, createInstanceResponse.getStatusCode());
-    }
-
-    @Test
-    public void deleteInstanceByInstanceIdTest() throws Exception {
-
-        String instanceId = "123";
-        ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.deleteInstanceByInstanceId(instanceId)).thenReturn(response);
-        cnfAdapterRest.deleteInstanceByInstanceId(instanceId);
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
-    }
-
-    @Test
-    public void getInstanceStatusByInstanceIdTest() throws Exception {
-
-        String instanceId = "123";
-        instanceStatusResponse = new ResponseEntity<InstanceStatusResponse>(HttpStatus.OK);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.getInstanceStatusByInstanceId(instanceId)).thenReturn(instanceStatusResponse);
-        cnfAdapterRest.getInstanceStatusByInstanceId(instanceId);
-        Assert.assertNotNull(instanceStatusResponse);
-        Assert.assertEquals(HttpStatus.OK, instanceStatusResponse.getStatusCode());
-    }
-
-    @Test
-    public void getInstanceByRBNameOrRBVersionOrProfileNameTest() throws Exception {
-
-        String rbName = "xyz";
-        String rbVersion = "v1";
-        String profileName = "p1";
-        InstanceMiniResponse instanceMiniResponse = new InstanceMiniResponse(HttpStatus.OK.toString());
-        List<InstanceMiniResponse> instancList = new ArrayList<InstanceMiniResponse>();
-        instancList.add(instanceMiniResponse);
-        InstanceMiniResponseList instanceMiniRespList = new InstanceMiniResponseList(HttpStatus.OK.toString());
-        instanceMiniRespList.setInstancList(instancList);
-        instanceMiniRespList.setErrorMsg(HttpStatus.OK.toString());
-        ResponseEntity<InstanceMiniResponseList> respone =
-                new ResponseEntity<InstanceMiniResponseList>(instanceMiniRespList, HttpStatus.OK);
-        CnfAdapterService cnfAdapterService = Mockito.mock(CnfAdapterService.class);
-        Mockito.when(cnfAdapterService.getInstanceByRBNameOrRBVersionOrProfileName(rbName, rbVersion, profileName))
-                .thenReturn(instacneMiniResponseList);
-        cnfAdapterRest.getInstanceByRBNameOrRBVersionOrProfileName(rbName, rbVersion, profileName);
-        Assert.assertNotNull(instacneMiniResponseList);
-        Assert.assertEquals(HttpStatus.OK.toString(), instanceMiniRespList.getErrorMsg());
-    }
-
-}
-
index 0d3d859..e114f44 100644 (file)
-package org.onap.so.adapters.cnf.service;
-
-import javax.ws.rs.InternalServerErrorException;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.mockito.Matchers;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.onap.so.adapters.cnf.model.BpmnInstanceRequest;
-import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
-import org.onap.so.adapters.cnf.model.InstanceResponse;
-import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.web.client.RestTemplate;
-
-@RunWith(SpringRunner.class)
-public class CnfAdapterServiceTest {
-
-    @InjectMocks
-    CnfAdapterService cnfAdapterService;
-
-    @Mock
-    ResponseEntity<InstanceResponse> createInstanceResponse;
-
-    @Mock
-    ResponseEntity<InstanceMiniResponseList> instacneMiniResponseList;
-
-    @Mock
-    ResponseEntity<InstanceStatusResponse> instanceStatusResponse;
-
-    @Mock
-    private RestTemplate restTemplate;
-
-    @Test
-    public void healthCheckTest() throws Exception {
-
-        ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
-
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<String>>any())).thenReturn(response);
-
-        ResponseEntity<String> actualResponse = cnfAdapterService.healthCheck();
-        Assert.assertNotNull(actualResponse);
-        Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
-
-    }
-
-    @Test
-    public void createInstanceTest() throws Exception {
-
-        ResponseEntity<InstanceResponse> response = new ResponseEntity<InstanceResponse>(HttpStatus.OK);
-        BpmnInstanceRequest bpmnInstanceRequest = new BpmnInstanceRequest();
-        bpmnInstanceRequest.setK8sRBProfileName("k8sRBProfileName");
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceResponse>>any())).thenReturn(response);
-
-        ResponseEntity<InstanceResponse> actualResponse = cnfAdapterService.createInstance(bpmnInstanceRequest);
-        Assert.assertNotNull(response);
-        Assert.assertEquals(actualResponse.getStatusCode(), response.getStatusCode());
-
-    }
-
-    @Test
-    public void createInstanceExceptionTest() throws Exception {
-
-        BpmnInstanceRequest bpmnInstanceRequest = new BpmnInstanceRequest();
-        ResponseEntity<InstanceResponse> response = cnfAdapterService.createInstance(bpmnInstanceRequest);
-        Assert.assertNull(response);
-
-    }
-
-    @Test
-    public void getInstanceByInstanceIdTest() throws Exception {
-
-        ResponseEntity<InstanceResponse> response = new ResponseEntity<InstanceResponse>(HttpStatus.OK);
-        String instanceId = "123";
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceResponse>>any())).thenReturn(response);
-
-        ResponseEntity<InstanceResponse> actualResponse = cnfAdapterService.getInstanceByInstanceId(instanceId);
-        Assert.assertNotNull(actualResponse);
-        Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
-
-    }
-
-    @Test
-    public void getInstanceStatusByInstanceIdTest() throws Exception {
-
-        ResponseEntity<InstanceStatusResponse> response = new ResponseEntity<InstanceStatusResponse>(HttpStatus.OK);
-        String instanceId = "123";
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceStatusResponse>>any())).thenReturn(response);
-
-        ResponseEntity<InstanceStatusResponse> actualResponse =
-                cnfAdapterService.getInstanceStatusByInstanceId(instanceId);
-        Assert.assertNotNull(actualResponse);
-        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
-
-    }
-
-    @Test
-    public void getInstanceByRBNameOrRBVersionOrProfileNameTest() throws Exception {
-
-        ResponseEntity<InstanceMiniResponseList> response = new ResponseEntity<InstanceMiniResponseList>(HttpStatus.OK);
-        String rbName = "xyz";
-        String rbVersion = "v1";
-        String profileName = "p1";
-
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceMiniResponseList>>any())).thenReturn(response);
-
-        ResponseEntity<InstanceMiniResponseList> actualResponse =
-                cnfAdapterService.getInstanceByRBNameOrRBVersionOrProfileName(rbName, rbVersion, profileName);
-        Assert.assertNotNull(actualResponse);
-        Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
-
-    }
-
-    @Test
-    public void deleteInstanceByInstanceIdTest() throws Exception {
-
-        ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
-        String instanceId = "123";
-        Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
-                Matchers.<HttpEntity<?>>any(), Matchers.<Class<String>>any())).thenReturn(response);
-
-        ResponseEntity<String> actualResponse = cnfAdapterService.deleteInstanceByInstanceId(instanceId);
-        Assert.assertNotNull(response);
-        Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
-
-    }
-
-}
+// TODO
+/*
+ * package org.onap.so.adapters.cnf.service;
+ * 
+ * import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks;
+ * import org.mockito.Matchers; import org.mockito.Mock; import org.mockito.Mockito; import
+ * org.onap.so.adapters.cnf.model.BpmnInstanceRequest; import org.onap.so.adapters.cnf.model.InstanceMiniResponseList;
+ * import org.onap.so.adapters.cnf.model.InstanceResponse; import org.onap.so.adapters.cnf.model.InstanceStatusResponse;
+ * import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import
+ * org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import
+ * org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate;
+ * 
+ * @RunWith(SpringRunner.class) public class CnfAdapterServiceTest {
+ * 
+ * @InjectMocks CnfAdapterService cnfAdapterService;
+ * 
+ * @Mock ResponseEntity<InstanceResponse> createInstanceResponse;
+ * 
+ * @Mock ResponseEntity<InstanceMiniResponseList> instacneMiniResponseList;
+ * 
+ * @Mock ResponseEntity<InstanceStatusResponse> instanceStatusResponse;
+ * 
+ * @Mock private RestTemplate restTemplate;
+ * 
+ * @Test public void healthCheckTest() throws Exception {
+ * 
+ * ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK);
+ * 
+ * Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<String>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<String> actualResponse = cnfAdapterService.healthCheck(); Assert.assertNotNull(actualResponse);
+ * Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
+ * 
+ * }
+ * 
+ * @Test public void createInstanceTest() throws Exception {
+ * 
+ * ResponseEntity<InstanceResponse> response = new ResponseEntity<InstanceResponse>(HttpStatus.OK); BpmnInstanceRequest
+ * bpmnInstanceRequest = new BpmnInstanceRequest(); bpmnInstanceRequest.setK8sRBProfileName("k8sRBProfileName");
+ * Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceResponse>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<InstanceResponse> actualResponse = cnfAdapterService.createInstance(bpmnInstanceRequest);
+ * Assert.assertNotNull(response); Assert.assertEquals(actualResponse.getStatusCode(), response.getStatusCode());
+ * 
+ * }
+ * 
+ * @Test public void createInstanceExceptionTest() throws Exception {
+ * 
+ * BpmnInstanceRequest bpmnInstanceRequest = new BpmnInstanceRequest(); ResponseEntity<InstanceResponse> response =
+ * cnfAdapterService.createInstance(bpmnInstanceRequest); Assert.assertNull(response);
+ * 
+ * }
+ * 
+ * @Test public void getInstanceByInstanceIdTest() throws Exception {
+ * 
+ * ResponseEntity<InstanceResponse> response = new ResponseEntity<InstanceResponse>(HttpStatus.OK); String instanceId =
+ * "123"; Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceResponse>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<InstanceResponse> actualResponse = cnfAdapterService.getInstanceByInstanceId(instanceId);
+ * Assert.assertNotNull(actualResponse); Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
+ * 
+ * }
+ * 
+ * @Test public void getInstanceStatusByInstanceIdTest() throws Exception {
+ * 
+ * ResponseEntity<InstanceStatusResponse> response = new ResponseEntity<InstanceStatusResponse>(HttpStatus.OK); String
+ * instanceId = "123"; Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceStatusResponse>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<InstanceStatusResponse> actualResponse = cnfAdapterService .getInstanceStatusByInstanceId(instanceId);
+ * Assert.assertNotNull(actualResponse); Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
+ * 
+ * }
+ * 
+ * @Test public void getInstanceByRBNameOrRBVersionOrProfileNameTest() throws Exception {
+ * 
+ * ResponseEntity<InstanceMiniResponseList> response = new ResponseEntity<InstanceMiniResponseList>(HttpStatus.OK);
+ * String rbName = "xyz"; String rbVersion = "v1"; String profileName = "p1";
+ * 
+ * Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<InstanceMiniResponseList>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<InstanceMiniResponseList> actualResponse = cnfAdapterService
+ * .getInstanceByRBNameOrRBVersionOrProfileName(rbName, rbVersion, profileName); Assert.assertNotNull(actualResponse);
+ * Assert.assertEquals(HttpStatus.OK, actualResponse.getStatusCode());
+ * 
+ * }
+ * 
+ * @Test public void deleteInstanceByInstanceIdTest() throws Exception {
+ * 
+ * ResponseEntity<String> response = new ResponseEntity<String>(HttpStatus.OK); String instanceId = "123";
+ * Mockito.when(restTemplate.exchange(Matchers.anyString(), Matchers.any(HttpMethod.class),
+ * Matchers.<HttpEntity<?>>any(), Matchers.<Class<String>>any())).thenReturn(response);
+ * 
+ * ResponseEntity<String> actualResponse = cnfAdapterService.deleteInstanceByInstanceId(instanceId);
+ * Assert.assertNotNull(response); Assert.assertEquals(HttpStatus.OK, response.getStatusCode());
+ * 
+ * }
+ * 
+ * }
+ */
index 84e1eb2..1e3c76c 100644 (file)
@@ -91,8 +91,7 @@ public class NssmfAdapterConsts {
     private final static String INTERNAL_MODIFY_URL = "/onap/so/infra/3gppservices/{apiVersion}/modify";
 
     //
-    private final static String EXTERNAL_QUERY_JOB_STATUS =
-            "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}?responseId={responseId}";
+    private final static String EXTERNAL_QUERY_JOB_STATUS = "/api/rest/provMns/{apiVersion}/NSS/jobs/{jobId}";
 
     private final static String INTERNAL_QUERY_SUB_NET_CAPABILITY =
             "/onap/so/infra/3gppservices/{apiVersion}/subnetCapabilityQuery";
index 9df20ba..530cc1b 100644 (file)
@@ -24,6 +24,9 @@ import lombok.Getter;
 
 @Getter
 public enum ActionType {
+    /**
+     * allocate
+     */
     ALLOCATE("allocate"),
 
     DEALLOCATE("deallocate"),
@@ -52,4 +55,13 @@ public enum ActionType {
     ActionType(String type) {
         this.type = type;
     }
+
+    public static ActionType getActionType(String value) {
+        for (ActionType actionType : ActionType.values()) {
+            if (actionType.type.equalsIgnoreCase(value)) {
+                return actionType;
+            }
+        }
+        return null;
+    }
 }
index 2de6e01..0456c90 100644 (file)
@@ -31,14 +31,19 @@ import org.onap.so.adapters.nssmf.util.RestUtil;
 import org.onap.so.beans.nsmf.*;
 import org.onap.so.db.request.beans.ResourceOperationStatus;
 import org.onap.so.db.request.data.repository.ResourceOperationStatusRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.data.domain.Example;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import static org.onap.so.adapters.nssmf.util.NssmfAdapterUtil.marshal;
 
 public abstract class BaseNssmfManager implements NssmfManager {
 
+    private static final Logger logger = LoggerFactory.getLogger(BaseNssmfManager.class);
+
     protected RestUtil restUtil;
 
     protected ResourceOperationStatusRepository repository;
@@ -152,6 +157,7 @@ public abstract class BaseNssmfManager implements NssmfManager {
         ResourceOperationStatus status =
                 getOperationStatus(serviceInfo.getNsiId(), jobId, serviceInfo.getServiceUuid());
 
+        logger.info("ResourceOperationStatus = {}", status);
         this.restResponse = doQueryJobStatus(status);
 
         afterQueryJobStatus(status);
@@ -165,11 +171,16 @@ public abstract class BaseNssmfManager implements NssmfManager {
 
     private ResourceOperationStatus getOperationStatus(String nsiId, String jobId, String serviceUuid) {
 
-        ResourceOperationStatus status = new ResourceOperationStatus(nsiId, jobId, serviceUuid);
+        logger.info("Query operations: nsiId = [{}], jobId = [{}], serviceUuid = [{}]", nsiId, jobId, serviceUuid);
 
-        Optional<ResourceOperationStatus> optional = repository.findOne(Example.of(status));
+        List<ResourceOperationStatus> resourceOperationStatuses =
+                repository.findByServiceIdAndOperationId(nsiId, jobId);
 
-        return optional.orElse(null);
+        logger.info("resourceOperationStatuses = {}", resourceOperationStatuses);
+        if (resourceOperationStatuses.size() == 0) {
+            return null;
+        }
+        return resourceOperationStatuses.get(0);
     }
 
     @Override
index 3c5be7e..7ec6c0f 100644 (file)
@@ -75,8 +75,9 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
 
     @Override
     protected void afterQueryJobStatus(ResourceOperationStatus status) {
+        logger.info("afterQueryJobStatus = " + status);
         if (Integer.parseInt(status.getProgress()) == 100) {
-
+            logger.info("after query finished = " + status);
             ActionType jobOperType = ActionType.valueOf(status.getOperType());
 
             if (ActionType.ALLOCATE.equals(jobOperType)) {
@@ -118,6 +119,8 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
         JobStatusResponse jobStatusResponse = unMarshal(restResponse.getResponseContent(), JobStatusResponse.class);
 
         ResponseDescriptor rspDesc = jobStatusResponse.getResponseDescriptor();
+
+        logger.info("status = {}", status);
         rspDesc.setNssiId(status.getResourceInstanceID());
 
         jobStatusResponse.setResponseDescriptor(rspDesc);
@@ -152,7 +155,7 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
 
     protected void updateRequestDbJobStatus(ResponseDescriptor rspDesc, ResourceOperationStatus status,
             RestResponse rsp) throws ApplicationException {
-
+        status.setProgress(Integer.toString(rspDesc.getProgress()));
         switch (fromString(rspDesc.getStatus())) {
             case STARTED:
                 updateDbStatus(status, rsp.getStatus(), STARTED, QUERY_JOB_STATUS_SUCCESS);
@@ -168,6 +171,8 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
             case ERROR:
                 updateDbStatus(status, rsp.getStatus(), ERROR, QUERY_JOB_STATUS_FAILED);
                 throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED);
+            default:
+                throw new ApplicationException(500, QUERY_JOB_STATUS_FAILED);
         }
     }
 
@@ -227,7 +232,11 @@ public abstract class ExternalNssmfManager extends BaseNssmfManager {
         ResourceOperationStatus status =
                 new ResourceOperationStatus(serviceInfo.getNsiId(), response.getJobId(), serviceInfo.getServiceUuid());
         status.setResourceInstanceID(response.getNssiId());
+        status.setOperType(actionType.toString());
+        status.setProgress("0");
 
+        response.setStatus(STARTED.toString());
+        restResponse.setResponseContent(marshal(response));
         updateDbStatus(status, restResponse.getStatus(), STARTED, NssmfAdapterUtil.getStatusDesc(actionType));
     }
 }
index e89160c..64ab199 100644 (file)
@@ -66,19 +66,20 @@ public abstract class InternalNssmfManager extends BaseNssmfManager {
     }
 
     private RestResponse responseDBStatus(ResourceOperationStatus status) throws ApplicationException {
+        JobStatusResponse statusResponse = new JobStatusResponse();
         ResponseDescriptor descriptor = new ResponseDescriptor();
         if (status == null) {
             descriptor.setProgress(0);
             descriptor.setStatus(PROCESSING.name());
             descriptor.setStatusDescription("Initiating Nssi Instance");
-            return restUtil.createResponse(200, marshal(descriptor));
+        } else {
+            descriptor.setStatus(status.getStatus());
+            descriptor.setStatusDescription(status.getStatusDescription());
+            descriptor.setProgress(Integer.parseInt(status.getProgress()));
+            descriptor.setNssiId(status.getResourceInstanceID());
         }
-        descriptor.setStatus(status.getStatus());
-        descriptor.setStatusDescription(status.getStatusDescription());
-        descriptor.setProgress(Integer.parseInt(status.getProgress()));
-        descriptor.setNssiId(status.getResourceInstanceID());
-        // descriptor.setResponseId(status.getOperationId());
-        return restUtil.createResponse(200, marshal(descriptor));
+        statusResponse.setResponseDescriptor(descriptor);
+        return restUtil.createResponse(200, marshal(statusResponse));
     }
 
     @Override
index c51b72d..3d0d092 100644 (file)
@@ -27,6 +27,7 @@ import org.onap.so.adapters.nssmf.enums.SelectionType;
 import org.onap.so.adapters.nssmf.exceptions.ApplicationException;
 import org.onap.so.adapters.nssmf.manager.impl.ExternalNssmfManager;
 import org.onap.so.adapters.nssmf.util.NssmfAdapterUtil;
+import org.onap.so.beans.nsmf.AnSliceProfile;
 import org.onap.so.beans.nsmf.DeAllocateNssi;
 import org.onap.so.beans.nsmf.NssiResponse;
 import org.onap.so.beans.nsmf.NssmfAdapterNBIRequest;
@@ -47,7 +48,21 @@ public class ExternalAnNssmfManager extends ExternalNssmfManager {
     @Override
     protected String doWrapExtAllocateReqBody(NssmfAdapterNBIRequest nbiRequest) throws ApplicationException {
         Map<String, Object> request = new HashMap<>();
-        request.put("attributeListIn", nbiRequest.getAllocateAnNssi().getSliceProfile());
+
+        AnSliceProfile anSliceProfile = nbiRequest.getAllocateAnNssi().getSliceProfile();
+
+        RanSliceProfile ranSliceProfile = new RanSliceProfile();
+        ranSliceProfile.setSliceProfileId(anSliceProfile.getSliceProfileId());
+        ranSliceProfile.setSNSSAIList(anSliceProfile.getSNSSAIList());
+        ranSliceProfile.setPLMNIdList(anSliceProfile.getPLMNIdList());
+        ranSliceProfile.setPerfReq(anSliceProfile.getPerfReq());
+        ranSliceProfile.setMaxNumberofUEs(anSliceProfile.getMaxNumberOfUEs());
+        ranSliceProfile.setCoverageAreaTAList(anSliceProfile.getCoverageAreaTAList());
+        ranSliceProfile.setLatency(anSliceProfile.getLatency());
+        ranSliceProfile.setUEMobilityLevel(anSliceProfile.getUeMobilityLevel());
+        ranSliceProfile.setResourceSharingLevel(anSliceProfile.getResourceSharingLevel());
+
+        request.put("attributeListIn", ranSliceProfile);
         return marshal(request);
     }
 
diff --git a/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java b/adapters/mso-nssmf-adapter/src/main/java/org/onap/so/adapters/nssmf/manager/impl/external/RanSliceProfile.java
new file mode 100644 (file)
index 0000000..7035456
--- /dev/null
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2020 Huawei Technologies Co., Ltd. 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.nssmf.manager.impl.external;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.util.List;
+import org.onap.so.beans.nsmf.PerfReq;
+import org.onap.so.beans.nsmf.UeMobilityLevel;
+import org.onap.so.beans.nsmf.ResourceSharingLevel;
+
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
+public class RanSliceProfile implements Serializable {
+    /*
+     * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4.
+     */
+
+    private static final long serialVersionUID = 172447042469370448L;
+
+    @JsonProperty(value = "sliceProfileId", required = true)
+    private String sliceProfileId;
+
+    @JsonProperty(value = "sNSSAIList", required = true)
+    private List<String> sNSSAIList;
+
+    @JsonProperty(value = "pLMNIdList", required = true)
+    private List<String> pLMNIdList;
+
+    @JsonProperty(value = "perfReq", required = true)
+    private PerfReq perfReq;
+
+    @JsonInclude(JsonInclude.Include.NON_DEFAULT)
+    @JsonProperty(value = "maxNumberofUEs")
+    private long maxNumberofUEs;
+
+    @JsonProperty(value = "coverageAreaTAList")
+    private List<Integer> coverageAreaTAList;
+
+    @JsonInclude(JsonInclude.Include.NON_DEFAULT)
+    @JsonProperty(value = "latency")
+    private int latency;
+
+    @JsonProperty(value = "uEMobilityLevel")
+    private UeMobilityLevel uEMobilityLevel;
+
+    @JsonProperty(value = "resourceSharingLevel")
+    private ResourceSharingLevel resourceSharingLevel;
+
+}
index 8db5216..8753e85 100644 (file)
@@ -1,19 +1,10 @@
 {
   "AN": {
-    "latency": "5",
+    "latency": 5,
     "maxNumberofUEs": "100"
   },
   "CN": {
-    "latency": "10",
+    "latency": 5,
     "maxNumberofConns": "100"
-  },
-  "TN_FH": {
-    "latency": "10"
-  },
-  "TN_MH": {
-    "latency": "5"
-  },
-  "TN_BH": {
-    "latency": "10"
   }
 }
index 2d79544..f78bfd2 100644 (file)
@@ -77,9 +77,10 @@ public class NssmfAdapterRestTest {
     private final static String ALLOCATE = "{\n" + "  \"esrInfo\" : {\n" + "    \"vendor\" : \"huawei\",\n"
             + "    \"networkType\" : \"cn\"\n" + "  },\n" + "  \"allocateCnNssi\" : {\n"
             + "    \"nssiId\" : \"NSST-C-001-HDBNJ-NSSMF-01-A-ZX\",\n" + "    \"nssiName\" : \"eMBB-001\",\n"
-            + "    \"sliceProfile\" : {\n" + "      \"sNSSAIList\" : [ \"001-100001\" ],\n"
+            + "    \"sliceProfile\" : {\n" + "      \"snssaiList\" : [ \"001-100001\" ],\n"
+            + "      \"maxNumberofPDUSession\" : 10,\n"
             + "      \"sliceProfileId\" : \"ab9af40f13f721b5f13539d87484098\",\n"
-            + "      \"pLMNIdList\" : [ \"460-00\", \"460-01\" ],\n" + "      \"perfReq\" : {\n"
+            + "      \"plmnIdList\" : [ \"460-00\", \"460-01\" ],\n" + "      \"perfReq\" : {\n"
             + "        \"perfReqEmbbList\" : [ {\n" + "          \"activityFactor\" : 50\n" + "        } ]\n"
             + "      },\n" + "      \"maxNumberofUEs\" : 200,\n"
             + "      \"coverageAreaTAList\" : [ \"1\", \"2\", \"3\" ],\n" + "      \"latency\" : 6,\n"
@@ -315,12 +316,13 @@ public class NssmfAdapterRestTest {
         taList.add("3");
         sP.setSnssaiList(sns);
         sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098");
-        sP.setPlmnIdList(plmn);
+        sP.setPLMNIdList(plmn);
         sP.setPerfReq(perfReq);
-        sP.setMaxNumberofUEs(200);
+        sP.setMaxNumberOfUEs(200);
         sP.setCoverageAreaTAList(taList);
         sP.setLatency(6);
         sP.setResourceSharingLevel(NON_SHARED);
+        sP.setMaxNumberOfPDUSession(10);
         NsiInfo nsiInfo = new NsiInfo();
         nsiInfo.setNsiId("NSI-M-001-HDBNJ-NSMF-01-A-ZX");
         nsiInfo.setNsiName("eMBB-001");
index 0d86056..d7b3b03 100644 (file)
@@ -204,9 +204,9 @@ public class NssmfManagerServiceImplTest {
         taList.add("3");
         sP.setSnssaiList(sns);
         sP.setSliceProfileId("ab9af40f13f721b5f13539d87484098");
-        sP.setPlmnIdList(plmn);
+        sP.setPLMNIdList(plmn);
         sP.setPerfReq(perfReq);
-        sP.setMaxNumberofUEs(200);
+        sP.setMaxNumberOfUEs(200);
         sP.setCoverageAreaTAList(taList);
         sP.setLatency(6);
         sP.setResourceSharingLevel(NON_SHARED);
@@ -361,9 +361,10 @@ public class NssmfManagerServiceImplTest {
 
         NssmfAdapterNBIRequest nbiRequest = createNbiRequest();
         nbiRequest.setResponseId("7512eb3feb5249eca5ddd742fedddd39");
-        Optional<ResourceOperationStatus> optional = Optional.of(operationStatus);
+        List<ResourceOperationStatus> optional = new ArrayList<>();
+        optional.add(operationStatus);
 
-        doAnswer(invocation -> optional).when(repository).findOne(any());
+        doAnswer(invocation -> optional).when(repository).findByServiceIdAndOperationId(any(), any());
 
         createCommonMock(200, nssmf);
 
index 12e416f..cd32cc2 100644 (file)
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import org.onap.aaiclient.client.aai.AAIProperties;
 import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
 import org.onap.so.spring.SpringContextHelper;
 import org.springframework.context.ApplicationContext;
 
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     private String aaiEndpoint;
     private String auth;
     private String key;
+    private Long readTimeout;
+    private boolean enableCaching;
+    private Long cacheMaxAge;
     private static final String SYSTEM_NAME = "MSO";
 
     public AaiClientPropertiesImpl() {
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
         aaiEndpoint = context.getEnvironment().getProperty("aai.endpoint");
         this.auth = context.getEnvironment().getProperty("aai.auth");
         this.key = context.getEnvironment().getProperty("mso.msoKey");
+        this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+        this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+        this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
     }
 
     @Override
@@ -65,4 +72,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     public String getKey() {
         return this.key;
     }
+
+    @Override
+    public Long getReadTimeout() {
+        return this.readTimeout;
+    }
+
+    @Override
+    public boolean isCachingEnabled() {
+        return this.enableCaching;
+    }
+
+    @Override
+    public CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {
+            @Override
+            public Long getMaxAge() {
+                return cacheMaxAge;
+            }
+        };
+    }
 }
index d57b305..7efc397 100644 (file)
@@ -2227,28 +2227,6 @@ public class ToscaResourceInstaller {
                 .setModelCustomizationUUID(fabricMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
         cvnfcConfigurationCustomization.setModelInstanceName(fabricEntity.getName());
 
-        List<IEntityDetails> policyList =
-                getEntityDetails(toscaResourceStruct, EntityQuery.newBuilder("org.openecomp.policies.External"),
-                        TopologyTemplateQuery.newBuilder(SdcTypes.VF), true);
-
-
-        if (policyList != null) {
-            for (IEntityDetails policyEntity : policyList) {
-
-                for (String policyCvfcTarget : policyEntity.getTargets()) {
-
-                    if (policyCvfcTarget.equalsIgnoreCase(vfModuleMemberName)) {
-
-                        String policyType = getLeafPropertyValue(policyEntity, "type");
-
-                        if (policyType != null && policyType.equalsIgnoreCase("Fabric Policy")) {
-                            cvnfcConfigurationCustomization.setPolicyName(getLeafPropertyValue(policyEntity, "name"));
-                        }
-                    }
-                }
-            }
-        }
-
         cvnfcConfigurationCustomization.setConfigurationFunction(getLeafPropertyValue(fabricEntity, "function"));
         cvnfcConfigurationCustomization.setConfigurationRole(getLeafPropertyValue(fabricEntity, "role"));
         cvnfcConfigurationCustomization.setConfigurationType(getLeafPropertyValue(fabricEntity, "type"));
index 3ae815d..ace0ff1 100644 (file)
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import org.onap.aaiclient.client.aai.AAIProperties;
 import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
 import org.onap.so.spring.SpringContextHelper;
 import org.springframework.context.ApplicationContext;
 
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     private String aaiEndpoint;
     private String auth;
     private String key;
+    private Long readTimeout;
+    private boolean enableCaching;
+    private Long cacheMaxAge;
     private static final String SYSTEM_NAME = "MSO";
 
     public AaiClientPropertiesImpl() {
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
         aaiEndpoint = context.getEnvironment().getProperty("mso.aai.endpoint");
         this.auth = context.getEnvironment().getProperty("aai.auth");
         this.key = context.getEnvironment().getProperty("mso.msoKey");
+        this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+        this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+        this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
     }
 
     @Override
@@ -67,4 +74,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     public String getKey() {
         return this.key;
     }
+
+    @Override
+    public Long getReadTimeout() {
+        return this.readTimeout;
+    }
+
+    @Override
+    public boolean isCachingEnabled() {
+        return this.enableCaching;
+    }
+
+    @Override
+    public CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {
+            @Override
+            public Long getMaxAge() {
+                return cacheMaxAge;
+            }
+        };
+    }
 }
index 4eb9eed..c91316e 100644 (file)
@@ -50,7 +50,7 @@ import org.onap.so.db.catalog.beans.HomingInstance
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 import com.google.gson.JsonObject
-
+import com.google.gson.JsonParser
 import com.fasterxml.jackson.databind.ObjectMapper
 
 class OofUtils {
@@ -596,6 +596,7 @@ String correlator = requestId
 String callbackUrl = UrnPropertiesReader.getVariable("mso.adapters.oof.callback.endpoint") + "/" + messageType + "/" + correlator
 ObjectMapper objectMapper = new ObjectMapper();
 String profileJson = objectMapper.writeValueAsString(profileInfo);
+JsonParser parser = new JsonParser()
 
 //Prepare requestInfo object
 JsonObject requestInfo = new JsonObject()
@@ -615,9 +616,11 @@ nsstInfo.addProperty("name", name)
 JsonObject json = new JsonObject()
 json.add("requestInfo", requestInfo)
 json.add("NSSTInfo", nsstInfo)
-json.addProperty("sliceProfile", profileJson)
+json.add("sliceProfile", (JsonObject) parser.parse(profileJson))
+
 return json.toString()
 }
+
 /**
 * Method to create NSI/NSSI termination request
 * (OOF response will be synchronous in G-Release)
index 23dfdce..4e8be5d 100644 (file)
@@ -144,7 +144,7 @@ class RequestDBUtil {
                                 <ns:initResourceOperationStatus xmlns:ns="http://org.onap.so/requestsdb">
                                     <serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId>
                                     <operationId>${MsoUtils.xmlEscape(operationId)}</operationId>
-                                    <operationType>${MsoUtils.xmlEscape(operType)}</operationType>
+                                    <operType>${MsoUtils.xmlEscape(operType)}</operType>
                                     <resourceTemplateUUIDs>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUIDs>
                                 </ns:initResourceOperationStatus>
                             </soapenv:Body>
@@ -192,8 +192,9 @@ class RequestDBUtil {
                                 <ns:updateResourceOperationStatus xmlns:ns="http://org.onap.so/requestsdb">
                                     <serviceId>${MsoUtils.xmlEscape(serviceId)}</serviceId>
                                     <operationId>${MsoUtils.xmlEscape(operationId)}</operationId>
-                                                                       <resourceTemplateUUIDs>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUIDs>
-                                    <operationType>${MsoUtils.xmlEscape(operType)}</operationType>
+                                                                       <resourceTemplateUUID>${MsoUtils.xmlEscape(resourceTemplateUUID)}</resourceTemplateUUID>
+                                    <operType>${MsoUtils.xmlEscape(operType)}</operType>
+                                    <resourceInstanceID>${MsoUtils.xmlEscape(resourceInstanceID)}</resourceInstanceID>
                                     <jobId>${MsoUtils.xmlEscape(jobId)}</jobId>
                                     <status>${MsoUtils.xmlEscape(status)}</status>
                                     <progress>${MsoUtils.xmlEscape(progress)}</progress>
index 3f78152..2f6713d 100644 (file)
@@ -1622,6 +1622,7 @@ public class BBInputSetup implements JavaDelegate {
                 parameter.setInstanceName(vfModules.getInstanceName());
                 parameter.setInstanceParams(vfModules.getInstanceParams());
                 this.populateVfModule(parameter);
+                gBB.getRequestContext().setIsHelm(parameter.getIsHelm());
             }
         } else if (bbName.contains(NETWORK)) {
             networks = findNetworksByKey(key, resources);
index afd7f64..24f1e05 100644 (file)
@@ -269,10 +269,10 @@ public class BBInputSetupUtils {
             String cloudRegionId = cloudConfiguration.getLcpCloudRegionId();
             String cloudOwner = cloudConfiguration.getCloudOwner();
             if (cloudRegionId != null && cloudOwner != null && !cloudRegionId.isEmpty() && !cloudOwner.isEmpty()) {
-                return injectionHelper.getAaiClient()
-                        .get(CloudRegion.class, AAIUriFactory.createResourceUri(
+                return injectionHelper.getAaiClient().get(CloudRegion.class,
+                        AAIUriFactory.createResourceUri(
                                 AAIFluentTypeBuilder.cloudInfrastructure().cloudRegion(cloudOwner, cloudRegionId))
-                                .depth(Depth.TWO))
+                                .depth(Depth.ONE).nodesOnly(true))
                         .orElse(null);
 
             } else {
index 692d581..98a14fc 100644 (file)
@@ -22,9 +22,10 @@ package org.onap.so.client.restproperties;
 
 import java.net.MalformedURLException;
 import java.net.URL;
-import org.onap.so.bpmn.core.UrnPropertiesReader;
 import org.onap.aaiclient.client.aai.AAIProperties;
 import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.bpmn.core.UrnPropertiesReader;
+import org.onap.so.client.CacheProperties;
 import org.springframework.stereotype.Component;
 
 @Component
@@ -33,6 +34,11 @@ public class AAIPropertiesImpl implements AAIProperties {
     public static final String MSO_MSO_KEY = "mso.msoKey";
     public static final String AAI_AUTH = "aai.auth";
     public static final String AAI_ENDPOINT = "aai.endpoint";
+    public static final String AAI_READ_TIMEOUT = "aai.readTimeout";
+    public static final String AAI_ENABLE_CACHING = "aai.caching.enable";
+    public static final String AAI_CACHE_MAX_AGE = "aai.caching.maxAge";
+
+    private UrnPropertiesReader reader;
 
     @Override
     public URL getEndpoint() throws MalformedURLException {
@@ -58,4 +64,25 @@ public class AAIPropertiesImpl implements AAIProperties {
     public String getKey() {
         return UrnPropertiesReader.getVariable(MSO_MSO_KEY);
     }
+
+    @Override
+    public Long getReadTimeout() {
+        return Long.valueOf(reader.getVariable(AAI_READ_TIMEOUT, "60000"));
+    }
+
+    @Override
+    public boolean isCachingEnabled() {
+        return Boolean.parseBoolean(reader.getVariable(AAI_ENABLE_CACHING, "false"));
+    }
+
+    @Override
+    public CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {
+            @Override
+            public Long getMaxAge() {
+                return Long.valueOf(reader.getVariable(AAI_CACHE_MAX_AGE, "60000"));
+            }
+        };
+    }
+
 }
index 85774ec..188f853 100644 (file)
@@ -184,7 +184,7 @@ public class BBInputSetupUtilsTest {
                 AAIUriFactory
                         .createResourceUri(AAIFluentTypeBuilder.cloudInfrastructure()
                                 .cloudRegion(cloudConfig.getCloudOwner(), cloudConfig.getLcpCloudRegionId()))
-                        .depth(Depth.TWO));
+                        .depth(Depth.ONE).nodesOnly(true));
 
         assertThat(bbInputSetupUtils.getCloudRegion(cloudConfig), sameBeanAs(expected.get()));
     }
index 9e2c0db..a32e9e8 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:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.1.1">
   <bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="CreateVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing>
@@ -46,7 +46,8 @@
     <bpmn:sequenceFlow id="SequenceFlow_0rds4rj" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" />
     <bpmn:sequenceFlow id="SequenceFlow_1vbwdaw" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" />
     <bpmn:serviceTask id="CreateNetworkPolicies" name="AAI Create (network policies)" camunda:expression="${AAICreateTasks.createNetworkPolicies(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_1yn8o6d</bpmn:incoming>
+      <bpmn:incoming>Flow_10aq7a8</bpmn:incoming>
+      <bpmn:incoming>Flow_1il4743</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_15do1tu" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" />
     <bpmn:serviceTask id="ServiceTask_01zrt6x" name="&#10;Create&#10;Cloud&#10;Variable&#10;" camunda:expression="${CreateVFModule.createInventoryVariable(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_1mg8eym</bpmn:incoming>
       <bpmn:incoming>SequenceFlow_0uetprw</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1io8r33</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_1io8r33" sourceRef="ServiceTask_01zrt6x" targetRef="ServiceTask_00d84m7" />
     <bpmn:serviceTask id="ServiceTask_00d84m7" name="&#10;AAI&#10;Create&#10;(inventory)&#10;" camunda:type="external" camunda:topic="InventoryCreate">
       <bpmn:incoming>SequenceFlow_1io8r33</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1yn8o6d</bpmn:outgoing>
+      <bpmn:outgoing>Flow_10aq7a8</bpmn:outgoing>
     </bpmn:serviceTask>
-    <bpmn:sequenceFlow id="SequenceFlow_1yn8o6d" sourceRef="ServiceTask_00d84m7" targetRef="CreateNetworkPolicies" />
     <bpmn:exclusiveGateway id="CheckIfIsHelm" name="Check If Is Helm">
       <bpmn:incoming>SequenceFlow_1ig2ix4</bpmn:incoming>
       <bpmn:outgoing>YesHelm</bpmn:outgoing>
     </bpmn:exclusiveGateway>
     <bpmn:serviceTask id="CnfAdapter" name="Cnf Adapter" camunda:expression="${CnfAdapterCreateTasks.createInstance(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn:incoming>YesHelm</bpmn:incoming>
-      <bpmn:outgoing>SequenceFlow_1mg8eym</bpmn:outgoing>
+      <bpmn:outgoing>Flow_1il4743</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="YesHelm" name="Yes Helm" sourceRef="CheckIfIsHelm" targetRef="CnfAdapter">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${execution.getVariable("isHelm")}</bpmn:conditionExpression>
     </bpmn:sequenceFlow>
-    <bpmn:sequenceFlow id="SequenceFlow_1mg8eym" sourceRef="CnfAdapter" targetRef="ServiceTask_01zrt6x" />
     <bpmn:sequenceFlow id="SequenceFlow_1ig2ix4" sourceRef="QueryVfModule" targetRef="CheckIfIsHelm" />
     <bpmn:sequenceFlow id="NoHelm" name="No Helm" sourceRef="CheckIfIsHelm" targetRef="CreateVfModule" />
     <bpmn:sequenceFlow id="SequenceFlow_0dehck5" sourceRef="CreateVfModule" targetRef="VnfAdapter" />
       <bpmn:sequenceFlow id="Flow_1sqy91r" sourceRef="Event_1pengt4" targetRef="Activity_1p8hxyt" />
       <bpmn:sequenceFlow id="Flow_03q6ty9" sourceRef="Activity_1p8hxyt" targetRef="Event_108oetk" />
     </bpmn:subProcess>
+    <bpmn:sequenceFlow id="Flow_10aq7a8" sourceRef="ServiceTask_00d84m7" targetRef="CreateNetworkPolicies" />
+    <bpmn:sequenceFlow id="Flow_1il4743" sourceRef="CnfAdapter" targetRef="CreateNetworkPolicies" />
   </bpmn:process>
   <bpmn:error id="Error_0t7oivz" name="AAIInventoryFailure" errorCode="AAIInventoryFailure" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVfModuleBB">
-      <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
-        <dc:Bounds x="156" y="88" width="36" height="36" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="77" y="124" width="0" height="0" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
-        <dc:Bounds x="513" y="66" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
-        <di:waypoint x="192" y="106" />
-        <di:waypoint x="313" y="106" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0uetprw_di" bpmnElement="SequenceFlow_0uetprw">
+        <di:waypoint x="1009" y="146" />
+        <di:waypoint x="1009" y="326" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="156" y="91" width="0" height="0" />
+          <dc:Bounds x="1024" y="228" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
-        <dc:Bounds x="1300" y="450" width="36" height="36" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0dehck5_di" bpmnElement="SequenceFlow_0dehck5">
+        <di:waypoint x="894" y="106" />
+        <di:waypoint x="959" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1176" y="446" width="90" height="0" />
+          <dc:Bounds x="926.5" y="85" width="0" height="12" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
-        <dc:Bounds x="794" y="66" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp">
-        <di:waypoint x="413" y="106" />
-        <di:waypoint x="513" y="106" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1g7zahc_di" bpmnElement="NoHelm">
+        <di:waypoint x="721" y="106" />
+        <di:waypoint x="794" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="321" y="91" width="90" height="0" />
+          <dc:Bounds x="736" y="85" width="44" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1frb5h2_di" bpmnElement="QueryVnf">
-        <dc:Bounds x="313" y="66" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
-        <dc:Bounds x="959" y="66" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
-        <dc:Bounds x="1124" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
-        <dc:Bounds x="959" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
-        <di:waypoint x="1059" y="468" />
-        <di:waypoint x="1124" y="468" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1ig2ix4_di" bpmnElement="SequenceFlow_1ig2ix4">
+        <di:waypoint x="613" y="106" />
+        <di:waypoint x="671" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="950" y="409" width="90" height="0" />
+          <dc:Bounds x="652" y="85" width="0" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
-        <di:waypoint x="1224" y="468" />
-        <di:waypoint x="1265" y="468" />
-        <di:waypoint x="1265" y="468" />
-        <di:waypoint x="1300" y="468" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0q1janp_di" bpmnElement="YesHelm">
+        <di:waypoint x="696" y="131" />
+        <di:waypoint x="696" y="210" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1138" y="424" width="90" height="0" />
+          <dc:Bounds x="688" y="177" width="47" height="14" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
-        <dc:Bounds x="324" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
-        <di:waypoint x="424" y="468" />
-        <di:waypoint x="477" y="468" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33">
+        <di:waypoint x="959" y="366" />
+        <di:waypoint x="746" y="366" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="309" y="409" width="90" height="0" />
+          <dc:Bounds x="569" y="297" width="90" height="20" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
-        <dc:Bounds x="477" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
-        <di:waypoint x="577" y="468" />
-        <di:waypoint x="646" y="468" />
+      <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
+        <di:waypoint x="894" y="468" />
+        <di:waypoint x="959" y="468" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="470" y="409" width="90" height="0" />
+          <dc:Bounds x="785" y="399" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
-        <dc:Bounds x="646" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2">
         <di:waypoint x="746" y="468" />
         <di:waypoint x="794" y="468" />
           <dc:Bounds x="628" y="409" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
-        <dc:Bounds x="794" y="428" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
-        <di:waypoint x="894" y="468" />
-        <di:waypoint x="959" y="468" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
+        <di:waypoint x="577" y="468" />
+        <di:waypoint x="646" y="468" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="785" y="399" width="90" height="0" />
+          <dc:Bounds x="470" y="409" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_01zrt6x_di" bpmnElement="ServiceTask_01zrt6x">
-        <dc:Bounds x="665" y="326" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1io8r33_di" bpmnElement="SequenceFlow_1io8r33">
-        <di:waypoint x="665" y="366" />
-        <di:waypoint x="563" y="366" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
+        <di:waypoint x="424" y="468" />
+        <di:waypoint x="477" y="468" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="569" y="297" width="90" height="20" />
+          <dc:Bounds x="309" y="409" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ServiceTask_00d84m7_di" bpmnElement="ServiceTask_00d84m7">
-        <dc:Bounds x="463" y="326" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_1yn8o6d_di" bpmnElement="SequenceFlow_1yn8o6d">
-        <di:waypoint x="463" y="366" />
-        <di:waypoint x="255" y="366" />
-        <di:waypoint x="255" y="463" />
-        <di:waypoint x="324" y="463" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
+        <di:waypoint x="1224" y="468" />
+        <di:waypoint x="1265" y="468" />
+        <di:waypoint x="1265" y="468" />
+        <di:waypoint x="1300" y="468" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="225" y="361" width="90" height="20" />
+          <dc:Bounds x="1138" y="424" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNShape id="ExclusiveGateway_1g3vemz_di" bpmnElement="CheckIfIsHelm" isMarkerVisible="true">
-        <dc:Bounds x="690.2114427860697" y="81.35572139303483" width="50" height="50" />
-        <bpmndi:BPMNLabel>
-          <dc:Bounds x="673" y="48" width="84" height="12" />
-        </bpmndi:BPMNLabel>
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNShape id="ServiceTask_0tag50w_di" bpmnElement="CnfAdapter">
-        <dc:Bounds x="665" y="166" width="100" height="80" />
-      </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="SequenceFlow_0q1janp_di" bpmnElement="YesHelm">
-        <di:waypoint x="715" y="131" />
-        <di:waypoint x="715" y="166" />
+      <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
+        <di:waypoint x="1059" y="468" />
+        <di:waypoint x="1124" y="468" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="730" y="136" width="0" height="12" />
+          <dc:Bounds x="950" y="409" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1mg8eym_di" bpmnElement="SequenceFlow_1mg8eym">
-        <di:waypoint x="715" y="246" />
-        <di:waypoint x="715" y="326" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1s4rpyp_di" bpmnElement="SequenceFlow_1s4rpyp">
+        <di:waypoint x="413" y="106" />
+        <di:waypoint x="513" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="846" y="291.5" width="0" height="12" />
+          <dc:Bounds x="321" y="91" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1ig2ix4_di" bpmnElement="SequenceFlow_1ig2ix4">
-        <di:waypoint x="613" y="106" />
-        <di:waypoint x="691" y="106" />
+      <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
+        <di:waypoint x="192" y="106" />
+        <di:waypoint x="313" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="652" y="85" width="0" height="12" />
+          <dc:Bounds x="156" y="91" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_1g7zahc_di" bpmnElement="NoHelm">
-        <di:waypoint x="740" y="106" />
-        <di:waypoint x="794" y="106" />
+      <bpmndi:BPMNEdge id="Flow_10aq7a8_di" bpmnElement="Flow_10aq7a8">
+        <di:waypoint x="646" y="366" />
+        <di:waypoint x="374" y="366" />
+        <di:waypoint x="374" y="428" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1il4743_di" bpmnElement="Flow_1il4743">
+        <di:waypoint x="646" y="250" />
+        <di:waypoint x="200" y="250" />
+        <di:waypoint x="200" y="468" />
+        <di:waypoint x="324" y="468" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
+        <dc:Bounds x="156" y="88" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="767" y="85" width="0" height="12" />
+          <dc:Bounds x="77" y="124" width="0" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0dehck5_di" bpmnElement="SequenceFlow_0dehck5">
-        <di:waypoint x="894" y="106" />
-        <di:waypoint x="959" y="106" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
+        <dc:Bounds x="513" y="66" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
+        <dc:Bounds x="1300" y="450" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="926.5" y="85" width="0" height="12" />
+          <dc:Bounds x="1176" y="446" width="90" height="0" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="SequenceFlow_0uetprw_di" bpmnElement="SequenceFlow_0uetprw">
-        <di:waypoint x="1009" y="146" />
-        <di:waypoint x="1009" y="366" />
-        <di:waypoint x="765" y="366" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
+        <dc:Bounds x="794" y="66" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1frb5h2_di" bpmnElement="QueryVnf">
+        <dc:Bounds x="313" y="66" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
+        <dc:Bounds x="959" y="66" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
+        <dc:Bounds x="1124" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
+        <dc:Bounds x="959" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
+        <dc:Bounds x="324" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
+        <dc:Bounds x="477" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
+        <dc:Bounds x="646" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
+        <dc:Bounds x="794" y="428" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_01zrt6x_di" bpmnElement="ServiceTask_01zrt6x">
+        <dc:Bounds x="959" y="326" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_00d84m7_di" bpmnElement="ServiceTask_00d84m7">
+        <dc:Bounds x="646" y="326" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0tag50w_di" bpmnElement="CnfAdapter">
+        <dc:Bounds x="646" y="210" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ExclusiveGateway_1g3vemz_di" bpmnElement="CheckIfIsHelm" isMarkerVisible="true">
+        <dc:Bounds x="671" y="81" width="50" height="50" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1024" y="228" width="0" height="12" />
+          <dc:Bounds x="655" y="48" width="82" height="14" />
         </bpmndi:BPMNLabel>
-      </bpmndi:BPMNEdge>
+      </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_10eqhmz_di" bpmnElement="Activity_10eqhmz" isExpanded="true">
         <dc:Bounds x="240" y="590" width="340" height="180" />
       </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="Flow_03q6ty9_di" bpmnElement="Flow_03q6ty9">
+        <di:waypoint x="460" y="680" />
+        <di:waypoint x="512" y="680" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="Flow_1sqy91r_di" bpmnElement="Flow_1sqy91r">
+        <di:waypoint x="316" y="680" />
+        <di:waypoint x="360" y="680" />
+      </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="Event_108oetk_di" bpmnElement="Event_108oetk">
         <dc:Bounds x="512" y="662" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="Activity_1p8hxyt_di" bpmnElement="Activity_1p8hxyt">
         <dc:Bounds x="360" y="640" width="100" height="80" />
       </bpmndi:BPMNShape>
-      <bpmndi:BPMNEdge id="Flow_1sqy91r_di" bpmnElement="Flow_1sqy91r">
-        <di:waypoint x="316" y="680" />
-        <di:waypoint x="360" y="680" />
-      </bpmndi:BPMNEdge>
-      <bpmndi:BPMNEdge id="Flow_03q6ty9_di" bpmnElement="Flow_03q6ty9">
-        <di:waypoint x="460" y="680" />
-        <di:waypoint x="512" y="680" />
-      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 9100f27..e2d9c16 100644 (file)
@@ -149,16 +149,17 @@ class AllocateSliceSubnet extends AbstractServiceTaskProcessor {
     def prepareInitOperationStatus = { DelegateExecution execution ->
         logger.debug(Prefix + "prepareInitOperationStatus Start")
 
-        String serviceId = execution.getVariable("dummyServiceId")
+        String modelUuid = execution.getVariable("modelUuid")
         String jobId = execution.getVariable("jobId")
         String nsiId = execution.getVariable("nsiId")
-        logger.debug("Generated new job for Service Instance serviceId:" + serviceId + " jobId:" + jobId)
+        logger.debug("Generated new job for Service Instance serviceId:" + modelUuid + " jobId:" + jobId)
 
         ResourceOperationStatus initStatus = new ResourceOperationStatus()
-        initStatus.setServiceId(serviceId)
-        initStatus.setOperationId(jobId)
-        initStatus.setResourceTemplateUUID(nsiId)
-        initStatus.setOperType("Allocate")
+        initStatus.setServiceId(nsiId)  // set nsiId to this field
+        initStatus.setOperationId(jobId)    // set jobId to this field
+        initStatus.setResourceTemplateUUID(modelUuid)   // set modelUuid to this field
+        initStatus.setOperType("ALLOCATE")
+        //initStatus.setResourceInstanceID() // set nssiId to this field
         requestDBUtil.prepareInitResourceOperationStatus(execution, initStatus)
 
         logger.debug(Prefix + "prepareInitOperationStatus Exit")
index 4108cce..1d8de35 100644 (file)
@@ -37,6 +37,7 @@ import java.sql.Timestamp
 import java.util.List
 import static org.apache.commons.lang3.StringUtils.isBlank
 import com.google.gson.JsonObject
+import com.google.gson.JsonParser
 import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.aaiclient.client.aai.AAIObjectType
 import org.onap.aaiclient.client.aai.AAIResourcesClient
@@ -48,7 +49,6 @@ import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.T
 import javax.ws.rs.NotFoundException
 import org.onap.so.beans.nsmf.AllocateTnNssi
 import org.onap.so.beans.nsmf.DeAllocateNssi
-import org.onap.so.beans.nsmf.EsrInfo
 import org.onap.so.beans.nsmf.ServiceInfo
 import org.onap.so.bpmn.core.UrnPropertiesReader
 import org.onap.aai.domain.yang.ServiceInstance
@@ -65,12 +65,11 @@ class AnNssmfUtils {
        JsonUtils jsonUtil = new JsonUtils()
        public String buildSelectRANNSSIRequest(String requestId, String messageType, String UUID,String invariantUUID,
                String name, Map<String, Object> profileInfo, List<String> nsstInfoList, JsonArray capabilitiesList, Boolean preferReuse){
-
+       JsonParser parser = new JsonParser()
        def transactionId = requestId
        logger.debug( "transactionId is: " + transactionId)
        String correlator = requestId
        String callbackUrl = UrnPropertiesReader.getVariable("mso.adapters.oof.callback.endpoint") + "/" + messageType + "/" + correlator
-       ObjectMapper objectMapper = new ObjectMapper();
        String profileJson = objectMapper.writeValueAsString(profileInfo);
        String nsstInfoListString = objectMapper.writeValueAsString(nsstInfoList);
        //Prepare requestInfo object
@@ -91,8 +90,8 @@ class AnNssmfUtils {
        JsonObject json = new JsonObject()
        json.add("requestInfo", requestInfo)
        json.add("NSTInfo", ranNsstInfo)
-       json.addProperty("serviceProfile", profileJson)
-       json.addProperty("NSSTInfo", nsstInfoListString)
+       json.add("serviceProfile", (JsonObject) parser.parse(profileJson))
+       //json.add("NSSTInfo", (JsonArray) parser.parse(nsstInfoListString))
        json.add("subnetCapabilities", capabilitiesList)
        json.addProperty("preferReuse", preferReuse)
 
@@ -100,29 +99,33 @@ class AnNssmfUtils {
 }
 
 public String buildCreateTNNSSMFSubnetCapabilityRequest() {
-       EsrInfo esrInfo = new EsrInfo()
-       esrInfo.setNetworkType("TN")
-       esrInfo.setVendor("ONAP")
+       JsonObject esrInfo = new JsonObject()
+       esrInfo.addProperty("networkType", "tn")
+       esrInfo.addProperty("vendor", "ONAP_internal")
 
        JsonArray subnetTypes = new JsonArray()
        subnetTypes.add("TN_FH")
        subnetTypes.add("TN_MH")
        JsonObject response = new JsonObject()
-       response.add("subnetCapabilityQuery", subnetTypes)
-       response.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+       JsonObject subnetTypesObj = new JsonObject()
+       subnetTypesObj.add("subnetTypes", subnetTypes)
+       response.add("subnetCapabilityQuery", subnetTypesObj)
+       response.add("esrInfo", esrInfo)
        return response.toString()
 }
 
 public String buildCreateANNFNSSMFSubnetCapabilityRequest() {
-       EsrInfo esrInfo = new EsrInfo()
-       esrInfo.setNetworkType("AN")
-       esrInfo.setVendor("ONAP")
+       JsonObject esrInfo = new JsonObject()
+       esrInfo.addProperty("networkType", "an")
+       esrInfo.addProperty("vendor", "ONAP_internal")
 
        JsonArray subnetTypes = new JsonArray()
        subnetTypes.add("AN_NF")
        JsonObject response = new JsonObject()
-       response.add("subnetCapabilityQuery", subnetTypes)
-       response.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+       JsonObject subnetTypesObj = new JsonObject()
+       subnetTypesObj.add("subnetTypes", subnetTypes)
+       response.add("subnetCapabilityQuery", subnetTypesObj)
+       response.add("esrInfo", esrInfo)
        return response.toString()
 }
 public void createDomainWiseSliceProfiles(List<String> ranConstituentSliceProfiles, DelegateExecution execution) {
@@ -190,16 +193,19 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        ANNF_sliceProfileInstance.setServiceType(serviceType)
        String serviceStatus = "deactivated"
        ANNF_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
+       String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
        ANNF_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
        String serviceRole = "slice-profile-instance"
        ANNF_sliceProfileInstance.setServiceRole(serviceRole)
-       List<String> snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+        ArrayList<String> snssaiList = execution.getVariable("snssaiList")
        String snssai = snssaiList.get(0)
        ANNF_sliceProfileInstance.setEnvironmentContext(snssai)
        ANNF_sliceProfileInstance.setWorkloadContext("AN-NF")    
        ANNF_sliceProfileInstance.setSliceProfiles(ANNF_SliceProfiles)
-       logger.debug("completed ANNF sliceprofileinstance build "+ ANNF_sliceProfileInstance.toString())
+       String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
+       ANNF_sliceProfileInstance.setServiceFunction(serviceFunctionAnnf)
+       logger.debug("completed ANNF sliceprofileinstance build : "+ ANNF_sliceProfileInstance.toString())
+       
        //TNFH slice profile instance creation
        TNFH_sliceProfileInstance.setServiceInstanceId(TNFH_sliceProfileInstanceId)
        sliceInstanceName = "sliceprofile_"+TNFH_sliceProfileId
@@ -207,13 +213,16 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "sST")
        TNFH_sliceProfileInstance.setServiceType(serviceType)
        TNFH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "plmnIdList")
+       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "pLMNIdList")
        TNFH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
        TNFH_sliceProfileInstance.setServiceRole(serviceRole)
        TNFH_sliceProfileInstance.setEnvironmentContext(snssai)
        TNFH_sliceProfileInstance.setWorkloadContext("TN-FH")
        TNFH_sliceProfileInstance.setSliceProfiles(TNFH_SliceProfiles)
-       logger.debug("completed TNFH sliceprofileinstance build "+TNFH_sliceProfileInstance)
+       String serviceFunctionTnFH = jsonUtil.getJsonValue(execution.getVariable("tnFhSliceProfile"), "resourceSharingLevel")
+       TNFH_sliceProfileInstance.setServiceFunction(serviceFunctionTnFH)
+       logger.debug("completed TNFH sliceprofileinstance build : "+TNFH_sliceProfileInstance)
+       
        //TNMH slice profile instance creation
        TNMH_sliceProfileInstance.setServiceInstanceId(TNMH_sliceProfileInstanceId)
        sliceInstanceName = "sliceprofile_"+TNMH_sliceProfileId
@@ -221,13 +230,16 @@ public void createSliceProfilesInAai(DelegateExecution execution) {
        serviceType = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "sST")
        TNMH_sliceProfileInstance.setServiceType(serviceType)
        TNMH_sliceProfileInstance.setOrchestrationStatus(serviceStatus)
-       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "plmnIdList")
+       serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "pLMNIdList")
        TNMH_sliceProfileInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
        TNMH_sliceProfileInstance.setServiceRole(serviceRole)
        TNMH_sliceProfileInstance.setEnvironmentContext(snssai)
        TNMH_sliceProfileInstance.setWorkloadContext("TN-MH")
        TNMH_sliceProfileInstance.setSliceProfiles(TNMH_SliceProfiles)
-       logger.debug("completed TNMH sliceprofileinstance build "+TNMH_sliceProfileInstance)
+       String serviceFunctionTnMH = jsonUtil.getJsonValue(execution.getVariable("tnMhSliceProfile"), "resourceSharingLevel")
+       TNMH_sliceProfileInstance.setServiceFunction(serviceFunctionTnMH)
+       logger.debug("completed TNMH sliceprofileinstance build : "+TNMH_sliceProfileInstance)
+       
        String msg = ""
        try {
 
@@ -261,12 +273,10 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
-                       result.setSNssai(profile.get("sNSSAI"))
                        result.setUeMobilityLevel(profile.get("uEMobilityLevel"))
                        result.setMaxNumberOfUEs(profile.get("maxNumberofUEs"))
                        result.setActivityFactor(profile.get("activityFactor"))
                        result.setCoverageAreaTAList(profile.get("coverageAreaTAList"))
-                       result.setCsAvailability(profile.get("cSAvailabilityTarget"))
                        result.setExpDataRateDL(profile.get("expDataRateDL"))
                        result.setExpDataRateUL(profile.get("expDataRateUL"))
                        result.setSurvivalTime(profile.get("survivalTime"))
@@ -280,7 +290,6 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
-                       result.setSNssai(profile.get("sNSSAI"))
                        result.setProfileId(execution.getVariable("TNFH_sliceProfileId"))
                        break
                case "TN-MH":
@@ -288,7 +297,6 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        result.setJitter(profile.get("jitter"))
                        result.setLatency(profile.get("latency"))
                        result.setResourceSharingLevel(profile.get("resourceSharingLevel"))
-                       result.setSNssai(profile.get("sNSSAI"))
                        result.setProfileId(execution.getVariable("TNMH_sliceProfileId"))
                        break
                default:
@@ -307,13 +315,13 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
         String msg
                AAIResourcesClient client = new AAIResourcesClient()
         try {
-            AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(instanceId).relationshipAPI())
+            AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business().customer(execution.getVariable("globalSubscriberId")).serviceSubscription(execution.getVariable("subscriptionServiceType")).serviceInstance(instanceId)).relationshipAPI()
             client.create(uri, relationship)
 
         } catch (BpmnError e) {
             throw e
         } catch (Exception ex) {
-            msg = "Exception in CreateCommunicationService.createRelationShipInAAI. " + ex.getMessage()
+            msg = "Exception in AN NSSMF Utils : CreateRelationShipInAAI. " + ex.getMessage()
             logger.info(msg)
             exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
         }
@@ -333,10 +341,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
        }
        
        public String buildCreateNSSMFRequest(DelegateExecution execution, String domainType, String action) {
-               EsrInfo esrInfo = new EsrInfo()
-               esrInfo.setNetworkType("TN")
-               esrInfo.setVendor("ONAP")
-               String esrInfoString = objectMapper.writeValueAsString(esrInfo)
+               JsonObject esrInfo = new JsonObject()
+           esrInfo.addProperty("networkType", "tn")
+           esrInfo.addProperty("vendor", "ONAP_internal")
                JsonObject response = new JsonObject()
                JsonObject allocateTnNssi = new JsonObject()
                JsonObject serviceInfo = new JsonObject()
@@ -404,7 +411,7 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
                serviceInfo.addProperty("globalSubscriberId", execution.getVariable("globalSubscriberId"))
                serviceInfo.addProperty("subscriptionServiceType", execution.getVariable("subscriptionServiceType"))
-               response.addProperty("esrInfo", esrInfoString)
+               response.add("esrInfo", esrInfo)
                response.add("serviceInfo", serviceInfo)
                response.add("allocateTnNssi", allocateTnNssi)
                return response.toString()
@@ -429,9 +436,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
                        deAllocateNssi.addProperty("sliceProfileId", execution.getVariable("TNMH_sliceProfileInstanceId"))
                }
                
-               EsrInfo esrInfo = new EsrInfo()
-               esrInfo.setVendor("ONAP")
-               esrInfo.setNetworkType("TN")
+               JsonObject esrInfo = new JsonObject()
+           esrInfo.addProperty("networkType", "tn")
+           esrInfo.addProperty("vendor", "ONAP_internal")
           
                JsonObject serviceInfo = new JsonObject()
                serviceInfo.addProperty("serviceInvariantUuid", null)
@@ -441,9 +448,9 @@ private SliceProfile createSliceProfile(String domainType, DelegateExecution exe
           
                JsonObject json = new JsonObject()
                json.add("deAllocateNssi", deAllocateNssi)
-               json.addProperty("esrInfo", objectMapper.writeValueAsString(esrInfo))
+               json.add("esrInfo", esrInfo)
                json.add("serviceInfo", serviceInfo)
                return json.toString()
           
        }
-}
\ No newline at end of file
+}
index fc14da3..e1719aa 100644 (file)
@@ -31,17 +31,16 @@ import org.onap.so.bpmn.core.json.JsonUtils
 import org.onap.so.db.request.beans.ResourceOperationStatus
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
-import java.sql.Timestamp
 import java.util.List
 import static org.apache.commons.lang3.StringUtils.isBlank
 import com.google.gson.JsonObject
 import com.fasterxml.jackson.databind.ObjectMapper
 import com.google.gson.JsonArray
+import com.google.gson.JsonParser
 import org.onap.aai.domain.yang.Relationship
 import org.onap.aaiclient.client.aai.AAIResourcesClient
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri
 import org.onap.so.beans.nsmf.AllocateTnNssi
-import org.onap.so.beans.nsmf.EsrInfo
 import org.onap.so.bpmn.core.UrnPropertiesReader
 import org.onap.so.bpmn.core.domain.ServiceDecomposition
 import org.onap.so.bpmn.core.domain.ServiceInstance
@@ -99,8 +98,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                                execution.setVariable("sliceProfile", sliceProfile)
                        }
                        String sliceProfileId = jsonUtil.getJsonValue(sliceProfile, "sliceProfileId")
-                       def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "snssaiList"))
-                       def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "plmnIdList"))
+                       def snssaiList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "sNSSAI"))
+                       def plmnIdList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "pLMNIdList"))
                        def coverageAreaTAList = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(sliceProfile, "coverageAreaTAList"))
 
                        if (isBlank(sliceProfileId) || (snssaiList.empty) || (plmnIdList.empty)
@@ -185,7 +184,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                List<String> nsstInfoList = new ArrayList<>()
                for(ServiceProxy serviceProxy : serviceProxyList)
                {
-                       String nsstModelUuid = serviceProxy.getModelInfo().getModelUuid()
+                       String nsstModelUuid = serviceProxy.getSourceModelUuid()
                        String nsstModelInvariantUuid = serviceProxy.getModelInfo().getModelInvariantUuid()
                        String name = serviceProxy.getModelInfo().getModelName()
                        String nsstServiceModelInfo = """{
@@ -203,7 +202,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                        logger.info(msg)
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
                }
-               execution.setVariable("ranNsstInfoList",nsstInfoList)
+               execution.setVariable("ranNsstInfoList", objectMapper.writeValueAsString(nsstInfoList))
                execution.setVariable("ranModelVersion", ranModelVersion)
                execution.setVariable("ranModelName", ranModelName)
                execution.setVariable("currentIndex",currentIndex)
@@ -255,7 +254,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
 
                String urlString = UrnPropertiesReader.getVariable("mso.oof.endpoint", execution)
                logger.debug( "get NSSI option OOF Url: " + urlString)
-
+               JsonParser parser = new JsonParser()
                //build oof request body
                boolean ranNssiPreferReuse = execution.getVariable("ranNssiPreferReuse");
                String requestId = execution.getVariable("msoRequestId")
@@ -265,7 +264,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
                String modelName = execution.getVariable("ranModelName")
                String timeout = UrnPropertiesReader.getVariable("mso.adapters.oof.timeout", execution);
-               List<String> nsstInfoList =  objectMapper.readValue(execution.getVariable("nsstInfoList"), List.class)
+               List<String> nsstInfoList =  objectMapper.readValue(execution.getVariable("ranNsstInfoList"), List.class)
                JsonArray capabilitiesList = new JsonArray()
                String FHCapabilities = execution.getVariable("FHCapabilities")
                String MHCapabilities = execution.getVariable("MHCapabilities")
@@ -274,11 +273,11 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                JsonObject MH = new JsonObject()
                JsonObject ANNF = new JsonObject()
                FH.addProperty("domainType", "TN_FH")
-               FH.addProperty("capabilityDetails", FHCapabilities)
+               FH.add("capabilityDetails", (JsonObject) parser.parse(FHCapabilities))
                MH.addProperty("domainType", "TN_MH")
-               MH.addProperty("capabilityDetails", MHCapabilities)
+               MH.add("capabilityDetails", (JsonObject) parser.parse(MHCapabilities))
                ANNF.addProperty("domainType", "AN_NF")
-               ANNF.addProperty("capabilityDetails", FHCapabilities)
+               ANNF.add("capabilityDetails", (JsonObject) parser.parse(ANNFCapabilities))
                capabilitiesList.add(FH)
                capabilitiesList.add(MH)
                capabilitiesList.add(ANNF)
@@ -302,13 +301,18 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                String oofResponse = execution.getVariable("nssiSelection_asyncCallbackResponse")
                String requestStatus = jsonUtil.getJsonValue(oofResponse, "requestStatus")
                if(requestStatus.equals("completed")) {
-                       List<String> solution = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(oofResponse, "solutions"))
-                       boolean existingNSI = jsonUtil.getJsonValue(solution.get(0), "existingNSI")
+                       String solutions = jsonUtil.getJsonValue(oofResponse, "solutions")
+                       logger.debug("solutions value : "+solutions)
+                       JsonParser parser = new JsonParser()
+                       JsonArray solution = parser.parse(solutions)
+                       JsonObject sol = solution.get(0)
+                       boolean existingNSI = sol.get("existingNSI").getAsBoolean()
+                       logger.debug("existingNSI value : "+existingNSI)
                        if(existingNSI) {
-                               def sharedNSISolution = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution")
-                               execution.setVariable("sharedRanNSSISolution", sharedNSISolution)
+                               JsonObject sharedNSISolution = sol.get("sharedNSISolution").getAsJsonObject()
+                               execution.setVariable("sharedRanNSSISolution", sharedNSISolution.toString())
                                logger.debug("sharedRanNSSISolution from OOF "+sharedNSISolution)
-                               String RANServiceInstanceId = jsonUtil.getJsonValue(solution.get(0), "sharedNSISolution.NSIId")
+                               String RANServiceInstanceId = sharedNSISolution.get("NSIId").getAsString()
                                execution.setVariable("RANServiceInstanceId", RANServiceInstanceId)
                                ServiceInstance serviceInstance = new ServiceInstance();
                                serviceInstance.setInstanceId(RANServiceInstanceId);
@@ -317,9 +321,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                                execution.setVariable("ranNsstServiceDecomposition", serviceDecomposition)
                                execution.setVariable("isRspRanNssi", true)
                        }else {
-                               def sliceProfiles = jsonUtil.getJsonValue(solution.get(0), "newNSISolution.sliceProfiles")
-                               execution.setVariable("RanConstituentSliceProfiles", sliceProfiles)
+                               JsonObject newNSISolution = sol.get("newNSISolution").getAsJsonObject()
+                               JsonArray sliceProfiles = newNSISolution.get("slice_profiles").getAsJsonArray()
                                logger.debug("RanConstituentSliceProfiles list from OOF "+sliceProfiles)
+                               execution.setVariable("RanConstituentSliceProfiles", sliceProfiles.toString())
                        }
                }else {
                        String statusMessage = jsonUtil.getJsonValue(oofResponse, "statusMessage")
@@ -362,11 +367,11 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
        
        def createModifyNssiQueryJobStatus = { DelegateExecution execution ->
                logger.debug(Prefix+"createModifyNssiQueryJobStatus method start")
-               EsrInfo esrInfo = new EsrInfo()
-               esrInfo.setNetworkType("AN")
-               esrInfo.setVendor("ONAP")
-               String esrInfoString = objectMapper.writeValueAsString(esrInfo)
-               execution.setVariable("esrInfo", esrInfoString)
+               JsonObject esrInfo = new JsonObject()
+           esrInfo.addProperty("networkType", "tn")
+           esrInfo.addProperty("vendor", "ONAP_internal")
+
+               execution.setVariable("esrInfo", esrInfo.toString())
                JsonObject serviceInfo = new JsonObject()
                serviceInfo.addProperty("nssiId", execution.getVariable("RANServiceInstanceId"))
                serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
@@ -491,12 +496,16 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                String oofResponse = execution.getVariable("nfNssiSelection_asyncCallbackResponse")
                String requestStatus = jsonUtil.getJsonValue(oofResponse, "requestStatus")
                if(requestStatus.equals("completed")) {
-                       List<String> solution = jsonUtil.StringArrayToList(jsonUtil.getJsonValue(oofResponse, "solutions"))             
+                       String solutions = jsonUtil.getJsonValue(oofResponse, "solutions")
+                       logger.debug("nssi solutions value : "+solutions)
+                       JsonParser parser = new JsonParser()
+                       JsonArray solution = parser.parse(solutions)            
                        if(solution.size()>=1) {
-                               String ranNfNssiId = jsonUtil.getJsonValue(solution.get(0), "NSSIId")
-                               String invariantUuid = jsonUtil.getJsonValue(solution.get(0), "invariantUUID")
-                               String uuid = jsonUtil.getJsonValue(solution.get(0), "UUID")
-                               String nssiName = jsonUtil.getJsonValue(solution.get(0), "NSSIName")
+                               JsonObject sol = solution.get(0)
+                               String ranNfNssiId = sol.get("NSSIId").getAsString()
+                               String invariantUuid = sol.get("invariantUUID").getAsString()
+                               String uuid = sol.get("UUID").getAsString()
+                               String nssiName = sol.get("NSSIName").getAsString()
                                execution.setVariable("RANNFServiceInstanceId", ranNfNssiId)
                                execution.setVariable("RANNFInvariantUUID", invariantUuid)
                                execution.setVariable("RANNFUUID", uuid)
@@ -528,7 +537,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                logger.debug(Prefix+"processRanNfModifyRsp method start")
                anNssmfUtils.processRanNfModifyRsp(execution)
                //create RAN NSSI 
-               org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new ServiceInstance();
+               org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
                //AN instance creation
                ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId"))
                String sliceInstanceName = execution.getVariable("servicename")
@@ -593,8 +602,8 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
        def updateAaiWithRANInstances = { DelegateExecution execution ->
                logger.debug(Prefix+"updateAaiWithRANInstances method start")
                //create RAN NSSI 
-               org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new ServiceInstance();
-               org.onap.aai.domain.yang.ServiceInstance ANNFServiceInstance = new ServiceInstance();
+               org.onap.aai.domain.yang.ServiceInstance ANServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
+               org.onap.aai.domain.yang.ServiceInstance ANNFServiceInstance = new org.onap.aai.domain.yang.ServiceInstance();
                //AN instance creation
                ANServiceInstance.setServiceInstanceId(execution.getVariable("RANServiceInstanceId"))
                String sliceInstanceName = execution.getVariable("servicename")
@@ -603,15 +612,16 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                ANServiceInstance.setServiceType(serviceType)
                String serviceStatus = "deactivated"
                ANServiceInstance.setOrchestrationStatus(serviceStatus)
-               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "plmnIdList")
+               String serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "pLMNIdList")
                ANServiceInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
                String serviceRole = "nssi"
                ANServiceInstance.setServiceRole(serviceRole)
-               List<String> snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+               List<String> snssaiList = execution.getVariable("snssaiList")
                String snssai = snssaiList.get(0)
                ANServiceInstance.setEnvironmentContext(snssai)
                ANServiceInstance.setWorkloadContext("AN")
-               
+               String serviceFunctionAn = jsonUtil.getJsonValue(execution.getVariable("sliceProfile"), "resourceSharingLevel")
+               ANServiceInstance.setServiceFunction(serviceFunctionAn)
                logger.debug("completed AN service instance build "+ ANServiceInstance.toString())
                //create RAN NF NSSI
                ANNFServiceInstance.setServiceInstanceId(execution.getVariable("RANNFServiceInstanceId"))
@@ -619,13 +629,15 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                ANNFServiceInstance.setServiceInstanceName(sliceInstanceName)
                ANNFServiceInstance.setServiceType(serviceType)
                ANNFServiceInstance.setOrchestrationStatus(serviceStatus)
-               serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "plmnIdList")
+               serviceInstanceLocationid = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "pLMNIdList")
                ANNFServiceInstance.setServiceInstanceLocationId(serviceInstanceLocationid)
                ANNFServiceInstance.setServiceRole(serviceRole)
-               snssaiList = objectMapper.readValue(execution.getVariable("snssaiList"), List.class)
+               snssaiList = execution.getVariable("snssaiList")
                snssai = snssaiList.get(0)
                ANNFServiceInstance.setEnvironmentContext(snssai)
                ANNFServiceInstance.setWorkloadContext("AN-NF")
+               String serviceFunctionAnnf = jsonUtil.getJsonValue(execution.getVariable("ranNfSliceProfile"), "resourceSharingLevel")
+               ANNFServiceInstance.setServiceFunction(serviceFunctionAnnf)
                logger.debug("completed AN service instance build "+ ANNFServiceInstance.toString())
                
                String msg = ""
@@ -695,11 +707,10 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
        }
        
        private void createTnAllocateNssiJobQuery(DelegateExecution execution, String domainType) {
-               EsrInfo esrInfo = new EsrInfo()
-               esrInfo.setNetworkType("TN")
-               esrInfo.setVendor("ONAP")
-               String esrInfoString = objectMapper.writeValueAsString(esrInfo)
-               execution.setVariable("esrInfo", esrInfoString)
+               JsonObject esrInfo = new JsonObject()
+           esrInfo.addProperty("networkType", "tn")
+           esrInfo.addProperty("vendor", "ONAP_internal")
+               execution.setVariable("esrInfo", esrInfo.toString())
                JsonObject serviceInfo = new JsonObject()
                serviceInfo.addProperty("nssiId", null)
                serviceInfo.addProperty("nsiId", execution.getVariable("nsiId"))
@@ -853,7 +864,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                updateStatus.setResourceTemplateUUID(nsiId)
                updateStatus.setResourceInstanceID(nssiId)
                updateStatus.setOperType("Allocate")
-               updateStatus.setProgress(100)
+               updateStatus.setProgress("100")
                updateStatus.setStatus("finished")
                requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
 
@@ -875,7 +886,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                updateStatus.setResourceTemplateUUID(nsiId)
                updateStatus.setResourceInstanceID(nssiId)
                updateStatus.setOperType("Allocate")
-               updateStatus.setProgress(0)
+               updateStatus.setProgress("0")
                updateStatus.setStatus("failed")
                requestDBUtil.prepareUpdateResourceOperationStatus(execution, updateStatus)
        }
@@ -883,8 +894,6 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
        private String buildSdnrAllocateRequest(DelegateExecution execution, String action, String rpcName, String callbackUrl) {
                
                String requestId = execution.getVariable("msoRequestId")
-               Date date = new Date().getTime()
-               Timestamp time = new Timestamp(date)
                Map<String,Object> sliceProfile = objectMapper.readValue(execution.getVariable("ranNfSliceProfile"), Map.class)
                sliceProfile.put("sliceProfileId", execution.getVariable("ANNF_sliceProfileInstanceId"))
                sliceProfile.put("maxNumberofConns", sliceProfile.get("maxNumberofPDUSessions"))
@@ -897,7 +906,7 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                JsonObject commonHeader = new JsonObject()
                JsonObject payload = new JsonObject()
                JsonObject payloadInput = new JsonObject()
-               commonHeader.addProperty("TimeStamp", time.toString())
+               commonHeader.addProperty("TimeStamp",new Date(System.currentTimeMillis()).format("yyyy-MM-dd'T'HH:mm:ss.sss", TimeZone.getDefault()))
                commonHeader.addProperty("APIver", "1.0")
                commonHeader.addProperty("RequestID", requestId)
                commonHeader.addProperty("SubRequestID", "1")
@@ -912,12 +921,12 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                payload.add("input", payloadInput)
                input.add("CommonHeader", commonHeader)
                input.addProperty("Action", action)
-               input.add("Payload", payload)
+               input.addProperty("Payload", payload.toString())
                body.add("input", input)
                response.add("body", body)
                response.addProperty("version", "1.0")
                response.addProperty("rpc-name", rpcName)
-               response.addProperty("correlation-id", requestId+"-1")
+               response.addProperty("correlation-id", (requestId+"-1"))
                response.addProperty("type", "request")
                return response.toString()
        }
@@ -979,8 +988,15 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                String DUEG_routeId = UUID.randomUUID().toString()
                execution.setVariable("tranportEp_ID_DUEG", DUEG_routeId)
                NetworkRoute DUEG_ep = new NetworkRoute()
-               DU_ep.setRouteId(DUEG_routeId)
-               DU_ep.setNextHop("Host3")
+                DUEG_ep.setRouteId(DUEG_routeId)
+                DUEG_ep.setFunction(function)
+                DUEG_ep.setRole(role)
+                DUEG_ep.setType(type)
+                DUEG_ep.setIpAddress("192.168.100.5")
+                DUEG_ep.setLogicalInterfaceId("1234")
+                DUEG_ep.setPrefixLength(prefixLength)
+                DUEG_ep.setAddressFamily(addressFamily)
+               DUEG_ep.setNextHop("Host3")
                //CUIN
                String CUIN_routeId = UUID.randomUUID().toString()
                execution.setVariable("tranportEp_ID_CUIN", CUIN_routeId)
@@ -1005,9 +1021,9 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
                        logger.debug("creating DUIN endpoint . ID : "+DUIN_routeId+" node details : "+DU_ep.toString())
                        networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), DUIN_routeId)
                        client.create(networkRouteUri, DU_ep)
-                       logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DU_ep.toString())
+                       logger.debug("creating DUEG endpoint . ID : "+DUEG_routeId+" node details : "+DUEG_ep.toString())
                        networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), DUEG_routeId)
-                       client.create(networkRouteUri, DU_ep)
+                       client.create(networkRouteUri, DUEG_ep)
                        logger.debug("creating CUIN endpoint . ID : "+CUIN_routeId+" node details : "+CUIN_ep.toString())
                        networkRouteUri = AAIUriFactory.createResourceUri( new AAIObjectType(AAINamespaceConstants.NETWORK, NetworkRoute.class), CUIN_routeId)
                        client.create(networkRouteUri, CUIN_ep)
@@ -1041,3 +1057,4 @@ class DoAllocateAccessNSSI extends AbstractServiceTaskProcessor {
        }
        }
 }
+
index 159f4c4..8b452d3 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.scripts
 
+import org.onap.aai.domain.yang.NetworkRoute
+import org.onap.so.beans.nsmf.ConnectionLink
+import org.onap.so.beans.nsmf.EndPoint
 import org.onap.so.beans.nsmf.NsiInfo
 import org.onap.so.beans.nsmf.SliceProfileAdapter
+import org.onap.so.beans.nsmf.TransportSliceNetwork
 import org.onap.so.beans.nsmf.oof.SubnetType
 import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor
 import javax.ws.rs.NotFoundException
@@ -307,6 +311,57 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         execution.setVariable("sliceTaskParams", sliceParams)
     }
 
+    void createANEndpoint(DelegateExecution execution){
+        logger.debug("Enter createANEndpoint in DoAllocateNSIandNSSI()")
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.anSliceTaskInfo
+
+        NetworkRoute route = new NetworkRoute()
+        String routeId = UUID.randomUUID().toString()
+        route.setRouteId(routeId)
+        route.setType("endpoint")
+        route.setRole("an")
+        route.setFunction("3gppTransportEP")
+        route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
+        route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
+        route.setAddressFamily("ipv4")
+        route.setPrefixLength(24)
+        sliceTaskInfo.setEndPointId(routeId)
+
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
+        client.create(uri, route)
+        execution.setVariable("sliceTaskParams", sliceParams)
+        logger.info("an endpointId:" + sliceParams.anSliceTaskInfo.endPointId)
+    }
+
+
+    void createCNEndpoint(DelegateExecution execution){
+        logger.debug("Enter createCNNetworkRoute in DoAllocateNSIandNSSI()")
+        SliceTaskParamsAdapter sliceParams =
+                execution.getVariable("sliceTaskParams") as SliceTaskParamsAdapter
+        SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo = sliceParams.cnSliceTaskInfo
+
+        NetworkRoute route = new NetworkRoute()
+        String routeId = UUID.randomUUID().toString()
+        route.setRouteId(routeId)
+        route.setType("endpoint")
+        route.setRole("cn")
+        route.setFunction("3gppTransportEP")
+        route.setIpAddress( sliceTaskInfo.sliceProfile.ipAddress)
+        route.setNextHop(sliceTaskInfo.sliceProfile.nextHopInfo)
+        route.setAddressFamily("ipv4")
+        route.setPrefixLength(24)
+
+        sliceTaskInfo.setEndPointId(routeId)
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(routeId))
+        client.create(uri, route)
+
+        execution.setVariable("cnEndpointId", routeId)
+        execution.setVariable("sliceTaskParams", sliceParams)
+        logger.info("cn endpointId:" + sliceParams.cnSliceTaskInfo.endPointId)
+    }
+
     /**
      * prepare AllocateAnNssi
      * @param execution
@@ -327,7 +382,14 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         allocateAnNssi.nssiName = sliceTaskInfo.NSSTInfo.name
         NsiInfo nsiInfo = new NsiInfo()
         nsiInfo.nsiId = sliceParams.suggestNsiId
+        nsiInfo.nsiName = sliceParams.suggestNsiName
         allocateAnNssi.nsiInfo = nsiInfo
+        //endPoint
+        EndPoint endPoint = new EndPoint()
+        endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
+        endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
+        endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
+        allocateAnNssi.setEndPoint(endPoint)
 
         EsrInfo esrInfo = new EsrInfo()
         //todo: vendor and network
@@ -441,7 +503,14 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         allocateCnNssi.sliceProfile = sliceTaskInfo.sliceProfile.trans2CnProfile()
         NsiInfo nsiInfo = new NsiInfo()
         nsiInfo.nsiId = sliceParams.suggestNsiId
+        nsiInfo.nsiName = sliceParams.suggestNsiName
         allocateCnNssi.nsiInfo = nsiInfo
+        // endPoint
+        EndPoint endPoint = new EndPoint()
+        endPoint.setIpAddress(sliceTaskInfo.sliceProfile.ipAddress)
+        endPoint.setLogicInterfaceId(sliceTaskInfo.sliceProfile.logicInterfaceId)
+        endPoint.setNextHopInfo(sliceTaskInfo.sliceProfile.nextHopInfo)
+        allocateCnNssi.setEndPoint(endPoint)
 
         EsrInfo esrInfo = new EsrInfo()
         //todo: vendor and network
@@ -552,11 +621,24 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
 
         AllocateTnNssi allocateTnNssi = new AllocateTnNssi()
         //todo: AllocateTnNssi
-        //todo: endpointId -> set into tn
-        allocateTnNssi.setTransportSliceNetworks()
-        allocateTnNssi.setNetworkSliceInfos()
-
+        //todo: endPointId -> set into tn
+        List<TransportSliceNetwork> transportSliceNetworks = new ArrayList<>()
+        TransportSliceNetwork transportSliceNetwork = new TransportSliceNetwork()
+        List<ConnectionLink> connectionLinks = new ArrayList<>()
+        ConnectionLink connectionLink = new ConnectionLink()
+        connectionLink.setTransportEndpointA(sliceParams.anSliceTaskInfo.endPointId)
+        connectionLink.setTransportEndpointB(sliceParams.cnSliceTaskInfo.endPointId)
+        connectionLinks.add(connectionLink)
+        transportSliceNetwork.setConnectionLinks(connectionLinks)
+        transportSliceNetworks.add(transportSliceNetwork)
+        allocateTnNssi.setTransportSliceNetworks(transportSliceNetworks)
 
+        allocateTnNssi.setNetworkSliceInfos()
+        allocateTnNssi.setSliceProfile(sliceTaskInfo.sliceProfile.trans2TnProfile())
+        NsiInfo nsiInfo = new NsiInfo()
+        nsiInfo.setNsiId(sliceParams.suggestNsiId)
+        nsiInfo.setNsiName(sliceParams.suggestNsiName)
+        allocateTnNssi.setNsiInfo(nsiInfo)
 
         //allocateTnNssi.networkSliceInfos
 
@@ -603,17 +685,21 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         String nsiId = sliceParams.getSuggestNsiId()
         String sliceProfileInstanceId = sliceParams.anSliceTaskInfo.sliceInstanceId
         String serviceProfileInstanceId = sliceParams.serviceId
+        String epId = sliceParams.anSliceTaskInfo.endPointId
         //nsi id
-        //todo: aai -> nssi -> relationship -> endpointId -> set into tn
-        String endPointId = getEndpointIdFromAAI(execution, nssiId)
-        execution.setVariable("endPointIdAn", endPointId)
-
+        //todo: aai -> nssi -> relationship -> endPointId -> set into tn
+        //String endPointId = getEndpointIdFromAAI(execution, nssiId)
+        //execution.setVariable("endPointIdAn", endPointId)
         updateRelationship(execution, nsiId, nssiId)
 
         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
         updateRelationship(execution, sliceProfileInstanceId, nssiId)
 
+        updateEPRelationship(execution, nssiId, epId)
+
+        updateEPRelationship(execution, sliceProfileInstanceId, epId)
+
         sliceParams.anSliceTaskInfo.suggestNssiId = nssiId
         execution.setVariable("sliceTaskParams", sliceParams)
     }
@@ -637,16 +723,21 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         String nsiId = sliceParams.getSuggestNsiId()
         String sliceProfileInstanceId = sliceParams.cnSliceTaskInfo.sliceInstanceId
         String serviceProfileInstanceId = sliceParams.serviceId
+        String epId = sliceParams.cnSliceTaskInfo.endPointId
         //nsi id
-        //todo: aai -> nssi -> relationship -> endpointId -> set into tn
-        String endPointId = getEndpointIdFromAAI(execution, nssiId)
-        execution.setVariable("endPointIdCn", endPointId)
+        //todo: aai -> nssi -> relationship -> endPointId -> set into tn
+//        String endPointId = getEndpointIdFromAAI(execution, nssiId)
+//        execution.setVariable("endPointIdCn", endPointId)
 
         updateRelationship(execution, nsiId, nssiId)
 
         updateRelationship(execution, serviceProfileInstanceId, sliceProfileInstanceId)
 
-        updateRelationship(execution,sliceProfileInstanceId, nssiId)
+        updateRelationship(execution, sliceProfileInstanceId, nssiId)
+
+        updateEPRelationship(execution, nssiId, epId)
+
+        updateEPRelationship(execution, sliceProfileInstanceId, epId)
 
         sliceParams.cnSliceTaskInfo.suggestNssiId = nssiId
         execution.setVariable("sliceTaskParams", sliceParams)
@@ -682,7 +773,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
             } else {
                 ServiceInstance nssiInstance = si.get()
-                //todo: handle relationship and return endpointId
+                //todo: handle relationship and return endPointId
                 if (nssiInstance.relationshipList == null) {
                     String msg = "relationshipList of " + nssiId + " is null"
                     logger.debug(msg)
@@ -751,7 +842,7 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
                 .serviceSubscription(execution.getVariable("subscriptionServiceType"))
                 .serviceInstance(targetId))
 
-        logger.info("Creating relationship, targetInstanceUri: " + targetInstanceUri)
+        logger.debug("Creating relationship, targetInstanceUri: " + targetInstanceUri)
 
         relationship.setRelatedLink(targetInstanceUri.build().toString())
 
@@ -763,12 +854,36 @@ class DoAllocateNSIandNSSI extends AbstractServiceTaskProcessor{
         client.create(sourceInstanceUri, relationship)
     }
 
+    /**
+     * update endpoint relationship
+     * @param execution
+     * @param sourceId
+     * @param targetId
+     */
+    void updateEPRelationship(DelegateExecution execution, String sourceId, String endpointId) {
+        //relation ship
+        Relationship relationship = new Relationship()
+
+        AAIResourceUri endpointUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.network().networkRoute(endpointId))
+
+        logger.debug("Creating relationship, endpoint Uri: " + endpointUri + ",endpointId: " + endpointId)
+
+        relationship.setRelatedLink(endpointUri.build().toString())
+
+        AAIResourceUri sourceInstanceUri = AAIUriFactory.createResourceUri(AAIFluentTypeBuilder.business()
+                .customer(execution.getVariable("globalSubscriberId"))
+                .serviceSubscription(execution.getVariable("subscriptionServiceType"))
+                .serviceInstance(sourceId))
+                .relationshipAPI()
+        client.create(sourceInstanceUri, relationship)
+    }
+
     static def createSliceProfileInstance(SliceTaskInfo<SliceProfileAdapter> sliceTaskInfo, String oStatus) {
         // create slice profile
         ServiceInstance rspi = new ServiceInstance()
         rspi.setServiceInstanceName(sliceTaskInfo.NSSTInfo.name)
         rspi.setServiceType(sliceTaskInfo.sliceProfile.getSST())
-        rspi.setServiceRole("slice-profile-instance")
+        rspi.setServiceRole("slice-profile")
         rspi.setOrchestrationStatus(oStatus)
         rspi.setServiceInstanceLocationId(sliceTaskInfo.sliceProfile.getPLMNIdList())
         rspi.setModelInvariantId(sliceTaskInfo.NSSTInfo.invariantUUID)
index 896d7ff..35079d2 100644 (file)
@@ -97,10 +97,16 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
         String response =
                 nssmfAdapterUtils.sendPostRequestNSSMF(execution, endpoint, objectMapper.writeValueAsString(nbiRequest))
 
+        logger.debug("nssmf response nssiAllocateStatus:" + response)
+
         if (response != null) {
             JobStatusResponse jobStatusResponse = objectMapper.readValue(response, JobStatusResponse.class)
-            execution.setVariable("nssiAllocateStatus", jobStatusResponse)
+            if (StringUtils.isBlank(nssiId)) {
+                nssiAllocateResult.setNssiId(jobStatusResponse.getResponseDescriptor().getNssiId())
+                execution.setVariable("nssiAllocateResult", nssiAllocateResult)
+            }
 
+            execution.setVariable("nssiAllocateStatus", jobStatusResponse)
             if (jobStatusResponse.getResponseDescriptor().getProgress() == 100) {
                 execution.setVariable("jobFinished", true)
             }
@@ -119,7 +125,7 @@ class DoAllocateNSSI extends AbstractServiceTaskProcessor {
 
         SliceTaskInfo sliceTaskInfo = execution.getVariable("sliceTaskInfo") as SliceTaskInfo
         sliceTaskInfo.progress = response.getProgress()
-        sliceTaskInfo.status = response.getStatus()
+        sliceTaskInfo.status = response.getStatus().toLowerCase()
         sliceTaskInfo.statusDescription = response.getStatusDescription()
         updateNssiResult(sliceParams, subnetType, sliceTaskInfo)
 
index f20bca9..cf9a95e 100644 (file)
@@ -111,7 +111,7 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             String sliceInstanceName = execution.getVariable("sliceServiceInstanceName")
             ss.setServiceInstanceName(sliceInstanceName)
             ss.setServiceType(serviceType)
-            String serviceStatus = "allocated"
+            String serviceStatus = "activated"
             ss.setOrchestrationStatus(serviceStatus)
             String modelInvariantUuid = execution.getVariable("modelInvariantUuid")
             String modelUuid = execution.getVariable("modelUuid")
@@ -121,7 +121,8 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor {
             String serviceInstanceLocationid = tnNssmfUtils.getFirstPlmnIdFromSliceProfile(sliceProfileStr)
             ss.setServiceInstanceLocationId(serviceInstanceLocationid)
             String snssai = tnNssmfUtils.getFirstSnssaiFromSliceProfile(sliceProfileStr)
-            ss.setEnvironmentContext(snssai)
+            //ss.setEnvironmentContext(snssai)
+            ss.setEnvironmentContext("tn")
             ss.setServiceRole(serviceRole)
             AAIResourcesClient client = getAAIClient()
             AAIResourceUri uri =
index 8a276ed..88db216 100644 (file)
@@ -321,17 +321,17 @@ class TnAllocateNssi extends AbstractServiceTaskProcessor {
                                 String status,
                                 String progress,
                                 String statusDescription) {
-        String serviceId = execution.getVariable("dummyServiceId")
+        String modelUuid = execution.getVariable("modelUuid")
         String ssInstanceId = execution.getVariable("sliceServiceInstanceId")
         String jobId = execution.getVariable("jobId")
         String nsiId = execution.getVariable("nsiId")
 
         ResourceOperationStatus roStatus = new ResourceOperationStatus()
-        roStatus.setServiceId(serviceId)
+        roStatus.setServiceId(nsiId)
         roStatus.setOperationId(jobId)
-        roStatus.setResourceTemplateUUID(nsiId)
+        roStatus.setResourceTemplateUUID(modelUuid)
         roStatus.setResourceInstanceID(ssInstanceId)
-        roStatus.setOperType("Allocate")
+        roStatus.setOperType("ALLOCATE")
         roStatus.setProgress(progress)
         roStatus.setStatus(status)
         roStatus.setStatusDescription(statusDescription)
index 9090bf2..c6268d3 100644 (file)
@@ -140,7 +140,7 @@ dcnsio.createAnSliceProfileInstance(execution)</bpmn:script>
 def dcnsio = new DoAllocateNSIandNSSI()
 dcnsio.createAnSliceProfile(execution)</bpmn:script>
     </bpmn:scriptTask>
-    <bpmn:sequenceFlow id="SequenceFlow_0zbd2tq" sourceRef="ScriptTask_1r2li91" targetRef="ScriptTask_0s8vhha" />
+    <bpmn:sequenceFlow id="SequenceFlow_0zbd2tq" sourceRef="ScriptTask_1r2li91" targetRef="Task_0dkfe9n" />
     <bpmn:scriptTask id="Task_1en3luv" name="Create Core Slice Profile Instance" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_0k5iu2n</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0f36cu2</bpmn:outgoing>
@@ -234,7 +234,7 @@ dcnsio.updateCnRelationship(execution)</bpmn:script>
       <bpmn:linkEventDefinition name="CreateTnSliceProfile" />
     </bpmn:intermediateThrowEvent>
     <bpmn:scriptTask id="ScriptTask_0s8vhha" name="prepare Allocate An Nssi" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_0zbd2tq</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1rwy8q7</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0npsyye</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def dcnsio = new DoAllocateNSIandNSSI()
@@ -242,14 +242,14 @@ dcnsio.prepareAllocateAnNssi(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_0npsyye" sourceRef="ScriptTask_0s8vhha" targetRef="CallActivity_1yh9tiq" />
     <bpmn:scriptTask id="ScriptTask_0z0ec5b" name="prepare Allocate Cn Nssi" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_1wffel4</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_17r1oa0</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cwbtmr</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
 def dcnsio = new DoAllocateNSIandNSSI()
 dcnsio.prepareAllocateCnNssi(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_0cwbtmr" sourceRef="ScriptTask_0z0ec5b" targetRef="CallActivity_1ixah3o" />
-    <bpmn:sequenceFlow id="SequenceFlow_1wffel4" sourceRef="Task_1g8n8iz" targetRef="ScriptTask_0z0ec5b" />
+    <bpmn:sequenceFlow id="SequenceFlow_1wffel4" sourceRef="Task_1g8n8iz" targetRef="Task_0fwhsq2" />
     <bpmn:scriptTask id="ScriptTask_0ci5g6y" name="prepare Allocate Tn-BH Nssi" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_00dexhy</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01isn2q</bpmn:outgoing>
@@ -258,6 +258,22 @@ def dcnsio = new DoAllocateNSIandNSSI()
 dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_01isn2q" sourceRef="ScriptTask_0ci5g6y" targetRef="CallActivity_0b28wlb" />
+    <bpmn:sequenceFlow id="SequenceFlow_1rwy8q7" sourceRef="Task_0dkfe9n" targetRef="ScriptTask_0s8vhha" />
+    <bpmn:scriptTask id="Task_0dkfe9n" name="Create AN EP" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_0zbd2tq</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1rwy8q7</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createANEndpoint(execution)</bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:sequenceFlow id="SequenceFlow_17r1oa0" sourceRef="Task_0fwhsq2" targetRef="ScriptTask_0z0ec5b" />
+    <bpmn:scriptTask id="Task_0fwhsq2" name="Create CN EP" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1wffel4</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_17r1oa0</bpmn:outgoing>
+      <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
+def dcnsio = new DoAllocateNSIandNSSI()
+dcnsio.createCNEndpoint(execution)</bpmn:script>
+    </bpmn:scriptTask>
   </bpmn:process>
   <bpmn:message id="Message_1i10pf1" name="Message_2mc69tg" />
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
@@ -338,25 +354,25 @@ dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
         <di:waypoint x="310" y="630" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1yh9tiq_di" bpmnElement="CallActivity_1yh9tiq">
-        <dc:Bounds x="930" y="400" width="100" height="80" />
+        <dc:Bounds x="1030" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1hfjn79_di" bpmnElement="SequenceFlow_1hfjn79">
         <di:waypoint x="410" y="440" />
-        <di:waypoint x="530" y="440" />
+        <di:waypoint x="480" y="440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1ixah3o_di" bpmnElement="CallActivity_1ixah3o">
-        <dc:Bounds x="930" y="590" width="100" height="80" />
+        <dc:Bounds x="1030" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0f36cu2_di" bpmnElement="SequenceFlow_0f36cu2">
         <di:waypoint x="410" y="630" />
-        <di:waypoint x="530" y="630" />
+        <di:waypoint x="480" y="630" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1xb5nx1_di" bpmnElement="SequenceFlow_1xb5nx1">
-        <di:waypoint x="1030" y="440" />
-        <di:waypoint x="1140" y="440" />
+        <di:waypoint x="1130" y="440" />
+        <di:waypoint x="1210" y="440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ParallelGateway_15vgf7c_di" bpmnElement="ExclusiveGateway_19ru3hp">
-        <dc:Bounds x="1325" y="505" width="50" height="50" />
+        <dc:Bounds x="1405" y="505" width="50" height="50" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_07sgklo_di" bpmnElement="ScriptTask_07sgklo">
         <dc:Bounds x="930" y="220" width="100" height="80" />
@@ -377,21 +393,21 @@ dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
         <dc:Bounds x="310" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1r2li91_di" bpmnElement="ScriptTask_1r2li91">
-        <dc:Bounds x="530" y="400" width="100" height="80" />
+        <dc:Bounds x="480" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0zbd2tq_di" bpmnElement="SequenceFlow_0zbd2tq">
-        <di:waypoint x="630" y="440" />
-        <di:waypoint x="730" y="440" />
+        <di:waypoint x="580" y="440" />
+        <di:waypoint x="650" y="440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_01n5nmt_di" bpmnElement="Task_1en3luv">
         <dc:Bounds x="310" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0juh1xy_di" bpmnElement="Task_1g8n8iz">
-        <dc:Bounds x="530" y="590" width="100" height="80" />
+        <dc:Bounds x="480" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0ax2c4p_di" bpmnElement="SequenceFlow_0ax2c4p">
-        <di:waypoint x="1375" y="530" />
-        <di:waypoint x="1412" y="530" />
+        <di:waypoint x="1455" y="530" />
+        <di:waypoint x="1512" y="530" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0stnvp3_di" bpmnElement="ScriptTask_0stnvp3">
         <dc:Bounds x="310" y="840" width="100" height="80" />
@@ -428,24 +444,24 @@ dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
         <di:waypoint x="1412" y="880" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0mls87v_di" bpmnElement="ScriptTask_0mls87v">
-        <dc:Bounds x="1140" y="400" width="100" height="80" />
+        <dc:Bounds x="1210" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0xx5bwa_di" bpmnElement="SequenceFlow_0xx5bwa">
-        <di:waypoint x="1240" y="440" />
-        <di:waypoint x="1350" y="440" />
-        <di:waypoint x="1350" y="505" />
+        <di:waypoint x="1310" y="440" />
+        <di:waypoint x="1430" y="440" />
+        <di:waypoint x="1430" y="505" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0z9x5uh_di" bpmnElement="ScriptTask_0z9x5uh">
-        <dc:Bounds x="1140" y="590" width="100" height="80" />
+        <dc:Bounds x="1210" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1l74seh_di" bpmnElement="SequenceFlow_1l74seh">
-        <di:waypoint x="1030" y="630" />
-        <di:waypoint x="1140" y="630" />
+        <di:waypoint x="1130" y="630" />
+        <di:waypoint x="1210" y="630" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0jqxxjq_di" bpmnElement="SequenceFlow_0jqxxjq">
-        <di:waypoint x="1240" y="630" />
-        <di:waypoint x="1350" y="630" />
-        <di:waypoint x="1350" y="555" />
+        <di:waypoint x="1310" y="630" />
+        <di:waypoint x="1430" y="630" />
+        <di:waypoint x="1430" y="555" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1omynpt_di" bpmnElement="SequenceFlow_1omynpt">
         <di:waypoint x="1030" y="880" />
@@ -455,28 +471,28 @@ dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
         <dc:Bounds x="1412" y="862" width="36" height="36" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_0gz4vi6_di" bpmnElement="EndEvent_02c8wsp">
-        <dc:Bounds x="1412" y="512" width="36" height="36" />
+        <dc:Bounds x="1512" y="512" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1392" y="555" width="79" height="27" />
+          <dc:Bounds x="1492" y="555" width="79" height="27" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_0s8vhha_di" bpmnElement="ScriptTask_0s8vhha">
-        <dc:Bounds x="730" y="400" width="100" height="80" />
+        <dc:Bounds x="830" y="400" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0npsyye_di" bpmnElement="SequenceFlow_0npsyye">
-        <di:waypoint x="830" y="440" />
         <di:waypoint x="930" y="440" />
+        <di:waypoint x="1030" y="440" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0z0ec5b_di" bpmnElement="ScriptTask_0z0ec5b">
-        <dc:Bounds x="730" y="590" width="100" height="80" />
+        <dc:Bounds x="830" y="590" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0cwbtmr_di" bpmnElement="SequenceFlow_0cwbtmr">
-        <di:waypoint x="830" y="630" />
         <di:waypoint x="930" y="630" />
+        <di:waypoint x="1030" y="630" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1wffel4_di" bpmnElement="SequenceFlow_1wffel4">
-        <di:waypoint x="630" y="630" />
-        <di:waypoint x="730" y="630" />
+        <di:waypoint x="580" y="630" />
+        <di:waypoint x="650" y="630" />
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_0ci5g6y_di" bpmnElement="ScriptTask_0ci5g6y">
         <dc:Bounds x="730" y="840" width="100" height="80" />
@@ -485,6 +501,20 @@ dcnsio.prepareAllocateTnBHNssi(execution)</bpmn:script>
         <di:waypoint x="830" y="880" />
         <di:waypoint x="930" y="880" />
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1rwy8q7_di" bpmnElement="SequenceFlow_1rwy8q7">
+        <di:waypoint x="750" y="440" />
+        <di:waypoint x="830" y="440" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0x8r537_di" bpmnElement="Task_0dkfe9n">
+        <dc:Bounds x="650" y="400" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_17r1oa0_di" bpmnElement="SequenceFlow_17r1oa0">
+        <di:waypoint x="750" y="630" />
+        <di:waypoint x="830" y="630" />
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0mlyx1u_di" bpmnElement="Task_0fwhsq2">
+        <dc:Bounds x="650" y="590" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 12632de..4f83c87 100644 (file)
@@ -164,7 +164,7 @@ css.prepareOofSelection(execution)</bpmn:script>
       <bpmn:incoming>SequenceFlow_0n4xku8</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0kixzdj</bpmn:outgoing>
       <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.*
-execution.setVariable("orchestrationStatus", "allocated")
+execution.setVariable("orchestrationStatus", "activated")
 def runScript = new TnAllocateNssi()
 runScript.updateAAIOrchStatus(execution)</bpmn:script>
     </bpmn:scriptTask>
index 217b3a8..554385d 100644 (file)
@@ -78,6 +78,7 @@ public class WorkflowActionBBTasks {
     private static final String ROLLBACKTOCREATEDNOCONFIGURATION = "RollbackToCreatedNoConfiguration";
     private static final String REPLACEINSTANCE = "replaceInstance";
     private static final String VFMODULE = "VfModule";
+    private static final String CONFIGURATION_PATTERN = "(Ad|De)(.*)FabricConfiguration(.*)";
     protected String maxRetries = "mso.rainyDay.maxRetries";
     private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBTasks.class);
 
@@ -99,22 +100,26 @@ public class WorkflowActionBBTasks {
     private RequestsDbListenerRunner requestsDbListener;
 
     public void selectBB(DelegateExecution execution) {
-        List<ExecuteBuildingBlock> flowsToExecute =
-                (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
-        execution.setVariable("MacroRollback", false);
         try {
-            flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
-        } catch (NullPointerException ex) {
-            workflowAction.buildAndThrowException(execution, "Error in FlowManipulator Modify Flows", ex);
-        }
-        int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
+            List<ExecuteBuildingBlock> flowsToExecute =
+                    (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
+            execution.setVariable("MacroRollback", false);
+            try {
+                flowManipulatorListenerRunner.modifyFlows(flowsToExecute, new DelegateExecutionImpl(execution));
+            } catch (NullPointerException ex) {
+                workflowAction.buildAndThrowException(execution, "Error in FlowManipulator Modify Flows", ex);
+            }
+            int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
 
-        ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
+            ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence);
 
-        execution.setVariable("buildingBlock", ebb);
-        currentSequence++;
-        execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
-        execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
+            execution.setVariable("buildingBlock", ebb);
+            currentSequence++;
+            execution.setVariable(COMPLETED, currentSequence >= flowsToExecute.size());
+            execution.setVariable(G_CURRENT_SEQUENCE, currentSequence);
+        } catch (Exception e) {
+            workflowAction.buildAndThrowException(execution, "Internal Error occured during selectBB", e);
+        }
     }
 
     public void updateFlowStatistics(DelegateExecution execution) {
@@ -417,12 +422,9 @@ public class WorkflowActionBBTasks {
         String handlingCode = (String) execution.getVariable(HANDLINGCODE);
         final boolean aLaCarte = (boolean) execution.getVariable(G_ALACARTE);
         int currentSequence = (int) execution.getVariable(G_CURRENT_SEQUENCE);
-        String requestAction = (String) execution.getVariable(G_ACTION);
         ExecuteBuildingBlock ebb = flowsToExecute.get(currentSequence - 1);
         String bbFlowName = ebb.getBuildingBlock().getBpmnFlowName();
-        if ("ActivateVfModuleBB".equalsIgnoreCase(bbFlowName) && aLaCarte && "Success".equalsIgnoreCase(handlingCode)
-                && !(requestAction.equalsIgnoreCase("replaceInstance")
-                        || requestAction.equalsIgnoreCase("replaceInstanceRetainAssignments"))) {
+        if ("ActivateVfModuleBB".equalsIgnoreCase(bbFlowName) && aLaCarte && "Success".equalsIgnoreCase(handlingCode)) {
             postProcessingExecuteBBActivateVfModule(execution, ebb, flowsToExecute);
         }
     }
@@ -430,6 +432,7 @@ public class WorkflowActionBBTasks {
     protected void postProcessingExecuteBBActivateVfModule(DelegateExecution execution, ExecuteBuildingBlock ebb,
             List<ExecuteBuildingBlock> flowsToExecute) {
         try {
+            String requestAction = (String) execution.getVariable(G_ACTION);
             String serviceInstanceId = ebb.getWorkflowResourceIds().getServiceInstanceId();
             String vnfId = ebb.getWorkflowResourceIds().getVnfId();
             String vfModuleId = ebb.getResourceId();
@@ -444,26 +447,44 @@ public class WorkflowActionBBTasks {
             for (Vnfc vnfc : vnfcs) {
                 String modelCustomizationId = vnfc.getModelCustomizationId();
                 logger.debug("Processing Vnfc: {}", modelCustomizationId);
-                CvnfcConfigurationCustomization fabricConfig = catalogDbClient.getCvnfcCustomization(serviceModelUUID,
-                        vnfCustomizationUUID, vfModuleCustomizationUUID, modelCustomizationId);
-                if (fabricConfig != null && fabricConfig.getConfigurationResource() != null
-                        && fabricConfig.getConfigurationResource().getToscaNodeType() != null
-                        && fabricConfig.getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
-                    String configurationId = getConfigurationId(vnfc);
-                    ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
-                    configurationResourceKeys.setCvnfcCustomizationUUID(modelCustomizationId);
-                    configurationResourceKeys.setVfModuleCustomizationUUID(vfModuleCustomizationUUID);
-                    configurationResourceKeys.setVnfResourceCustomizationUUID(vnfCustomizationUUID);
-                    configurationResourceKeys.setVnfcName(vnfc.getVnfcName());
-                    ExecuteBuildingBlock addConfigBB = getExecuteBBForConfig(ADD_FABRIC_CONFIGURATION_BB, ebb,
-                            configurationId, configurationResourceKeys);
-                    flowsToExecute.add(addConfigBB);
-                    flowsToExecute.forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
-                            executeBB.getBuildingBlock().getBpmnFlowName()));
-                    execution.setVariable("flowsToExecute", flowsToExecute);
-                    execution.setVariable(COMPLETED, false);
+                if (requestAction.equalsIgnoreCase("replaceInstance")
+                        || requestAction.equalsIgnoreCase("replaceInstanceRetainAssignments")) {
+                    List<ExecuteBuildingBlock> configBBs = flowsToExecute.stream()
+                            .filter(item -> item.getBuildingBlock().getBpmnFlowName().matches(CONFIGURATION_PATTERN))
+                            .collect(Collectors.toList());
+                    if (configBBs != null && configBBs.size() > 0) {
+                        for (ExecuteBuildingBlock bb : configBBs) {
+                            if (bb.getConfigurationResourceKeys() != null) {
+                                bb.getConfigurationResourceKeys().setCvnfcCustomizationUUID(modelCustomizationId);
+                                bb.getConfigurationResourceKeys().setVnfcName(vnfc.getVnfcName());
+                            }
+                        }
+                        execution.setVariable("flowsToExecute", flowsToExecute);
+                        execution.setVariable(COMPLETED, false);
+                    }
                 } else {
-                    logger.debug("No cvnfcCustomization found for customizationId: {}", modelCustomizationId);
+                    CvnfcConfigurationCustomization fabricConfig = catalogDbClient.getCvnfcCustomization(
+                            serviceModelUUID, vnfCustomizationUUID, vfModuleCustomizationUUID, modelCustomizationId);
+                    if (fabricConfig != null && fabricConfig.getConfigurationResource() != null
+                            && fabricConfig.getConfigurationResource().getToscaNodeType() != null && fabricConfig
+                                    .getConfigurationResource().getToscaNodeType().contains(FABRIC_CONFIGURATION)) {
+                        String configurationId = getConfigurationId(vnfc);
+                        ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+                        configurationResourceKeys.setCvnfcCustomizationUUID(modelCustomizationId);
+                        configurationResourceKeys.setVfModuleCustomizationUUID(vfModuleCustomizationUUID);
+                        configurationResourceKeys.setVnfResourceCustomizationUUID(vnfCustomizationUUID);
+                        configurationResourceKeys.setVnfcName(vnfc.getVnfcName());
+                        ExecuteBuildingBlock addConfigBB = getExecuteBBForConfig(ADD_FABRIC_CONFIGURATION_BB, ebb,
+                                configurationId, configurationResourceKeys);
+                        flowsToExecute.add(addConfigBB);
+                        flowsToExecute.stream()
+                                .forEach(executeBB -> logger.info("Flows to Execute After Post Processing: {}",
+                                        executeBB.getBuildingBlock().getBpmnFlowName()));
+                        execution.setVariable("flowsToExecute", flowsToExecute);
+                        execution.setVariable(COMPLETED, false);
+                    } else {
+                        logger.debug("No cvnfcCustomization found for customizationId: {}", modelCustomizationId);
+                    }
                 }
             }
         } catch (EntityNotFoundException e) {
index b74aa90..65f8a08 100644 (file)
@@ -54,14 +54,14 @@ public class CnfAdapterClient {
     @Autowired
     private Environment env;
 
-    private static final String INSTANCE_CREATE_PATH = "/api/multicloud-k8s/v1/v1/instance";
+    private static final String INSTANCE_CREATE_PATH = "/api/cnf-adapter/v1/instance";
 
     @Retryable(value = {HttpServerErrorException.class}, maxAttempts = 3, backoff = @Backoff(delay = 3000))
     public InstanceResponse createVfModule(InstanceRequest request) throws CnfAdapterClientException {
         try {
             // String uri = env.getRequiredProperty("mso.cnf.adapter.endpoint"); //TODO: This needs to be added as well
             // for configuration
-            String uri = "https://localhost:32780"; // TODO: What is the correct uri?
+            String uri = "http://so-cnf-adapter:8090";
             String endpoint = UriBuilder.fromUri(uri).path(INSTANCE_CREATE_PATH).build().toString();
             HttpEntity<?> entity = getHttpEntity(request);
             ResponseEntity<InstanceResponse> result =
@@ -81,7 +81,7 @@ public class CnfAdapterClient {
         try {
             // String uri = env.getRequiredProperty("mso.cnf.adapter.endpoint"); //TODO: This needs to be added as well
             // for configuration
-            String uri = "https://localhost:32780"; // TODO: What is the correct uri?
+            String uri = "http://so-cnf-adapter:8090";
             String endpoint = UriBuilder.fromUri(uri).path("/api/cnf-adapter/v1/healthcheck").build().toString();
             HttpEntity<?> entity = new HttpEntity<>(getHttpHeaders());
             ResponseEntity<InstanceResponse> result =
index e38bcc2..13ccb4e 100644 (file)
@@ -7,15 +7,21 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonPropertyOrder;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-@JsonPropertyOrder({"id", "request", "namespace", "resources"})
+@JsonPropertyOrder({"id", "request", "namespace", "release-name", "resources"})
 public class InstanceResponse {
 
     @JsonProperty("id")
     private String id;
+
     @JsonProperty("request")
     private InstanceRequest request;
+
     @JsonProperty("namespace")
     private String namespace;
+
+    @JsonProperty("release-name")
+    private String releaseName;
+
     @JsonProperty("resources")
     private List<Resource> resources = null;
 
@@ -59,4 +65,14 @@ public class InstanceResponse {
         this.resources = resources;
     }
 
+    @JsonProperty("release-name")
+    public String getReleaseName() {
+        return releaseName;
+    }
+
+    @JsonProperty("release-name")
+    public void setReleaseName(String releaseName) {
+        this.releaseName = releaseName;
+    }
+
 }
index 6278d48..7291b71 100644 (file)
 package org.onap.so.client.adapter.vnf.mapper;
 
 import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class AttributeNameValue implements Serializable {
     private static final long serialVersionUID = -5215028275587848311L;
 
+    @JsonProperty("attribute_name")
     private String attributeName;
+    @JsonProperty("attribute_value")
     private transient Object attributeValue;
 
-    public AttributeNameValue(String attributeName, Object attributeValue) {
-        this.attributeName = attributeName;
-        this.attributeValue = attributeValue;
-    }
-
     public String getAttributeName() {
         return attributeName;
     }
index 59da22f..7c686bd 100644 (file)
@@ -235,7 +235,10 @@ public class VnfAdapterVfModuleObjectMapper {
                         logger.error("No value tag found for attribute: {}", attributeName);
                         throw new MissingValueTagException("No value tag found for " + attributeName);
                     }
-                    directives.append(new AttributeNameValue(attributeName, attributeValue.toString()));
+                    String nameValue = new StringBuilder().append("{\"attribute_name\": \"").append(attributeName)
+                            .append("\", \"attribute_value\": \"").append(attributeValue.toString()).append("\"}")
+                            .toString();
+                    directives.append(nameValue);
                     if (i < (srcMap.size() - 1 + noOfDirectivesSize))
                         directives.append(", ");
                     i++;
index 3290bb3..b7529bd 100644 (file)
@@ -29,6 +29,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.mockito.ArgumentCaptor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -47,23 +48,30 @@ import org.onap.so.bpmn.servicedecomposition.entities.BuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ConfigurationResourceKeys;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
+import org.onap.so.client.namingservice.NamingRequestObject;
+import org.onap.so.db.catalog.beans.ConfigurationResource;
+import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.serviceinstancebeans.ModelInfo;
 import org.onap.so.serviceinstancebeans.RequestDetails;
 import org.springframework.core.env.Environment;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyObject;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.isA;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 public class WorkflowActionBBTasksTest extends BaseTaskTest {
@@ -96,6 +104,9 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
+    @Mock
+    private DelegateExecution mockExecution;
+
     @Before
     public void before() throws Exception {
         execution = new DelegateExecutionFake();
@@ -602,7 +613,207 @@ public class WorkflowActionBBTasksTest extends BaseTaskTest {
     }
 
     @Test
-    public void postProcessingExecuteBBActivateVfModuleTest() throws CloneNotSupportedException {
+    public void postProcessingExecuteBBActivateVfModuleNotReplaceInstanceTest() throws CloneNotSupportedException {
+        WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+        workflowResourceIds.setServiceInstanceId("1");
+        workflowResourceIds.setVnfId("1");
+
+        BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+        ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+        ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+        ebbActivateVfModule.setResourceId("1");
+
+        ServiceInstance service = new ServiceInstance();
+        service.setServiceInstanceName("name");
+        service.setModelVersionId("1");
+        doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+        GenericVnf vnf = new GenericVnf();
+        vnf.setVnfName("name");
+        vnf.setModelCustomizationId("1");
+        doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleName("name");
+        vfModule.setModelCustomizationId("1");
+        doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+        List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+        org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+        vnfc.setModelInvariantId("1");
+        vnfc.setVnfcName("name");
+        vnfc.setModelCustomizationId("2");
+        vnfcs.add(vnfc);
+        doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+        CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+        ConfigurationResource configuration = new ConfigurationResource();
+        configuration.setToscaNodeType("FabricConfiguration");
+        configuration.setModelUUID("1");
+        vfModuleCustomization.setConfigurationResource(configuration);
+
+        doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+        prepareDelegateExecution();
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(ebbActivateVfModule);
+
+        execution.setVariable("requestAction", "createInstance");
+        execution.setVariable("completed", true);
+
+        ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+        ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+        ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+        workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+        verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+                bbCaptor.capture(), listCaptor.capture());
+        assertEquals(false, executionCaptor.getAllValues().get(0).getVariable("completed"));
+        assertEquals(2, ((ArrayList) executionCaptor.getAllValues().get(0).getVariable("flowsToExecute")).size());
+        assertEquals("2",
+                ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues().get(0)
+                        .getVariable("flowsToExecute")).get(1)).getConfigurationResourceKeys()
+                                .getCvnfcCustomizationUUID());
+        assertEquals("AddFabricConfigurationBB", ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues()
+                .get(0).getVariable("flowsToExecute")).get(1)).getBuildingBlock().getBpmnFlowName());
+    }
+
+    @Test
+    public void postProcessingExecuteBBActivateVfModuleReplaceInstanceHasConfigurationTest()
+            throws CloneNotSupportedException {
+
+        BuildingBlock bbAddFabric = new BuildingBlock().setBpmnFlowName("AddFabricConfigurationBB");
+        ExecuteBuildingBlock ebbAddFabric = new ExecuteBuildingBlock().setBuildingBlock(bbAddFabric);
+        WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+        workflowResourceIds.setServiceInstanceId("1");
+        workflowResourceIds.setVnfId("1");
+        ebbAddFabric.setWorkflowResourceIds(workflowResourceIds);
+        ebbAddFabric.setResourceId("1");
+
+        BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+        ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+        ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+        ebbActivateVfModule.setResourceId("1");
+        ConfigurationResourceKeys configurationResourceKeys = new ConfigurationResourceKeys();
+        ebbAddFabric.setConfigurationResourceKeys(configurationResourceKeys);
+
+        ServiceInstance service = new ServiceInstance();
+        service.setServiceInstanceName("name");
+        service.setModelVersionId("1");
+        doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+        GenericVnf vnf = new GenericVnf();
+        vnf.setVnfName("name");
+        vnf.setModelCustomizationId("1");
+        doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleName("name");
+        vfModule.setModelCustomizationId("1");
+        doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+        List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+        org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+        vnfc.setModelInvariantId("1");
+        vnfc.setVnfcName("name");
+        vnfc.setModelCustomizationId("2");
+        vnfcs.add(vnfc);
+        doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+        CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+        ConfigurationResource configuration = new ConfigurationResource();
+        configuration.setToscaNodeType("FabricConfiguration");
+        configuration.setModelUUID("1");
+        vfModuleCustomization.setConfigurationResource(configuration);
+
+        doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+        prepareDelegateExecution();
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(ebbActivateVfModule);
+        flowsToExecute.add(ebbAddFabric);
+
+        ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+        ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+        ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+
+        execution.setVariable("requestAction", "replaceInstance");
+        execution.setVariable("completed", true);
+        workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+        verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+                bbCaptor.capture(), listCaptor.capture());
+        assertEquals(false, executionCaptor.getAllValues().get(0).getVariable("completed"));
+        assertEquals(2, ((ArrayList) executionCaptor.getAllValues().get(0).getVariable("flowsToExecute")).size());
+        assertEquals("2",
+                ((ExecuteBuildingBlock) ((ArrayList) executionCaptor.getAllValues().get(0)
+                        .getVariable("flowsToExecute")).get(1)).getConfigurationResourceKeys()
+                                .getCvnfcCustomizationUUID());
+    }
+
+    @Test
+    public void postProcessingExecuteBBActivateVfModuleReplaceInstanceHasNoConfigurationTest()
+            throws CloneNotSupportedException {
+
+        WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
+        workflowResourceIds.setServiceInstanceId("1");
+        workflowResourceIds.setVnfId("1");
+
+        BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
+        ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
+        ebbActivateVfModule.setWorkflowResourceIds(workflowResourceIds);
+        ebbActivateVfModule.setResourceId("1");
+
+        ServiceInstance service = new ServiceInstance();
+        service.setServiceInstanceName("name");
+        service.setModelVersionId("1");
+        doReturn(service).when(bbSetupUtils).getAAIServiceInstanceById("1");
+
+        GenericVnf vnf = new GenericVnf();
+        vnf.setVnfName("name");
+        vnf.setModelCustomizationId("1");
+        doReturn(vnf).when(bbSetupUtils).getAAIGenericVnf("1");
+
+        VfModule vfModule = new VfModule();
+        vfModule.setVfModuleName("name");
+        vfModule.setModelCustomizationId("1");
+        doReturn(vfModule).when(bbSetupUtils).getAAIVfModule("1", "1");
+
+        List<org.onap.aai.domain.yang.Vnfc> vnfcs = new ArrayList<org.onap.aai.domain.yang.Vnfc>();
+        org.onap.aai.domain.yang.Vnfc vnfc = new org.onap.aai.domain.yang.Vnfc();
+        vnfc.setModelInvariantId("1");
+        vnfc.setVnfcName("name");
+        vnfc.setModelCustomizationId("2");
+        vnfcs.add(vnfc);
+        doReturn(vnfcs).when(workflowAction).getRelatedResourcesInVfModule(any(), any(), any(), any());
+
+        CvnfcConfigurationCustomization vfModuleCustomization = new CvnfcConfigurationCustomization();
+        ConfigurationResource configuration = new ConfigurationResource();
+        configuration.setToscaNodeType("FabricConfiguration");
+        configuration.setModelUUID("1");
+        vfModuleCustomization.setConfigurationResource(configuration);
+
+        doReturn(vfModuleCustomization).when(catalogDbClient).getCvnfcCustomization("1", "1", "1", "2");
+
+        prepareDelegateExecution();
+        List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
+        flowsToExecute.add(ebbActivateVfModule);
+
+        ArgumentCaptor<DelegateExecution> executionCaptor = ArgumentCaptor.forClass(DelegateExecution.class);
+        ArgumentCaptor<ExecuteBuildingBlock> bbCaptor = ArgumentCaptor.forClass(ExecuteBuildingBlock.class);
+        ArgumentCaptor<List> listCaptor = ArgumentCaptor.forClass(List.class);
+
+        execution.setVariable("requestAction", "replaceInstance");
+        execution.setVariable("completed", true);
+
+        workflowActionBBTasks.postProcessingExecuteBBActivateVfModule(execution, ebbActivateVfModule, flowsToExecute);
+        verify(workflowActionBBTasks, times(1)).postProcessingExecuteBBActivateVfModule(executionCaptor.capture(),
+                bbCaptor.capture(), listCaptor.capture());
+        assertEquals(true, executionCaptor.getAllValues().get(0).getVariable("completed"));
+    }
+
+
+
+    @Test
+    public void getExecuteBBForConfigTest() throws CloneNotSupportedException {
         BuildingBlock bbActivateVfModule = new BuildingBlock().setBpmnFlowName("ActivateVfModuleBB");
         ExecuteBuildingBlock ebbActivateVfModule = new ExecuteBuildingBlock().setBuildingBlock(bbActivateVfModule);
 
index 74e5180..6e26592 100644 (file)
       <artifactId>jaxb-impl</artifactId>
       <version>2.3.0</version>
     </dependency>
+    <dependency>
+      <groupId>javax.cache</groupId>
+      <artifactId>cache-api</artifactId>
+      <version>1.0.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.ehcache</groupId>
+      <artifactId>ehcache</artifactId>
+      <version>3.8.1</version>
+    </dependency>
   </dependencies>
   <dependencyManagement>
     <dependencies>
       </plugin>
     </plugins>
   </build>
-</project>
\ No newline at end of file
+</project>
index 5b070bb..3b542fa 100644 (file)
@@ -26,11 +26,12 @@ import java.util.List;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Data
+@Deprecated
 public class AdditionalProperties implements Serializable {
 
     private static final long serialVersionUID = -4020397418955518175L;
 
-    private SliceProfile sliceProfile;
+    private TnSliceProfile sliceProfile;
 
     private List<EndPoint> endPoints;
 
index dc8e691..f966098 100644 (file)
@@ -47,5 +47,5 @@ public class AllocateAnNssi implements Serializable {
 
     private NsiInfo nsiInfo;
 
-    private Map<String, Object> endPoint;
+    private EndPoint endPoint;
 }
index f5b926f..fdbff2f 100644 (file)
@@ -49,5 +49,5 @@ public class AllocateCnNssi implements Serializable {
 
     private NsiInfo nsiInfo;
 
-    private Map<String, Object> endPoint;
+    private EndPoint endPoint;
 }
index f85cb0c..1b0986c 100644 (file)
@@ -30,7 +30,13 @@ public class AllocateTnNssi implements Serializable {
 
     private static final long serialVersionUID = -7069801712339914746L;
 
+    private TnSliceProfile sliceProfile;
+
     private List<NetworkSliceInfo> networkSliceInfos;
 
     private List<TransportSliceNetwork> transportSliceNetworks;
+
+    private NsiInfo nsiInfo;
+
+    private String scriptName;
 }
index 14918c7..3d0f708 100644 (file)
@@ -32,7 +32,7 @@ import java.util.List;
 @ToString
 public class AnSliceProfile implements Serializable {
     /*
-     * Reference 3GPP TS 28.541 V16.5.0, Section 6.3.4.
+     * Reference 3GPP TS 28.541 V16.5.0.
      */
 
     private static final long serialVersionUID = -3057342171549542794L;
@@ -40,10 +40,10 @@ public class AnSliceProfile implements Serializable {
     @JsonProperty(value = "sliceProfileId", required = true)
     private String sliceProfileId;
 
-    @JsonProperty(value = "sNSSAIList", required = true)
+    @JsonProperty(value = "snssaiList", required = true)
     private List<String> sNSSAIList;
 
-    @JsonProperty(value = "pLMNIdList", required = true)
+    @JsonProperty(value = "plmnIdList", required = true)
     private List<String> pLMNIdList;
 
     @JsonProperty(value = "perfReq", required = true)
@@ -51,7 +51,7 @@ public class AnSliceProfile implements Serializable {
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
     @JsonProperty(value = "maxNumberofUEs")
-    private long maxNumberofUEs;
+    private int maxNumberOfUEs;
 
     @JsonProperty(value = "coverageAreaTAList")
     private List<Integer> coverageAreaTAList;
@@ -61,7 +61,7 @@ public class AnSliceProfile implements Serializable {
     private int latency;
 
     @JsonProperty(value = "uEMobilityLevel")
-    private UeMobilityLevel uEMobilityLevel;
+    private UeMobilityLevel ueMobilityLevel;
 
     @JsonProperty(value = "resourceSharingLevel")
     private ResourceSharingLevel resourceSharingLevel;
index 1fa84ee..efb447b 100644 (file)
@@ -32,19 +32,19 @@ public class CnSliceProfile implements Serializable {
 
     private static final long serialVersionUID = 6627071735572539536L;
 
-    @JsonProperty(value = "sNSSAIList", required = true)
+    @JsonProperty(value = "snssaiList", required = true)
     private List<String> snssaiList;
 
     private String sliceProfileId;
 
-    @JsonProperty(value = "pLMNIdList", required = true)
-    private List<String> plmnIdList;
+    @JsonProperty(value = "plmnIdList", required = true)
+    private List<String> pLMNIdList;
 
     @JsonProperty(value = "perfReq", required = true)
     private PerfReq perfReq;
 
     @JsonProperty(value = "maxNumberofUEs")
-    private int maxNumberofUEs;
+    private int maxNumberOfUEs;
 
     @JsonProperty(value = "coverageAreaTAList")
     private List<String> coverageAreaTAList;
@@ -57,4 +57,8 @@ public class CnSliceProfile implements Serializable {
 
     @JsonProperty(value = "resourceSharingLevel")
     private ResourceSharingLevel resourceSharingLevel;
+
+    @JsonProperty(value = "maxNumberofPDUSession")
+    private int maxNumberOfPDUSession;
+
 }
index 99a8525..3bf2ffb 100644 (file)
 package org.onap.so.beans.nsmf;
 
 
+import lombok.Data;
 import java.io.Serializable;
 
-
+@Data
 public class ConnectionLink implements Serializable {
+
     private static final long serialVersionUID = -1834584960407180427L;
 
     private String transportEndpointA;
 
     private String transportEndpointB;
-
-    public static long getSerialVersionUID() {
-        return serialVersionUID;
-    }
-
-    public String getTransportEndpointA() {
-        return transportEndpointA;
-    }
-
-    public void setTransportEndpointA(String transportEndpointA) {
-        this.transportEndpointA = transportEndpointA;
-    }
-
-    public String getTransportEndpointB() {
-        return transportEndpointB;
-    }
-
-    public void setTransportEndpointB(String transportEndpointB) {
-        this.transportEndpointB = transportEndpointB;
-    }
 }
index dab9b3a..90bfc0e 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
 import java.io.Serializable;
-import java.util.Map;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @Data
+@ToString
+@NoArgsConstructor
+@AllArgsConstructor
 public class EndPoint implements Serializable {
 
     private static final long serialVersionUID = 2479795890807020491L;
 
-    private String nodeId;
+    @JsonProperty(value = "ipAddress")
+    private String ipAddress;
 
-    private Map<String, Object> additionalInfo;
+    @JsonProperty(value = "logicInterfaceId")
+    private String logicInterfaceId;
+
+    @JsonProperty(value = "nextHopInfo")
+    private String nextHopInfo;
 }
index 92acdaa..270a55e 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
 import java.io.Serializable;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
 public class NssiResponse implements Serializable {
 
     private static final long serialVersionUID = 2723440188640857903L;
@@ -32,19 +34,5 @@ public class NssiResponse implements Serializable {
 
     private String jobId;
 
-    public String getNssiId() {
-        return nssiId;
-    }
-
-    public void setNssiId(String nssiId) {
-        this.nssiId = nssiId;
-    }
-
-    public String getJobId() {
-        return jobId;
-    }
-
-    public void setJobId(String jobId) {
-        this.jobId = jobId;
-    }
+    private String status;
 }
index 9e4b4ed..06f97a8 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import lombok.Data;
 import java.io.Serializable;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
 public class PerfReqUrllc implements Serializable {
 
     private static final long serialVersionUID = 3133479142915485943L;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int e2eLatency;
+    private String survivalTime;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int jitter;
-
-    @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int survivalTime;
-
-    @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private float csAvailability;
+    private int expDataRate;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private float reliability;
+    private String transferIntervalTarget;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int expDataRate;
-
-    private String payloadSize;
+    private String msgSizeByte;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int trafficDensity;
+    private String csReliabilityMeanTime;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
-    private int connDensity;
-
-    private String serviceAreaDimension;
-
-    public int getE2eLatency() {
-        return e2eLatency;
-    }
-
-    public void setE2eLatency(int e2eLatency) {
-        this.e2eLatency = e2eLatency;
-    }
-
-    public int getJitter() {
-        return jitter;
-    }
-
-    public void setJitter(int jitter) {
-        this.jitter = jitter;
-    }
-
-    public int getSurvivalTime() {
-        return survivalTime;
-    }
-
-    public void setSurvivalTime(int survivalTime) {
-        this.survivalTime = survivalTime;
-    }
-
-    public float getReliability() {
-        return reliability;
-    }
-
-    public void setReliability(float reliability) {
-        this.reliability = reliability;
-    }
-
-    public int getExpDataRate() {
-        return expDataRate;
-    }
-
-    public void setExpDataRate(int expDataRate) {
-        this.expDataRate = expDataRate;
-    }
-
-    public String getPayloadSize() {
-        return payloadSize;
-    }
-
-    public void setPayloadSize(String payloadSize) {
-        this.payloadSize = payloadSize;
-    }
-
-    public int getTrafficDensity() {
-        return trafficDensity;
-    }
-
-    public void setTrafficDensity(int trafficDensity) {
-        this.trafficDensity = trafficDensity;
-    }
-
-    public int getConnDensity() {
-        return connDensity;
-    }
-
-    public void setConnDensity(int connDensity) {
-        this.connDensity = connDensity;
-    }
-
-    public String getServiceAreaDimension() {
-        return serviceAreaDimension;
-    }
-
-    public void setServiceAreaDimension(String serviceAreaDimension) {
-        this.serviceAreaDimension = serviceAreaDimension;
-    }
-
-    public float getCsAvailability() {
-        return csAvailability;
-    }
+    private float csAvailabilityTarget;
 
-    public void setCsAvailability(float csAvailability) {
-        this.csAvailability = csAvailability;
-    }
 }
index 66bfbdc..4fc5932 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class PnfErrorList {
+public class PnfErrorList implements Serializable {
+
+    private static final long serialVersionUID = 1506455363755909867L;
 
     private String pnfId;
 
index 2456d54..ab9399e 100644 (file)
@@ -31,7 +31,6 @@ public class ResponseDescriptor implements Serializable {
 
     private static final long serialVersionUID = 6330527958947215910L;
 
-    @JsonInclude(JsonInclude.Include.NON_DEFAULT)
     private int progress;
 
     private String status;
@@ -50,5 +49,4 @@ public class ResponseDescriptor implements Serializable {
 
     private String nssiId;
 
-    private String endPointId;
 }
index c71441a..ee027bc 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
 import java.util.List;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class ResponseHistory {
+public class ResponseHistory implements Serializable {
+
+    private static final long serialVersionUID = -1005342539496792450L;
 
     private int progress;
 
index 9b6df0f..90cee27 100644 (file)
@@ -25,7 +25,9 @@ import lombok.Data;
 import lombok.ToString;
 import org.springframework.beans.BeanUtils;
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.List;
 
 @Data
 @ToString
@@ -43,7 +45,7 @@ public class SliceProfileAdapter implements Serializable {
     private String pLMNIdList = "";
 
     @JsonProperty(value = "maxNumberofUEs")
-    private long maxNumberofUEs;
+    private int maxNumberOfUEs;
 
     @JsonProperty(value = "coverageAreaTAList")
     private String coverageAreaTAList = "";
@@ -52,23 +54,68 @@ public class SliceProfileAdapter implements Serializable {
     private int latency;
 
     @JsonProperty(value = "uEMobilityLevel")
-    private String uEMobilityLevel;
+    private String ueMobilityLevel;
 
     @JsonProperty(value = "resourceSharingLevel")
     private String resourceSharingLevel;
 
     @JsonProperty(value = "maxBandwidth")
-    private String bandwidth;
+    private int maxBandwidth;
 
     @JsonProperty(value = "sST")
     private String sST;
 
     @JsonProperty(value = "activityFactor")
-    private String activityFactor;
+    private int activityFactor;
 
     @JsonProperty(value = "survivalTime")
     private String survivalTime;
 
+    @JsonProperty(value = "expDataRateUL")
+    private int expDataRateUL;
+
+    @JsonProperty(value = "expDataRateDL")
+    private int expDataRateDL;
+
+    @JsonProperty(value = "areaTrafficCapUL")
+    private int areaTrafficCapUL;
+
+    @JsonProperty(value = "areaTrafficCapDL")
+    private int areaTrafficCapDL;
+
+    @JsonProperty(value = "jitter")
+    private int jitter;
+
+    @JsonProperty(value = "csAvailabilityTarget")
+    private float csAvailabilityTarget;
+
+    @JsonProperty(value = "expDataRate")
+    private int expDataRate;
+
+    @JsonProperty(value = "maxNumberofPDUSession")
+    private int maxNumberOfPDUSession;
+
+    @JsonProperty(value = "overallUserDensity")
+    private int overallUserDensity;
+
+    @JsonProperty(value = "cSReliabilityMeanTime")
+    private String csReliabilityMeanTime;
+
+    @JsonProperty(value = "msgSizeByte")
+    private String msgSizeByte;
+
+    @JsonProperty(value = "transferIntervalTarget")
+    private String transferIntervalTarget;
+
+    @JsonProperty(value = "ipAddress")
+    private String ipAddress;
+
+    @JsonProperty(value = "logicInterfaceId")
+    private String logicInterfaceId;
+
+    @JsonProperty(value = "nextHopInfo")
+    private String nextHopInfo;
+
     public AnSliceProfile trans2AnProfile() {
         AnSliceProfile anSliceProfile = new AnSliceProfile();
         BeanUtils.copyProperties(this, anSliceProfile);
@@ -81,11 +128,11 @@ public class SliceProfileAdapter implements Serializable {
             areasRes[i] = str2Code(areas[i]);
         }
         anSliceProfile.setCoverageAreaTAList(Arrays.asList(areasRes));
-        anSliceProfile.setUEMobilityLevel(UeMobilityLevel.fromString(this.uEMobilityLevel));
+
+        anSliceProfile.setUeMobilityLevel(UeMobilityLevel.fromString(this.ueMobilityLevel));
         anSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel));
-        PerfReq perfReq = new PerfReq();
-        // todo
-        anSliceProfile.setPerfReq(perfReq);
+        anSliceProfile.setPerfReq(generatePerfReq());
+
         return anSliceProfile;
     }
 
@@ -98,14 +145,31 @@ public class SliceProfileAdapter implements Serializable {
         BeanUtils.copyProperties(this, cnSliceProfile);
         cnSliceProfile.setSnssaiList(Arrays.asList(this.sNSSAIList.split("\\|")));
         cnSliceProfile.setCoverageAreaTAList(Arrays.asList(this.coverageAreaTAList.split("\\|")));
-        cnSliceProfile.setPlmnIdList(Arrays.asList(this.pLMNIdList.split("\\|")));
+        cnSliceProfile.setPLMNIdList(Arrays.asList(this.pLMNIdList.split("\\|")));
         cnSliceProfile.setResourceSharingLevel(ResourceSharingLevel.fromString(this.resourceSharingLevel));
-        PerfReq perfReq = new PerfReq();
-        // todo
-        cnSliceProfile.setPerfReq(perfReq);
+
+        cnSliceProfile.setPerfReq(generatePerfReq());
         return cnSliceProfile;
     }
 
+    private PerfReq generatePerfReq() {
+        PerfReq perfReq = new PerfReq();
+        if ("embb".equalsIgnoreCase(sST)) {
+            List<PerfReqEmbb> perfReqEmbbs = new ArrayList<>();
+            PerfReqEmbb perfReqEmbb = new PerfReqEmbb();
+            BeanUtils.copyProperties(this, perfReqEmbb);
+            perfReqEmbbs.add(perfReqEmbb);
+            perfReq.setPerfReqEmbbList(perfReqEmbbs);
+        } else if ("ullc".equalsIgnoreCase(sST)) {
+            List<PerfReqUrllc> perfReqUrllcs = new ArrayList<>();
+            PerfReqUrllc perfReqUrllc = new PerfReqUrllc();
+            BeanUtils.copyProperties(this, perfReqUrllc);
+            perfReqUrllcs.add(perfReqUrllc);
+            perfReq.setPerfReqUrllcList(perfReqUrllcs);
+        }
+        return perfReq;
+    }
+
     public TnSliceProfile trans2TnProfile() {
         TnSliceProfile tnSliceProfile = new TnSliceProfile();
         BeanUtils.copyProperties(this, tnSliceProfile);
index 9b6406d..18d6007 100644 (file)
@@ -52,4 +52,6 @@ public class SliceTaskInfo<T> implements Serializable {
 
     private SubnetType subnetType;
 
+    private String endPointId;
+
 }
index 3f0da1b..f904e1c 100644 (file)
@@ -35,14 +35,17 @@ public class TnSliceProfile implements Serializable {
     private String sliceProfileId;
 
     @JsonProperty(value = "maxBandwidth")
-    private String bandwidth;
+    private int maxBandwidth;
 
     @JsonInclude(JsonInclude.Include.NON_DEFAULT)
     private int latency;
 
-    @JsonProperty(value = "sNSSAIList", required = true)
+    @JsonProperty(value = "snssaiList", required = true)
     private List<String> sNSSAIList;
 
-    @JsonProperty(value = "pLMNIdList", required = true)
+    @JsonProperty(value = "plmnIdList", required = true)
     private List<String> pLMNIdList;
+
+    @JsonProperty(value = "jitter")
+    private int jitter;
 }
index aa2579e..c0dd425 100644 (file)
@@ -25,6 +25,7 @@ import java.util.List;
 
 @Data
 public class TransportSliceNetwork implements Serializable {
+
     private static final long serialVersionUID = 809947462399806990L;
 
     private List<ConnectionLink> connectionLinks;
index 6388ca6..a3330e6 100644 (file)
 package org.onap.so.beans.nsmf;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
+import java.io.Serializable;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
-public class VnfErrorList {
+public class VnfErrorList implements Serializable {
+
+    private static final long serialVersionUID = -2907819676875489281L;
 
     private String vnfInstanceId;
 
diff --git a/common/src/main/java/org/onap/so/client/AddCacheHeaders.java b/common/src/main/java/org/onap/so/client/AddCacheHeaders.java
new file mode 100644 (file)
index 0000000..1a41be1
--- /dev/null
@@ -0,0 +1,28 @@
+package org.onap.so.client;
+
+import java.io.IOException;
+import java.util.Collections;
+import javax.annotation.Priority;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.client.ClientResponseFilter;
+import javax.ws.rs.ext.Provider;
+
+@Provider
+@Priority(1)
+public class AddCacheHeaders implements ClientResponseFilter {
+
+    private final CacheProperties props;
+
+    public AddCacheHeaders(CacheProperties props) {
+        this.props = props;
+    }
+
+    public void filter(ClientRequestContext request, ClientResponseContext response) throws IOException {
+        if (request.getMethod().equalsIgnoreCase("GET")) {
+            response.getHeaders().putIfAbsent("Cache-Control",
+                    Collections.singletonList("public, max-age=" + (props.getMaxAge() / 1000)));
+        }
+
+    }
+}
diff --git a/common/src/main/java/org/onap/so/client/CacheFactory.java b/common/src/main/java/org/onap/so/client/CacheFactory.java
new file mode 100644 (file)
index 0000000..6bc4858
--- /dev/null
@@ -0,0 +1,25 @@
+package org.onap.so.client;
+
+
+import java.util.concurrent.TimeUnit;
+import javax.cache.configuration.Factory;
+import javax.cache.expiry.Duration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.expiry.TouchedExpiryPolicy;
+
+public class CacheFactory implements Factory<ExpiryPolicy> {
+
+    private static final long serialVersionUID = 8948728679233836929L;
+
+    private final CacheProperties props;
+
+    public CacheFactory(CacheProperties props) {
+        this.props = props;
+    }
+
+    @Override
+    public ExpiryPolicy create() {
+        return TouchedExpiryPolicy.factoryOf(new Duration(TimeUnit.MILLISECONDS, props.getMaxAge())).create();
+    }
+
+}
diff --git a/common/src/main/java/org/onap/so/client/CacheProperties.java b/common/src/main/java/org/onap/so/client/CacheProperties.java
new file mode 100644 (file)
index 0000000..4fb2a87
--- /dev/null
@@ -0,0 +1,13 @@
+package org.onap.so.client;
+
+public interface CacheProperties {
+
+
+    default Long getMaxAge() {
+        return 60000L;
+    }
+
+    default String getCacheName() {
+        return "default-http-cache";
+    }
+}
index ece1333..be0a0f3 100644 (file)
@@ -34,10 +34,12 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Predicate;
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.Invocation.Builder;
+import javax.ws.rs.client.ResponseProcessingException;
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
@@ -186,8 +188,20 @@ public abstract class RestClient {
         return APPLICATION_MERGE_PATCH_JSON;
     }
 
+    protected ClientBuilder getClientBuilder() {
+        ClientBuilder builder = ClientBuilder.newBuilder();
+        if (props.isCachingEnabled()) {
+            enableCaching(builder);
+        }
+        return builder.readTimeout(props.getReadTimeout(), TimeUnit.MILLISECONDS);
+    }
+
+    protected ClientBuilder enableCaching(ClientBuilder builder) {
+        return builder;
+    }
+
     protected Client getClient() {
-        return ClientBuilder.newBuilder().build();
+        return getClientBuilder().build();
     }
 
     protected abstract ONAPComponentsList getTargetEntity();
@@ -201,7 +215,6 @@ public abstract class RestClient {
         metricLogClientFilter = new SOMetricLogClientFilter();
         mdcSetup.setTargetEntity(getTargetEntity());
         client.register(metricLogClientFilter);
-
         if (!path.isPresent()) {
             webTarget = client.target(host.toString());
         } else {
@@ -225,6 +238,9 @@ public abstract class RestClient {
         result.add(e -> {
             return e.getCause() instanceof ConnectException;
         });
+        result.add(e -> {
+            return e.getCause() instanceof ResponseProcessingException;
+        });
         return result;
     }
 
index 1e89538..c6252e4 100644 (file)
@@ -56,7 +56,7 @@ public abstract class RestClientSSL extends RestClient {
                 }
             }
             // Use default SSL context
-            client = ClientBuilder.newBuilder().sslContext(SSLContext.getDefault()).build();
+            client = getClientBuilder().sslContext(SSLContext.getDefault()).build();
             logger.info("RestClientSSL using default SSL context!");
         } catch (NoSuchAlgorithmException e) {
             throw new RuntimeException(e);
index 9e4e99c..a7a0ef6 100644 (file)
@@ -40,4 +40,21 @@ public interface RestProperties {
     public default boolean mapNotFoundToEmpty() {
         return false;
     }
+
+    /**
+     * Time in milliseconds
+     * 
+     * @return
+     */
+    public default Long getReadTimeout() {
+        return Long.valueOf(60000);
+    }
+
+    public default boolean isCachingEnabled() {
+        return false;
+    }
+
+    public default CacheProperties getCacheProperties() {
+        return new CacheProperties() {};
+    }
 }
index cd00a9e..d40576b 100644 (file)
@@ -21,6 +21,8 @@
 package org.onap.so.client;
 
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.spy;
@@ -28,7 +30,13 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import java.net.MalformedURLException;
 import java.net.SocketTimeoutException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Optional;
 import javax.ws.rs.NotFoundException;
+import javax.ws.rs.ProcessingException;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.UriBuilder;
 import javax.ws.rs.core.UriBuilderException;
@@ -37,21 +45,26 @@ import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentMatchers;
-import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.logging.filter.base.ONAPComponents;
+import org.onap.logging.filter.base.ONAPComponentsList;
+import com.github.tomakehurst.wiremock.core.WireMockConfiguration;
+import com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer;
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
 
 @RunWith(MockitoJUnitRunner.class)
 public class RestClientTest {
 
 
     private final HttpClientFactory httpClientFactory = new HttpClientFactory();
-    @Mock
-    private RestProperties props;
 
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
+    @Rule
+    public WireMockRule wireMockRule = new WireMockRule(
+            WireMockConfiguration.options().dynamicPort().extensions(new ResponseTemplateTransformer(false)));
+
     @Test
     public void retries() throws Exception {
         RestClient spy = buildSpy();
@@ -80,6 +93,50 @@ public class RestClientTest {
 
     }
 
+    @Test
+    public void timeoutTest() throws URISyntaxException {
+        wireMockRule.stubFor(get("/chunked/delayed")
+                .willReturn(aResponse().withStatus(200).withBody("Hello world!").withChunkedDribbleDelay(2, 300)));
+
+
+        RestProperties props = new RestProperties() {
+
+            @Override
+            public URL getEndpoint() throws MalformedURLException {
+                return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+            }
+
+            @Override
+            public String getSystemName() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public Long getReadTimeout() {
+                return Long.valueOf(100);
+            }
+        };
+        RestClient client = new RestClient(props, Optional.of(new URI("/chunked/delayed"))) {
+
+            @Override
+            protected void initializeHeaderMap(Map<String, String> headerMap) {
+                // TODO Auto-generated method stub
+
+            }
+
+            @Override
+            protected ONAPComponentsList getTargetEntity() {
+                return ONAPComponents.EXTERNAL;
+            }
+
+        };
+
+        thrown.expect(ProcessingException.class);
+        client.get();
+
+    }
+
     private RestClient buildSpy() throws MalformedURLException, IllegalArgumentException, UriBuilderException {
         RestClient client = httpClientFactory.newJsonClient(UriBuilder.fromUri("http://localhost/test").build().toURL(),
                 ONAPComponents.BPMN);
index b52e6be..3c5f259 100644 (file)
   -->
 
 <configuration>
-       <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}"/>
-    <property name="p_lvl" value="%level"/>
-    <property name="p_log" value="%logger"/>
-    <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}"/>
-    <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}"/>
-    <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}"/>
-    <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}"/>
-    <property name="p_thr" value="%thread"/>
-    <property name="pattern" value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n"/>
+  <property name="p_tim" value="%d{&quot;yyyy-MM-dd'T'HH:mm:ss.SSSXXX&quot;, UTC}" />
+  <property name="p_lvl" value="%level" />
+  <property name="p_log" value="%logger" />
+  <property name="p_mdc" value="%replace(%replace(%mdc){'\t','\\\\t'}){'\n', '\\\\n'}" />
+  <property name="p_msg" value="%replace(%replace(%msg){'\t', '\\\\t'}){'\n','\\\\n'}" />
+  <property name="p_exc" value="%replace(%replace(%rootException){'\t', '\\\\t'}){'\n','\\\\n'}" />
+  <property name="p_mak" value="%replace(%replace(%marker){'\t', '\\\\t'}){'\n','\\\\n'}" />
+  <property name="p_thr" value="%thread" />
+  <property name="pattern"
+    value="%nopexception${p_tim}\t${p_thr}\t${p_lvl}\t${p_log}\t${p_mdc}\t${p_msg}\t${p_exc}\t${p_mak}\t%n" />
 
 
-       <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-               <encoder>
-                       <pattern>${pattern}</pattern>
-               </encoder>
-       </appender>
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>${pattern}</pattern>
+    </encoder>
+  </appender>
 
-       <appender name="test"
-               class="org.onap.so.utils.TestAppender" />
+  <appender name="test" class="org.onap.so.utils.TestAppender" />
 
-       <logger name="com.att.ecomp.audit" level="info" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
+  <logger name="com.att.ecomp.audit" level="info" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
 
-       <logger name="com.att.eelf.metrics" level="info" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
+  <logger name="com.att.eelf.metrics" level="info" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
 
-       <logger name="com.att.eelf.error" level="WARN" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
+  <logger name="com.att.eelf.error" level="WARN" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
 
-       <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
-               <appender-ref ref="STDOUT" />
-               <appender-ref ref="test" />
-       </logger>
-       
-       <logger name="org.flywaydb" level="DEBUG" additivity="false">
-        <appender-ref ref="STDOUT" />
-    </logger>
-       
+  <logger name="org.onap" level="${so.log.level:-DEBUG}" additivity="false">
+    <appender-ref ref="STDOUT" />
+    <appender-ref ref="test" />
+  </logger>
 
-       <logger name="ch.vorburger" level="WARN" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
-       
-       <logger name="org.reflections" level="ERROR" additivity="false">
-               <appender-ref ref="STDOUT" />
-       </logger>
-       
+  <logger name="org.flywaydb" level="DEBUG" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
 
-       <root level="WARN">
-               <appender-ref ref="STDOUT" />
-               <appender-ref ref="test" />
-       </root>
+
+  <logger name="ch.vorburger" level="WARN" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+
+  <logger name="org.reflections" level="ERROR" additivity="false">
+    <appender-ref ref="STDOUT" />
+  </logger>
+
+  <root level="WARN">
+    <appender-ref ref="STDOUT" />
+    <appender-ref ref="test" />
+  </root>
 
 
 </configuration>
\ No newline at end of file
index d95ef8d..d1c9742 100644 (file)
@@ -65,7 +65,7 @@
                 <artifactItem>
                   <groupId>org.onap.aai.traversal</groupId>
                   <artifactId>aai-traversal</artifactId>
-                  <version>1.6.3</version>
+                  <version>1.7.2</version>
                   <outputDirectory>${project.build.directory}/antlr</outputDirectory>
                   <includes>**/*.g4</includes>
                 </artifactItem>
@@ -93,7 +93,7 @@
               <destination>${project.build.directory}/generated-sources</destination>
               <destinationClasspath>org.onap.aaiclient.client.generated.fluentbuilders</destinationClasspath>
               <builderName>AAIFluentTypeBuilder</builderName>
-              <swaggerLocation>${project.build.directory}/swagger/onap/aai_swagger_yaml/aai_swagger_v19.yaml</swaggerLocation>
+              <swaggerLocation>${project.build.directory}/swagger/onap/aai_swagger_yaml/aai_swagger_v21.yaml</swaggerLocation>
               <singularBuilderClass>org.onap.aaiclient.client.aai.entities.uri.AAIFluentSingleType</singularBuilderClass>
               <pluralBuilderClass>org.onap.aaiclient.client.aai.entities.uri.AAIFluentPluralType</pluralBuilderClass>
               <topLevelBuilderClass>org.onap.aaiclient.client.aai.entities.uri.AAIFluentTopLevelType</topLevelBuilderClass>
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheControlFeature.java
new file mode 100644 (file)
index 0000000..1e7c3e7
--- /dev/null
@@ -0,0 +1,137 @@
+package org.onap.aaiclient.client;
+
+import java.io.Closeable;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Properties;
+import javax.annotation.PreDestroy;
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.Factory;
+import javax.cache.configuration.FactoryBuilder;
+import javax.cache.configuration.MutableCacheEntryListenerConfiguration;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.expiry.ExpiryPolicy;
+import javax.cache.integration.CacheLoader;
+import javax.cache.integration.CacheWriter;
+import javax.cache.spi.CachingProvider;
+import javax.ws.rs.core.Feature;
+import javax.ws.rs.core.FeatureContext;
+import javax.ws.rs.ext.Provider;
+import org.apache.cxf.jaxrs.client.cache.CacheControlClientReaderInterceptor;
+import org.apache.cxf.jaxrs.client.cache.CacheControlClientRequestFilter;
+import org.apache.cxf.jaxrs.client.cache.Entry;
+import org.apache.cxf.jaxrs.client.cache.Key;
+
+
+@Provider
+public class CacheControlFeature implements Feature, Closeable {
+    private CachingProvider provider;
+    private CacheManager manager;
+    private Cache<Key, Entry> cache;
+    private boolean cacheResponseInputStream;
+    private Factory<ExpiryPolicy> expiryPolicy;
+
+    @Override
+    public boolean configure(final FeatureContext context) {
+        // TODO: read context properties to exclude some patterns?
+        final Cache<Key, Entry> entryCache = createCache(context.getConfiguration().getProperties());
+        context.register(new CacheControlClientRequestFilter(entryCache));
+        CacheControlClientReaderInterceptor reader = new CacheControlClientReaderInterceptor(entryCache);
+        reader.setCacheResponseInputStream(cacheResponseInputStream);
+        context.register(reader);
+        return true;
+    }
+
+    @PreDestroy // TODO: check it is called
+    public void close() {
+        for (final Closeable c : Arrays.asList(cache, manager, provider)) {
+            try {
+                if (c != null) {
+                    c.close();
+                }
+            } catch (final Exception e) {
+                // no-op
+            }
+        }
+    }
+
+    private Cache<Key, Entry> createCache(final Map<String, Object> properties) {
+        final Properties props = new Properties();
+        props.putAll(properties);
+
+        final String prefix = this.getClass().getName() + ".";
+        final String uri = props.getProperty(prefix + "config-uri");
+        final String name = props.getProperty(prefix + "name", this.getClass().getName());
+
+        final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+
+        provider = Caching.getCachingProvider();
+        try {
+            synchronized (contextClassLoader) {
+                manager = provider.getCacheManager(uri == null ? provider.getDefaultURI() : new URI(uri),
+                        contextClassLoader, props);
+                if (manager.getCache(name) == null) {
+                    final MutableConfiguration<Key, Entry> configuration = new MutableConfiguration<Key, Entry>()
+                            .setReadThrough("true".equalsIgnoreCase(props.getProperty(prefix + "readThrough", "false")))
+                            .setWriteThrough(
+                                    "true".equalsIgnoreCase(props.getProperty(prefix + "writeThrough", "false")))
+                            .setManagementEnabled(
+                                    "true".equalsIgnoreCase(props.getProperty(prefix + "managementEnabled", "false")))
+                            .setStatisticsEnabled(
+                                    "true".equalsIgnoreCase(props.getProperty(prefix + "statisticsEnabled", "false")))
+                            .setStoreByValue(
+                                    "true".equalsIgnoreCase(props.getProperty(prefix + "storeByValue", "false")));
+
+                    final String loader = props.getProperty(prefix + "loaderFactory");
+                    if (loader != null) {
+                        @SuppressWarnings("unchecked")
+                        Factory<? extends CacheLoader<Key, Entry>> f =
+                                newInstance(contextClassLoader, loader, Factory.class);
+                        configuration.setCacheLoaderFactory(f);
+                    }
+                    final String writer = props.getProperty(prefix + "writerFactory");
+                    if (writer != null) {
+                        @SuppressWarnings("unchecked")
+                        Factory<? extends CacheWriter<Key, Entry>> f =
+                                newInstance(contextClassLoader, writer, Factory.class);
+                        configuration.setCacheWriterFactory(f);
+                    }
+                    if (expiryPolicy != null) {
+
+                        configuration.setExpiryPolicyFactory(expiryPolicy);
+                    }
+                    configuration.addCacheEntryListenerConfiguration(new MutableCacheEntryListenerConfiguration(
+                            FactoryBuilder.factoryOf(new CacheLogger()), null, true, true));
+
+                    cache = manager.createCache(name, configuration);
+                } else {
+                    cache = manager.getCache(name);
+                }
+                return cache;
+            }
+        } catch (final URISyntaxException e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T> T newInstance(final ClassLoader contextClassLoader, final String clazz, final Class<T> cast) {
+        try {
+            return (T) contextClassLoader.loadClass(clazz).newInstance();
+        } catch (final Exception e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    public void setCacheResponseInputStream(boolean cacheStream) {
+        this.cacheResponseInputStream = cacheStream;
+    }
+
+    public void setExpiryPolicyFactory(Factory<ExpiryPolicy> f) {
+        this.expiryPolicy = f;
+    }
+}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/CacheLogger.java
new file mode 100644 (file)
index 0000000..f3dc610
--- /dev/null
@@ -0,0 +1,53 @@
+package org.onap.aaiclient.client;
+
+import java.io.Serializable;
+import javax.cache.event.CacheEntryCreatedListener;
+import javax.cache.event.CacheEntryEvent;
+import javax.cache.event.CacheEntryExpiredListener;
+import javax.cache.event.CacheEntryListenerException;
+import javax.cache.event.CacheEntryRemovedListener;
+import javax.cache.event.CacheEntryUpdatedListener;
+import org.apache.cxf.jaxrs.client.cache.Entry;
+import org.apache.cxf.jaxrs.client.cache.Key;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CacheLogger implements CacheEntryExpiredListener<Key, Entry>, CacheEntryCreatedListener<Key, Entry>,
+        CacheEntryUpdatedListener<Key, Entry>, CacheEntryRemovedListener<Key, Entry>, Serializable {
+
+    private static final long serialVersionUID = 1L;
+    private static final Logger logger = LoggerFactory.getLogger(CacheLogger.class);
+
+    @Override
+    public void onExpired(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+            throws CacheEntryListenerException {
+        for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+            logger.debug("{} expired key: {}", event.getSource().getName(), event.getKey().getUri());
+        }
+    }
+
+    @Override
+    public void onRemoved(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+            throws CacheEntryListenerException {
+        for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+            logger.debug("{} removed key: {}", event.getSource().getName(), event.getKey().getUri());
+        }
+    }
+
+    @Override
+    public void onUpdated(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+            throws CacheEntryListenerException {
+        for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+            logger.debug("{} updated key: {}", event.getSource().getName(), event.getKey().getUri());
+        }
+    }
+
+    @Override
+    public void onCreated(Iterable<CacheEntryEvent<? extends Key, ? extends Entry>> events)
+            throws CacheEntryListenerException {
+        for (CacheEntryEvent<? extends Key, ? extends Entry> event : events) {
+            logger.debug("{} created key: {}", event.getSource().getName(), event.getKey().getUri());
+        }
+    }
+
+}
diff --git a/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java b/graph-inventory/aai-client/src/main/java/org/onap/aaiclient/client/FlushCache.java
new file mode 100644 (file)
index 0000000..0f290ff
--- /dev/null
@@ -0,0 +1,41 @@
+package org.onap.aaiclient.client;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.client.ClientRequestContext;
+import javax.ws.rs.client.ClientResponseContext;
+import javax.ws.rs.client.ClientResponseFilter;
+import org.apache.cxf.jaxrs.client.cache.Key;
+import org.onap.so.client.CacheProperties;
+
+public class FlushCache implements ClientResponseFilter {
+
+    private static final Set<String> modifyMethods =
+            new HashSet<>(Arrays.asList(HttpMethod.DELETE, HttpMethod.PATCH, HttpMethod.PUT, HttpMethod.POST));
+
+    private final CacheProperties props;
+
+    public FlushCache(CacheProperties props) {
+        this.props = props;
+    }
+
+    @Override
+    public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException {
+
+        if (responseContext.getStatus() >= 200 && responseContext.getStatus() <= 299) {
+            if (FlushCache.modifyMethods.contains(requestContext.getMethod())) {
+
+                CacheManager cacheManager = Caching.getCachingProvider().getCacheManager(
+                        Caching.getCachingProvider().getDefaultURI(), Thread.currentThread().getContextClassLoader());
+                cacheManager.getCache(props.getCacheName()).remove(
+                        new Key(requestContext.getUri(), requestContext.getAcceptableMediaTypes().get(0).toString()));
+            }
+        }
+    }
+
+}
index ac8a6e6..9c7798f 100644 (file)
@@ -20,6 +20,7 @@
 
 package org.onap.aaiclient.client.aai;
 
+import org.onap.so.client.CacheProperties;
 import org.onap.so.client.RestProperties;
 
 public interface AAIProperties extends RestProperties {
@@ -34,4 +35,15 @@ public interface AAIProperties extends RestProperties {
     public default boolean mapNotFoundToEmpty() {
         return true;
     }
+
+    default CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {};
+    }
+
+    public interface AAICacheProperties extends CacheProperties {
+
+        default String getCacheName() {
+            return "aai-http-cache";
+        }
+    }
 }
index c242208..c22f2f5 100644 (file)
@@ -23,8 +23,13 @@ package org.onap.aaiclient.client.graphinventory;
 import java.net.URI;
 import java.util.Map;
 import java.util.Optional;
+import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.core.Response;
+import org.onap.aaiclient.client.CacheControlFeature;
+import org.onap.aaiclient.client.FlushCache;
 import org.onap.logging.filter.base.ONAPComponentsList;
+import org.onap.so.client.AddCacheHeaders;
+import org.onap.so.client.CacheFactory;
 import org.onap.so.client.ResponseExceptionMapper;
 import org.onap.so.client.RestClientSSL;
 import org.onap.so.client.RestProperties;
@@ -41,6 +46,21 @@ public abstract class GraphInventoryRestClient extends RestClientSSL {
         super(props, Optional.of(uri));
     }
 
+
+    protected ClientBuilder enableCaching(ClientBuilder builder) {
+        builder.register(new AddCacheHeaders(props.getCacheProperties()));
+        builder.register(new FlushCache(props.getCacheProperties()));
+        CacheControlFeature cacheControlFeature = new CacheControlFeature();
+        cacheControlFeature.setCacheResponseInputStream(true);
+        cacheControlFeature.setExpiryPolicyFactory(new CacheFactory(props.getCacheProperties()));
+        builder.property("org.onap.aaiclient.client.CacheControlFeature.name",
+                props.getCacheProperties().getCacheName());
+
+        builder.register(cacheControlFeature);
+
+        return builder;
+    }
+
     @Override
     public abstract ONAPComponentsList getTargetEntity();
 
index b73454f..d0f7847 100644 (file)
@@ -25,7 +25,11 @@ import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
 import static com.github.tomakehurst.wiremock.client.WireMock.get;
 import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
 import static com.github.tomakehurst.wiremock.client.WireMock.matching;
+import static com.github.tomakehurst.wiremock.client.WireMock.put;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
+import static com.github.tomakehurst.wiremock.client.WireMock.verify;
 import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
 import static org.hamcrest.CoreMatchers.containsString;
 import static org.mockito.ArgumentMatchers.any;
@@ -35,8 +39,10 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.HashMap;
 import javax.ws.rs.core.Response;
 import org.junit.Rule;
@@ -48,6 +54,7 @@ import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.aaiclient.client.defaultproperties.DefaultAAIPropertiesImpl;
 import org.onap.aaiclient.client.graphinventory.GraphInventoryPatchConverter;
 import org.onap.aaiclient.client.graphinventory.exceptions.GraphInventoryPatchDepthExceededException;
+import org.onap.so.client.RestClient;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.github.tomakehurst.wiremock.junit.WireMockRule;
 import com.google.common.collect.ImmutableMap;
@@ -96,4 +103,113 @@ public class AAIRestClientTest {
         wireMockRule.verify(getRequestedFor(urlPathEqualTo("/test")).withHeader("X-FromAppId", equalTo("MSO"))
                 .withHeader("X-TransactionId", matching(".*")).withHeader("test", equalTo("value")));
     }
+
+
+    @Test
+    public void cacheGetTest() throws URISyntaxException, InterruptedException {
+
+        wireMockRule.stubFor(get(urlPathMatching("/cached"))
+                .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "text/plain").withBody("value")));
+
+        AAIProperties props = new AAIProperties() {
+
+            @Override
+            public URL getEndpoint() throws MalformedURLException {
+                return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+            }
+
+            @Override
+            public String getSystemName() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public boolean isCachingEnabled() {
+                return true;
+            }
+
+            @Override
+            public AAIVersion getDefaultVersion() {
+                return AAIVersion.LATEST;
+            }
+
+            @Override
+            public String getAuth() {
+                return null;
+            }
+
+            @Override
+            public String getKey() {
+                return null;
+            }
+
+        };
+        RestClient client = new AAIRestClient(props, new URI("/cached"), new HashMap<String, String>());
+
+        Response response = client.get();
+
+        response.readEntity(String.class);
+        response = client.get();
+        response.readEntity(String.class);
+        verify(1, getRequestedFor(urlEqualTo("/cached")));
+
+    }
+
+    @Test
+    public void cachePutTest() throws URISyntaxException, InterruptedException {
+
+        wireMockRule.stubFor(put(urlPathMatching("/cached/1")).willReturn(aResponse().withStatus(200)));
+
+        wireMockRule.stubFor(get(urlPathMatching("/cached/1"))
+                .willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("{}")));
+
+        AAIProperties props = new AAIProperties() {
+
+            @Override
+            public URL getEndpoint() throws MalformedURLException {
+                return new URL(String.format("http://localhost:%s", wireMockRule.port()));
+            }
+
+            @Override
+            public String getSystemName() {
+                // TODO Auto-generated method stub
+                return null;
+            }
+
+            @Override
+            public boolean isCachingEnabled() {
+                return true;
+            }
+
+            @Override
+            public AAIVersion getDefaultVersion() {
+                return AAIVersion.LATEST;
+            }
+
+            @Override
+            public String getAuth() {
+                return null;
+            }
+
+            @Override
+            public String getKey() {
+                return null;
+            }
+
+        };
+
+        RestClient client = new AAIRestClient(props, new URI("/cached/1"), new HashMap<String, String>());
+
+
+        Response response = client.get();
+
+        response.readEntity(String.class);
+        client.put("wow");
+
+        client.get();
+        response.readEntity(String.class);
+        verify(2, getRequestedFor(urlEqualTo("/cached/1")));
+
+    }
 }
index 8226278..1492baf 100644 (file)
@@ -24,6 +24,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import org.onap.aaiclient.client.aai.AAIProperties;
 import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
 import org.onap.so.spring.SpringContextHelper;
 import org.springframework.context.ApplicationContext;
 
@@ -32,6 +33,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     private String aaiEndpoint;
     private String auth;
     private String key;
+    private Long readTimeout;
+    private boolean enableCaching;
+    private Long cacheMaxAge;
 
     public AaiClientPropertiesImpl() {
 
@@ -39,6 +43,9 @@ public class AaiClientPropertiesImpl implements AAIProperties {
         aaiEndpoint = context.getEnvironment().getProperty("mso.aai.endpoint");
         this.auth = context.getEnvironment().getProperty("aai.auth");
         this.key = context.getEnvironment().getProperty("mso.msoKey");
+        this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+        this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+        this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
     }
 
     @Override
@@ -65,4 +72,24 @@ public class AaiClientPropertiesImpl implements AAIProperties {
     public String getKey() {
         return this.key;
     }
+
+    @Override
+    public Long getReadTimeout() {
+        return this.readTimeout;
+    }
+
+    @Override
+    public boolean isCachingEnabled() {
+        return this.enableCaching;
+    }
+
+    @Override
+    public CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {
+            @Override
+            public Long getMaxAge() {
+                return cacheMaxAge;
+            }
+        };
+    }
 }
index 3df3580..0aa14c7 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.etsi.nfvo.ns.lcm.bpmn.flows.extclients.aai;
 
 import org.onap.aaiclient.client.aai.AAIProperties;
 import org.onap.aaiclient.client.aai.AAIVersion;
+import org.onap.so.client.CacheProperties;
 import org.onap.so.spring.SpringContextHelper;
 import org.springframework.context.ApplicationContext;
 import java.net.MalformedURLException;
@@ -33,14 +34,19 @@ public class AaiPropertiesImpl implements AAIProperties {
     private final String encryptedBasicAuth;
     private final String encryptionKey;
     private final String aaiVersion;
+    private final Long readTimeout;
+    private final boolean enableCaching;
+    private final Long cacheMaxAge;
 
     public AaiPropertiesImpl() {
-
         final ApplicationContext context = SpringContextHelper.getAppContext();
         this.endpoint = context.getEnvironment().getProperty("aai.endpoint");
         this.encryptedBasicAuth = context.getEnvironment().getProperty("aai.auth");
         this.encryptionKey = context.getEnvironment().getProperty("mso.key");
         this.aaiVersion = context.getEnvironment().getProperty("aai.version");
+        this.readTimeout = context.getEnvironment().getProperty("aai.readTimeout", Long.class, new Long(60000));
+        this.enableCaching = context.getEnvironment().getProperty("aai.caching.enabled", Boolean.class, false);
+        this.cacheMaxAge = context.getEnvironment().getProperty("aai.caching.maxAge", Long.class, 60000L);
     }
 
     @Override
@@ -73,4 +79,24 @@ public class AaiPropertiesImpl implements AAIProperties {
     public String getKey() {
         return encryptionKey;
     }
+
+    @Override
+    public Long getReadTimeout() {
+        return this.readTimeout;
+    }
+
+    @Override
+    public boolean isCachingEnabled() {
+        return this.enableCaching;
+    }
+
+    @Override
+    public CacheProperties getCacheProperties() {
+        return new AAICacheProperties() {
+            @Override
+            public Long getMaxAge() {
+                return cacheMaxAge;
+            }
+        };
+    }
 }