fix catalogdb cvfnc customization
[so.git] / mso-catalog-db / src / main / java / org / onap / so / db / catalog / client / CatalogDbClient.java
index 3e35e78..28b77cd 100644 (file)
@@ -7,9 +7,9 @@
  * 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.
@@ -24,14 +24,19 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.stream.Collectors;
+
 import javax.annotation.PostConstruct;
+import javax.persistence.EntityNotFoundException;
 import javax.ws.rs.core.UriBuilder;
+
 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
 import org.onap.so.db.catalog.beans.CloudSite;
 import org.onap.so.db.catalog.beans.CloudifyManager;
 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
+import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.CvnfcCustomization;
 import org.onap.so.db.catalog.beans.ExternalServiceToInternalService;
 import org.onap.so.db.catalog.beans.HomingInstance;
@@ -53,25 +58,31 @@ import org.onap.so.db.catalog.beans.VnfComponentsRecipe;
 import org.onap.so.db.catalog.beans.VnfRecipe;
 import org.onap.so.db.catalog.beans.VnfResource;
 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
-import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization;
 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
 import org.onap.so.logger.LogConstants;
 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
+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.http.HttpHeaders;
 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.RestTemplate;
+
 import uk.co.blackpepper.bowman.Client;
 import uk.co.blackpepper.bowman.ClientFactory;
 import uk.co.blackpepper.bowman.Configuration;
 
 @Component("CatalogDbClient")
 public class CatalogDbClient {
+    
+    private static final Logger logger = LoggerFactory.getLogger(CatalogDbClient.class);
 
     private static final String CLOUD_SITE = "/cloudSite";
     private static final String CLOUDIFY_MANAGER = "/cloudifyManager";
@@ -132,7 +143,7 @@ public class CatalogDbClient {
     private static final String CLLI = "clli";
     private static final String CLOUD_VERSION = "cloudVersion";
     private static final String HOMING_INSTANCE = "/homingInstance";
-
+    
     private static final String TARGET_ENTITY = "SO:CatalogDB";
     private static final String ASTERISK = "*";
 
@@ -148,7 +159,7 @@ public class CatalogDbClient {
     private String findFirstResourceByModelInvariantUUIDAndModelVersion = "/findFirstResourceByModelInvariantUUIDAndModelVersion";
     private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
     private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
-    private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findByModelCustomizationUUIDAndVfModuleModelUUID";
+    private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findFirstByModelCustomizationUUIDAndVfModuleModelUUIDOrderByCreatedDesc";
     private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
     private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
     private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = "/findByModelInvariantUUIDOrderByModelVersionDesc";
@@ -229,7 +240,7 @@ public class CatalogDbClient {
     private final Client<HomingInstance> homingInstanceClient;
 
     private final Client<CloudifyManager> cloudifyManagerClient;
-
+    
     private final Client<CvnfcCustomization> cvnfcCustomizationClient;
 
     private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
@@ -244,71 +255,48 @@ public class CatalogDbClient {
     @Value("${mso.db.auth:#{null}}")
     private String msoAdaptersAuth;
 
+    @Autowired
+    RestTemplate restTemplate;
 
     @PostConstruct
-    public void init() {
-        findExternalToInternalServiceByServiceName =
-            endpoint + EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING + SEARCH + findExternalToInternalServiceByServiceName;
-        findServiceByModelName = endpoint + SERVICE + SEARCH + findServiceByModelName;
-        findServiceRecipeByActionAndServiceModelUUID =
-            endpoint + SERVICE_RECIPE + SEARCH + findServiceRecipeByActionAndServiceModelUUID;
-        findServiceByModelUUID = endpoint + SERVICE + SEARCH + findServiceByModelUUID;
+    public void init(){
+        findExternalToInternalServiceByServiceName = endpoint + EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING + SEARCH + findExternalToInternalServiceByServiceName;
+        findServiceByModelName =  endpoint + SERVICE + SEARCH + findServiceByModelName;
+        findServiceRecipeByActionAndServiceModelUUID = endpoint + SERVICE_RECIPE + SEARCH + findServiceRecipeByActionAndServiceModelUUID;
+        findServiceByModelUUID =  endpoint + SERVICE + SEARCH + findServiceByModelUUID;
         findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
-        findFirstByModelVersionAndModelInvariantUUIDURI =
-            endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
+        findFirstByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
         findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
-        findFirstByServiceModelUUIDAndActionURI =
-            endpoint + SERVICE_RECIPE + SEARCH + findFirstByServiceModelUUIDAndActionURI;
+        findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE + SEARCH + findFirstByServiceModelUUIDAndActionURI;
         findFirstByModelNameAndAction = endpoint + NETWORK_RECIPE + SEARCH + findFirstByModelNameAndAction;
-        findFirstResourceByModelInvariantUUIDAndModelVersion =
-            endpoint + VNF_RESOURCE + SEARCH + findFirstResourceByModelInvariantUUIDAndModelVersion;
-        findByModelInstanceNameAndVnfResources =
-            endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findByModelInstanceNameAndVnfResources;
+        findFirstResourceByModelInvariantUUIDAndModelVersion =  endpoint + VNF_RESOURCE + SEARCH + findFirstResourceByModelInvariantUUIDAndModelVersion;
+        findByModelInstanceNameAndVnfResources =  endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findByModelInstanceNameAndVnfResources;
         findFirstVnfRecipeByNfRoleAndAction = endpoint + VNF_RECIPE + SEARCH + findFirstVnfRecipeByNfRoleAndAction;
-        findByModelCustomizationUUIDAndVfModuleModelUUID =
-            endpoint + VFMODULE_CUSTOMIZATION + SEARCH + findByModelCustomizationUUIDAndVfModuleModelUUID;
-        findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction =
-            endpoint + VNF_COMPONENTS_RECIPE + SEARCH
-                + findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction;
-        findFirstVnfComponentsRecipeByVnfComponentTypeAndAction =
-            endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVnfComponentTypeAndAction;
-        findVfModuleByModelInvariantUUIDOrderByModelVersionDesc =
-            endpoint + VFMODULE + SEARCH + findVfModuleByModelInvariantUUIDOrderByModelVersionDesc;
-        findFirstVfModuleByModelInvariantUUIDAndModelVersion =
-            endpoint + VFMODULE + SEARCH + findFirstVfModuleByModelInvariantUUIDAndModelVersion;
+        findByModelCustomizationUUIDAndVfModuleModelUUID = endpoint + VFMODULE_CUSTOMIZATION + SEARCH + findByModelCustomizationUUIDAndVfModuleModelUUID;
+        findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction;
+        findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVnfComponentTypeAndAction;
+        findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = endpoint + VFMODULE + SEARCH +findVfModuleByModelInvariantUUIDOrderByModelVersionDesc;
+        findFirstVfModuleByModelInvariantUUIDAndModelVersion = endpoint + VFMODULE + SEARCH + findFirstVfModuleByModelInvariantUUIDAndModelVersion;
         findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
-        findOneByResourceTypeAndOrchestrationStatusAndTargetAction =
-            endpoint + ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE + SEARCH
-                + findOneByResourceTypeAndOrchestrationStatusAndTargetAction;
+        findOneByResourceTypeAndOrchestrationStatusAndTargetAction = endpoint + ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE + SEARCH + findOneByResourceTypeAndOrchestrationStatusAndTargetAction;
         findByAction = endpoint + ORCHESTRATION_FLOW + SEARCH + findByAction;
-        findVnfcInstanceGroupCustomizationByModelCustomizationUUID =
-            endpoint + VNFC_INSTANCE_GROUP_CUSTOMIZATION + SEARCH
-                + findVnfcInstanceGroupCustomizationByModelCustomizationUUID;
-        findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID =
-            endpoint + COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION + SEARCH
-                + findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID;
-        findOneByActionAndRequestScopeAndIsAlacarte =
-            endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarte;
-        findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH
-            + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner;
-        findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType =
-            endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH
-                + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType;
-        findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH
-            + findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep;
+        findVnfcInstanceGroupCustomizationByModelCustomizationUUID = endpoint + VNFC_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findVnfcInstanceGroupCustomizationByModelCustomizationUUID;
+        findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = endpoint + COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID;
+        findOneByActionAndRequestScopeAndIsAlacarte = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarte;
+        findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner;
+        findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType;
+        findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH + findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep;
         findByClliAndCloudVersion = endpoint + CLOUD_SITE + SEARCH + findByClliAndCloudVersion;
 
         serviceURI = endpoint + SERVICE + URI_SEPARATOR;
         vfModuleURI = endpoint + VFMODULE + URI_SEPARATOR;
         vnfResourceURI = endpoint + VNF_RESOURCE + URI_SEPARATOR;
         vfModuleCustomizationURI = endpoint + VFMODULE_CUSTOMIZATION + URI_SEPARATOR;
-        networkCollectionResourceCustomizationURI =
-            endpoint + NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
+        networkCollectionResourceCustomizationURI = endpoint + NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
         networkResourceCustomizationURI = endpoint + NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
         cvnfcResourceCustomizationURI = endpoint + CVNFC_CUSTOMZIATION + URI_SEPARATOR;
         vnfResourceCustomizationURI = endpoint + VNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
-        collectionNetworkResourceCustomizationURI =
-            endpoint + COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
+        collectionNetworkResourceCustomizationURI = endpoint + COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
         instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR;
         cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR;
         cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR;
@@ -319,20 +307,18 @@ public class CatalogDbClient {
     }
 
     public CatalogDbClient() {
-        ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(
-            new HttpComponentsClientHttpRequestFactory());
+        ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
 
-        ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory)
-            .setRestTemplateConfigurer(restTemplate -> {
-                restTemplate.getInterceptors().add((new SpringClientFilter()));
+        ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
+            restTemplate.getInterceptors().add((new SpringClientFilter()));
 
-                restTemplate.getInterceptors().add((request, body, execution) -> {
+            restTemplate.getInterceptors().add((request, body, execution) -> {
 
-                    request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
-                    request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER, TARGET_ENTITY);
-                    return execution.execute(request, body);
-                });
-            }).build().buildClientFactory();
+                request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
+                request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER,TARGET_ENTITY);
+                return execution.execute(request, body);
+            });
+        }).build().buildClientFactory();
         serviceClient = clientFactory.create(Service.class);
         networkRecipeClient = clientFactory.create(NetworkRecipe.class);
         networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
@@ -347,15 +333,13 @@ public class CatalogDbClient {
         rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
         buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
         orchestrationStatusStateTransitionDirectiveClient = clientFactory
-            .create(OrchestrationStatusStateTransitionDirective.class);
+                .create(OrchestrationStatusStateTransitionDirective.class);
         vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
         collectionResourceInstanceGroupCustomizationClient = clientFactory
-            .create(CollectionResourceInstanceGroupCustomization.class);
+                .create(CollectionResourceInstanceGroupCustomization.class);
         instanceGroupClient = clientFactory.create(InstanceGroup.class);
-        networkCollectionResourceCustomizationClient = clientFactory
-            .create(NetworkCollectionResourceCustomization.class);
-        collectionNetworkResourceCustomizationClient = clientFactory
-            .create(CollectionNetworkResourceCustomization.class);
+        networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
+        collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
         cloudSiteClient = clientFactory.create(CloudSite.class);
         homingInstanceClient = clientFactory.create(HomingInstance.class);
         cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
@@ -368,20 +352,18 @@ public class CatalogDbClient {
     }
 
     public CatalogDbClient(String baseUri, String auth) {
-        ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(
-            new HttpComponentsClientHttpRequestFactory());
+        ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
 
-        ClientFactory clientFactory = Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory)
-            .setRestTemplateConfigurer(restTemplate -> {
-                restTemplate.getInterceptors().add((new SpringClientFilter()));
+        ClientFactory clientFactory = Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
+            restTemplate.getInterceptors().add((new SpringClientFilter()));
 
-                restTemplate.getInterceptors().add((request, body, execution) -> {
+            restTemplate.getInterceptors().add((request, body, execution) -> {
 
-                    request.getHeaders().add(HttpHeaders.AUTHORIZATION, auth);
-                    request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER, TARGET_ENTITY);
-                    return execution.execute(request, body);
-                });
-            }).build().buildClientFactory();
+                request.getHeaders().add(HttpHeaders.AUTHORIZATION, auth);
+                request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER,TARGET_ENTITY);
+                return execution.execute(request, body);
+            });
+        }).build().buildClientFactory();
         serviceClient = clientFactory.create(Service.class);
         networkRecipeClient = clientFactory.create(NetworkRecipe.class);
         networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
@@ -396,15 +378,13 @@ public class CatalogDbClient {
         rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
         buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
         orchestrationStatusStateTransitionDirectiveClient = clientFactory
-            .create(OrchestrationStatusStateTransitionDirective.class);
+                .create(OrchestrationStatusStateTransitionDirective.class);
         vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
         collectionResourceInstanceGroupCustomizationClient = clientFactory
-            .create(CollectionResourceInstanceGroupCustomization.class);
+                .create(CollectionResourceInstanceGroupCustomization.class);
         instanceGroupClient = clientFactory.create(InstanceGroup.class);
-        networkCollectionResourceCustomizationClient = clientFactory
-            .create(NetworkCollectionResourceCustomization.class);
-        collectionNetworkResourceCustomizationClient = clientFactory
-            .create(CollectionNetworkResourceCustomization.class);
+        networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
+        collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
         cloudSiteClient = clientFactory.create(CloudSite.class);
         homingInstanceClient = clientFactory.create(HomingInstance.class);
         cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
@@ -416,11 +396,9 @@ public class CatalogDbClient {
         pnfResourceCustomizationClient = clientFactory.create(PnfResourceCustomization.class);
     }
 
-    public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(
-        String modelCustomizationUUID) {
+    public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
         NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
-            this.getSingleResource(networkCollectionResourceCustomizationClient,
-                getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
+                this.getSingleResource(networkCollectionResourceCustomizationClient, getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
         if (networkCollectionResourceCustomization != null) {
             networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
         }
@@ -428,7 +406,7 @@ public class CatalogDbClient {
     }
 
     public Service getServiceByID(String modelUUID) {
-        Service service = getSingleResource(serviceClient, getUri(serviceURI + modelUUID));
+        Service service = getSingleResource(serviceClient,getUri(serviceURI + modelUUID));
         if (service != null) {
             service.setModelUUID(modelUUID);
         }
@@ -436,14 +414,14 @@ public class CatalogDbClient {
     }
 
     public VfModule getVfModuleByModelUUID(String modelUUID) {
-        VfModule vfModule = getSingleResource(vfModuleClient, getUri(vfModuleURI + modelUUID));
+        VfModule vfModule = getSingleResource(vfModuleClient,getUri(vfModuleURI + modelUUID));
         if (vfModule != null) {
             vfModule.setModelUUID(modelUUID);
         }
         return vfModule;
     }
 
-    public VnfResource getVnfResourceByModelUUID(String modelUUID) {
+    public VnfResource getVnfResourceByModelUUID(String modelUUID){
 
         VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
         if (vnfResource != null) {
@@ -452,15 +430,17 @@ public class CatalogDbClient {
         return vnfResource;
     }
 
-    public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID) {
-        VnfResourceCustomization vnfResourceCustomization = getSingleResource(vnfResourceCustomizationClient,
-            getUri(vnfResourceCustomizationURI + modelCustomizationUUID));
-        if (vnfResourceCustomization != null) {
-            vnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
+    //A VNFResource customization UUID is the same object across services, so we can return anyone from the list
+    // In the future the client should query starting at a service model uuid
+    public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
+        List<VnfResourceCustomization> vnfResourceCustomization = this.getMultipleResources(vnfResourceCustomizationClient,getUri(endpoint + VNF_RESOURCE_CUSTOMIZATION  + SEARCH + "/findByModelCustomizationUUID" + "?MODEL_CUSTOMIZATION_UUID="+ modelCustomizationUUID));
+        if(vnfResourceCustomization != null && !vnfResourceCustomization.isEmpty()){
+            return vnfResourceCustomization.get(0);
+        }
+        else{
+            return null;
         }
-        return vnfResourceCustomization;
     }
-
     public PnfResource getPnfResourceByModelUUID(String modelUUID) {
         PnfResource PnfResource = this.getSingleResource(pnfResourceClient, getUri(pnfResourceURI + modelUUID));
         if (PnfResource != null) {
@@ -478,11 +458,10 @@ public class CatalogDbClient {
         return pnfResourceCustomization;
     }
 
-    public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(
-        String modelCustomizationUUID) {
+    public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
         CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
-            this.getSingleResource(collectionNetworkResourceCustomizationClient, getUri(UriBuilder
-                .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
+                this.getSingleResource(collectionNetworkResourceCustomizationClient,getUri(UriBuilder
+                        .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
         if (collectionNetworkResourceCustomization != null) {
             collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
         }
@@ -498,38 +477,22 @@ public class CatalogDbClient {
     }
 
     public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
-        VfModuleCustomization vfModuleCust = this
-            .getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
-        if (vfModuleCust != null) {
-            vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
-        }
-        return vfModuleCust;
+        return this.getSingleResource(vfModuleCustomizationClient, getUri(endpoint + VFMODULE_CUSTOMIZATION + SEARCH + "/findFirstByModelCustomizationUUIDOrderByCreatedDesc" + "?MODEL_CUSTOMIZATION_UUID="+ modelCustomizationUUID));
     }
 
-    public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(
-        String modelCustomizationUUID) {
+    public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
         NetworkResourceCustomization networkResourceCustomization =
-            this.getSingleResource(networkResourceCustomizationClient,
-                getUri(networkResourceCustomizationURI + modelCustomizationUUID));
+                this.getSingleResource(networkResourceCustomizationClient, getUri(networkResourceCustomizationURI + modelCustomizationUUID));
         if (networkResourceCustomization != null) {
             networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
         }
         return networkResourceCustomization;
     }
 
-    public CvnfcCustomization getCvnfcCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
-        CvnfcCustomization cvnfcResourceCustomization =
-                this.getSingleResource(cvnfcCustomizationClient, getUri(cvnfcResourceCustomizationURI + modelCustomizationUUID));
-        if (cvnfcResourceCustomization != null) {
-            cvnfcResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
-        }
-        return cvnfcResourceCustomization;
-    }
 
     public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
         BuildingBlockDetail buildingBlockDetail = getSingleResource(buildingBlockDetailClient, getUri(UriBuilder
-            .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build()
-            .toString()));
+                .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build().toString()));
         if (buildingBlockDetail != null) {
             buildingBlockDetail.setBuildingBlockName(buildingBlockName);
         }
@@ -538,238 +501,229 @@ public class CatalogDbClient {
 
 
     public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
-        ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
+            ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
         return getSingleResource(orchestrationStatusStateTransitionDirectiveClient, UriBuilder
-            .fromUri(findOneByResourceTypeAndOrchestrationStatusAndTargetAction)
-            .queryParam(RESOURCE_TYPE, resourceType.name())
-            .queryParam(ORCHESTRATION_STATUS, orchestrationStatus.name())
-            .queryParam(TARGET_ACTION, targetAction.name()).build());
+                .fromUri(findOneByResourceTypeAndOrchestrationStatusAndTargetAction)
+                .queryParam(RESOURCE_TYPE, resourceType.name())
+                .queryParam(ORCHESTRATION_STATUS, orchestrationStatus.name())
+                .queryParam(TARGET_ACTION, targetAction.name()).build());
     }
 
     public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
         return this.getMultipleResources(orchestrationClient, UriBuilder
-            .fromUri(findByAction).queryParam(ACTION, action).build());
+                .fromUri(findByAction).queryParam(ACTION, action).build());
     }
 
     public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
         return this.getMultipleResources(vnfcInstanceGroupCustomizationClient, UriBuilder
-            .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
-            .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
+                .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
+                .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
     }
 
     public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
-        String modelCustomizationUUID) {
+            String modelCustomizationUUID) {
         return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
-            .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
-            .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
+                .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
+                .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
     }
 
-    public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
-        String modelCustomizationUUID, String vfModuleModelUUID) {
+    public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(String modelCustomizationUUID, String vfModuleModelUUID) {
         return this.getSingleResource(vfModuleCustomizationClient, getUri(UriBuilder
-            .fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
-            .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID)
-            .queryParam(VF_MODULE_MODEL_UUID, vfModuleModelUUID).build().toString()));
+                .fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
+                .queryParam("MODEL_CUSTOMIZATION_UUID",modelCustomizationUUID)
+                .queryParam("MODEL_UUID",vfModuleModelUUID).build().toString()));
     }
 
     public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
-        String resourceName, boolean aLaCarte) {
+            String resourceName, boolean aLaCarte) {
         return this.getSingleResource(northBoundRequestClient, UriBuilder
-            .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
-            .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
-            .queryParam(IS_ALACARTE, aLaCarte).build());
+                .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
+                .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
+                .queryParam(IS_ALACARTE, aLaCarte).build());
     }
-
+    
     public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(String requestAction,
-        String resourceName, boolean aLaCarte, String cloudOwner) {
+            String resourceName, boolean aLaCarte, String cloudOwner) {
         return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
-            .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
-            .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
-            .queryParam(IS_ALACARTE, aLaCarte)
-            .queryParam(CLOUD_OWNER, cloudOwner)
-            .queryParam(SERVICE_TYPE, ASTERISK).build().toString()));
-    }
-
-    public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
-        String requestAction,
-        String resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
+                .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
+                .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
+                .queryParam(IS_ALACARTE, aLaCarte)
+                .queryParam(CLOUD_OWNER, cloudOwner)
+                .queryParam(SERVICE_TYPE, ASTERISK).build().toString()));
+    }
+    
+    public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(String requestAction,
+            String resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
         return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
-            .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
-            .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
-            .queryParam(IS_ALACARTE, aLaCarte)
-            .queryParam(CLOUD_OWNER, cloudOwner)
-            .queryParam(SERVICE_TYPE, serviceType).build().toString()));
+                .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
+                .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
+                .queryParam(IS_ALACARTE, aLaCarte)
+                .queryParam(CLOUD_OWNER, cloudOwner)
+                .queryParam(SERVICE_TYPE, serviceType).build().toString()));
     }
 
     public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
-        String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
+            String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
         return this.getSingleResource(rainyDayHandlerStatusClient, getUri(UriBuilder
-            .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
-            .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
-            .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
-            .build().toString()));
+                .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
+                .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
+                .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
+                .build().toString()));
     }
 
-    public ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action) {
+    public  ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
         return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
-            .fromUri(findFirstByServiceModelUUIDAndActionURI)
-            .queryParam(SERVICE_MODEL_UUID, modelUUID)
-            .queryParam(ACTION, action).build().toString()));
+                .fromUri(findFirstByServiceModelUUIDAndActionURI)
+                .queryParam(SERVICE_MODEL_UUID,modelUUID)
+                .queryParam(ACTION,action).build().toString()));
     }
 
-    public NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action) {
+    public  NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action){
         return this.getSingleResource(networkRecipeClient, UriBuilder
-            .fromUri(findFirstByModelNameAndAction)
-            .queryParam(MODEL_NAME, modelName)
-            .queryParam(ACTION, action).build());
+                .fromUri(findFirstByModelNameAndAction)
+                .queryParam(MODEL_NAME,modelName)
+                .queryParam(ACTION,action).build());
     }
-
-    public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType,
-        String actionCategory) {
+    
+    public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType, String actionCategory) {
         return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
-            .fromUri(endpoint
-                + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
-            .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
+                .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
+                        .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
     }
 
-    public Service getFirstByModelNameOrderByModelVersionDesc(String modelName) {
-        return this.getSingleResource(serviceClient, UriBuilder
-            .fromUri(findFirstByModelNameURI)
-            .queryParam(MODEL_NAME, modelName).build());
+    public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
+        return this.getSingleResource(serviceClient,UriBuilder
+                .fromUri(findFirstByModelNameURI)
+                .queryParam(MODEL_NAME,modelName).build());
     }
 
-    public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName) {
+    public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName){
         return this.getSingleResource(externalServiceToInternalServiceClient, getUri(UriBuilder
-            .fromUri(findExternalToInternalServiceByServiceName)
-            .queryParam(SERVICE_NAME, serviceName).build().toString()));
+                .fromUri(findExternalToInternalServiceByServiceName)
+                .queryParam(SERVICE_NAME,serviceName).build().toString()));
     }
 
-    public ServiceRecipe findServiceRecipeByActionAndServiceModelUUID(String action, String modelUUID) {
+    public  ServiceRecipe findServiceRecipeByActionAndServiceModelUUID(String action,String modelUUID){
         return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
-            .fromUri(findServiceRecipeByActionAndServiceModelUUID)
-            .queryParam(ACTION, action)
-            .queryParam(SERVICE_MODEL_UUID, modelUUID).build().toString()));
+                .fromUri(findServiceRecipeByActionAndServiceModelUUID)
+                .queryParam(ACTION,action)
+                .queryParam(SERVICE_MODEL_UUID,modelUUID).build().toString()));
     }
 
-    public Service getServiceByModelName(String modelName) {
-        return this.getSingleResource(serviceClient, getUri(UriBuilder
-            .fromUri(findServiceByModelName)
-            .queryParam(MODEL_NAME, modelName).build().toString()));
+    public Service getServiceByModelName(String modelName){
+        return this.getSingleResource(serviceClient,getUri(UriBuilder
+                .fromUri(findServiceByModelName)
+                .queryParam(MODEL_NAME,modelName).build().toString()));
     }
 
-    public Service getServiceByModelUUID(String modelModelUUID) {
-        return this.getSingleResource(serviceClient, getUri(UriBuilder
-            .fromUri(findServiceByModelUUID)
-            .queryParam(MODEL_UUID, modelModelUUID).build().toString()));
+    public Service getServiceByModelUUID(String modelModelUUID){
+        return this.getSingleResource(serviceClient,getUri(UriBuilder
+                .fromUri(findServiceByModelUUID)
+                .queryParam(MODEL_UUID,modelModelUUID).build().toString()));
     }
 
-    public VnfResource getFirstVnfResourceByModelInvariantUUIDAndModelVersion(String modelInvariantUUID,
-        String modelVersion) {
+    public VnfResource getFirstVnfResourceByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
         return this.getSingleResource(vnfResourceClient, getUri(UriBuilder
-            .fromUri(findFirstResourceByModelInvariantUUIDAndModelVersion)
-            .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
-            .queryParam(MODEL_VERSION, modelVersion).build().toString()));
+                .fromUri(findFirstResourceByModelInvariantUUIDAndModelVersion)
+                .queryParam(MODEL_INVARIANT_UUID,modelInvariantUUID)
+                .queryParam(MODEL_VERSION,modelVersion).build().toString()));
     }
 
 
-    public VnfResourceCustomization getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(
-        String modelInstanceName, VnfResource vnfResource) {
+    public VnfResourceCustomization getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(String modelInstanceName, VnfResource vnfResource){
         return this.getSingleResource(vnfResourceCustomizationClient, getUri(UriBuilder
-            .fromUri(findByModelInstanceNameAndVnfResources)
-            .queryParam(MODEL_INSTANCE_NAME, modelInstanceName)
-            .queryParam(VNF_RESOURCE_MODEL_UUID, vnfResource.getModelUUID()).build().toString()));
+                .fromUri(findByModelInstanceNameAndVnfResources)
+                .queryParam("MODEL_INSTANCE_NAME",modelInstanceName)
+                .queryParam("VNF_RESOURCE_MODEL_UUID",vnfResource.getModelUUID()).build().toString()));
     }
 
-    public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action) {
-        return this.getSingleResource(vnfRecipeClient, getUri(UriBuilder
-            .fromUri(findFirstVnfRecipeByNfRoleAndAction)
-            .queryParam(NF_ROLE, nfRole)
-            .queryParam(ACTION, action).build().toString()));
+    public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action){
+        return this.getSingleResource(vnfRecipeClient,getUri(UriBuilder
+                .fromUri(findFirstVnfRecipeByNfRoleAndAction)
+                .queryParam(NF_ROLE,nfRole)
+                .queryParam(ACTION,action).build().toString()));
     }
 
-    public VnfComponentsRecipe getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
-        String vfModuleModelUUID, String vnfComponentType, String action) {
-        return this.getSingleResource(vnfComponentsRecipeClient, getUri(UriBuilder
-            .fromUri(findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction)
-            .queryParam(VF_MODULE_MODEL_UUID, vfModuleModelUUID)
-            .queryParam(VNF_COMPONENT_TYPE, vnfComponentType)
-            .queryParam(ACTION, action).build().toString()));
+    public VnfComponentsRecipe getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(String vfModuleModelUUID, String vnfComponentType, String action){
+        return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
+                .fromUri(findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction)
+                .queryParam(VF_MODULE_MODEL_UUID,vfModuleModelUUID)
+                .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
+                .queryParam(ACTION,action).build().toString()));
     }
 
-    public VnfComponentsRecipe getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(String vnfComponentType,
-        String action) {
-        return this.getSingleResource(vnfComponentsRecipeClient, getUri(UriBuilder
-            .fromUri(findFirstVnfComponentsRecipeByVnfComponentTypeAndAction)
-            .queryParam(VNF_COMPONENT_TYPE, vnfComponentType)
-            .queryParam(ACTION, action).build().toString()));
+    public VnfComponentsRecipe getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(String vnfComponentType, String action) {
+        return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
+                .fromUri(findFirstVnfComponentsRecipeByVnfComponentTypeAndAction)
+                .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
+                .queryParam(ACTION,action).build().toString()));
     }
-
-    protected URI getUri(String template) {
+    protected URI getUri(String template){
         return URI.create(template);
     }
 
     public CloudifyManager getCloudifyManager(String id) {
-        return this.getSingleResource(cloudifyManagerClient, getUri(cloudifyManagerURI + id));
+        return this.getSingleResource(cloudifyManagerClient,getUri(cloudifyManagerURI + id));
     }
 
-    public CloudSite getCloudSite(String id) {
+    public CloudSite getCloudSite(String id){
         return this.getSingleResource(cloudSiteClient,
-            getUri(cloudSiteURI + id));
+                getUri(cloudSiteURI + id));
     }
 
-    public CloudSite getCloudSite(String id, String uri) {
+    public CloudSite getCloudSite(String id, String uri){
         return this.getSingleResource(cloudSiteClient,
-            getUri(uri + id));
+                getUri(uri + id));
     }
 
-    public void postCloudSite(CloudSite cloudSite) {
+    public void postCloudSite(CloudSite cloudSite){
         this.postSingleResource(cloudSiteClient, cloudSite);
     }
 
-    public CloudSite getCloudSiteByClliAndAicVersion(String clli, String cloudVersion) {
+    public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
         return this.getSingleResource(cloudSiteClient, getUri(UriBuilder
-            .fromUri(findByClliAndCloudVersion)
-            .queryParam(CLLI, clli).queryParam(CLOUD_VERSION, cloudVersion).build().toString()));
+                .fromUri(findByClliAndCloudVersion)
+                .queryParam(CLLI,clli).queryParam(CLOUD_VERSION,cloudVersion).build().toString()));
     }
 
-    public HomingInstance getHomingInstance(String serviceInstanceId) {
+    public HomingInstance getHomingInstance (String serviceInstanceId){
         return this.getSingleResource(homingInstanceClient,
-            getUri(homingInstanceURI + serviceInstanceId));
+                getUri(homingInstanceURI + serviceInstanceId));
     }
 
-    public HomingInstance getHomingInstance(String serviceInstanceId, String uri) {
+    public HomingInstance getHomingInstance (String serviceInstanceId, String uri){
         return this.getSingleResource(homingInstanceClient,
-            getUri(uri + serviceInstanceId));
+                getUri(uri + serviceInstanceId));
     }
 
-    public void postHomingInstance(HomingInstance homingInstance) {
+    public void postHomingInstance(HomingInstance homingInstance){
         this.postSingleResource(homingInstanceClient, homingInstance);
     }
 
     public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
         return this.getSingleResource(serviceClient, getUri(UriBuilder
-            .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI)
-            .queryParam(MODEL_VERSION, modelVersion)
-            .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
+                .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI)
+                .queryParam(MODEL_VERSION, modelVersion)
+                .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
     }
 
-    public VfModule getVfModuleByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion) {
-        return this.getSingleResource(vfModuleClient, getUri(UriBuilder
-            .fromUri(findFirstVfModuleByModelInvariantUUIDAndModelVersion)
-            .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
-            .queryParam(MODEL_VERSION, modelVersion).build().toString()));
+    public VfModule getVfModuleByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
+        return this.getSingleResource(vfModuleClient,getUri(UriBuilder
+                .fromUri(findFirstVfModuleByModelInvariantUUIDAndModelVersion)
+                .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
+                .queryParam(MODEL_VERSION, modelVersion).build().toString()));
     }
 
     public List<Service> getServiceByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
         return this.getMultipleResources(serviceClient, getUri(UriBuilder
-            .fromUri(findByModelInvariantUUIDURI)
-            .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
+                .fromUri(findByModelInvariantUUIDURI)
+                .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
     }
 
     public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
         return this.getMultipleResources(vfModuleClient, getUri(UriBuilder
-            .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
-            .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
+                .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
+                .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
     }
 
     private <T> T getSingleResource(Client<T> client, URI uri) {
@@ -784,39 +738,59 @@ public class CatalogDbClient {
         return list;
     }
 
-    private <T> URI postSingleResource(Client<T> client, T type) {
+    private <T> URI postSingleResource(Client<T> client, T type){
         return client.post(type);
     }
-
-    public List<CvnfcCustomization> getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID(
-        String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
-
-        return this.getMultipleResources(cvnfcCustomizationClient, getUri(UriBuilder
-            .fromUri(endpoint + "/cvnfcCustomization/search/findByVnfResourceCustomizationAndVfModuleCustomization")
-            .queryParam("VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID", vnfCustomizationUUID)
-            .queryParam("VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build().toString()));
-    }
-
-    public CvnfcCustomization getCvnfcCustomizationByCustomizationUUID(String cvnfcCustomizationUuid){
-        return this.getSingleResource(cvnfcCustomizationClient,getUri(UriBuilder
-                        .fromUri(endpoint + "/cvnfcCustomization/search/findOneByModelCustomizationUUID").queryParam("modelCustomizationUuid", cvnfcCustomizationUuid)
-                        .build().toString()));
+    
+    public List<CvnfcCustomization> getCvnfcCustomization(String serviceModelUUID, String vnfCustomizationUUID,
+            String vfModuleCustomizationUUID) {    
+        Service service = this.getServiceByID(serviceModelUUID);
+        VnfResourceCustomization vnfResourceCust = findVnfResourceCustomizationInList(vnfCustomizationUUID, service.getVnfCustomizations());
+        VfModuleCustomization vfModuleCust = findVfModuleCustomizationInList(vfModuleCustomizationUUID , vnfResourceCust.getVfModuleCustomizations());
+        return vfModuleCust.getCvnfcCustomization().stream().collect(Collectors.toList());
+    }
+    
+    private VnfResourceCustomization findVnfResourceCustomizationInList(String vnfCustomizationUUID , List<VnfResourceCustomization> vnfResourceCusts){
+        List<VnfResourceCustomization> filtered = vnfResourceCusts.stream()
+                .filter(vnfCustRes -> vnfCustomizationUUID.equals(vnfCustRes.getModelCustomizationUUID()))
+                .collect(Collectors.toList());
+        if(filtered != null && !filtered.isEmpty() && filtered.size() == 1){
+            return filtered.get(0);
+        }else
+            throw new EntityNotFoundException("Unable to find VnfResourceCustomization ModelCustomizationUUID:" + vnfCustomizationUUID);
+    }
+    
+    private VfModuleCustomization findVfModuleCustomizationInList(String vfModuleCustomizationUUID , List<VfModuleCustomization> vfModuleList){
+        List<VfModuleCustomization> filtered = vfModuleList.stream()
+                .filter(vfModuleCust -> vfModuleCustomizationUUID.equals(vfModuleCust.getModelCustomizationUUID()))
+                .collect(Collectors.toList());
+        if(filtered != null && !filtered.isEmpty() && filtered.size() == 1){
+            return filtered.get(0);
+        }else
+            throw new EntityNotFoundException("Unable to find VfModuleCustomization ModelCustomizationUUID:" + vfModuleCustomizationUUID);
+    }
+    
+    private CvnfcCustomization findCvnfcCustomizationInAList(String cvnfcCustomizationUuid , List<CvnfcCustomization> cvnfcCustomList){
+        List<CvnfcCustomization> filtered = cvnfcCustomList.stream()
+                .filter(cvnfc -> cvnfcCustomizationUuid.equals(cvnfc.getModelCustomizationUUID()))
+                .collect(Collectors.toList());
+        if(filtered != null && !filtered.isEmpty() && filtered.size() == 1){
+            logger.debug("Found CvnfcCustomization: {}", filtered.get(0));
+            return filtered.get(0);
+        }else
+            throw new EntityNotFoundException("Unable to find VfModuleCustomization ModelCustomizationUUID:" + cvnfcCustomizationUuid);
+    }
+    
+    public CvnfcConfigurationCustomization getCvnfcCustomization(String serviceModelUUID, String vnfCustomizationUuid,
+            String vfModuleCustomizationUuid, String cvnfcCustomizationUuid) {
+        List<CvnfcCustomization> cvnfcCustomization =  getCvnfcCustomization(serviceModelUUID,vnfCustomizationUuid,vfModuleCustomizationUuid);
+        CvnfcCustomization cvnfc = findCvnfcCustomizationInAList(cvnfcCustomizationUuid,cvnfcCustomization );
+        List<CvnfcConfigurationCustomization> fabricConfigs  = cvnfc.getCvnfcConfigurationCustomization().stream().filter(cvnfcCustom -> cvnfcCustom.getConfigurationResource().getToscaNodeType().contains("FabricConfiguration")).collect(Collectors.toList());
+        if(fabricConfigs != null && !fabricConfigs.isEmpty() && fabricConfigs.size() == 1){
+            logger.debug("Found Fabric Configuration: {}", fabricConfigs.get(0));
+            return fabricConfigs.get(0);
+        }else
+            throw new EntityNotFoundException("Unable to find CvnfcConfigurationCustomization ModelCustomizationUUID:" + cvnfcCustomizationUuid);
     }
 
-    //fetch all VnfVfmoduleCvnfcConfigurationCustomization underneath a vnfc
-    //find the VnfVfmoduleCvnfcConfigurationCustomization that is related to our vnf and our vf-module, filter all others.
-    public VnfVfmoduleCvnfcConfigurationCustomization getVnfVfmoduleCvnfcConfigurationCustomizationByVnfCustomizationUuidAndVfModuleCustomizationUuidAndCvnfcCustomizationUuid(
-            String vnfCustomizationUuid, String vfModuleCustomizationUuid, String cvnfcCustomizationUuid) {
-        CvnfcCustomization cvnfc = getCvnfcCustomizationByCustomizationUUID(cvnfcCustomizationUuid);
-        if (cvnfc != null) {
-            for(VnfVfmoduleCvnfcConfigurationCustomization vnfVfModuleCvnfcCust: cvnfc.getVnfVfmoduleCvnfcConfigurationCustomization()){
-                if(vnfVfModuleCvnfcCust.getVnfResourceCustomization().getModelCustomizationUUID().equals(vnfCustomizationUuid) &&
-                    vnfVfModuleCvnfcCust.getVfModuleCustomization().getModelCustomizationUUID().equals(vfModuleCustomizationUuid)){
-                return vnfVfModuleCvnfcCust;
-                }
-            }
-        }
-        return null;
-        
-    }
 }