Replaced all tabs with spaces in java and pom.xml
[so.git] / mso-catalog-db / src / main / java / org / onap / so / db / catalog / client / CatalogDbClient.java
index 84e4156..f75ccf0 100644 (file)
 
 package org.onap.so.db.catalog.client;
 
+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;
 import org.onap.so.db.catalog.beans.InstanceGroup;
 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
 import org.onap.so.db.catalog.beans.NetworkRecipe;
@@ -35,6 +45,8 @@ import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
 import org.onap.so.db.catalog.beans.OrchestrationAction;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
+import org.onap.so.db.catalog.beans.PnfResource;
+import org.onap.so.db.catalog.beans.PnfResourceCustomization;
 import org.onap.so.db.catalog.beans.ResourceType;
 import org.onap.so.db.catalog.beans.Service;
 import org.onap.so.db.catalog.beans.ServiceRecipe;
@@ -45,522 +57,819 @@ 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.VnfcInstanceGroupCustomization;
+import org.onap.so.db.catalog.beans.Workflow;
 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;
 
-import javax.annotation.PostConstruct;
-import javax.ws.rs.core.UriBuilder;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
 @Component("CatalogDbClient")
 public class CatalogDbClient {
 
-       private static final String CLOUD_SITE = "/cloudSite";
-       private static final String CLOUDIFY_MANAGER = "/cloudifyManager";
-       private static final String RAINY_DAY_HANDLER_MACRO = "/rainy_day_handler_macro";
-       private static final String NORTHBOUND_REQUEST_REF_LOOKUP = "/northbound_request_ref_lookup";
-       private static final String NETWORK_RESOURCE_CUSTOMIZATION = "/networkResourceCustomization";
-       private static final String COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION = "/collectionResourceInstanceGroupCustomization";
-       private static final String VNFC_INSTANCE_GROUP_CUSTOMIZATION = "/vnfcInstanceGroupCustomization";
-       private static final String ORCHESTRATION_FLOW = "/orchestrationFlow";
-       private static final String ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE = "/orchestrationStatusStateTransitionDirective";
-       private static final String INSTANCE_GROUP = "/instanceGroup";
-       private static final String COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION = "/collectionNetworkResourceCustomization";
-       private static final String BUILDING_BLOCK_DETAIL = "/buildingBlockDetail";
-       private static final String NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION = "/networkCollectionResourceCustomization";
-       private static final String VNF_RESOURCE_CUSTOMIZATION = "/vnfResourceCustomization";
-       private static final String SERVICE = "/service";
-       private static final String VNF_RESOURCE = "/vnfResource";
-       private static final String VNF_RECIPE = "/vnfRecipe";
-       private static final String VFMODULE = "/vfModule";
-       private static final String VFMODULE_CUSTOMIZATION = "/vfModuleCustomization";
-       private static final String VNF_COMPONENTS_RECIPE = "/vnfComponentsRecipe";
-       private static final String SERVICE_RECIPE = "/serviceRecipe";
-       private static final String NETWORK_RECIPE = "/networkRecipe";
-
-       private static final String SEARCH = "/search";
-       private static final String URI_SEPARATOR = "/";
-
-       private static final String SERVICE_MODEL_UUID = "serviceModelUUID";
-       private static final String MODEL_CUSTOMIZATION_UUID = "modelCustomizationUUID";
-       private static final String ACTION = "action";
-       private static final String MODEL_NAME = "modelName";
-       private static final String MODEL_VERSION = "modelVersion";
-       private static final String MODEL_INVARIANT_UUID = "modelInvariantUUID";
-       private static final String MODEL_INSTANCE_NAME = "modelInstanceName";
-       private static final String VNF_RESOURCE_MODEL_UUID = "vnfResourceModelUUID";
-       private static final String NF_ROLE = "nfRole";
-       private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
-       private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
-       private static final String BUILDING_BLOCK_NAME = "buildingBlockName";
-       private static final String RESOURCE_TYPE = "resourceType";
-       private static final String ORCHESTRATION_STATUS = "orchestrationStatus";
-       private static final String TARGET_ACTION = "targetAction";
-       private static final String REQUEST_SCOPE = "requestScope";
-       private static final String IS_ALACARTE = "isALaCarte";
-       private static final String FLOW_NAME = "flowName";
-       private static final String SERVICE_TYPE = "serviceType";
-       private static final String VNF_TYPE = "vnfType";
-       private static final String ERROR_CODE = "errorCode";
-       private static final String WORK_STEP = "workStep";
-       private static final String CLLI = "clli";
-       private static final String CLOUD_VERSION = "cloudVersion";
-       
-       private static final String TARGET_ENTITY = "SO:CatalogDB";
-
-       private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
-       private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
-       private String findFirstByModelVersionAndModelInvariantUUIDURI = "/findFirstByModelVersionAndModelInvariantUUID";
-       private String findByModelInvariantUUIDURI = "/findByModelInvariantUUIDOrderByModelVersionDesc";
-       private String findFirstByModelNameAndAction = "/findFirstByModelNameAndAction";
-       private String findFirstResourceByModelInvariantUUIDAndModelVersion = "/findFirstResourceByModelInvariantUUIDAndModelVersion";
-       private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
-       private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
-       private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findByModelCustomizationUUIDAndVfModuleModelUUID";
-       private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
-       private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
-       private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = "/findByModelInvariantUUIDOrderByModelVersionDesc";
-       private String findFirstVfModuleByModelInvariantUUIDAndModelVersion = "/findFirstVfModuleByModelInvariantUUIDAndModelVersion";
-       private String findOneByBuildingBlockName = "/findOneByBuildingBlockName";
-       private String findOneByResourceTypeAndOrchestrationStatusAndTargetAction = "/findOneByResourceTypeAndOrchestrationStatusAndTargetAction";
-       private String findByAction = "/findByAction";
-       private String findVnfcInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
-       private String findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
-       private String findOneByActionAndRequestScopeAndIsAlacarte = "/findOneByActionAndRequestScopeAndIsAlacarte";
-       private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep";
-       private String findByClliAndCloudVersion = "/findByClliAndCloudVersion";
-
-       private String serviceURI;
-       private String vfModuleURI;
-       private String vnfResourceURI;
-       private String vfModuleCustomizationURI;
-       private String networkCollectionResourceCustomizationURI;
-       private String networkResourceCustomizationURI;
-       private String vnfResourceCustomizationURI;
-       private String collectionNetworkResourceCustomizationURI;
-       private String instanceGroupURI;
-       private String cloudifyManagerURI;
-       private String cloudSiteURI;
-
-       private final Client<Service> serviceClient;
-
-       private final Client<NetworkRecipe> networkRecipeClient;
-
-       private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
-
-       private final Client<VnfResource> vnfResourceClient;
-
-       private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
-
-       private final Client<VnfRecipe> vnfRecipeClient;
-
-       private final Client<VfModuleCustomization> vfModuleCustomizationClient;
-
-       private final Client<VfModule> vfModuleClient;
-
-       private final Client<VnfComponentsRecipe> vnfComponentsRecipeClient;
-
-       private final Client<OrchestrationFlow> orchestrationClient;
-
-       private final Client<NorthBoundRequest> northBoundRequestClient;
-
-       private final Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
-
-       private final Client<BuildingBlockDetail> buildingBlockDetailClient;
-
-       private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
-
-       private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
-
-       private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
-
-       private final Client<InstanceGroup> instanceGroupClient;
-
-       private final Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
-
-       private final Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
-
-       private final Client<ServiceRecipe> serviceRecipeClient;
-
-       private final Client<CloudSite> cloudSiteClient;
-
-       private final Client<CloudifyManager> cloudifyManagerClient;
-       
-       private Client<CvnfcCustomization> cvnfcCustomizationClient;
-
-       private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
-
-       @Value("${mso.catalog.db.spring.endpoint}")
-       private String endpoint;
-
-       @Value("${mso.db.auth}")
-       private String msoAdaptersAuth;
-
-
-       @PostConstruct
-       public void init(){
-               findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
-               findFirstByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
-               findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
-               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;
-               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;
-               findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
-               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;
-               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;
-               networkResourceCustomizationURI = endpoint + NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
-               vnfResourceCustomizationURI = endpoint + VNF_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;
-
-       }
-
-       public CatalogDbClient() {
-               ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
-
-               ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
-                       restTemplate.getInterceptors().add((new SpringClientFilter()));
-
-                       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();
-               serviceClient = clientFactory.create(Service.class);
-               networkRecipeClient = clientFactory.create(NetworkRecipe.class);
-               networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
-               vnfResourceClient = clientFactory.create(VnfResource.class);
-               vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
-               vnfRecipeClient = clientFactory.create(VnfRecipe.class);
-               orchestrationClient = clientFactory.create(OrchestrationFlow.class);
-               vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
-               vfModuleClient = clientFactory.create(VfModule.class);
-               vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
-               northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
-               rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
-               buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
-               orchestrationStatusStateTransitionDirectiveClient = clientFactory
-                               .create(OrchestrationStatusStateTransitionDirective.class);
-               vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
-               collectionResourceInstanceGroupCustomizationClient = clientFactory
-                               .create(CollectionResourceInstanceGroupCustomization.class);
-               instanceGroupClient = clientFactory.create(InstanceGroup.class);
-               networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
-               collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
-               cloudSiteClient = clientFactory.create(CloudSite.class);
-               cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
-               serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
-               cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
-               controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
-       }
-
-       public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
-               NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
-                               this.getSingleResource(networkCollectionResourceCustomizationClient, getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
-               if (networkCollectionResourceCustomization != null) {
-                       networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return networkCollectionResourceCustomization;
-       }
-
-       public Service getServiceByID(String modelUUID) {
-               Service service = getSingleResource(serviceClient,getUri(serviceURI + modelUUID));
-               if (service != null) {
-                       service.setModelUUID(modelUUID);
-               }
-               return service;
-       }
-
-       public VfModule getVfModuleByModelUUID(String modelUUID) {
-               VfModule vfModule = getSingleResource(vfModuleClient,getUri(vfModuleURI + modelUUID));
-               if (vfModule != null) {
-                       vfModule.setModelUUID(modelUUID);
-               }
-               return vfModule;
-       }
-
-       public VnfResource getVnfResourceByModelUUID(String modelUUID){
-
-               VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
-               if (vnfResource != null) {
-                       vnfResource.setModelUUID(modelUUID);
-               }
-               return vnfResource;
-       }
-
-       public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
-               VnfResourceCustomization vnfResourceCustomization = getSingleResource(vnfResourceCustomizationClient, getUri(vnfResourceCustomizationURI + modelCustomizationUUID));
-               if (vnfResourceCustomization != null) {
-                       vnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return vnfResourceCustomization;
-       }
-
-       public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
-               CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
-                               this.getSingleResource(collectionNetworkResourceCustomizationClient,getUri(UriBuilder
-                                               .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
-               if (collectionNetworkResourceCustomization != null) {
-                       collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return collectionNetworkResourceCustomization;
-       }
-
-       public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
-               InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
-               if (instanceGroup != null) {
-                       instanceGroup.setModelUUID(modelUUID);
-               }
-               return instanceGroup;
-       }
-
-       public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
-               VfModuleCustomization vfModuleCust = this.getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
-               if (vfModuleCust != null) {
-                       vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return vfModuleCust;
-       }
-
-       public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
-               NetworkResourceCustomization networkResourceCustomization =
-                               this.getSingleResource(networkResourceCustomizationClient, getUri(networkResourceCustomizationURI + modelCustomizationUUID));
-               if (networkResourceCustomization != null) {
-                       networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return networkResourceCustomization;
-       }
-
-       public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
-               BuildingBlockDetail buildingBlockDetail = getSingleResource(buildingBlockDetailClient, getUri(UriBuilder
-                               .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build().toString()));
-               if (buildingBlockDetail != null) {
-                       buildingBlockDetail.setBuildingBlockName(buildingBlockName);
-               }
-               return buildingBlockDetail;
-       }
-
-
-       public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
-                       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());
-       }
-
-       public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
-               return this.getMultipleResources(orchestrationClient, UriBuilder
-                               .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());
-       }
-
-       public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
-                       String modelCustomizationUUID) {
-               return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
-                               .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
-                               .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
-       }
-
-       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()));
-       }
-
-       public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
-                       String resourceName, boolean aLaCarte) {
-               return this.getSingleResource(northBoundRequestClient, UriBuilder
-                               .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
-                               .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
-                               .queryParam(IS_ALACARTE, aLaCarte).build());
-       }
-
-       public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
-                       String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
-               return this.getSingleResource(rainyDayHandlerStatusClient, UriBuilder
-                               .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
-                               .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
-                               .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
-                               .build());
-       }
-
-       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()));
-       }
-
-       public  NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action){
-               return this.getSingleResource(networkRecipeClient, UriBuilder
-                               .fromUri(findFirstByModelNameAndAction)
-                               .queryParam(MODEL_NAME,modelName)
-                               .queryParam(ACTION,action).build());
-       }
-       
-       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());
-       }
-
-       public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
-               return this.getSingleResource(serviceClient,UriBuilder
-                               .fromUri(findFirstByModelNameURI)
-                               .queryParam(MODEL_NAME,modelName).build());
-       }
-
-
-       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()));
-       }
-
-
-       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()));
-       }
-
-       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 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){
-               return URI.create(template);
-       }
-
-       public CloudifyManager getCloudifyManager(String id) {
-               return this.getSingleResource(cloudifyManagerClient,getUri(cloudifyManagerURI + id));
-       }
-
-       public CloudSite getCloudSite(String id){
-               return this.getSingleResource(cloudSiteClient, getUri(cloudSiteURI + id));
-       }
-
-       public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
-               return this.getSingleResource(cloudSiteClient, getUri(UriBuilder
-                               .fromUri(findByClliAndCloudVersion)
-                               .queryParam(CLLI,clli).queryParam(CLOUD_VERSION,cloudVersion).build().toString()));
-       }
-
-       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()));
-       }
-
-       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()));
-       }
-
-       public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
-               return this.getMultipleResources(vfModuleClient, getUri(UriBuilder
-                               .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
-                               .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
-       }
-
-       private <T> T getSingleResource(Client<T> client, URI uri) {
-               return client.get(uri);
-       }
-
-       private <T> List<T> getMultipleResources(Client<T> client, URI uri) {
-               Iterable<T> iterator = client.getAll(uri);
-               List<T> list = new ArrayList<>();
-               Iterator<T> it = iterator.iterator();
-               it.forEachRemaining(list::add);
-               return list;
-       }
-       
-       public List<CvnfcCustomization> getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID(String vnfCustomizationUUID, String vfModuleCustomizationUUID){
-               return this.getMultipleVnfcCustomizations(
-                               UriBuilder.fromUri(endpoint + "/vnfcCustomization/search/findByVnfCustomizationUUIDAndVfModuleCustomizationUUID")
-                                               .queryParam("VNF_CUSTOMIZATION_UUID", vnfCustomizationUUID)
-                                               .queryParam("VFMODULE_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build());
-       }
-       
-       private List<CvnfcCustomization> getMultipleVnfcCustomizations(URI uri) {
-               Iterable<CvnfcCustomization> vnfcIterator = cvnfcCustomizationClient.getAll(uri);
-               List<CvnfcCustomization> vnfcList = new ArrayList<>();
-               Iterator<CvnfcCustomization> it = vnfcIterator.iterator();
-               it.forEachRemaining(vnfcList::add);
-               return vnfcList;
-       }
-
+    private static final Logger logger = LoggerFactory.getLogger(CatalogDbClient.class);
+
+    private static final String CLOUD_SITE = "/cloudSite";
+    private static final String CLOUDIFY_MANAGER = "/cloudifyManager";
+    private static final String CVNFC_CUSTOMZIATION = "/cvnfcCustomization";
+    private static final String RAINY_DAY_HANDLER_MACRO = "/rainy_day_handler_macro";
+    private static final String NORTHBOUND_REQUEST_REF_LOOKUP = "/northbound_request_ref_lookup";
+    private static final String NETWORK_RESOURCE_CUSTOMIZATION = "/networkResourceCustomization";
+    private static final String COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION =
+            "/collectionResourceInstanceGroupCustomization";
+    private static final String VNFC_INSTANCE_GROUP_CUSTOMIZATION = "/vnfcInstanceGroupCustomization";
+    private static final String ORCHESTRATION_FLOW = "/orchestrationFlow";
+    private static final String ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE =
+            "/orchestrationStatusStateTransitionDirective";
+    private static final String INSTANCE_GROUP = "/instanceGroup";
+    private static final String COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION = "/collectionNetworkResourceCustomization";
+    private static final String BUILDING_BLOCK_DETAIL = "/buildingBlockDetail";
+    private static final String NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION = "/networkCollectionResourceCustomization";
+    private static final String VNF_RESOURCE_CUSTOMIZATION = "/vnfResourceCustomization";
+    private static final String SERVICE = "/service";
+    private static final String EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING = "/externalServiceToInternalService";
+    private static final String VNF_RESOURCE = "/vnfResource";
+    private static final String VNF_RECIPE = "/vnfRecipe";
+    private static final String VFMODULE = "/vfModule";
+    private static final String VFMODULE_CUSTOMIZATION = "/vfModuleCustomization";
+    private static final String VNF_COMPONENTS_RECIPE = "/vnfComponentsRecipe";
+    private static final String SERVICE_RECIPE = "/serviceRecipe";
+    private static final String NETWORK_RECIPE = "/networkRecipe";
+    private static final String PNF_RESOURCE = "/pnfResource";
+    private static final String PNF_RESOURCE_CUSTOMIZATION = "/pnfResourceCustomization";
+    private static final String WORKFLOW = "/workflow";
+
+
+    private static final String SEARCH = "/search";
+    private static final String URI_SEPARATOR = "/";
+
+    private static final String SERVICE_MODEL_UUID = "serviceModelUUID";
+    private static final String SERVICE_NAME = "serviceName";
+    private static final String MODEL_UUID = "modelUUID";
+    private static final String MODEL_CUSTOMIZATION_UUID = "modelCustomizationUUID";
+    private static final String ACTION = "action";
+    private static final String MODEL_NAME = "modelName";
+    private static final String MODEL_VERSION = "modelVersion";
+    private static final String MODEL_INVARIANT_UUID = "modelInvariantUUID";
+    private static final String MODEL_INSTANCE_NAME = "modelInstanceName";
+    private static final String VNF_RESOURCE_MODEL_UUID = "vnfResourceModelUUID";
+    private static final String NF_ROLE = "nfRole";
+    private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
+    private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
+    private static final String BUILDING_BLOCK_NAME = "buildingBlockName";
+    private static final String RESOURCE_TYPE = "resourceType";
+    private static final String ORCHESTRATION_STATUS = "orchestrationStatus";
+    private static final String TARGET_ACTION = "targetAction";
+    private static final String REQUEST_SCOPE = "requestScope";
+    private static final String IS_ALACARTE = "isALaCarte";
+    private static final String CLOUD_OWNER = "cloudOwner";
+    private static final String FLOW_NAME = "flowName";
+    private static final String SERVICE_TYPE = "serviceType";
+    private static final String VNF_TYPE = "vnfType";
+    private static final String ERROR_CODE = "errorCode";
+    private static final String WORK_STEP = "workStep";
+    private static final String CLLI = "clli";
+    private static final String CLOUD_VERSION = "cloudVersion";
+    private static final String HOMING_INSTANCE = "/homingInstance";
+    private static final String ARTIFACT_UUID = "artifactUUID";
+
+    private static final String TARGET_ENTITY = "SO:CatalogDB";
+    private static final String ASTERISK = "*";
+
+    private String findExternalToInternalServiceByServiceName = "/findByServiceName";
+    private String findServiceByModelName = "/findOneByModelName";
+    private String findServiceRecipeByActionAndServiceModelUUID = "/findByActionAndServiceModelUUID";
+    private String findServiceByModelUUID = "/findOneByModelUUID";
+    private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
+    private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
+    private String findFirstByModelVersionAndModelInvariantUUIDURI = "/findFirstByModelVersionAndModelInvariantUUID";
+    private String findByModelInvariantUUIDURI = "/findByModelInvariantUUIDOrderByModelVersionDesc";
+    private String findFirstByModelNameAndAction = "/findFirstByModelNameAndAction";
+    private String findFirstResourceByModelInvariantUUIDAndModelVersion =
+            "/findFirstResourceByModelInvariantUUIDAndModelVersion";
+    private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
+    private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
+    private String findByModelCustomizationUUIDAndVfModuleModelUUID =
+            "/findFirstByModelCustomizationUUIDAndVfModuleModelUUIDOrderByCreatedDesc";
+    private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction =
+            "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
+    private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction =
+            "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
+    private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc =
+            "/findByModelInvariantUUIDOrderByModelVersionDesc";
+    private String findFirstVfModuleByModelInvariantUUIDAndModelVersion =
+            "/findFirstVfModuleByModelInvariantUUIDAndModelVersion";
+    private String findOneByBuildingBlockName = "/findOneByBuildingBlockName";
+    private String findOneByResourceTypeAndOrchestrationStatusAndTargetAction =
+            "/findOneByResourceTypeAndOrchestrationStatusAndTargetAction";
+    private String findByAction = "/findByAction";
+    private String findVnfcInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
+    private String findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID =
+            "/findByModelCustomizationUUID";
+    private String findOneByActionAndRequestScopeAndIsAlacarte = "/findOneByActionAndRequestScopeAndIsAlacarte";
+    private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner =
+            "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner";
+    private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType =
+            "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType";
+    private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep =
+            "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep";
+    private String findByClliAndCloudVersion = "/findByClliAndCloudVersion";
+    private String findServiceByServiceInstanceId = "/findServiceByServiceInstanceId";
+    private String findPnfResourceCustomizationByModelUuid = "/findPnfResourceCustomizationByModelUuid";
+    private String findWorkflowByArtifactUUID = "/findByArtifactUUID";
+
+    private String serviceURI;
+    private String vfModuleURI;
+    private String vnfResourceURI;
+    private String vfModuleCustomizationURI;
+    private String networkCollectionResourceCustomizationURI;
+    private String networkResourceCustomizationURI;
+    private String vnfResourceCustomizationURI;
+    private String collectionNetworkResourceCustomizationURI;
+    private String instanceGroupURI;
+    private String cloudifyManagerURI;
+    private String cloudSiteURI;
+    private String homingInstanceURI;
+    private String cvnfcResourceCustomizationURI;
+    private String pnfResourceURI;
+    private String pnfResourceCustomizationURI;
+    private String workflowURI;
+
+    private final Client<Service> serviceClient;
+
+    private final Client<NetworkRecipe> networkRecipeClient;
+
+    private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
+
+    private final Client<VnfResource> vnfResourceClient;
+
+    private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
+
+    private final Client<VnfRecipe> vnfRecipeClient;
+
+    private final Client<VfModuleCustomization> vfModuleCustomizationClient;
+
+    private final Client<VfModule> vfModuleClient;
+
+    private final Client<VnfComponentsRecipe> vnfComponentsRecipeClient;
+
+    private final Client<OrchestrationFlow> orchestrationClient;
+
+    private final Client<NorthBoundRequest> northBoundRequestClient;
+
+    private final Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
+
+    private final Client<BuildingBlockDetail> buildingBlockDetailClient;
+
+    private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
+
+    private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
+
+    private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
+
+    private final Client<InstanceGroup> instanceGroupClient;
+
+    private final Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
+
+    private final Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
+
+    private final Client<ServiceRecipe> serviceRecipeClient;
+
+    private final Client<ExternalServiceToInternalService> externalServiceToInternalServiceClient;
+
+    private final Client<CloudSite> cloudSiteClient;
+
+    private final Client<HomingInstance> homingInstanceClient;
+
+    private final Client<CloudifyManager> cloudifyManagerClient;
+
+    private final Client<CvnfcCustomization> cvnfcCustomizationClient;
+
+    private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
+
+    private final Client<PnfResource> pnfResourceClient;
+
+    private final Client<PnfResourceCustomization> pnfResourceCustomizationClient;
+
+    private final Client<Workflow> workflowClient;
+
+    @Value("${mso.catalog.db.spring.endpoint:#{null}}")
+    private String endpoint;
+
+    @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;
+        findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
+        findFirstByModelVersionAndModelInvariantUUIDURI =
+                endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
+        findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
+        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;
+        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;
+        findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
+        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;
+        findByClliAndCloudVersion = endpoint + CLOUD_SITE + SEARCH + findByClliAndCloudVersion;
+
+        findPnfResourceCustomizationByModelUuid =
+                endpoint + PNF_RESOURCE_CUSTOMIZATION + SEARCH + findPnfResourceCustomizationByModelUuid;
+
+        findWorkflowByArtifactUUID = endpoint + WORKFLOW + SEARCH + findWorkflowByArtifactUUID;
+
+        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;
+        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;
+        instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR;
+        cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR;
+        cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR;
+        homingInstanceURI = endpoint + HOMING_INSTANCE + URI_SEPARATOR;
+        pnfResourceURI = endpoint + PNF_RESOURCE + URI_SEPARATOR;
+        pnfResourceCustomizationURI = endpoint + PNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
+        workflowURI = endpoint + WORKFLOW + URI_SEPARATOR;
+
+    }
+
+    public CatalogDbClient() {
+        ClientHttpRequestFactory factory =
+                new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
+
+        ClientFactory clientFactory =
+                Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
+                    restTemplate.getInterceptors().add((new SpringClientFilter()));
+
+                    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();
+        serviceClient = clientFactory.create(Service.class);
+        networkRecipeClient = clientFactory.create(NetworkRecipe.class);
+        networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
+        vnfResourceClient = clientFactory.create(VnfResource.class);
+        vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
+        vnfRecipeClient = clientFactory.create(VnfRecipe.class);
+        orchestrationClient = clientFactory.create(OrchestrationFlow.class);
+        vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
+        vfModuleClient = clientFactory.create(VfModule.class);
+        vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
+        northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
+        rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
+        buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
+        orchestrationStatusStateTransitionDirectiveClient =
+                clientFactory.create(OrchestrationStatusStateTransitionDirective.class);
+        vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
+        collectionResourceInstanceGroupCustomizationClient =
+                clientFactory.create(CollectionResourceInstanceGroupCustomization.class);
+        instanceGroupClient = clientFactory.create(InstanceGroup.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);
+        serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
+        cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
+        controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
+        externalServiceToInternalServiceClient = clientFactory.create(ExternalServiceToInternalService.class);
+        pnfResourceClient = clientFactory.create(PnfResource.class);
+        pnfResourceCustomizationClient = clientFactory.create(PnfResourceCustomization.class);
+        workflowClient = clientFactory.create(Workflow.class);
+    }
+
+    public CatalogDbClient(String baseUri, String auth) {
+        ClientHttpRequestFactory factory =
+                new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
+
+        ClientFactory clientFactory = Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory)
+                .setRestTemplateConfigurer(restTemplate -> {
+                    restTemplate.getInterceptors().add((new SpringClientFilter()));
+
+                    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();
+        serviceClient = clientFactory.create(Service.class);
+        networkRecipeClient = clientFactory.create(NetworkRecipe.class);
+        networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
+        vnfResourceClient = clientFactory.create(VnfResource.class);
+        vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
+        vnfRecipeClient = clientFactory.create(VnfRecipe.class);
+        orchestrationClient = clientFactory.create(OrchestrationFlow.class);
+        vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
+        vfModuleClient = clientFactory.create(VfModule.class);
+        vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
+        northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
+        rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
+        buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
+        orchestrationStatusStateTransitionDirectiveClient =
+                clientFactory.create(OrchestrationStatusStateTransitionDirective.class);
+        vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
+        collectionResourceInstanceGroupCustomizationClient =
+                clientFactory.create(CollectionResourceInstanceGroupCustomization.class);
+        instanceGroupClient = clientFactory.create(InstanceGroup.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);
+        serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
+        cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
+        controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
+        externalServiceToInternalServiceClient = clientFactory.create(ExternalServiceToInternalService.class);
+        pnfResourceClient = clientFactory.create(PnfResource.class);
+        pnfResourceCustomizationClient = clientFactory.create(PnfResourceCustomization.class);
+        workflowClient = clientFactory.create(Workflow.class);
+    }
+
+    public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(
+            String modelCustomizationUUID) {
+        NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
+                this.getSingleResource(networkCollectionResourceCustomizationClient,
+                        getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
+        if (networkCollectionResourceCustomization != null) {
+            networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
+        }
+        return networkCollectionResourceCustomization;
+    }
+
+    public Service getServiceByID(String modelUUID) {
+        Service service = getSingleResource(serviceClient, getUri(serviceURI + modelUUID));
+        if (service != null) {
+            service.setModelUUID(modelUUID);
+        }
+        return service;
+    }
+
+    public VfModule getVfModuleByModelUUID(String modelUUID) {
+        VfModule vfModule = getSingleResource(vfModuleClient, getUri(vfModuleURI + modelUUID));
+        if (vfModule != null) {
+            vfModule.setModelUUID(modelUUID);
+        }
+        return vfModule;
+    }
+
+    public VnfResource getVnfResourceByModelUUID(String modelUUID) {
+
+        VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
+        if (vnfResource != null) {
+            vnfResource.setModelUUID(modelUUID);
+        }
+        return vnfResource;
+    }
+
+    // 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;
+        }
+    }
+
+    public PnfResource getPnfResourceByModelUUID(String modelUUID) {
+        PnfResource PnfResource = this.getSingleResource(pnfResourceClient, getUri(pnfResourceURI + modelUUID));
+        if (PnfResource != null) {
+            PnfResource.setModelUUID(modelUUID);
+        }
+        return PnfResource;
+    }
+
+    public PnfResourceCustomization getPnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID) {
+        PnfResourceCustomization pnfResourceCustomization = getSingleResource(pnfResourceCustomizationClient,
+                getUri(pnfResourceCustomizationURI + modelCustomizationUUID));
+        if (pnfResourceCustomization != null) {
+            pnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
+        }
+        return pnfResourceCustomization;
+    }
+
+    public List<PnfResourceCustomization> getPnfResourceCustomizationByModelUuid(String modelUuid) {
+        return this.getMultipleResources(pnfResourceCustomizationClient,
+                getUri(UriBuilder.fromUri(findPnfResourceCustomizationByModelUuid)
+                        .queryParam("SERVICE_MODEL_UUID", modelUuid).build().toString()));
+    }
+
+    public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(
+            String modelCustomizationUUID) {
+        CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
+                this.getSingleResource(collectionNetworkResourceCustomizationClient,
+                        getUri(UriBuilder.fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID)
+                                .build().toString()));
+        if (collectionNetworkResourceCustomization != null) {
+            collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
+        }
+        return collectionNetworkResourceCustomization;
+    }
+
+    public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
+        InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
+        if (instanceGroup != null) {
+            instanceGroup.setModelUUID(modelUUID);
+        }
+        return instanceGroup;
+    }
+
+    public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
+        return this.getSingleResource(vfModuleCustomizationClient,
+                getUri(endpoint + VFMODULE_CUSTOMIZATION + SEARCH
+                        + "/findFirstByModelCustomizationUUIDOrderByCreatedDesc" + "?MODEL_CUSTOMIZATION_UUID="
+                        + modelCustomizationUUID));
+    }
+
+    public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(
+            String modelCustomizationUUID) {
+        NetworkResourceCustomization networkResourceCustomization = this.getSingleResource(
+                networkResourceCustomizationClient, getUri(networkResourceCustomizationURI + modelCustomizationUUID));
+        if (networkResourceCustomization != null) {
+            networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
+        }
+        return networkResourceCustomization;
+    }
+
+
+    public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
+        BuildingBlockDetail buildingBlockDetail =
+                getSingleResource(buildingBlockDetailClient, getUri(UriBuilder.fromUri(findOneByBuildingBlockName)
+                        .queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build().toString()));
+        if (buildingBlockDetail != null) {
+            buildingBlockDetail.setBuildingBlockName(buildingBlockName);
+        }
+        return buildingBlockDetail;
+    }
+
+
+    public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
+            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());
+    }
+
+    public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
+        return this.getMultipleResources(orchestrationClient,
+                UriBuilder.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());
+    }
+
+    public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
+            String modelCustomizationUUID) {
+        return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient,
+                UriBuilder.fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
+                        .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
+    }
+
+    public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
+            String modelCustomizationUUID, String vfModuleModelUUID) {
+        return this.getSingleResource(vfModuleCustomizationClient,
+                getUri(UriBuilder.fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
+                        .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID)
+                        .queryParam("MODEL_UUID", vfModuleModelUUID).build().toString()));
+    }
+
+    public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
+            String resourceName, boolean aLaCarte) {
+        return this.getSingleResource(northBoundRequestClient,
+                UriBuilder.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) {
+        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) {
+        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()));
+    }
+
+    public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
+            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()));
+    }
+
+    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()));
+    }
+
+    public NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action) {
+        return this.getSingleResource(networkRecipeClient, UriBuilder.fromUri(findFirstByModelNameAndAction)
+                .queryParam(MODEL_NAME, modelName).queryParam(ACTION, action).build());
+    }
+
+    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());
+    }
+
+    public Service getFirstByModelNameOrderByModelVersionDesc(String modelName) {
+        return this.getSingleResource(serviceClient,
+                UriBuilder.fromUri(findFirstByModelNameURI).queryParam(MODEL_NAME, modelName).build());
+    }
+
+    public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName) {
+        return this.getSingleResource(externalServiceToInternalServiceClient,
+                getUri(UriBuilder.fromUri(findExternalToInternalServiceByServiceName)
+                        .queryParam(SERVICE_NAME, serviceName).build().toString()));
+    }
+
+    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()));
+    }
+
+    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 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()));
+    }
+
+
+    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()));
+    }
+
+    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 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) {
+        return URI.create(template);
+    }
+
+    public CloudifyManager getCloudifyManager(String id) {
+        return this.getSingleResource(cloudifyManagerClient, getUri(cloudifyManagerURI + id));
+    }
+
+    public CloudSite getCloudSite(String id) {
+        return this.getSingleResource(cloudSiteClient, getUri(cloudSiteURI + id));
+    }
+
+    public CloudSite getCloudSite(String id, String uri) {
+        return this.getSingleResource(cloudSiteClient, getUri(uri + id));
+    }
+
+    public void postCloudSite(CloudSite cloudSite) {
+        this.postSingleResource(cloudSiteClient, cloudSite);
+    }
+
+    public CloudSite getCloudSiteByClliAndAicVersion(String clli, String cloudVersion) {
+        return this.getSingleResource(cloudSiteClient, getUri(UriBuilder.fromUri(findByClliAndCloudVersion)
+                .queryParam(CLLI, clli).queryParam(CLOUD_VERSION, cloudVersion).build().toString()));
+    }
+
+    public HomingInstance getHomingInstance(String serviceInstanceId) {
+        return this.getSingleResource(homingInstanceClient, getUri(homingInstanceURI + serviceInstanceId));
+    }
+
+    public HomingInstance getHomingInstance(String serviceInstanceId, String uri) {
+        return this.getSingleResource(homingInstanceClient, getUri(uri + serviceInstanceId));
+    }
+
+    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()));
+    }
+
+    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()));
+    }
+
+    public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
+        return this.getMultipleResources(vfModuleClient,
+                getUri(UriBuilder.fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
+                        .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
+    }
+
+    private <T> T getSingleResource(Client<T> client, URI uri) {
+        return client.get(uri);
+    }
+
+    private <T> List<T> getMultipleResources(Client<T> client, URI uri) {
+        Iterable<T> iterator = client.getAll(uri);
+        List<T> list = new ArrayList<>();
+        Iterator<T> it = iterator.iterator();
+        it.forEachRemaining(list::add);
+        return list;
+    }
+
+    private <T> URI postSingleResource(Client<T> client, T type) {
+        return client.post(type);
+    }
+
+    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 CvnfcCustomization 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);
+    }
+
+    public Workflow findWorkflowByArtifactUUID(String artifactUUID) {
+        return this.getSingleResource(workflowClient, getUri(UriBuilder.fromUri(findWorkflowByArtifactUUID)
+                .queryParam(ARTIFACT_UUID, artifactUUID).build().toString()));
+    }
 }