Initial commit of validation framework to APIH 45/93645/2
authorSmokowski, Steven <steve.smokowski@att.com>
Fri, 16 Aug 2019 01:40:16 +0000 (21:40 -0400)
committerBenjamin, Max (mb388a) <mb388a@att.com>
Fri, 16 Aug 2019 01:43:44 +0000 (21:43 -0400)
Move ListenerRunner to common location
Adjust request params name, update junit tests
Update validations to work properly
Properly escape period for the string split

Issue-ID: SO-2232
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: Ia468cf7062cccf30e28afeb7a5cddc37ceb2e002

53 files changed:
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/JerseyConfiguration.java
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundException.java [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundExceptionMapper.java [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/ServiceMapper.java
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/ServiceRestImpl.java
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfMapper.java [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfRestImpl.java [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V6.2__AddNfValidData.sql [new file with mode: 0644]
adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/ServiceMapperTest.java
adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java
adapters/mso-catalog-db-adapter/src/test/resources/ExpectedService.json
adapters/mso-openstack-adapters/src/test/resources/schema.sql
asdc-controller/src/test/resources/schema.sql
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/db/RequestsDbListenerRunner.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/flowmanipulator/FlowManipulatorListenerRunner.java
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/validation/FlowValidatorRunner.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/listener/BuildingBlockValidatorRunnerTest.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/listener/WorkflowValidatorRunnerTest.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/listener/validation/MyDisabledValidator.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/common/listener/validation/ValidationConfig.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/validations/CloudRegionOrchestrationValidator.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIEntityNotFoundException.java [new file with mode: 0644]
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIServiceInstanceResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
common/pom.xml
common/src/main/java/org/onap/so/listener/ListenerRunner.java [moved from bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/ListenerRunner.java with 89% similarity]
common/src/main/java/org/onap/so/listener/Skip.java [moved from bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/listener/Skip.java with 96% similarity]
common/src/main/java/org/onap/so/serviceinstancebeans/RequestParameters.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiException.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ApiExceptionMapper.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/ValidateException.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/RequestHandlerUtils.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/ServiceInstances.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/AAIDataRetrieval.java [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilder.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidator.java [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidatorListenerRunner.java [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/PlatformLOBValidation.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/validation/ProjectOwningEntityValidation.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/ServiceInstancesTest.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/onap/so/apihandlerinfra/infra/rest/BpmnRequestBuilderTest.java
mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceInstanceNoOE.json [new file with mode: 0644]
mso-api-handlers/mso-api-handler-infra/src/test/resources/__files/infra/Vnf.json
mso-api-handlers/mso-api-handler-infra/src/test/resources/schema.sql
mso-catalog-db/src/main/java/org/onap/so/db/catalog/beans/VnfResourceCustomization.java
mso-catalog-db/src/main/java/org/onap/so/db/catalog/client/CatalogDbClient.java
mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/Cvnfc.java [new file with mode: 0644]
mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/Service.java
mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/VfModule.java
mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/Vnf.java
mso-catalog-db/src/test/java/org/onap/so/db/catalog/data/repository/VnfcCustomizationRepositoryTest.java
mso-catalog-db/src/test/resources/schema.sql

index 79aad1a..b43447f 100644 (file)
@@ -25,6 +25,7 @@ import javax.ws.rs.ApplicationPath;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.onap.so.adapters.catalogdb.rest.CatalogDbAdapterRest;
 import org.onap.so.adapters.catalogdb.rest.ServiceRestImpl;
+import org.onap.so.adapters.catalogdb.rest.VnfRestImpl;
 import org.onap.so.logging.jaxrs.filter.JaxRsFilterLogging;
 import org.springframework.context.annotation.Configuration;
 import io.swagger.jaxrs.config.BeanConfig;
@@ -42,6 +43,7 @@ public class JerseyConfiguration extends ResourceConfig {
         register(SwaggerSerializers.class);
         register(JaxRsFilterLogging.class);
         register(ServiceRestImpl.class);
+        register(VnfRestImpl.class);
         BeanConfig beanConfig = new BeanConfig();
         beanConfig.setVersion("1.0.2");
         beanConfig.setSchemes(new String[] {"https"});
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundException.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundException.java
new file mode 100644 (file)
index 0000000..f8a7ba6
--- /dev/null
@@ -0,0 +1,14 @@
+package org.onap.so.adapters.catalogdb.rest;
+
+public class CatalogEntityNotFoundException extends RuntimeException {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -300157844846680791L;
+
+    public CatalogEntityNotFoundException(String errorMessage) {
+        super(errorMessage);
+    }
+
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundExceptionMapper.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogEntityNotFoundExceptionMapper.java
new file mode 100644 (file)
index 0000000..c42eaab
--- /dev/null
@@ -0,0 +1,38 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. 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.catalogdb.rest;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Provider
+public class CatalogEntityNotFoundExceptionMapper implements ExceptionMapper<CatalogEntityNotFoundException> {
+
+    private static final Logger logger = LoggerFactory.getLogger(CatalogEntityNotFoundExceptionMapper.class);
+
+    @Override
+    public Response toResponse(CatalogEntityNotFoundException e) {
+        return Response.status(Response.Status.NOT_FOUND).entity(e).build();
+    }
+}
index dd18767..e74663d 100644 (file)
@@ -22,9 +22,11 @@ package org.onap.so.adapters.catalogdb.rest;
 
 import java.util.ArrayList;
 import java.util.List;
+import org.onap.so.db.catalog.beans.CvnfcCustomization;
 import org.onap.so.db.catalog.beans.HeatEnvironment;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.rest.catalog.beans.Cvnfc;
 import org.onap.so.rest.catalog.beans.Service;
 import org.onap.so.rest.catalog.beans.VfModule;
 import org.onap.so.rest.catalog.beans.Vnf;
@@ -39,16 +41,23 @@ public class ServiceMapper {
 
     public Service mapService(org.onap.so.db.catalog.beans.Service service, int depth) {
         Service restService = new Service();
-        restService.setCategory(service.getCategory());
+        if (service.getCategory() != null) {
+            restService.setCategory(service.getCategory());
+        }
         restService.setCreated(service.getCreated());
         restService.setDescription(service.getDescription());
-        restService.setDistrobutionStatus(service.getDistrobutionStatus());
+
+        if (service.getDistrobutionStatus() != null) {
+            restService.setDistrobutionStatus(service.getDistrobutionStatus());
+        }
         restService.setEnvironmentContext(service.getEnvironmentContext());
         restService.setModelInvariantId(service.getModelInvariantUUID());
         restService.setModelName(service.getModelName());
         restService.setModelVersionId(service.getModelUUID());
         restService.setModelVersion(service.getModelVersion());
-        restService.setServiceRole(service.getServiceRole());
+        if (service.getServiceRole() != null) {
+            restService.setServiceRole(service.getServiceRole());
+        }
         restService.setServiceType(service.getServiceType());
         restService.setWorkloadContext(service.getWorkloadContext());
         if (depth > 0)
@@ -63,7 +72,7 @@ public class ServiceMapper {
         return vnfs;
     }
 
-    private Vnf mapVnf(org.onap.so.db.catalog.beans.VnfResourceCustomization vnfResourceCustomization, int depth) {
+    protected Vnf mapVnf(org.onap.so.db.catalog.beans.VnfResourceCustomization vnfResourceCustomization, int depth) {
         Vnf vnf = new Vnf();
         vnf.setAvailabilityZoneMaxCount(vnfResourceCustomization.getAvailabilityZoneMaxCount());
         vnf.setCategory(vnfResourceCustomization.getVnfResources().getCategory());
@@ -81,9 +90,12 @@ public class ServiceMapper {
         vnf.setNfFunction(vnfResourceCustomization.getNfFunction());
         vnf.setNfNamingCode(vnfResourceCustomization.getNfNamingCode());
         vnf.setNfRole(vnfResourceCustomization.getNfRole());
+        vnf.setNfType(vnfResourceCustomization.getNfType());
+        vnf.setNfDataValid(vnfResourceCustomization.getNfDataValid());
         vnf.setOrchestrationMode(vnfResourceCustomization.getVnfResources().getOrchestrationMode());
         vnf.setSubCategory(vnfResourceCustomization.getVnfResources().getSubCategory());
         vnf.setToscaNodeType(vnfResourceCustomization.getVnfResources().getToscaNodeType());
+
         if (depth > 1) {
             vnf.setVfModule(mapVfModules(vnfResourceCustomization, depth));
         }
@@ -93,11 +105,11 @@ public class ServiceMapper {
     private List<VfModule> mapVfModules(VnfResourceCustomization vnfResourceCustomization, int depth) {
         List<VfModule> vfModules = new ArrayList<>();
         vnfResourceCustomization.getVfModuleCustomizations().parallelStream()
-                .forEach(vfModule -> vfModules.add(mapVfModule(vfModule)));
+                .forEach(vfModule -> vfModules.add(mapVfModule(vfModule, depth)));
         return vfModules;
     }
 
-    private VfModule mapVfModule(VfModuleCustomization vfModuleCust) {
+    private VfModule mapVfModule(VfModuleCustomization vfModuleCust, int depth) {
         VfModule vfModule = new VfModule();
         vfModule.setAvailabilityZoneCount(vfModuleCust.getAvailabilityZoneCount());
         vfModule.setCreated(vfModuleCust.getCreated());
@@ -113,9 +125,34 @@ public class ServiceMapper {
         vfModule.setModelName(vfModuleCust.getVfModule().getModelName());
         vfModule.setModelVersionId(vfModuleCust.getVfModule().getModelUUID());
         vfModule.setModelVersion(vfModuleCust.getVfModule().getModelVersion());
+        if (depth > 3) {
+            vfModule.setVnfc(mapCvnfcs(vfModuleCust));
+        }
         return vfModule;
     }
 
+    private List<Cvnfc> mapCvnfcs(VfModuleCustomization vfModuleCustomization) {
+        List<Cvnfc> cvnfcs = new ArrayList<>();
+        vfModuleCustomization.getCvnfcCustomization().parallelStream()
+                .forEach(cvnfcCust -> cvnfcs.add(mapCvnfcCus(cvnfcCust)));
+        return cvnfcs;
+    }
+
+    private Cvnfc mapCvnfcCus(CvnfcCustomization cvnfcCust) {
+        Cvnfc cvnfc = new Cvnfc();
+        cvnfc.setCreated(cvnfcCust.getCreated());
+        cvnfc.setDescription(cvnfcCust.getDescription());
+        cvnfc.setModelCustomizationId(cvnfcCust.getModelCustomizationUUID());
+        cvnfc.setModelInstanceName(cvnfcCust.getModelInstanceName());
+        cvnfc.setModelInvariantId(cvnfcCust.getModelInvariantUUID());
+        cvnfc.setModelName(cvnfcCust.getModelName());
+        cvnfc.setModelVersion(cvnfcCust.getModelVersion());
+        cvnfc.setModelVersionId(cvnfcCust.getModelUUID());
+        cvnfc.setNfcFunction(cvnfcCust.getNfcFunction());
+        cvnfc.setNfcNamingCode(cvnfcCust.getNfcNamingCode());
+        return cvnfc;
+    }
+
     private boolean getIsVolumeGroup(VfModuleCustomization vfModuleCust) {
         boolean isVolumeGroup = false;
         HeatEnvironment envt = vfModuleCust.getVolumeHeatEnv();
index 520de4d..6f556ed 100644 (file)
@@ -38,7 +38,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
-@Api(value = "/v1/services", tags = "model")
+@Api(value = "/v1", tags = "model")
 @Path("/v1/services")
 @Component
 public class ServiceRestImpl {
@@ -49,18 +49,21 @@ public class ServiceRestImpl {
     @Autowired
     private ServiceMapper serviceMapper;
 
+
     @GET
     @Path("/{modelUUID}")
     @Produces({MediaType.APPLICATION_JSON})
     @Transactional(readOnly = true)
     public Service findService(@PathParam("modelUUID") String modelUUID, @QueryParam("depth") int depth) {
         org.onap.so.db.catalog.beans.Service service = serviceRepo.findOneByModelUUID(modelUUID);
+        if (service == null) {
+            new CatalogEntityNotFoundException("Unable to find Service " + modelUUID);
+        }
         return serviceMapper.mapService(service, depth);
     }
 
     @GET
-    @ApiOperation(value = "Find Service Models", response = Service.class, responseContainer = "List",
-            notes = "If no query parameters are sent an empty list will be returned")
+    @ApiOperation(value = "Find Service Models", response = Service.class, responseContainer = "List")
     @Produces({MediaType.APPLICATION_JSON})
     @Transactional(readOnly = true)
     public List<Service> queryServices(
@@ -74,6 +77,8 @@ public class ServiceRestImpl {
             serviceFromDB = serviceRepo.findByModelNameAndDistrobutionStatus(modelName, distributionStatus);
         } else if (!Strings.isNullOrEmpty(modelName)) {
             serviceFromDB = serviceRepo.findByModelName(modelName);
+        } else {
+            serviceFromDB = serviceRepo.findAll();
         }
         serviceFromDB.stream().forEach(serviceDB -> services.add(serviceMapper.mapService(serviceDB, depth)));
         return services;
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfMapper.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfMapper.java
new file mode 100644 (file)
index 0000000..52a8ccb
--- /dev/null
@@ -0,0 +1,37 @@
+package org.onap.so.adapters.catalogdb.rest;
+
+import org.onap.so.db.catalog.beans.VnfResource;
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.rest.catalog.beans.Vnf;
+import org.springframework.stereotype.Component;
+import com.google.common.base.Strings;
+
+@Component
+public class VnfMapper {
+
+    public VnfResourceCustomization mapVnf(VnfResourceCustomization vnfCust, Vnf vnf) {
+
+        vnfCust.setAvailabilityZoneMaxCount(vnf.getAvailabilityZoneMaxCount());
+        vnfCust.setMaxInstances(vnf.getMaxInstances());
+        vnfCust.setMinInstances(vnf.getMinInstances());
+        vnfCust.setModelCustomizationUUID(vnf.getModelCustomizationId());
+        vnfCust.setModelInstanceName(vnf.getModelInstanceName());
+        vnfCust.setMultiStageDesign(vnf.getMultiStageDesign());
+        vnfCust.setNfDataValid(vnf.getNfDataValid());
+        vnfCust.setNfFunction(Strings.nullToEmpty(vnf.getNfFunction()));
+        vnfCust.setNfNamingCode(Strings.nullToEmpty(vnf.getNfNamingCode()));
+        vnfCust.setNfRole(Strings.nullToEmpty(vnf.getNfRole()));
+        vnfCust.setNfType(Strings.nullToEmpty(vnf.getNfType()));
+
+        VnfResource vnfRes = vnfCust.getVnfResources();
+        vnfRes.setOrchestrationMode(Strings.nullToEmpty(vnfRes.getOrchestrationMode()));
+        vnfRes.setSubCategory(Strings.nullToEmpty(vnfRes.getSubCategory()));
+        vnfRes.setToscaNodeType(Strings.nullToEmpty(vnfRes.getToscaNodeType()));
+        vnfRes.setModelInvariantUUID(vnfRes.getModelInvariantId());
+        vnfRes.setModelName(vnfRes.getModelName());
+        vnfRes.setModelUUID(vnfRes.getModelUUID());
+        vnfRes.setModelVersion(vnfRes.getModelVersion());
+        return vnfCust;
+    }
+
+}
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfRestImpl.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/VnfRestImpl.java
new file mode 100644 (file)
index 0000000..4353526
--- /dev/null
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. 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.catalogdb.rest;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.onap.so.db.catalog.beans.VnfResourceCustomization;
+import org.onap.so.db.catalog.data.repository.ServiceRepository;
+import org.onap.so.db.catalog.data.repository.VnfCustomizationRepository;
+import org.onap.so.rest.catalog.beans.Vnf;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+@Api(value = "/v1/services/{modelUUID}/vnfs", tags = "model")
+@Path("/v1/services/{modelUUID}/vnfs")
+@Component
+public class VnfRestImpl {
+
+    @Autowired
+    private ServiceRepository serviceRepo;
+
+    @Autowired
+    private ServiceMapper serviceMapper;
+
+    @Autowired
+    private VnfMapper vnfMapper;
+
+    @Autowired
+    private VnfCustomizationRepository vnfCustRepo;
+
+    @GET
+    @ApiOperation(value = "Find a VNF model contained within a service", response = Vnf.class)
+    @Path("/{modelCustomizationUUID}")
+    @Produces({MediaType.APPLICATION_JSON})
+    @Transactional(readOnly = true)
+    public Vnf findService(@PathParam("modelUUID") String serviceModelUUID,
+            @PathParam("modelCustomizationUUID") String modelCustomizationUUID, @QueryParam("depth") int depth) {
+        org.onap.so.db.catalog.beans.Service service = serviceRepo.findOneByModelUUID(serviceModelUUID);
+        if (service.getVnfCustomizations() == null || service.getVnfCustomizations().isEmpty()) {
+            throw new WebApplicationException("Vnf Not Found", 404);
+        }
+        List<VnfResourceCustomization> vnfCustom = service.getVnfCustomizations().stream()
+                .filter(vnfCust -> vnfCust.getModelCustomizationUUID().equals(modelCustomizationUUID))
+                .collect(Collectors.toList());
+        if (vnfCustom.isEmpty() || vnfCustom == null) {
+            return null;
+        } else if (vnfCustom.size() > 1) {
+            throw new RuntimeException(
+                    "More than one Vnf model returned with model Customization UUID: " + modelCustomizationUUID);
+        }
+        return serviceMapper.mapVnf(vnfCustom.get(0), depth);
+    }
+
+    @PUT
+    @ApiOperation(value = "Update a VNF model contained within a service", response = Vnf.class)
+    @Path("/{modelCustomizationUUID}")
+    @Produces({MediaType.APPLICATION_JSON})
+    @Transactional
+    public Response findService(@PathParam("modelUUID") String serviceModelUUID,
+            @PathParam("modelCustomizationUUID") String modelCustomizationUUID, Vnf vnf) {
+        org.onap.so.db.catalog.beans.Service service = serviceRepo.findOneByModelUUID(serviceModelUUID);
+        List<VnfResourceCustomization> vnfCustom = service.getVnfCustomizations().stream()
+                .filter(vnfCust -> vnfCust.getModelCustomizationUUID().equals(modelCustomizationUUID))
+                .collect(Collectors.toList());
+        if (vnfCustom.isEmpty() || vnfCustom == null) {
+            throw new RuntimeException("No Vnf Found");
+        } else if (vnfCustom.size() > 1) {
+            throw new RuntimeException(
+                    "More than one Vnf model returned with model Customization UUID: " + modelCustomizationUUID);
+        }
+        VnfResourceCustomization vnfCust = vnfMapper.mapVnf(vnfCustom.get(0), vnf);
+        vnfCustRepo.save(vnfCust);
+        return Response.ok().build();
+    }
+
+}
+
diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V6.2__AddNfValidData.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V6.2__AddNfValidData.sql
new file mode 100644 (file)
index 0000000..93dde13
--- /dev/null
@@ -0,0 +1,5 @@
+USE catalogdb;
+
+ALTER TABLE vnf_resource_customization
+ADD IF NOT EXISTS NF_DATA_VALID tinyint(1) DEFAULT 0;
+
index 8decd77..d46fd9c 100644 (file)
@@ -67,6 +67,7 @@ public class ServiceMapperTest {
         testService.setModelVersion("modelVersion");
         testService.setServiceType("serviceType");
         testService.setServiceRole("serviceRole");
+
         testService.getVnfCustomizations().add(getTestVnfCustomization());
         return testService;
     }
index a955a2c..f82c7ac 100644 (file)
@@ -22,15 +22,14 @@ package org.onap.so.db.catalog.client;
 
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import java.util.List;
 import java.util.UUID;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.onap.so.adapters.catalogdb.CatalogDBApplication;
 import org.onap.so.adapters.catalogdb.CatalogDbAdapterBaseTest;
 import org.onap.so.db.catalog.beans.AuthenticationType;
 import org.onap.so.db.catalog.beans.CloudIdentity;
@@ -56,10 +55,7 @@ import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.web.server.LocalServerPort;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.junit4.SpringRunner;
 
 public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
 
@@ -74,6 +70,8 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     @Autowired
     CatalogDbClientPortChanger client;
 
+
+
     @Before
     public void initialize() {
         client.wiremockPort = String.valueOf(port);
@@ -88,7 +86,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     public void testGetRainyDayHandler_Regex() {
         RainyDayHandlerStatus rainyDayHandlerStatus = client.getRainyDayHandlerStatus("AssignServiceInstanceBB", "*",
                 "*", "*", "*", "The Flavor ID (nd.c6r16d20) could not be found.", "*");
-        Assert.assertEquals("Rollback", rainyDayHandlerStatus.getPolicy());
+        assertEquals("Rollback", rainyDayHandlerStatus.getPolicy());
     }
 
     @Test
@@ -97,105 +95,105 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
                 "*", "*", "*",
                 "resources.lba_0_dmz_vmi_0: Unknown id: Error: oper 1 url /fqname-to-id body {\"fq_name\": [\"zrdm6bvota05-dmz_sec_group\"], \"type\": \"security-group\"} response Name ['zrdm6bvota05-dmz_sec_group'] not found",
                 "*");
-        Assert.assertEquals("Rollback", rainyDayHandlerStatus.getPolicy());
+        assertEquals("Rollback", rainyDayHandlerStatus.getPolicy());
     }
 
     @Test
     public void testGetCloudSiteHappyPath() throws Exception {
         CloudSite cloudSite = client.getCloudSite(MTN13);
-        Assert.assertNotNull(cloudSite);
-        Assert.assertNotNull(cloudSite.getIdentityService());
-        Assert.assertEquals("MDT13", cloudSite.getClli());
-        Assert.assertEquals("mtn13", cloudSite.getRegionId());
-        Assert.assertEquals("MTN13", cloudSite.getIdentityServiceId());
+        assertNotNull(cloudSite);
+        assertNotNull(cloudSite.getIdentityService());
+        assertEquals("MDT13", cloudSite.getClli());
+        assertEquals("mtn13", cloudSite.getRegionId());
+        assertEquals("MTN13", cloudSite.getIdentityServiceId());
     }
 
     @Test
     public void testGetCloudSiteNotFound() throws Exception {
         CloudSite cloudSite = client.getCloudSite(UUID.randomUUID().toString());
-        Assert.assertNull(cloudSite);
+        assertNull(cloudSite);
     }
 
     @Test
     public void testGetCloudifyManagerHappyPath() throws Exception {
         CloudifyManager cloudifyManager = client.getCloudifyManager("mtn13");
-        Assert.assertNotNull(cloudifyManager);
-        Assert.assertEquals("http://localhost:28090/v2.0", cloudifyManager.getCloudifyUrl());
+        assertNotNull(cloudifyManager);
+        assertEquals("http://localhost:28090/v2.0", cloudifyManager.getCloudifyUrl());
 
     }
 
     @Test
     public void testGetCloudifyManagerNotFound() throws Exception {
         CloudifyManager cloudifyManager = client.getCloudifyManager(UUID.randomUUID().toString());
-        Assert.assertNull(cloudifyManager);
+        assertNull(cloudifyManager);
     }
 
 
     @Test
     public void testGetCloudSiteByClliAndAicVersionHappyPath() throws Exception {
         CloudSite cloudSite = client.getCloudSiteByClliAndAicVersion("MDT13", "2.5");
-        Assert.assertNotNull(cloudSite);
+        assertNotNull(cloudSite);
     }
 
     @Test
     public void testGetCloudSiteByClliAndAicVersionNotFound() throws Exception {
         CloudSite cloudSite = client.getCloudSiteByClliAndAicVersion("MDT13", "232496239746328");
-        Assert.assertNull(cloudSite);
+        assertNull(cloudSite);
     }
 
     @Test
     public void testGetServiceByID() throws Exception {
         Service serviceByID = client.getServiceByID("5df8b6de-2083-11e7-93ae-92361f002671");
-        Assert.assertNotNull(serviceByID);
-        Assert.assertEquals("MSOTADevInfra_vSAMP10a_Service", serviceByID.getModelName());
-        Assert.assertEquals("NA", serviceByID.getServiceType());
-        Assert.assertEquals("NA", serviceByID.getServiceRole());
+        assertNotNull(serviceByID);
+        assertEquals("MSOTADevInfra_vSAMP10a_Service", serviceByID.getModelName());
+        assertEquals("NA", serviceByID.getServiceType());
+        assertEquals("NA", serviceByID.getServiceRole());
     }
 
     @Test
     public void testGetServiceByIDNotFound() throws Exception {
         Service serviceByID = client.getServiceByID(UUID.randomUUID().toString());
-        Assert.assertNull(serviceByID);
+        assertNull(serviceByID);
     }
 
     @Test
     public void testGetVfModuleByModelUUID() throws Exception {
         VfModule vfModule = client.getVfModuleByModelUUID("20c4431c-246d-11e7-93ae-92361f002671");
-        Assert.assertNotNull(vfModule);
-        Assert.assertNotNull(vfModule.getVfModuleCustomization());
-        Assert.assertEquals("78ca26d0-246d-11e7-93ae-92361f002671", vfModule.getModelInvariantUUID());
-        Assert.assertEquals("vSAMP10aDEV::base::module-0", vfModule.getModelName());
+        assertNotNull(vfModule);
+        assertNotNull(vfModule.getVfModuleCustomization());
+        assertEquals("78ca26d0-246d-11e7-93ae-92361f002671", vfModule.getModelInvariantUUID());
+        assertEquals("vSAMP10aDEV::base::module-0", vfModule.getModelName());
     }
 
     @Test
     public void testGetVfModuleByModelUUIDNotFound() throws Exception {
         VfModule vfModule = client.getVfModuleByModelUUID(UUID.randomUUID().toString());
-        Assert.assertNull(vfModule);
+        assertNull(vfModule);
     }
 
     @Test
     public void testGetVnfResourceByModelUUID() throws Exception {
         VnfResource vnfResource = client.getVnfResourceByModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
-        Assert.assertNotNull(vnfResource);
-        Assert.assertEquals("vSAMP10a", vnfResource.getModelName());
+        assertNotNull(vnfResource);
+        assertEquals("vSAMP10a", vnfResource.getModelName());
     }
 
     @Test
     public void testGetVnfResourceByModelUUIDNotFound() throws Exception {
         VnfResource vnfResource = client.getVnfResourceByModelUUID(UUID.randomUUID().toString());
-        Assert.assertNull(vnfResource);
+        assertNull(vnfResource);
     }
 
     @Test
     public void testGetVnfResourceCustomizationByModelCustomizationUUID() {
         VnfResourceCustomization vnfResourceCustomization =
                 client.getVnfResourceCustomizationByModelCustomizationUUID("68dc9a92-214c-11e7-93ae-92361f002671");
-        Assert.assertNotNull(vnfResourceCustomization);
-        Assert.assertEquals("vSAMP", vnfResourceCustomization.getNfRole());
-        Assert.assertNotNull(vnfResourceCustomization.getModelCustomizationUUID());
-        Assert.assertNotNull(vnfResourceCustomization.getVnfResources());
-        Assert.assertNotNull(vnfResourceCustomization.getVfModuleCustomizations());
-        Assert.assertEquals("vSAMP10a", vnfResourceCustomization.getVnfResources().getModelName());
+        assertNotNull(vnfResourceCustomization);
+        assertEquals("vSAMP", vnfResourceCustomization.getNfRole());
+        assertNotNull(vnfResourceCustomization.getModelCustomizationUUID());
+        assertNotNull(vnfResourceCustomization.getVnfResources());
+        assertNotNull(vnfResourceCustomization.getVfModuleCustomizations());
+        assertEquals("vSAMP10a", vnfResourceCustomization.getVnfResources().getModelName());
         assertTrue("skip post instantiation configuration", vnfResourceCustomization.isSkipPostInstConf());
     }
 
@@ -203,15 +201,15 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     public void testGetVnfResourceCustomizationByModelCustomizationUUINotFound() {
         VnfResourceCustomization vnfResourceCustomization =
                 client.getVnfResourceCustomizationByModelCustomizationUUID(UUID.randomUUID().toString());
-        Assert.assertNull(vnfResourceCustomization);
+        assertNull(vnfResourceCustomization);
     }
 
     @Test
     public void testGetInstanceGroupByModelUUID() {
         InstanceGroup instanceGroup = client.getInstanceGroupByModelUUID("0c8692ef-b9c0-435d-a738-edf31e71f38b");
-        Assert.assertNotNull(instanceGroup);
-        Assert.assertEquals("network_collection_resource_1806..NetworkCollection..0", instanceGroup.getModelName());
-        Assert.assertEquals("org.openecomp.resource.cr.NetworkCollectionResource1806",
+        assertNotNull(instanceGroup);
+        assertEquals("network_collection_resource_1806..NetworkCollection..0", instanceGroup.getModelName());
+        assertEquals("org.openecomp.resource.cr.NetworkCollectionResource1806",
                 instanceGroup.getToscaNodeType().toString());
     }
 
@@ -219,33 +217,33 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     public void testGetVfModuleCustomizationByModelCuztomizationUUID() {
         VfModuleCustomization vfModuleCustomization =
                 client.getVfModuleCustomizationByModelCuztomizationUUID("cb82ffd8-252a-11e7-93ae-92361f002671");
-        Assert.assertNotNull(vfModuleCustomization);
-        Assert.assertNotNull(vfModuleCustomization.getModelCustomizationUUID());
-        Assert.assertEquals("base", vfModuleCustomization.getLabel());
+        assertNotNull(vfModuleCustomization);
+        assertNotNull(vfModuleCustomization.getModelCustomizationUUID());
+        assertEquals("base", vfModuleCustomization.getLabel());
     }
 
     @Test
     public void testGetVfModuleCustomizationByModelCuztomizationUUIDNotFound() {
         VfModuleCustomization vfModuleCustomization =
                 client.getVfModuleCustomizationByModelCuztomizationUUID(UUID.randomUUID().toString());
-        Assert.assertNull(vfModuleCustomization);
+        assertNull(vfModuleCustomization);
     }
 
     @Test
     public void testGetNetworkResourceCustomizationByModelCustomizationUUID() {
         NetworkResourceCustomization networkResourceCustomization =
                 client.getNetworkResourceCustomizationByModelCustomizationUUID("3bdbb104-476c-483e-9f8b-c095b3d308ac");
-        Assert.assertNotNull(networkResourceCustomization);
-        Assert.assertNotNull(networkResourceCustomization.getModelCustomizationUUID());
-        Assert.assertEquals("CONTRAIL30_GNDIRECT 9", networkResourceCustomization.getModelInstanceName());
-        Assert.assertNotNull(networkResourceCustomization.getNetworkResource());
+        assertNotNull(networkResourceCustomization);
+        assertNotNull(networkResourceCustomization.getModelCustomizationUUID());
+        assertEquals("CONTRAIL30_GNDIRECT 9", networkResourceCustomization.getModelInstanceName());
+        assertNotNull(networkResourceCustomization.getNetworkResource());
     }
 
     @Test
     public void testGetNetworkResourceCustomizationByModelCustomizationUUIDNotFound() {
         NetworkResourceCustomization networkResourceCustomization =
                 client.getNetworkResourceCustomizationByModelCustomizationUUID(UUID.randomUUID().toString());
-        Assert.assertNull(networkResourceCustomization);
+        assertNull(networkResourceCustomization);
     }
 
     @Test
@@ -253,10 +251,10 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         VfModuleCustomization vfModuleCustomization =
                 client.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
                         "cb82ffd8-252a-11e7-93ae-92361f002672", "20c4431c-246d-11e7-93ae-92361f002672");
-        Assert.assertNotNull(vfModuleCustomization);
-        Assert.assertNotNull(vfModuleCustomization.getModelCustomizationUUID());
-        Assert.assertNotNull(vfModuleCustomization.getVfModule());
-        Assert.assertEquals("base", vfModuleCustomization.getLabel());
+        assertNotNull(vfModuleCustomization);
+        assertNotNull(vfModuleCustomization.getModelCustomizationUUID());
+        assertNotNull(vfModuleCustomization.getVfModule());
+        assertEquals("base", vfModuleCustomization.getLabel());
     }
 
     @Test
@@ -264,44 +262,43 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         VfModuleCustomization vfModuleCustomization =
                 client.getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
                         "cb82ffd8-252a-11e7-93ae-92361f002672", UUID.randomUUID().toString());
-        Assert.assertNull(vfModuleCustomization);
+        assertNull(vfModuleCustomization);
     }
 
     @Test
     public void testGetFirstByServiceModelUUIDAndAction() {
         ServiceRecipe serviceRecipe =
                 client.getFirstByServiceModelUUIDAndAction("4694a55f-58b3-4f17-92a5-796d6f5ffd0d", "createInstance");
-        Assert.assertNotNull(serviceRecipe);
-        Assert.assertNotNull(serviceRecipe.getServiceModelUUID());
-        Assert.assertNotNull(serviceRecipe.getAction());
-        Assert.assertEquals("/mso/async/services/CreateGenericALaCarteServiceInstance",
-                serviceRecipe.getOrchestrationUri());
-        Assert.assertEquals("MSOTADevInfra aLaCarte", serviceRecipe.getDescription());
+        assertNotNull(serviceRecipe);
+        assertNotNull(serviceRecipe.getServiceModelUUID());
+        assertNotNull(serviceRecipe.getAction());
+        assertEquals("/mso/async/services/CreateGenericALaCarteServiceInstance", serviceRecipe.getOrchestrationUri());
+        assertEquals("MSOTADevInfra aLaCarte", serviceRecipe.getDescription());
     }
 
     @Test
     public void testGetFirstByServiceModelUUIDAndActionNotFound() {
         ServiceRecipe serviceRecipe = client.getFirstByServiceModelUUIDAndAction("5df8b6de-2083-11e7-93ae-92361f002671",
                 UUID.randomUUID().toString());
-        Assert.assertNull(serviceRecipe);
+        assertNull(serviceRecipe);
     }
 
     @Test
     public void testGetFirstVnfResourceByModelInvariantUUIDAndModelVersion() {
         VnfResource vnfResource = client
                 .getFirstVnfResourceByModelInvariantUUIDAndModelVersion("2fff5b20-214b-11e7-93ae-92361f002671", "2.0");
-        Assert.assertNotNull(vnfResource);
-        Assert.assertNotNull(vnfResource.getModelInvariantId());
-        Assert.assertNotNull(vnfResource.getModelVersion());
-        Assert.assertNotNull(vnfResource.getHeatTemplates());
-        Assert.assertEquals("vSAMP10a", vnfResource.getModelName());
+        assertNotNull(vnfResource);
+        assertNotNull(vnfResource.getModelInvariantId());
+        assertNotNull(vnfResource.getModelVersion());
+        assertNotNull(vnfResource.getHeatTemplates());
+        assertEquals("vSAMP10a", vnfResource.getModelName());
     }
 
     @Test
     public void testGetFirstVnfResourceByModelInvariantUUIDAndModelVersionNotFound() {
         VnfResource vnfResource = client.getFirstVnfResourceByModelInvariantUUIDAndModelVersion(
                 "2fff5b20-214b-11e7-93ae-92361f002671", UUID.randomUUID().toString());
-        Assert.assertNull(vnfResource);
+        assertNull(vnfResource);
     }
 
     @Test
@@ -310,29 +307,28 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         vnfr.setModelUUID("ff2ae348-214a-11e7-93ae-92361f002671");
         VnfResourceCustomization firstVnfResourceCustomizationByModelInstanceNameAndVnfResources =
                 client.getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources("vSAMP10a 1", vnfr);
-        Assert.assertNotNull(firstVnfResourceCustomizationByModelInstanceNameAndVnfResources);
-        Assert.assertEquals("vSAMP", firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getNfRole());
-        Assert.assertEquals("vSAMP10a 1",
+        assertNotNull(firstVnfResourceCustomizationByModelInstanceNameAndVnfResources);
+        assertEquals("vSAMP", firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getNfRole());
+        assertEquals("vSAMP10a 1",
                 firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getModelInstanceName());
-        Assert.assertNotNull(firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getVnfResources());
-        Assert.assertNotNull(
-                firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getVfModuleCustomizations());
+        assertNotNull(firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getVnfResources());
+        assertNotNull(firstVnfResourceCustomizationByModelInstanceNameAndVnfResources.getVfModuleCustomizations());
     }
 
     @Test
     public void testGetFirstVnfRecipeByNfRoleAndAction() {
         VnfRecipe vnfRecipe = client.getFirstVnfRecipeByNfRoleAndAction("GR-API-DEFAULT", "createInstance");
-        Assert.assertNotNull(vnfRecipe);
-        Assert.assertNotNull(vnfRecipe.getNfRole());
-        Assert.assertNotNull(vnfRecipe.getAction());
-        Assert.assertEquals("Gr api recipe to create vnf", vnfRecipe.getDescription());
-        Assert.assertEquals("/mso/async/services/WorkflowActionBB", vnfRecipe.getOrchestrationUri());
+        assertNotNull(vnfRecipe);
+        assertNotNull(vnfRecipe.getNfRole());
+        assertNotNull(vnfRecipe.getAction());
+        assertEquals("Gr api recipe to create vnf", vnfRecipe.getDescription());
+        assertEquals("/mso/async/services/WorkflowActionBB", vnfRecipe.getOrchestrationUri());
     }
 
     @Test
     public void testGetFirstVnfRecipeByNfRoleAndActionNotFound() {
         VnfRecipe vnfRecipe = client.getFirstVnfRecipeByNfRoleAndAction(UUID.randomUUID().toString(), "createInstance");
-        Assert.assertNull(vnfRecipe);
+        assertNull(vnfRecipe);
     }
 
     @Test
@@ -340,12 +336,12 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         VnfComponentsRecipe vnfComponentsRecipe =
                 client.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
                         "20c4431c-246d-11e7-93ae-92361f002671", "volumeGroup", "createInstance");
-        Assert.assertNotNull(vnfComponentsRecipe);
-        Assert.assertNotNull(vnfComponentsRecipe.getAction());
-        Assert.assertNotNull(vnfComponentsRecipe.getVfModuleModelUUID());
-        Assert.assertNotNull(vnfComponentsRecipe.getVnfComponentType());
-        Assert.assertEquals("Gr api recipe to create volume-group", vnfComponentsRecipe.getDescription());
-        Assert.assertEquals("/mso/async/services/WorkflowActionBB", vnfComponentsRecipe.getOrchestrationUri());
+        assertNotNull(vnfComponentsRecipe);
+        assertNotNull(vnfComponentsRecipe.getAction());
+        assertNotNull(vnfComponentsRecipe.getVfModuleModelUUID());
+        assertNotNull(vnfComponentsRecipe.getVnfComponentType());
+        assertEquals("Gr api recipe to create volume-group", vnfComponentsRecipe.getDescription());
+        assertEquals("/mso/async/services/WorkflowActionBB", vnfComponentsRecipe.getOrchestrationUri());
 
     }
 
@@ -355,80 +351,79 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         VnfComponentsRecipe vnfComponentsRecipe =
                 client.getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
                         UUID.randomUUID().toString(), "volumeGroup", "createInstance");
-        Assert.assertNull(vnfComponentsRecipe);
+        assertNull(vnfComponentsRecipe);
     }
 
     @Test
     public void testGetFirstVnfComponentsRecipeByVnfComponentTypeAndAction() {
         VnfComponentsRecipe vnfComponentsRecipe =
                 client.getFirstVnfComponentsRecipeByVnfComponentTypeAndAction("volumeGroup", "createInstance");
-        Assert.assertNotNull(vnfComponentsRecipe);
-        Assert.assertNotNull(vnfComponentsRecipe.getAction());
-        Assert.assertNotNull(vnfComponentsRecipe.getVnfComponentType());
-        Assert.assertEquals("VID_DEFAULT recipe t", vnfComponentsRecipe.getDescription());
-        Assert.assertEquals("/mso/async/services/CreateVfModuleVolumeInfraV1",
-                vnfComponentsRecipe.getOrchestrationUri());
+        assertNotNull(vnfComponentsRecipe);
+        assertNotNull(vnfComponentsRecipe.getAction());
+        assertNotNull(vnfComponentsRecipe.getVnfComponentType());
+        assertEquals("VID_DEFAULT recipe t", vnfComponentsRecipe.getDescription());
+        assertEquals("/mso/async/services/CreateVfModuleVolumeInfraV1", vnfComponentsRecipe.getOrchestrationUri());
     }
 
     @Test
     public void testGetServiceByModelVersionAndModelInvariantUUID() {
         Service service =
                 client.getServiceByModelVersionAndModelInvariantUUID("2.0", "9647dfc4-2083-11e7-93ae-92361f002671");
-        Assert.assertNotNull(service);
-        Assert.assertNotNull(service.getModelVersion());
-        Assert.assertNotNull(service.getModelInvariantUUID());
-        Assert.assertEquals("MSOTADevInfra_vSAMP10a_Service", service.getModelName());
-        Assert.assertEquals("NA", service.getServiceRole());
+        assertNotNull(service);
+        assertNotNull(service.getModelVersion());
+        assertNotNull(service.getModelInvariantUUID());
+        assertEquals("MSOTADevInfra_vSAMP10a_Service", service.getModelName());
+        assertEquals("NA", service.getServiceRole());
     }
 
     @Test
     public void testGetServiceByModelVersionAndModelInvariantUUIDNotFound() {
         Service service = client.getServiceByModelVersionAndModelInvariantUUID("2.0", UUID.randomUUID().toString());
-        Assert.assertNull(service);
+        assertNull(service);
     }
 
     @Test
     public void testGetVfModuleByModelInvariantUUIDAndModelVersion() {
         VfModule vfModule =
                 client.getVfModuleByModelInvariantUUIDAndModelVersion("78ca26d0-246d-11e7-93ae-92361f002671", "2");
-        Assert.assertNotNull(vfModule);
-        Assert.assertNotNull(vfModule.getModelVersion());
-        Assert.assertNotNull(vfModule.getModelInvariantUUID());
-        Assert.assertEquals("vSAMP10aDEV::base::module-0", vfModule.getModelName());
-        Assert.assertEquals("vSAMP10a DEV Base", vfModule.getDescription());
+        assertNotNull(vfModule);
+        assertNotNull(vfModule.getModelVersion());
+        assertNotNull(vfModule.getModelInvariantUUID());
+        assertEquals("vSAMP10aDEV::base::module-0", vfModule.getModelName());
+        assertEquals("vSAMP10a DEV Base", vfModule.getDescription());
     }
 
     @Test
     public void testGetVfModuleByModelInvariantUUIDAndModelVersionNotFound() {
         VfModule vfModule = client.getVfModuleByModelInvariantUUIDAndModelVersion(UUID.randomUUID().toString(), "2");
-        Assert.assertNull(vfModule);
+        assertNull(vfModule);
     }
 
     @Test
     public void testGetServiceByModelInvariantUUIDOrderByModelVersionDesc() {
         List<Service> serviceList =
                 client.getServiceByModelInvariantUUIDOrderByModelVersionDesc("9647dfc4-2083-11e7-93ae-92361f002671");
-        Assert.assertFalse(serviceList.isEmpty());
-        Assert.assertEquals(2, serviceList.size());
+        assertFalse(serviceList.isEmpty());
+        assertEquals(2, serviceList.size());
         Service service = serviceList.get(0);
-        Assert.assertEquals("2.0", service.getModelVersion());
+        assertEquals("2.0", service.getModelVersion());
     }
 
     @Test
     public void testGetServiceByModelInvariantUUIDOrderByModelVersionDescNotFound() {
         List<Service> serviceList =
                 client.getServiceByModelInvariantUUIDOrderByModelVersionDesc(UUID.randomUUID().toString());
-        Assert.assertTrue(serviceList.isEmpty());
+        assertTrue(serviceList.isEmpty());
     }
 
     @Test
     public void testGetVfModuleByModelInvariantUUIDOrderByModelVersionDesc() {
         List<VfModule> moduleList =
                 client.getVfModuleByModelInvariantUUIDOrderByModelVersionDesc("78ca26d0-246d-11e7-93ae-92361f002671");
-        Assert.assertFalse(moduleList.isEmpty());
-        Assert.assertEquals(2, moduleList.size());
+        assertFalse(moduleList.isEmpty());
+        assertEquals(2, moduleList.size());
         VfModule module = moduleList.get(0);
-        Assert.assertEquals("vSAMP10a DEV Base", module.getDescription());
+        assertEquals("vSAMP10a DEV Base", module.getDescription());
     }
 
     @Test
@@ -454,20 +449,20 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         cloudSite.setIdentityService(cloudIdentity);
         localClient.postCloudSite(cloudSite);
         CloudSite getCloudSite = this.client.getCloudSite("MTN6");
-        Assert.assertNotNull(getCloudSite);
-        Assert.assertNotNull(getCloudSite.getIdentityService());
-        Assert.assertEquals("TESTCLLI", getCloudSite.getClli());
-        Assert.assertEquals("regionId", getCloudSite.getRegionId());
-        Assert.assertEquals("RANDOMID", getCloudSite.getIdentityServiceId());
+        assertNotNull(getCloudSite);
+        assertNotNull(getCloudSite.getIdentityService());
+        assertEquals("TESTCLLI", getCloudSite.getClli());
+        assertEquals("regionId", getCloudSite.getRegionId());
+        assertEquals("RANDOMID", getCloudSite.getIdentityServiceId());
     }
 
     @Test
     public void testGetHomingInstance() {
         HomingInstance homingInstance = client.getHomingInstance("5df8b6de-2083-11e7-93ae-92361f232671");
-        Assert.assertNotNull(homingInstance);
-        Assert.assertNotNull(homingInstance.getCloudOwner());
-        Assert.assertNotNull(homingInstance.getCloudRegionId());
-        Assert.assertNotNull(homingInstance.getOofDirectives());
+        assertNotNull(homingInstance);
+        assertNotNull(homingInstance.getCloudOwner());
+        assertNotNull(homingInstance.getCloudRegionId());
+        assertNotNull(homingInstance.getOofDirectives());
     }
 
     @Test
@@ -491,43 +486,43 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
                 + "\"id\": \"vsink\"\n" + "}\n" + "]\n" + "}");
         localClient.postHomingInstance(homingInstance);
         HomingInstance getHomingInstance = this.client.getHomingInstance("5df8d6be-2083-11e7-93ae-92361f232671");
-        Assert.assertNotNull(getHomingInstance);
-        Assert.assertNotNull(getHomingInstance.getCloudRegionId());
-        Assert.assertNotNull(getHomingInstance.getCloudOwner());
-        Assert.assertEquals("CloudOwner-1", getHomingInstance.getCloudOwner());
-        Assert.assertEquals("CloudRegionOne", getHomingInstance.getCloudRegionId());
+        assertNotNull(getHomingInstance);
+        assertNotNull(getHomingInstance.getCloudRegionId());
+        assertNotNull(getHomingInstance.getCloudOwner());
+        assertEquals("CloudOwner-1", getHomingInstance.getCloudOwner());
+        assertEquals("CloudRegionOne", getHomingInstance.getCloudRegionId());
     }
 
     @Test
     public void testGetServiceByModelName() {
         Service service = client.getServiceByModelName("MSOTADevInfra_Test_Service");
-        Assert.assertNotNull(service);
-        Assert.assertNotNull(service.getModelVersion());
-        Assert.assertNotNull(service.getModelInvariantUUID());
-        Assert.assertEquals("MSOTADevInfra_Test_Service", service.getModelName());
-        Assert.assertEquals("NA", service.getServiceRole());
+        assertNotNull(service);
+        assertNotNull(service.getModelVersion());
+        assertNotNull(service.getModelInvariantUUID());
+        assertEquals("MSOTADevInfra_Test_Service", service.getModelName());
+        assertEquals("NA", service.getServiceRole());
     }
 
     @Test
     public void testGetServiceByModelNameNotFound() {
         Service service = client.getServiceByModelName("Not_Found");
-        Assert.assertNull(service);
+        assertNull(service);
     }
 
     @Test
     public void testGetServiceByModelUUID() {
         Service service = client.getServiceByModelUUID("5df8b6de-2083-11e7-93ae-92361f002679");
-        Assert.assertNotNull(service);
-        Assert.assertNotNull(service.getModelVersion());
-        Assert.assertNotNull(service.getModelInvariantUUID());
-        Assert.assertEquals("5df8b6de-2083-11e7-93ae-92361f002679", service.getModelUUID());
-        Assert.assertEquals("NA", service.getServiceRole());
+        assertNotNull(service);
+        assertNotNull(service.getModelVersion());
+        assertNotNull(service.getModelInvariantUUID());
+        assertEquals("5df8b6de-2083-11e7-93ae-92361f002679", service.getModelUUID());
+        assertEquals("NA", service.getServiceRole());
     }
 
     @Test
     public void testGetServiceByModelUUIDNotFound() {
         Service service = client.getServiceByModelUUID("Not_Found");
-        Assert.assertNull(service);
+        assertNull(service);
     }
 
     @Test
@@ -539,53 +534,52 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         northBoundRequest.setCloudOwner("my-custom-cloud-owner");
         client.getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner("createService", "service", true,
                 "my-custom-cloud-owner");
-        Assert.assertNotNull(northBoundRequest);
-        Assert.assertEquals("createService", northBoundRequest.getAction());
-        Assert.assertEquals("service", northBoundRequest.getRequestScope());
-        Assert.assertEquals(true, northBoundRequest.getIsAlacarte());
-        Assert.assertEquals("my-custom-cloud-owner", northBoundRequest.getCloudOwner());
+        assertNotNull(northBoundRequest);
+        assertEquals("createService", northBoundRequest.getAction());
+        assertEquals("service", northBoundRequest.getRequestScope());
+        assertEquals(true, northBoundRequest.getIsAlacarte());
+        assertEquals("my-custom-cloud-owner", northBoundRequest.getCloudOwner());
     }
 
     @Test
     public void testFindServiceRecipeByActionAndServiceModelUUID() {
         ServiceRecipe serviceRecipe = client.findServiceRecipeByActionAndServiceModelUUID("createInstance",
                 "4694a55f-58b3-4f17-92a5-796d6f5ffd0d");
-        Assert.assertNotNull(serviceRecipe);
-        Assert.assertNotNull(serviceRecipe.getServiceModelUUID());
-        Assert.assertNotNull(serviceRecipe.getAction());
-        Assert.assertEquals("/mso/async/services/CreateGenericALaCarteServiceInstance",
-                serviceRecipe.getOrchestrationUri());
-        Assert.assertEquals("MSOTADevInfra aLaCarte", serviceRecipe.getDescription());
+        assertNotNull(serviceRecipe);
+        assertNotNull(serviceRecipe.getServiceModelUUID());
+        assertNotNull(serviceRecipe.getAction());
+        assertEquals("/mso/async/services/CreateGenericALaCarteServiceInstance", serviceRecipe.getOrchestrationUri());
+        assertEquals("MSOTADevInfra aLaCarte", serviceRecipe.getDescription());
     }
 
     @Test
     public void testFindServiceRecipeByActionAndServiceModelUUIDNotFound() {
         ServiceRecipe serviceRecipe =
                 client.findServiceRecipeByActionAndServiceModelUUID("not_found", "5df8b6de-2083-11e7-93ae-test");
-        Assert.assertNull(serviceRecipe);
+        assertNull(serviceRecipe);
     }
 
     @Test
     public void testFindExternalToInternalServiceByServiceName() {
         ExternalServiceToInternalService externalServiceToInternalService =
                 client.findExternalToInternalServiceByServiceName("MySpecialServiceName");
-        Assert.assertNotNull(externalServiceToInternalService);
-        Assert.assertNotNull(externalServiceToInternalService.getServiceName());
-        Assert.assertNotNull(externalServiceToInternalService.getServiceModelUUID());
-        Assert.assertEquals("MySpecialServiceName", externalServiceToInternalService.getServiceName());
+        assertNotNull(externalServiceToInternalService);
+        assertNotNull(externalServiceToInternalService.getServiceName());
+        assertNotNull(externalServiceToInternalService.getServiceModelUUID());
+        assertEquals("MySpecialServiceName", externalServiceToInternalService.getServiceName());
     }
 
     @Test
     public void testFindExternalToInternalServiceByServiceNameNotFound() {
         ExternalServiceToInternalService externalServiceToInternalService =
                 client.findExternalToInternalServiceByServiceName("Not_Found");
-        Assert.assertNull(externalServiceToInternalService);
+        assertNull(externalServiceToInternalService);
     }
 
     @Test
     public void getPnfResourceByModelUUID_validUuid_expectedOutput() {
         PnfResource pnfResource = client.getPnfResourceByModelUUID("ff2ae348-214a-11e7-93ae-92361f002680");
-        Assert.assertNotNull(pnfResource);
+        assertNotNull(pnfResource);
         assertEquals("PNFResource modelUUID", "ff2ae348-214a-11e7-93ae-92361f002680", pnfResource.getModelUUID());
         assertEquals("PNFResource modelInvariantUUID", "2fff5b20-214b-11e7-93ae-92361f002680",
                 pnfResource.getModelInvariantUUID());
@@ -596,7 +590,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     @Test
     public void getPnfResourceByModelUUID_invalidUuid_NullOutput() {
         PnfResource pnfResource = client.getPnfResourceByModelUUID(UUID.randomUUID().toString());
-        Assert.assertNull(pnfResource);
+        assertNull(pnfResource);
     }
 
     @Test
@@ -620,7 +614,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     public void getPnfResourceCustomizationByModelCustomizationUUID_invalidUuid_nullOutput() {
         PnfResourceCustomization pnfResourceCustomization =
                 client.getPnfResourceCustomizationByModelCustomizationUUID(UUID.randomUUID().toString());
-        Assert.assertNull(pnfResourceCustomization);
+        assertNull(pnfResourceCustomization);
     }
 
     @Test
@@ -650,6 +644,53 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
         assertEquals(0, pnfResourceCustomizationList.size());
     }
 
+    @Test
+    public void testGetServiceTopologyById() throws Exception {
+        org.onap.so.rest.catalog.beans.Service serviceByID =
+                client.getServiceModelInformation("5df8b6de-2083-11e7-93ae-92361f002671", "2");
+        assertNotNull(serviceByID);
+        assertEquals("MSOTADevInfra_vSAMP10a_Service", serviceByID.getModelName());
+        assertEquals("NA", serviceByID.getServiceType());
+        assertEquals("NA", serviceByID.getServiceRole());
+    }
+
+    @Test
+    public void testGetServices() throws Exception {
+        List<org.onap.so.rest.catalog.beans.Service> services = client.getServices();
+        assertEquals(false, services.isEmpty());
+    }
+
+    @Test
+    public void testVnf() throws Exception {
+        org.onap.so.rest.catalog.beans.Vnf vnf = client.getVnfModelInformation("5df8b6de-2083-11e7-93ae-92361f002671",
+                "68dc9a92-214c-11e7-93ae-92361f002671", "0");
+        assertNotNull(vnf);
+        assertEquals("vSAMP10a", vnf.getModelName());
+        assertEquals(false, vnf.getNfDataValid());
+        assertEquals("vSAMP", vnf.getNfFunction());
+        assertEquals("vSAMP", vnf.getNfNamingCode());
+        assertEquals("vSAMP", vnf.getNfRole());
+        assertEquals("vSAMP", vnf.getNfType());
+
+        vnf.setNfDataValid(true);
+        vnf.setNfFunction("nfFunction");
+        vnf.setNfRole("nfRole");
+        vnf.setNfType("nfType");
+        vnf.setNfNamingCode("nfNamingCode");
+
+        client.updateVnf("5df8b6de-2083-11e7-93ae-92361f002671", vnf);
+        vnf = client.getVnfModelInformation("5df8b6de-2083-11e7-93ae-92361f002671",
+                "68dc9a92-214c-11e7-93ae-92361f002671", "0");
+        assertEquals("vSAMP10a", vnf.getModelName());
+        assertEquals(true, vnf.getNfDataValid());
+        assertEquals("nfFunction", vnf.getNfFunction());
+        assertEquals("nfNamingCode", vnf.getNfNamingCode());
+        assertEquals("nfRole", vnf.getNfRole());
+        assertEquals("nfType", vnf.getNfType());
+
+
+    }
+
     @Test
     public void getWorkflowByArtifactUUID_validUuid_expectedOutput() {
         Workflow workflow = client.findWorkflowByArtifactUUID("5b0c4322-643d-4c9f-b184-4516049e99b1");
@@ -659,7 +700,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     @Test
     public void getWorkflowByArtifactUUID_invalidUuid_nullOutput() {
         Workflow workflow = client.findWorkflowByArtifactUUID(UUID.randomUUID().toString());
-        Assert.assertNull(workflow);
+        assertNull(workflow);
     }
 
     @Test
@@ -674,7 +715,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     @Test
     public void getWorkflowByModelUUID_invalidUuid_nullOutput() {
         Workflow workflow = client.findWorkflowByArtifactUUID(UUID.randomUUID().toString());
-        Assert.assertNull(workflow);
+        assertNull(workflow);
     }
 
     @Test
@@ -689,7 +730,7 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest {
     @Test
     public void getWorkflowBySource_invalidSource_nullOutput() {
         List<Workflow> workflow = client.findWorkflowBySource("abc");
-        Assert.assertNull(workflow);
+        assertNull(workflow);
     }
 
 }
index cc5145f..2dc83c8 100644 (file)
@@ -23,6 +23,7 @@
       "toscaNodeType": "toscaNodeType",
       "nfFunction": "nfFunction",
       "nfRole": "nfRole",
+      "nfType": "nfType",
       "nfNamingCode": "nfNamingCode",
       "multiStageDesign": "multiStageDesign",
       "orchestrationMode": "orchestrationMode",
index 7b3ffd7..9406bc4 100644 (file)
@@ -1109,6 +1109,7 @@ CREATE TABLE `vnf_resource_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_MODEL_UUID` varchar(200) NOT NULL,
+  `NF_DATA_VALID` tinyint(1) DEFAULT '0',
   `VNFCINSTANCEGROUP_ORDER` varchar(200) default NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UK_vnf_resource_customization` (`MODEL_CUSTOMIZATION_UUID`,`SERVICE_MODEL_UUID`),
index 652fc8f..ad6b156 100644 (file)
@@ -1113,6 +1113,7 @@ CREATE TABLE `vnf_resource_customization` (
   `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_MODEL_UUID` varchar(200) NOT NULL,
   `VNFCINSTANCEGROUP_ORDER` varchar(200) default NULL,
+  `NF_DATA_VALID` tinyint(1) DEFAULT '0',  
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UK_vnf_resource_customization` (`MODEL_CUSTOMIZATION_UUID`,`SERVICE_MODEL_UUID`),
   KEY `fk_vnf_resource_customization__vnf_resource1_idx` (`VNF_RESOURCE_MODEL_UUID`),
index 68cda5c..69151ff 100644 (file)
@@ -27,9 +27,9 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.listener.ListenerRunner;
 import org.onap.so.bpmn.common.listener.flowmanipulator.FlowManipulatorListenerRunner;
 import org.onap.so.db.request.beans.InfraActiveRequests;
+import org.onap.so.listener.ListenerRunner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
index 5f4dc87..ea7de68 100644 (file)
@@ -27,8 +27,8 @@ import java.util.Optional;
 import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.listener.ListenerRunner;
 import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock;
+import org.onap.so.listener.ListenerRunner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
index 040522b..02cddf3 100644 (file)
@@ -28,9 +28,11 @@ import org.camunda.bpm.engine.delegate.DelegateExecution;
 import org.javatuples.Pair;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.common.DelegateExecutionImpl;
-import org.onap.so.bpmn.common.listener.ListenerRunner;
+import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.listener.ListenerRunner;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 
@@ -47,6 +49,9 @@ public abstract class FlowValidatorRunner<S extends FlowValidator, E extends Flo
 
     private static Logger logger = LoggerFactory.getLogger(FlowValidatorRunner.class);
 
+    @Autowired
+    protected ExceptionBuilder exceptionBuilder;
+
     protected List<S> preFlowValidators;
     protected List<E> postFlowValidators;
 
index 2c0377d..f4fe6d7 100644 (file)
@@ -47,7 +47,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes = {ValidationConfig.class})
-public class BuildingBlockValidatorRunnerTest {
+public class BuildingBlockValidatorRunnerTest extends BuildingBlockValidatorRunner {
 
     @Rule
     public ExpectedException thrown = ExpectedException.none();
index 0143e56..596eced 100644 (file)
@@ -45,7 +45,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @ContextConfiguration(classes = {ValidationConfig.class})
-public class WorkflowValidatorRunnerTest {
+public class WorkflowValidatorRunnerTest extends WorkflowValidatorRunner {
 
     @Rule
     public ExpectedException thrown = ExpectedException.none();
index af64ed2..544d370 100644 (file)
@@ -23,8 +23,8 @@ package org.onap.so.bpmn.common.listener.validation;
 import java.util.Collections;
 import java.util.Optional;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.listener.Skip;
 import org.onap.so.bpmn.common.listener.validation.PreBuildingBlockValidator;
+import org.onap.so.listener.Skip;
 import org.springframework.stereotype.Component;
 
 @Component
index 068f433..a3692a5 100644 (file)
 package org.onap.so.bpmn.common.listener.validation;
 
 import org.onap.so.bpmn.common.DefaultToShortClassNameBeanNameGenerator;
-import org.onap.so.bpmn.common.listener.ListenerRunner;
 import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.listener.ListenerRunner;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
-@ComponentScan(basePackageClasses = {ExceptionBuilder.class, ListenerRunner.class},
+@ComponentScan(basePackageClasses = {ExceptionBuilder.class, ListenerRunner.class, WorkflowValidatorRunner.class},
         nameGenerator = DefaultToShortClassNameBeanNameGenerator.class)
 public class ValidationConfig {
 
index 68cfd48..bd60fbe 100644 (file)
@@ -71,6 +71,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Component;
+import com.google.common.base.Strings;
 
 @Component
 public class AAICreateTasks {
@@ -184,24 +185,35 @@ public class AAICreateTasks {
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             OwningEntity owningEntity = serviceInstance.getOwningEntity();
-            String owningEntityId = owningEntity.getOwningEntityId();
-            String owningEntityName = owningEntity.getOwningEntityName();
-            if (owningEntityId == null || "".equals(owningEntityId)) {
-                String msg = "Exception in AAICreateOwningEntity. OwningEntityId is null.";
+            if (Strings.isNullOrEmpty(owningEntity.getOwningEntityId())
+                    && Strings.isNullOrEmpty(owningEntity.getOwningEntityName())) {
+                String msg = "Exception in AAICreateOwningEntity. OwningEntityId and Name are null.";
                 execution.setVariable("ErrorCreateOEAAI", msg);
                 exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
+            } else if (Strings.isNullOrEmpty(owningEntity.getOwningEntityId())
+                    && !Strings.isNullOrEmpty(owningEntity.getOwningEntityName())) {
+                if (aaiSIResources.existsOwningEntityName(owningEntity.getOwningEntityName())) {
+                    org.onap.aai.domain.yang.OwningEntity aaiEntity =
+                            aaiSIResources.getOwningEntityByName(owningEntity.getOwningEntityName());
+                    owningEntity.setOwningEntityId(aaiEntity.getOwningEntityId());
+                    owningEntity.setOwningEntityName(owningEntity.getOwningEntityName());
+                    aaiSIResources.connectOwningEntityandServiceInstance(owningEntity, serviceInstance);
+                } else {
+                    owningEntity.setOwningEntityId(UUID.randomUUID().toString());
+                    aaiSIResources.createOwningEntityandConnectServiceInstance(owningEntity, serviceInstance);
+                }
             } else {
                 if (aaiSIResources.existsOwningEntity(owningEntity)) {
                     aaiSIResources.connectOwningEntityandServiceInstance(owningEntity, serviceInstance);
                 } else {
-                    if (owningEntityName == null || "".equals(owningEntityName)) {
+                    if (Strings.isNullOrEmpty(owningEntity.getOwningEntityName())) {
                         String msg =
                                 "Exception in AAICreateOwningEntity. Can't create an owningEntity with no owningEntityName.";
                         logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg, "BPMN",
                                 ErrorCode.UnknownError.getValue(), msg);
                         exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg);
                     } else {
-                        if (aaiSIResources.existsOwningEntityName(owningEntityName)) {
+                        if (aaiSIResources.existsOwningEntityName(owningEntity.getOwningEntityName())) {
                             String msg =
                                     "Exception in AAICreateOwningEntity. Can't create OwningEntity as name already exists in AAI associated with a different owning-entity-id (name must be unique)";
                             logger.error(LoggingAnchor.FIVE, MessageEnum.BPMN_GENERAL_EXCEPTION_ARG.toString(), msg,
index fc3f2ae..52d2949 100644 (file)
@@ -23,10 +23,10 @@ package org.onap.so.bpmn.infrastructure.validations;
 import java.util.Optional;
 import java.util.regex.Pattern;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
-import org.onap.so.bpmn.common.listener.Skip;
 import org.onap.so.bpmn.common.listener.validation.PreBuildingBlockValidator;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.client.exception.ExceptionBuilder;
+import org.onap.so.listener.Skip;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIEntityNotFoundException.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIEntityNotFoundException.java
new file mode 100644 (file)
index 0000000..5f65e5d
--- /dev/null
@@ -0,0 +1,16 @@
+package org.onap.so.client.orchestration;
+
+public class AAIEntityNotFoundException extends Exception {
+
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -107868951852460677L;
+
+    public AAIEntityNotFoundException(String error) {
+        super(error);
+    }
+
+
+
+}
index c41f3fa..fc15285 100644 (file)
@@ -22,7 +22,9 @@
 
 package org.onap.so.client.orchestration;
 
+import java.util.List;
 import java.util.Optional;
+import org.onap.aai.domain.yang.OwningEntities;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
@@ -120,6 +122,25 @@ public class AAIServiceInstanceResources {
         return aaiRC.exists(owningEntityUri);
     }
 
+    public org.onap.aai.domain.yang.OwningEntity getOwningEntityByName(String owningEntityName)
+            throws AAIEntityNotFoundException {
+        AAIResourceUri owningEntityUri = AAIUriFactory.createResourceUri(AAIObjectPlurals.OWNING_ENTITY)
+                .queryParam("owning-entity-name", owningEntityName);
+        AAIResourcesClient aaiRC = injectionHelper.getAaiClient();
+        Optional<OwningEntities> owningEntities = aaiRC.get(OwningEntities.class, owningEntityUri);
+        if (owningEntities.isPresent()) {
+            List<org.onap.aai.domain.yang.OwningEntity> owningEntityList = owningEntities.get().getOwningEntity();
+            if (owningEntityList.size() > 1) {
+                throw new AAIEntityNotFoundException(
+                        "Non unique result returned for owning entity name: " + owningEntityName);
+            } else {
+                return owningEntityList.get(0);
+            }
+        } else {
+            throw new AAIEntityNotFoundException("No result returned for owning entity name: " + owningEntityName);
+        }
+    }
+
     public void connectOwningEntityandServiceInstance(OwningEntity owningEntity, ServiceInstance serviceInstance) {
         AAIResourceUri owningEntityURI =
                 AAIUriFactory.createResourceUri(AAIObjectType.OWNING_ENTITY, owningEntity.getOwningEntityId());
index ed3ec75..a8550d8 100644 (file)
@@ -54,16 +54,16 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
-import org.onap.so.client.aai.entities.uri.AAIResourceUri;
-import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
 
 public class AAICreateTasksTest extends BaseTaskTest {
 
@@ -271,24 +271,6 @@ public class AAICreateTasksTest extends BaseTaskTest {
                 .createOwningEntityandConnectServiceInstance(serviceInstance.getOwningEntity(), serviceInstance);
     }
 
-    @Test
-    public void createOwningEntityNullOwningEntityIdTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-
-        serviceInstance.getOwningEntity().setOwningEntityId(null);
-
-        aaiCreateTasks.createOwningEntity(execution);
-    }
-
-    @Test
-    public void createOwningEntityEmptyOwningEntityIdTest() throws Exception {
-        expectedException.expect(BpmnError.class);
-
-        serviceInstance.getOwningEntity().setOwningEntityId("");
-
-        aaiCreateTasks.createOwningEntity(execution);
-    }
-
     @Test
     public void createOwningEntityNullOwningEntityNameTest() throws Exception {
         expectedException.expect(BpmnError.class);
index a528971..2553038 100644 (file)
       <version>${grpc.version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.javatuples</groupId>
+      <artifactId>javatuples</artifactId>
+      <version>1.2</version>
+    </dependency>
 
   </dependencies>
   <dependencyManagement>
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.bpmn.common.listener;
+package org.onap.so.listener;
 
 import java.lang.annotation.Annotation;
 import java.util.Comparator;
@@ -27,7 +27,6 @@ import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import javax.annotation.Priority;
-import org.onap.so.client.exception.ExceptionBuilder;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 
@@ -36,10 +35,7 @@ public abstract class ListenerRunner {
     @Autowired
     protected ApplicationContext context;
 
-    @Autowired
-    protected ExceptionBuilder exceptionBuilder;
-
-    protected <T> List<T> filterListeners(List<T> validators, Predicate<T> predicate) {
+    public <T> List<T> filterListeners(List<T> validators, Predicate<T> predicate) {
         return validators.stream().filter(item -> {
             return !item.getClass().isAnnotationPresent(Skip.class) && predicate.test(item);
         }).sorted(Comparator.comparing(item -> {
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.bpmn.common.listener;
+package org.onap.so.listener;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
index 9fceed1..a72229a 100644 (file)
@@ -57,6 +57,9 @@ public class RequestParameters implements Serializable {
     @JsonProperty("rebuildVolumeGroups")
     private Boolean rebuildVolumeGroups;
 
+    @JsonProperty("enforceValidNfValues")
+    private Boolean enforceValidNfValues = false;
+
     @Override
     public String toString() {
         return new ToStringBuilder(this).append("subscriptionServiceType", subscriptionServiceType)
@@ -64,7 +67,15 @@ public class RequestParameters implements Serializable {
                 .append("usePreload", usePreload).append("autoBuildVfModules", autoBuildVfModules)
                 .append("cascadeDelete", cascadeDelete).append("testApi", testApi)
                 .append("retainAssignments", retainAssignments).append("rebuildVolumeGroups", rebuildVolumeGroups)
-                .toString();
+                .append("enforceValidNfValues", enforceValidNfValues).toString();
+    }
+
+    public Boolean getEnforceValidNfValues() {
+        return enforceValidNfValues;
+    }
+
+    public void setEnforceValidNfValues(Boolean enforceValidNfValues) {
+        this.enforceValidNfValues = enforceValidNfValues;
     }
 
     public String getSubscriptionServiceType() {
index c7f6459..ab2ce10 100644 (file)
@@ -29,7 +29,7 @@ public abstract class ApiException extends Exception {
     * 
     */
     private static final long serialVersionUID = 683162058616691134L;
-    private int httpResponseCode;
+    private int httpResponseCode = 500;
     private String messageID;
     private ErrorLoggerInfo errorLoggerInfo;
 
@@ -49,6 +49,15 @@ public abstract class ApiException extends Exception {
         super(message, cause);
     }
 
+    public ApiException(String message, int httpResponseCode) {
+        super(message);
+        this.httpResponseCode = httpResponseCode;
+    }
+
+    public ApiException(String message) {
+        super(message);
+    }
+
     public String getMessageID() {
         return messageID;
     }
index 66b86a6..6a56b58 100644 (file)
@@ -70,7 +70,7 @@ public class ApiExceptionMapper implements ExceptionMapper<ApiException> {
 
     @Override
     public Response toResponse(ApiException exception) {
-
+        logger.error("Error During API Call", exception);
         return Response.status(exception.getHttpResponseCode()).entity(buildErrorString(exception)).build();
     }
 
index 372ed30..ae8256e 100644 (file)
@@ -28,6 +28,11 @@ public class ValidateException extends ApiException {
     }
 
 
+    public ValidateException(String errorMessage, int httpResponseCode) {
+        super(errorMessage, httpResponseCode);
+    }
+
+
     public static class Builder extends ApiException.Builder<Builder> {
 
         public Builder(String message, int httpResponseCode, String messageID) {
index b6f3f82..2fddfd9 100644 (file)
@@ -479,24 +479,11 @@ public class RequestHandlerUtils extends AbstractRestHandler {
             boolean isAlaCarte, Actions action) throws IOException {
         ObjectMapper mapper = new ObjectMapper();
         mapper.setSerializationInclusion(Include.NON_NULL);
-        if (msoRawRequest != null) {
-            ServiceInstancesRequest sir = mapper.readValue(msoRawRequest, ServiceInstancesRequest.class);
-            if (serviceInstRequest != null && serviceInstRequest.getRequestDetails() != null
-                    && serviceInstRequest.getRequestDetails().getRequestParameters() != null) {
-                if (!isAlaCarte && Action.createInstance.equals(action)) {
-                    sir.getRequestDetails()
-                            .setCloudConfiguration(serviceInstRequest.getRequestDetails().getCloudConfiguration());
-                    sir.getRequestDetails().getRequestParameters().setUserParams(
-                            serviceInstRequest.getRequestDetails().getRequestParameters().getUserParams());
-                }
-                sir.getRequestDetails().getRequestParameters()
-                        .setUsePreload(serviceInstRequest.getRequestDetails().getRequestParameters().getUsePreload());
-            }
-
-            logger.debug("Value as string: {}", mapper.writeValueAsString(sir));
-            return mapper.writeValueAsString(sir);
+        if (serviceInstRequest != null) {
+            return mapper.writeValueAsString(serviceInstRequest);
+        } else {
+            return msoRawRequest;
         }
-        return null;
     }
 
     public Optional<String> retrieveModelName(RequestParameters requestParams) {
index 5b827d9..b1d3898 100644 (file)
@@ -51,6 +51,7 @@ import org.onap.so.apihandlerinfra.exceptions.RecipeNotFoundException;
 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
 import org.onap.so.apihandlerinfra.exceptions.ValidateException;
 import org.onap.so.apihandlerinfra.infra.rest.handler.AbstractRestHandler;
+import org.onap.so.apihandlerinfra.infra.rest.validators.RequestValidatorListenerRunner;
 import org.onap.so.apihandlerinfra.logging.ErrorLoggerInfo;
 import org.onap.so.constants.Status;
 import org.onap.so.db.catalog.beans.NetworkResource;
@@ -124,6 +125,9 @@ public class ServiceInstances extends AbstractRestHandler {
     @Autowired
     private RequestHandlerUtils requestHandlerUtils;
 
+    @Autowired
+    private RequestValidatorListenerRunner requestValidatorListenerRunner;
+
     @POST
     @Path("/{version:[vV][5-7]}/serviceInstances")
     @Consumes(MediaType.APPLICATION_JSON)
@@ -764,6 +768,13 @@ public class ServiceInstances extends AbstractRestHandler {
 
     public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
             String version, String requestId, String requestUri) throws ApiException {
+        return serviceInstances(requestJSON, action, instanceIdMap, version, requestId, requestUri, null);
+
+    }
+
+    public Response serviceInstances(String requestJSON, Actions action, HashMap<String, String> instanceIdMap,
+            String version, String requestId, String requestUri, HashMap<String, String> queryParams)
+            throws ApiException {
         String serviceInstanceId;
         Boolean aLaCarte = null;
         ServiceInstancesRequest sir;
@@ -771,6 +782,8 @@ public class ServiceInstances extends AbstractRestHandler {
 
         sir = requestHandlerUtils.convertJsonToServiceInstanceRequest(requestJSON, action, requestId, requestUri);
         action = handleReplaceInstance(action, sir);
+        requestValidatorListenerRunner.runValidations(requestUri, instanceIdMap, sir, queryParams);
+
         String requestScope = requestHandlerUtils.deriveRequestScope(action, sir, requestUri);
         InfraActiveRequests currentActiveReq =
                 msoRequest.createRequestObject(sir, action, requestId, Status.IN_PROGRESS, requestJSON, requestScope);
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/AAIDataRetrieval.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/AAIDataRetrieval.java
new file mode 100644 (file)
index 0000000..344e543
--- /dev/null
@@ -0,0 +1,85 @@
+package org.onap.so.apihandlerinfra.infra.rest;
+
+import java.util.Optional;
+import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.L3Network;
+import org.onap.aai.domain.yang.ServiceInstance;
+import org.onap.aai.domain.yang.VfModule;
+import org.onap.aai.domain.yang.VolumeGroup;
+import org.onap.so.apihandlerinfra.infra.rest.exception.AAIEntityNotFound;
+import org.onap.so.client.aai.AAIObjectType;
+import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AAIDataRetrieval {
+
+    private static final String VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID = "VF Module Not Found In Inventory, VnfId: ";
+
+    private AAIResourcesClient aaiResourcesClient;
+
+    private static final Logger logger = LoggerFactory.getLogger(AAIDataRetrieval.class);
+
+    public ServiceInstance getServiceInstance(String serviceInstanceId) {
+        return this.getAaiResourcesClient()
+                .get(ServiceInstance.class,
+                        AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId))
+                .orElseGet(() -> {
+                    logger.debug("No Service Instance found in A&AI ServiceInstanceId: {}", serviceInstanceId);
+                    return null;
+                });
+    }
+
+
+    public VfModule getAAIVfModule(String vnfId, String vfModuleId) {
+        return this.getAaiResourcesClient()
+                .get(VfModule.class, AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnfId, vfModuleId))
+                .orElseGet(() -> {
+                    logger.debug("No Vf Module found in A&AI VnfId: {}" + ", VfModuleId: {}", vnfId, vfModuleId);
+                    return null;
+                });
+    }
+
+    public GenericVnf getGenericVnf(String vnfId) {
+        return this.getAaiResourcesClient()
+                .get(GenericVnf.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId))
+                .orElseGet(() -> {
+                    logger.debug("No Generic VNF found in A&AI VnfId: {}", vnfId);
+                    return null;
+                });
+    }
+
+    public VolumeGroup getVolumeGroup(String vnfId, String volumeGroupId) throws AAIEntityNotFound {
+        AAIResultWrapper wrapper =
+                this.getAaiResourcesClient().get(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId)
+                        .relatedTo(AAIObjectType.VOLUME_GROUP, volumeGroupId));
+        Optional<VolumeGroup> volume = wrapper.asBean(VolumeGroup.class);
+        if (volume.isPresent()) {
+            return volume.get();
+        } else {
+            logger.debug("No VolumeGroup in A&AI found: {}", vnfId);
+            return null;
+        }
+    }
+
+    public L3Network getNetwork(String networkId) {
+        return this.getAaiResourcesClient()
+                .get(L3Network.class, AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId))
+                .orElseGet(() -> {
+                    logger.debug("No Network found in A&AI NetworkId: {}", networkId);
+                    return null;
+                });
+    }
+
+    protected AAIResourcesClient getAaiResourcesClient() {
+        if (aaiResourcesClient == null) {
+            aaiResourcesClient = new AAIResourcesClient();
+        }
+        return aaiResourcesClient;
+    }
+
+}
index bb5b4ed..ee2bb58 100644 (file)
@@ -33,10 +33,7 @@ import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.apihandlerinfra.infra.rest.exception.AAIEntityNotFound;
 import org.onap.so.apihandlerinfra.infra.rest.exception.CloudConfigurationNotFoundException;
 import org.onap.so.client.aai.AAIObjectType;
-import org.onap.so.client.aai.AAIResourcesClient;
 import org.onap.so.client.aai.entities.AAIResultWrapper;
-import org.onap.so.client.aai.entities.uri.AAIResourceUri;
-import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.constants.Status;
 import org.onap.so.db.request.beans.InfraActiveRequests;
 import org.onap.so.db.request.client.RequestsDbClient;
@@ -75,17 +72,19 @@ public class BpmnRequestBuilder {
     @Autowired
     private RequestsDbClient infraActiveRequestsClient;
 
+    @Autowired
+    private AAIDataRetrieval aaiDataRet;
+
     private ObjectMapper mapper = new ObjectMapper();
 
-    private AAIResourcesClient aaiResourcesClient;
 
     public ServiceInstancesRequest buildVFModuleDeleteRequest(String vnfId, String vfModuleId, ModelType modelType)
             throws AAIEntityNotFound {
-        GenericVnf vnf = getGenericVnf(vnfId);
+        GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
         if (vnf == null) {
             throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
         }
-        VfModule vfModule = getAAIVfModule(vnfId, vfModuleId);
+        VfModule vfModule = aaiDataRet.getAAIVfModule(vnfId, vfModuleId);
         if (vfModule == null) {
             throw new AAIEntityNotFound(VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " vfModuleId: " + vfModuleId);
         }
@@ -94,11 +93,11 @@ public class BpmnRequestBuilder {
 
     public ServiceInstancesRequest buildVolumeGroupDeleteRequest(String vnfId, String volumeGroupId)
             throws AAIEntityNotFound {
-        GenericVnf vnf = getGenericVnf(vnfId);
+        GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
         if (vnf == null) {
             throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
         }
-        VolumeGroup volumeGroup = getVolumeGroup(vnfId, volumeGroupId);
+        VolumeGroup volumeGroup = aaiDataRet.getVolumeGroup(vnfId, volumeGroupId);
         if (volumeGroup == null) {
             throw new AAIEntityNotFound(
                     VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
@@ -107,7 +106,7 @@ public class BpmnRequestBuilder {
     }
 
     public ServiceInstancesRequest buildServiceDeleteRequest(String serviceInstanceId) throws AAIEntityNotFound {
-        ServiceInstance serviceInstance = getServiceInstance(serviceInstanceId);
+        ServiceInstance serviceInstance = aaiDataRet.getServiceInstance(serviceInstanceId);
         if (serviceInstance == null) {
             throw new AAIEntityNotFound(
                     "ServiceInstance Not Found In Inventory, ServiceInstanceId: " + serviceInstanceId);
@@ -116,7 +115,7 @@ public class BpmnRequestBuilder {
     }
 
     public ServiceInstancesRequest buildVnfDeleteRequest(String vnfId) throws AAIEntityNotFound {
-        GenericVnf vnf = getGenericVnf(vnfId);
+        GenericVnf vnf = aaiDataRet.getGenericVnf(vnfId);
         if (vnf == null) {
             throw new AAIEntityNotFound(GENERIC_VNF_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId);
         }
@@ -124,7 +123,7 @@ public class BpmnRequestBuilder {
     }
 
     public ServiceInstancesRequest buildNetworkDeleteRequest(String networkId) throws AAIEntityNotFound {
-        L3Network network = getNetwork(networkId);
+        L3Network network = aaiDataRet.getNetwork(networkId);
         if (network == null) {
             throw new AAIEntityNotFound("Network Not Found In Inventory, NetworkId: " + networkId);
         }
@@ -407,72 +406,5 @@ public class BpmnRequestBuilder {
         return requestParams;
     }
 
-    public VfModule getAAIVfModule(String vnfId, String vfModuleId) {
-        return this.getAaiResourcesClient()
-                .get(VfModule.class, AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnfId, vfModuleId))
-                .orElseGet(() -> {
-                    logger.debug("No Vf Module found in A&AI VnfId: {}" + ", VfModuleId: {}", vnfId, vfModuleId);
-                    return null;
-                });
-    }
-
-    public GenericVnf getGenericVnf(String vnfId) {
-        return this.getAaiResourcesClient()
-                .get(GenericVnf.class, AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, vnfId))
-                .orElseGet(() -> {
-                    logger.debug("No Generic VNF found in A&AI VnfId: {}", vnfId);
-                    return null;
-                });
-    }
-
-    public VolumeGroup getVolumeGroup(String vnfId, String volumeGroupId) throws AAIEntityNotFound {
-        GenericVnf vnf = getGenericVnf(vnfId);
-        AAIResultWrapper wrapper = new AAIResultWrapper(vnf);
-        List<AAIResourceUri> listVserverWrapper;
-        Optional<AAIResourceUri> volumeGroupURI;
-        if (wrapper.getRelationships().isPresent()) {
-            listVserverWrapper = wrapper.getRelationships().get().getRelatedUris(AAIObjectType.VOLUME_GROUP);
-            volumeGroupURI = listVserverWrapper.stream()
-                    .filter(resourceURI -> resourceURI.getURIKeys().get("volume-group-id").equals(volumeGroupId))
-                    .findFirst();
-        } else {
-            throw new AAIEntityNotFound(
-                    VF_MODULE_NOT_FOUND_IN_INVENTORY_VNF_ID + vnfId + " volumeGroupId: " + volumeGroupId);
-        }
-        return this.getAaiResourcesClient().get(VolumeGroup.class, volumeGroupURI.get()).orElseGet(() -> {
-            logger.debug("No VolumeGroup in A&AI found: {}", vnfId);
-            return null;
-        });
-    }
-
-    public ServiceInstance getServiceInstance(String serviceInstanceId) {
-        return this.getAaiResourcesClient()
-                .get(ServiceInstance.class,
-                        AAIUriFactory.createResourceUri(AAIObjectType.SERVICE_INSTANCE, serviceInstanceId))
-                .orElseGet(() -> {
-                    logger.debug("No Service Instance found in A&AI ServiceInstanceId: {}", serviceInstanceId);
-                    return null;
-                });
-    }
-
-    public L3Network getNetwork(String networkId) {
-        return this.getAaiResourcesClient()
-                .get(L3Network.class, AAIUriFactory.createResourceUri(AAIObjectType.L3_NETWORK, networkId))
-                .orElseGet(() -> {
-                    logger.debug("No Network found in A&AI NetworkId: {}", networkId);
-                    return null;
-                });
-    }
-
-    public AAIResourcesClient getAaiResourcesClient() {
-        if (aaiResourcesClient == null) {
-            aaiResourcesClient = new AAIResourcesClient();
-        }
-        return aaiResourcesClient;
-    }
-
-    public void setAaiResourcesClient(AAIResourcesClient aaiResourcesClient) {
-        this.aaiResourcesClient = aaiResourcesClient;
-    }
 
 }
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidator.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidator.java
new file mode 100644 (file)
index 0000000..4aa6015
--- /dev/null
@@ -0,0 +1,40 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. 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.apihandlerinfra.infra.rest.validators;
+
+import java.util.Map;
+import java.util.Optional;
+import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
+
+public interface RequestValidator {
+
+
+    /**
+     * Should this validator run for given request
+     * 
+     * @return
+     */
+    public boolean shouldRunFor(String uri, ServiceInstancesRequest request);
+
+
+    public Optional<String> validate(Map<String, String> instanceIdMap, ServiceInstancesRequest request,
+            Map<String, String> queryParams);
+}
diff --git a/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidatorListenerRunner.java b/mso-api-handlers/mso-api-handler-infra/src/main/java/org/onap/so/apihandlerinfra/infra/rest/validators/RequestValidatorListenerRunner.java
new file mode 100644 (file)
index 0000000..d689c6b
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. 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.apihandlerinfra.infra.rest.validators;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import javax.annotation.PostConstruct;
+import org.javatuples.Pair;
+import org.onap.so.apihandlerinfra.exceptions.ApiException;
+import org.onap.so.apihandlerinfra.exceptions.ValidateException;
+import org.onap.so.listener.ListenerRunner;
+import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RequestValidatorListenerRunner extends ListenerRunner {
+
+    private static Logger logger = LoggerFactory.getLogger(RequestValidatorListenerRunner.class);
+
+    protected List<RequestValidator> requestValidators;
+
+    @PostConstruct
+    protected void init() {
+        requestValidators = new ArrayList<>(
+                Optional.ofNullable(context.getBeansOfType(RequestValidator.class)).orElse(new HashMap<>()).values());
+    }
+
+    public boolean runValidations(String requestURI, Map<String, String> instanceIdMap, ServiceInstancesRequest request,
+            Map<String, String> queryParams) throws ApiException {
+        logger.info("Running local validations");
+        List<Pair<String, Optional<String>>> results =
+                runValidations(requestValidators, instanceIdMap, request, queryParams, requestURI);
+        if (!results.isEmpty()) {
+            throw new ValidateException("Failed Validations:\n"
+                    + results.stream().map(item -> String.format("%s: %s", item.getValue0(), item.getValue1().get()))
+                            .collect(Collectors.joining("\n")),
+                    400);
+        }
+
+        return true;
+    }
+
+    protected List<Pair<String, Optional<String>>> runValidations(List<? extends RequestValidator> validators,
+            Map<String, String> instanceIdMap, ServiceInstancesRequest request, Map<String, String> queryParams,
+            String requestURI) {
+
+        List<? extends RequestValidator> filtered =
+                filterListeners(validators, (item -> item.shouldRunFor(requestURI, request)));
+
+        List<Pair<String, Optional<String>>> results = new ArrayList<>();
+        filtered.forEach(item -> results
+                .add(new Pair<>(item.getClass().getName(), item.validate(instanceIdMap, request, queryParams))));
+
+        return results.stream().filter(item -> item.getValue1().isPresent()).collect(Collectors.toList());
+    }
+}
index 71405b0..20be2b5 100644 (file)
@@ -43,7 +43,8 @@ public class PlatformLOBValidation implements ValidationRule {
 
         platform = info.getSir().getRequestDetails().getPlatform();
         lineOfBusiness = info.getSir().getRequestDetails().getLineOfBusiness();
-        if (reqVersion >= 5 && requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action == Action.createInstance) {
+        if (reqVersion >= 5 && requestScope.equalsIgnoreCase(ModelType.vnf.name()) && action == Action.createInstance
+                && !info.getReqParameters().getEnforceValidNfValues()) {
             if (reqVersion > 5 && platform == null) {
                 throw new ValidationException("platform");
             }
index 5842697..cebbd63 100644 (file)
@@ -41,10 +41,12 @@ public class ProjectOwningEntityValidation implements ValidationRule {
         String requestScope = info.getRequestScope();
         Actions action = info.getAction();
 
+
         project = info.getSir().getRequestDetails().getProject();
         owningEntity = info.getSir().getRequestDetails().getOwningEntity();
         if (reqVersion >= 5 && requestScope.equalsIgnoreCase(ModelType.service.name())
-                && action == Action.createInstance || action == Action.assignInstance) {
+                && !info.getReqParameters().getEnforceValidNfValues() && action == Action.createInstance
+                || action == Action.assignInstance) {
             if (reqVersion > 5 && owningEntity == null) {
                 throw new ValidationException("owningEntity");
             }
index e28e36d..a79aeb2 100644 (file)
@@ -2934,15 +2934,5 @@ public class ServiceInstancesTest extends BaseTest {
         Actions action = servInstances.handleReplaceInstance(Action.replaceInstance, sir);
         assertEquals(Action.replaceInstanceRetainAssignments, action);
     }
-    /*
-     * @Test public void buildSelfLinkUrlTest() throws Exception { // v - version String incomingUrl =
-     * "http://localhost:8080/onap/infra/so/serviceInstantiation/v7/serviceInstances"; String expectedSelfLink =
-     * "http://localhost:8080/orchestrationRequests/v7/efce3167-5e45-4666-9d4d-22e23648e5d1"; String requestId =
-     * "efce3167-5e45-4666-9d4d-22e23648e5d1"; Optional<URL> actualSelfLinkUrl = buildSelfLinkUrl(incomingUrl,
-     * requestId); assertEquals(expectedSelfLink, actualSelfLinkUrl.get().toString()); // V - Version String
-     * incomingUrlV = "http://localhost:8080/onap/infra/so/serviceInstantiation/V7/serviceInstances"; String
-     * expectedSelfLinkV = "http://localhost:8080/orchestrationRequests/V7/efce3167-5e45-4666-9d4d-22e23648e5d1";
-     * Optional<URL> actualSelfLinkUrlV = buildSelfLinkUrl(incomingUrlV, requestId); assertEquals(expectedSelfLinkV,
-     * actualSelfLinkUrlV.get().toString()); }
-     */
 }
+
index 3644dd8..f73da49 100644 (file)
@@ -23,6 +23,7 @@ package org.onap.so.apihandlerinfra.infra.rest;
 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
 import java.io.File;
 import java.util.Optional;
 import org.junit.Before;
@@ -32,7 +33,6 @@ import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
-import org.mockito.Spy;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.ServiceInstance;
@@ -40,6 +40,7 @@ import org.onap.aai.domain.yang.VfModule;
 import org.onap.aai.domain.yang.VolumeGroup;
 import org.onap.so.client.aai.AAIObjectType;
 import org.onap.so.client.aai.AAIResourcesClient;
+import org.onap.so.client.aai.entities.AAIResultWrapper;
 import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.graphinventory.GraphInventoryCommonObjectMapperProvider;
 import org.onap.so.db.request.client.RequestsDbClient;
@@ -55,15 +56,19 @@ public class BpmnRequestBuilderTest {
     @Rule
     public ExpectedException exceptionRule = ExpectedException.none();
 
+
+    @Mock
+    private AAIResourcesClient aaiResourcesClient;
+
     @InjectMocks
-    @Spy
-    BpmnRequestBuilder reqBuilder;
+    private AAIDataRetrieval aaiData = spy(AAIDataRetrieval.class);
 
     @Mock
     private RequestsDbClient requestDBClient;
 
-    @Mock
-    private AAIResourcesClient aaiResourcesClient;
+    @InjectMocks
+    private BpmnRequestBuilder reqBuilder = spy(BpmnRequestBuilder.class);
+
 
     private ObjectMapper mapper = new ObjectMapper();
 
@@ -71,8 +76,7 @@ public class BpmnRequestBuilderTest {
 
     @Before
     public void setup() {
-        reqBuilder.setAaiResourcesClient(aaiResourcesClient);
-
+        // aaiData.setAaiResourcesClient(aaiResourcesClient);
     }
 
     @Test
@@ -80,11 +84,11 @@ public class BpmnRequestBuilderTest {
         ServiceInstance service =
                 provider.getMapper().readValue(new File(RESOURCE_PATH + "ServiceInstance.json"), ServiceInstance.class);
 
-        doReturn(service).when(reqBuilder).getServiceInstance("serviceId");
+        doReturn(service).when(aaiData).getServiceInstance("serviceId");
         ServiceInstancesRequest expectedRequest = mapper
                 .readValue(new File(RESOURCE_PATH + "ExpectedServiceRequest.json"), ServiceInstancesRequest.class);
-        expectedRequest.getRequestDetails().getModelInfo().setModelId(null);
-        // bad getter/setter setting multiple fields
+        expectedRequest.getRequestDetails().getModelInfo().setModelId(null); // bad getter/setter setting multiple
+                                                                             // fields
         ServiceInstancesRequest actualRequest = reqBuilder.buildServiceDeleteRequest("serviceId");
         assertThat(actualRequest, sameBeanAs(expectedRequest));
     }
@@ -128,13 +132,16 @@ public class BpmnRequestBuilderTest {
                 AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "vnfId"));
         VolumeGroup volumeGroup =
                 provider.getMapper().readValue(new File(RESOURCE_PATH + "VolumeGroup.json"), VolumeGroup.class);
-
-        doReturn(Optional.of(volumeGroup)).when(aaiResourcesClient).get(VolumeGroup.class, AAIUriFactory
-                .createResourceUri(AAIObjectType.VOLUME_GROUP, "cloudOwner", "regionOne", "volumeGroupId"));
+        AAIResultWrapper wrapper = new AAIResultWrapper(volumeGroup);
+        doReturn(wrapper).when(aaiResourcesClient)
+                .get(AAIUriFactory.createResourceUri(AAIObjectType.GENERIC_VNF, "vnfId")
+                        .relatedTo(AAIObjectType.VOLUME_GROUP, "volumeGroupId"));
 
         ServiceInstancesRequest expectedRequest = mapper
                 .readValue(new File(RESOURCE_PATH + "ExpectedVolumeGroupRequest.json"), ServiceInstancesRequest.class);
         ServiceInstancesRequest actualRequest = reqBuilder.buildVolumeGroupDeleteRequest("vnfId", "volumeGroupId");
         assertThat(actualRequest, sameBeanAs(expectedRequest));
     }
+
 }
+
diff --git a/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceInstanceNoOE.json b/mso-api-handlers/mso-api-handler-infra/src/test/resources/ServiceInstanceTest/ServiceInstanceNoOE.json
new file mode 100644 (file)
index 0000000..a6aa3e1
--- /dev/null
@@ -0,0 +1,33 @@
+{
+       "serviceInstanceId":"1882939",
+       "vnfInstanceId":"1882938",
+       "networkInstanceId":"1882937",
+       "volumeGroupInstanceId":"1882935",
+       "vfModuleInstanceId":"1882934",
+       "requestDetails": {
+               "requestInfo": {
+                       "source": "VID", 
+                       "requestorId": "xxxxxx",
+                       "instanceName": "testService9"
+               },
+               "requestParameters": {
+                       "aLaCarte": true,
+                       "autoBuildVfModules": false,
+                       "subscriptionServiceType": "test",
+                       "disableOwningEntityProject": true
+               },
+               "modelInfo":{
+                       "modelInvariantId": "f7ce78bb-423b-11e7-93f8-0050569a7965",
+                       "modelVersion":"1", 
+                       "modelVersionId":"10", 
+                       "modelType":"service",
+                       "modelName":"serviceModel",
+                       "modelInstanceName":"modelInstanceName",
+                       "modelCustomizationId":"f7ce78bb-423b-11e7-93f8-0050569a796"
+               },
+               "subscriberInfo": {
+               "globalSubscriberId": "someTestId", 
+               "subscriberName": "someTestId"
+       }
+       }
+}
index 09f6d81..0b03f56 100644 (file)
                                        },
                                        {
                                                "relationship-key": "volume-group.volume-group-id",
-                                               "relationship-value": "18b220c8-af84-4b82-a8c0-41bbea6328a6"
+                                               "relationship-value": "volumeGroupId"
                                        }
                                ]
                        },
index 731d2be..ee53e49 100644 (file)
@@ -1111,6 +1111,7 @@ CREATE TABLE `vnf_resource_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_MODEL_UUID` varchar(200) NOT NULL,
+  `NF_DATA_VALID` tinyint(1) DEFAULT '0',
   `VNFCINSTANCEGROUP_ORDER` varchar(200) default NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UK_vnf_resource_customization` (`MODEL_CUSTOMIZATION_UUID`,`SERVICE_MODEL_UUID`),
index 36c9251..aec1c7f 100644 (file)
@@ -23,9 +23,7 @@ package org.onap.so.db.catalog.beans;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -34,7 +32,6 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.PrePersist;
@@ -124,6 +121,9 @@ public class VnfResourceCustomization implements Serializable {
     @Column(name = "VNFCINSTANCEGROUP_ORDER")
     private String vnfcInstanceGroupOrder;
 
+    @Column(name = "NF_DATA_VALID")
+    private Boolean nfDataValid;
+
     @Override
     public boolean equals(final Object other) {
         if (!(other instanceof VnfResourceCustomization)) {
@@ -336,4 +336,14 @@ public class VnfResourceCustomization implements Serializable {
     public void setVnfcInstanceGroupOrder(String vnfcInstanceGroupOrder) {
         this.vnfcInstanceGroupOrder = vnfcInstanceGroupOrder;
     }
+
+    public Boolean getNfDataValid() {
+        return nfDataValid;
+    }
+
+    public void setNfDataValid(Boolean nfDataValid) {
+        this.nfDataValid = nfDataValid;
+    }
+
+
 }
index a959f2f..23539b0 100644 (file)
@@ -27,7 +27,9 @@ import java.util.List;
 import java.util.stream.Collectors;
 import javax.annotation.PostConstruct;
 import javax.persistence.EntityNotFoundException;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
+import org.apache.http.HttpStatus;
 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
 import org.onap.so.db.catalog.beans.CloudSite;
 import org.onap.so.db.catalog.beans.CloudifyManager;
@@ -67,13 +69,18 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.client.BufferingClientHttpRequestFactory;
 import org.springframework.http.client.ClientHttpRequestFactory;
 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.HttpClientErrorException;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.util.UriComponentsBuilder;
+import com.google.common.base.Strings;
 import uk.co.blackpepper.bowman.Client;
 import uk.co.blackpepper.bowman.ClientFactory;
 import uk.co.blackpepper.bowman.Configuration;
@@ -888,6 +895,90 @@ public class CatalogDbClient {
                     "Unable to find CvnfcConfigurationCustomization ModelCustomizationUUID:" + cvnfcCustomizationUuid);
     }
 
+    public org.onap.so.rest.catalog.beans.Service getServiceModelInformation(String serviceModelUUID, String depth) {
+        if (Strings.isNullOrEmpty(serviceModelUUID)) {
+            throw new EntityNotFoundException("Service Model UUID passed as Null or Empty String");
+        }
+        try {
+            HttpEntity<?> entity = getHttpEntity();
+            return restTemplate.exchange(
+                    UriComponentsBuilder.fromUriString(endpoint + "/ecomp/mso/catalog/v1/services/" + serviceModelUUID)
+                            .queryParam("depth", depth).build().encode().toString(),
+                    HttpMethod.GET, entity, org.onap.so.rest.catalog.beans.Service.class).getBody();
+        } catch (HttpClientErrorException e) {
+            logger.warn("Entity Not found in DLP", e);
+            if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
+                throw new EntityNotFoundException("Unable to find Service with ServiceModelUUID:" + serviceModelUUID);
+            }
+            throw e;
+        }
+    }
+
+    public List<org.onap.so.rest.catalog.beans.Service> getServices() {
+        try {
+            HttpEntity<?> entity = getHttpEntity();
+            return restTemplate
+                    .exchange(
+                            UriComponentsBuilder.fromUriString(endpoint + "/ecomp/mso/catalog/v1/services").build()
+                                    .encode().toString(),
+                            HttpMethod.GET, entity,
+                            new ParameterizedTypeReference<List<org.onap.so.rest.catalog.beans.Service>>() {})
+                    .getBody();
+        } catch (HttpClientErrorException e) {
+            logger.error("Error Calling catalog database", e);
+            throw e;
+        }
+    }
+
+    public org.onap.so.rest.catalog.beans.Vnf getVnfModelInformation(String serviceModelUUID,
+            String vnfCustomizationUUID, String depth) {
+        if (Strings.isNullOrEmpty(serviceModelUUID)) {
+            throw new EntityNotFoundException("Service Model UUID passed as Null or Empty String");
+        }
+        if (Strings.isNullOrEmpty(vnfCustomizationUUID)) {
+            throw new EntityNotFoundException("Vnf Customization UUID passed as Null or Empty String");
+        }
+        try {
+            HttpEntity<?> entity = getHttpEntity();
+            return restTemplate
+                    .exchange(
+                            UriComponentsBuilder
+                                    .fromUriString(endpoint + "/ecomp/mso/catalog/v1/services/" + serviceModelUUID
+                                            + "/vnfs/" + vnfCustomizationUUID)
+                                    .queryParam("depth", depth).build().encode().toString(),
+                            HttpMethod.GET, entity, org.onap.so.rest.catalog.beans.Vnf.class)
+                    .getBody();
+        } catch (HttpClientErrorException e) {
+            if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
+                throw new EntityNotFoundException(
+                        "Unable to find Vnf with Vnf Customization UUID:" + vnfCustomizationUUID);
+            }
+            throw e;
+        }
+    }
+
+    public void updateVnf(String serviceModelUUID, org.onap.so.rest.catalog.beans.Vnf vnf) {
+        if (vnf == null) {
+            throw new EntityNotFoundException("Vnf passed as null");
+        }
+        try {
+            HttpHeaders headers = getHttpHeaders();
+            HttpEntity<org.onap.so.rest.catalog.beans.Vnf> entity = new HttpEntity<>(vnf, headers);
+
+            restTemplate.exchange(
+                    UriComponentsBuilder.fromUriString(endpoint + "/ecomp/mso/catalog/v1/services/" + serviceModelUUID
+                            + "/vnfs/" + vnf.getModelCustomizationId()).build().encode().toString(),
+                    HttpMethod.PUT, entity, org.onap.so.rest.catalog.beans.Vnf.class).getBody();
+        } catch (HttpClientErrorException e) {
+            if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
+                throw new EntityNotFoundException(
+                        "Unable to find Vnf with Vnf Customization UUID:" + vnf.getModelCustomizationId());
+            }
+            throw e;
+        }
+    }
+
+
     public Workflow findWorkflowByArtifactUUID(String artifactUUID) {
         return this.getSingleResource(workflowClient, getUri(UriBuilder.fromUri(findWorkflowByArtifactUUID)
                 .queryParam(ARTIFACT_UUID, artifactUUID).build().toString()));
@@ -910,4 +1001,18 @@ public class CatalogDbClient {
     public void setEndpoint(String endpoint) {
         this.endpoint = endpoint;
     }
+
+    private HttpHeaders getHttpHeaders() {
+        HttpHeaders headers = new HttpHeaders();
+        headers.set(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
+        headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
+        headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
+        headers.set(LogConstants.TARGET_ENTITY_HEADER, TARGET_ENTITY);
+        return headers;
+    }
+
+    private HttpEntity<?> getHttpEntity() {
+        HttpHeaders headers = getHttpHeaders();
+        return new HttpEntity<>(headers);
+    }
 }
diff --git a/mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/Cvnfc.java b/mso-catalog-db/src/main/java/org/onap/so/rest/catalog/beans/Cvnfc.java
new file mode 100644 (file)
index 0000000..e22f366
--- /dev/null
@@ -0,0 +1,136 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. 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.rest.catalog.beans;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+@JsonInclude(Include.NON_DEFAULT)
+public class Cvnfc {
+
+    private String modelCustomizationId;
+    private String modelInstanceName;
+    private String modelVersionId;
+    private String modelInvariantId;
+    private String modelVersion;
+    private String modelName;
+    private String description;
+    private String nfcFunction;
+    private String nfcNamingCode;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
+    private Date created;
+
+    public String getModelCustomizationId() {
+        return modelCustomizationId;
+    }
+
+    public void setModelCustomizationId(String modelCustomizationId) {
+        this.modelCustomizationId = modelCustomizationId;
+    }
+
+    public String getModelInstanceName() {
+        return modelInstanceName;
+    }
+
+    public void setModelInstanceName(String modelInstanceName) {
+        this.modelInstanceName = modelInstanceName;
+    }
+
+    public String getModelVersionId() {
+        return modelVersionId;
+    }
+
+    public void setModelVersionId(String modelVersionId) {
+        this.modelVersionId = modelVersionId;
+    }
+
+    public String getModelInvariantId() {
+        return modelInvariantId;
+    }
+
+    public void setModelInvariantId(String modelInvariantId) {
+        this.modelInvariantId = modelInvariantId;
+    }
+
+    public String getModelVersion() {
+        return modelVersion;
+    }
+
+    public void setModelVersion(String modelVersion) {
+        this.modelVersion = modelVersion;
+    }
+
+    public String getModelName() {
+        return modelName;
+    }
+
+    public void setModelName(String modelName) {
+        this.modelName = modelName;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getNfcFunction() {
+        return nfcFunction;
+    }
+
+    public void setNfcFunction(String nfcFunction) {
+        this.nfcFunction = nfcFunction;
+    }
+
+    public String getNfcNamingCode() {
+        return nfcNamingCode;
+    }
+
+    public void setNfcNamingCode(String nfcNamingCode) {
+        this.nfcNamingCode = nfcNamingCode;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this).append("modelCustomizationId", modelCustomizationId)
+                .append("modelInstanceName", modelInstanceName).append("modelVersionId", modelVersionId)
+                .append("modelInvariantId", modelInvariantId).append("modelVersion", modelVersion)
+                .append("modelName", modelName).append("description", description).append("nfcFunction", nfcFunction)
+                .append("nfcNamingCode", nfcNamingCode).append("created", created).toString();
+    }
+
+}
index 1620058..1108904 100644 (file)
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
@@ -40,6 +41,7 @@ public class Service implements Serializable {
 
     private String modelInvariantId;
 
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
     private Date created;
 
     private String modelVersion;
index 8e18f94..f2a2c77 100644 (file)
 
 package org.onap.so.rest.catalog.beans;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import org.onap.so.db.catalog.beans.HeatEnvironment;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
@@ -37,6 +39,7 @@ public class VfModule {
     private String description;
     private Boolean isBase;
     private HeatTemplate heatTemplate;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
     private Date created;
     private List<HeatFile> heatFile;
 
@@ -50,9 +53,7 @@ public class VfModule {
     private HeatEnvironment heatEnv;
     private Boolean isVolumeGroup;
 
-
-    // Add in cvnfcCustomization
-
+    private List<Cvnfc> vnfc = new ArrayList<>();
 
 
     public String getModelName() {
@@ -191,6 +192,12 @@ public class VfModule {
         this.isVolumeGroup = isVolumeGroup;
     }
 
+    public List<Cvnfc> getVnfc() {
+        return vnfc;
+    }
 
+    public void setVnfc(List<Cvnfc> vnfc) {
+        this.vnfc = vnfc;
+    }
 
 }
index 40d701c..febf69b 100644 (file)
@@ -47,12 +47,14 @@ public class Vnf implements Serializable {
     private String nfFunction;
     private String nfRole;
     private String nfNamingCode;
+    private String nfType;
     private String multiStageDesign;
     private String orchestrationMode;
     private String cloudVersionMin;
     private String cloudVersionMax;
     private String category;
     private String subCategory;
+    private Boolean nfDataValid;
     private List<VfModule> vfModule = new ArrayList<>();
 
     public List<VfModule> getVfModule() {
@@ -215,4 +217,21 @@ public class Vnf implements Serializable {
     public void setMultiStageDesign(String multiStepDesign) {
         this.multiStageDesign = multiStepDesign;
     }
+
+    public String getNfType() {
+        return nfType;
+    }
+
+    public void setNfType(String nfType) {
+        this.nfType = nfType;
+    }
+
+    public Boolean getNfDataValid() {
+        return nfDataValid;
+    }
+
+    public void setNfDataValid(Boolean nfDataValid) {
+        this.nfDataValid = nfDataValid;
+    }
+
 }
index 612963d..8bf47e7 100644 (file)
@@ -37,6 +37,7 @@ public class VnfcCustomizationRepositoryTest extends BaseTest {
     private VnfcCustomizationRepository vnfcCustomizationRepository;
 
     @Test
+    @Transactional
     public void findAllTest() throws Exception {
         List<VnfcCustomization> vnfcCustomizationList = vnfcCustomizationRepository.findAll();
         Assert.assertFalse(CollectionUtils.isEmpty(vnfcCustomizationList));
index 7cd13a3..7468f62 100644 (file)
@@ -1109,6 +1109,7 @@ CREATE TABLE `vnf_resource_customization` (
   `CREATION_TIMESTAMP` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
   `VNF_RESOURCE_MODEL_UUID` varchar(200) NOT NULL,
   `SERVICE_MODEL_UUID` varchar(200) NOT NULL,
+  `NF_DATA_VALID` tinyint(1) DEFAULT '0',
   `VNFCINSTANCEGROUP_ORDER` varchar(200) default NULL,
   PRIMARY KEY (`ID`),
   UNIQUE KEY `UK_vnf_resource_customization` (`MODEL_CUSTOMIZATION_UUID`,`SERVICE_MODEL_UUID`),