Dynamic Cloud Owner Support
[so.git] / mso-catalog-db / src / main / java / org / onap / so / db / catalog / client / CatalogDbClient.java
index e43fc17..4f070e7 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 javax.annotation.PostConstruct;
+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.CvnfcCustomization;
+import org.onap.so.db.catalog.beans.ExternalServiceToInternalService;
 import org.onap.so.db.catalog.beans.InstanceGroup;
 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
+import org.onap.so.db.catalog.beans.NetworkRecipe;
+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.ResourceType;
 import org.onap.so.db.catalog.beans.Service;
+import org.onap.so.db.catalog.beans.ServiceRecipe;
+import org.onap.so.db.catalog.beans.VfModule;
 import org.onap.so.db.catalog.beans.VfModuleCustomization;
+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.VnfcInstanceGroupCustomization;
-import org.onap.so.db.catalog.beans.CloudSite;
-import org.onap.so.db.catalog.beans.CloudIdentity;
-import org.onap.so.db.catalog.beans.CloudifyManager;
-import org.onap.so.db.catalog.beans.ServiceRecipe;
 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.logging.jaxrs.filter.jersey.SpringClientFilter;
+import org.onap.so.logger.LogConstants;
+import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
 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 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 SERVICE_RECIPE_SEARCH = "/serviceRecipe/search";
-       private static final String SERVICE_MODEL_UUID = "SERVICE_MODEL_UUID";
-       private static final String ACTION = "ACTION";
-       private static final String MODEL_NAME = "MODEL_NAME";
-       private static final String SERVICE_SEARCH = "/service/search";
-       private static final String MODEL_VERSION = "MODEL_VERSION";
-       private static final String MODEL_INVARIANT_UUID = "MODEL_INVARIANT_UUID";
+       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 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 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 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 findExternalToInternalServiceByServiceName = "/findByServiceName";
+       private String findServiceByModelName = "/findOneByModelName";
+       private String findServiceRecipeByActionAndServiceModelUUID = "/findByActionAndServiceModelUUID";
+       private String findServiceByModelUUID = "/findOneByModelUUID";
        private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
        private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
-       private String findByModelVersionAndModelInvariantUUIDURI = "/findByModelVersionAndModelInvariantUUID";
-       
-       private Client<Service> serviceClient;
+       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 Client<VfModuleCustomization> vfModuleCustomizationClient;
+       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 Client<OrchestrationFlow> orchestrationClient;
+       private final Client<Service> serviceClient;
 
-       private Client<NorthBoundRequest> northBoundRequestClient;
+       private final Client<NetworkRecipe> networkRecipeClient;
 
-       private Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
+       private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
 
-       private Client<BuildingBlockDetail> buildingBlockDetailClient;
+       private final Client<VnfResource> vnfResourceClient;
 
-       private Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
+       private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
 
-       private Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
+       private final Client<VnfRecipe> vnfRecipeClient;
 
-       private Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
+       private final Client<VfModuleCustomization> vfModuleCustomizationClient;
 
-       private Client<InstanceGroup> instanceGroupClient;
-       
-       private Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
-       
-       private Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
+       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 Client<ServiceRecipe> serviceRecipeClient;
+       private final Client<BuildingBlockDetail> buildingBlockDetailClient;
 
-       private Client<CloudSite> cloudSiteClient;
+       private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
 
-       private Client<CloudIdentity> cloudIdentityClient;
+       private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
 
-       private Client<CloudifyManager> cloudifyManagerClient;
+       private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
 
-       protected Client<ControllerSelectionReference> controllerSelectionReferenceClient;
+       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<CloudifyManager> cloudifyManagerClient;
+       
+       private Client<CvnfcCustomization> cvnfcCustomizationClient;
+
+       private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
 
        @Value("${mso.catalog.db.spring.endpoint}")
        private String endpoint;
@@ -111,28 +222,72 @@ public class CatalogDbClient {
        @Value("${mso.db.auth}")
        private String msoAdaptersAuth;
 
+
        @PostConstruct
        public void init(){
-               findFirstByModelNameURI = endpoint + SERVICE_SEARCH + findFirstByModelNameURI;
-               findByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE_SEARCH + findByModelVersionAndModelInvariantUUIDURI;
-               findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE_SEARCH + findFirstByServiceModelUUIDAndActionURI; 
+               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;
+               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("Authorization", msoAdaptersAuth);
+                               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);
@@ -145,47 +300,101 @@ public class CatalogDbClient {
                networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
                collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
                cloudSiteClient = clientFactory.create(CloudSite.class);
-               cloudIdentityClient = clientFactory.create(CloudIdentity.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);
        }
-       
+
+       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);
+               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);
+       }
+
        public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
-               NetworkCollectionResourceCustomization networkCollectionResourceCustomization = 
-                               this.getSingleNetworkCollectionResourceCustomization(UriBuilder.fromUri(endpoint + "/networkCollectionResourceCustomization/" + modelCustomizationUUID).build());
+               NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
+                               this.getSingleResource(networkCollectionResourceCustomizationClient, getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
                if (networkCollectionResourceCustomization != null) {
                        networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
                }
                return networkCollectionResourceCustomization;
        }
 
-       private NetworkCollectionResourceCustomization getSingleNetworkCollectionResourceCustomization(URI uri) {
-               return networkCollectionResourceCustomizationClient.get(uri);
-       }
-
        public Service getServiceByID(String modelUUID) {
-               Service service = this.getSingleService(UriBuilder.fromUri(endpoint + "/service/" + modelUUID).build());
+               Service service = getSingleResource(serviceClient,getUri(serviceURI + modelUUID));
                if (service != null) {
                        service.setModelUUID(modelUUID);
                }
                return service;
        }
 
-       public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
-               BuildingBlockDetail buildingBlockDetail = buildingBlockDetailClient
-                               .get(UriBuilder.fromUri(endpoint + "/buildingBlockDetail/search/findOneByBuildingBlockName")
-                                               .queryParam("buildingBlockName", buildingBlockName).build());
-               if (buildingBlockDetail != null) {
-                       buildingBlockDetail.setBuildingBlockName(buildingBlockName);
+       public VfModule getVfModuleByModelUUID(String modelUUID) {
+               VfModule vfModule = getSingleResource(vfModuleClient,getUri(vfModuleURI + modelUUID));
+               if (vfModule != null) {
+                       vfModule.setModelUUID(modelUUID);
                }
-               return buildingBlockDetail;
+               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.getSingleCollectionNetworkResourceCustomization(
-                                               UriBuilder.fromUri(endpoint + "/collectionNetworkResourceCustomization/" + modelCustomizationUUID).build());
+               CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
+                               this.getSingleResource(collectionNetworkResourceCustomizationClient,getUri(UriBuilder
+                                               .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
                if (collectionNetworkResourceCustomization != null) {
                        collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
                }
@@ -193,202 +402,256 @@ public class CatalogDbClient {
        }
 
        public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
-               InstanceGroup instanceGroup = this
-                               .getSingleInstanceGroup(UriBuilder.fromUri(endpoint + "/instanceGroup/" + modelUUID).build());
+               InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
                if (instanceGroup != null) {
                        instanceGroup.setModelUUID(modelUUID);
                }
                return instanceGroup;
        }
 
-       public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
-                       ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
-               return orchestrationStatusStateTransitionDirectiveClient.get(UriBuilder
-                               .fromUri(
-                                               endpoint + "/orchestrationStatusStateTransitionDirective/search/findOneByResourceTypeAndOrchestrationStatusAndTargetAction")
-                               .queryParam("resourceType", resourceType.name())
-                               .queryParam("orchestrationStatus", orchestrationStatus.name())
-                               .queryParam("targetAction", targetAction.name()).build());
+       public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
+               VfModuleCustomization vfModuleCust = this.getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
+               if (vfModuleCust != null) {
+                       vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
+               }
+               return vfModuleCust;
        }
 
-       public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
-               return this
-                               .getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/search/findByAction")
-                                               .queryParam("COMPOSITE_ACTION", action).build());
+       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 List<OrchestrationFlow> getAllOrchestrationFlows() {
-               return this.getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/").build());
+
+       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());
        }
 
-       private List<OrchestrationFlow> getMultipleOrchestrationFlows(URI uri) {
-               Iterable<OrchestrationFlow> orchIterator = orchestrationClient.getAll(uri);
-               List<OrchestrationFlow> orchList = new ArrayList<>();
-               Iterator<OrchestrationFlow> it = orchIterator.iterator();
-               it.forEachRemaining(orchList::add);
-               return orchList;
+       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.getMultipleVnfcInstanceGroupCustomizations(
-                               UriBuilder.fromUri(endpoint + "/vnfcInstanceGroupCustomization/search/findByModelCustomizationUUID")
-                                               .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
+               return this.getMultipleResources(vnfcInstanceGroupCustomizationClient, UriBuilder
+                               .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
+                               .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
        }
 
        public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
                        String modelCustomizationUUID) {
-               return this.getMultipleCollectionResourceInstanceGroupCustomizations(UriBuilder
-                               .fromUri(endpoint + "/collectionResourceInstanceGroupCustomization/search/findByModelCustomizationUUID")
-                               .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
-       }
-
-       private List<CollectionResourceInstanceGroupCustomization> getMultipleCollectionResourceInstanceGroupCustomizations(
-                       URI uri) {
-               Iterable<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustIter = collectionResourceInstanceGroupCustomizationClient
-                               .getAll(uri);
-               List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustList = new ArrayList<>();
-               Iterator<CollectionResourceInstanceGroupCustomization> it = collectionInstanceGroupCustIter.iterator();
-               it.forEachRemaining(collectionInstanceGroupCustList::add);
-               return collectionInstanceGroupCustList;
-       }
-
-       private List<VnfcInstanceGroupCustomization> getMultipleVnfcInstanceGroupCustomizations(URI uri) {
-               Iterable<VnfcInstanceGroupCustomization> vnfcIterator = vnfcInstanceGroupCustomizationClient.getAll(uri);
-               List<VnfcInstanceGroupCustomization> vnfcList = new ArrayList<>();
-               Iterator<VnfcInstanceGroupCustomization> it = vnfcIterator.iterator();
-               it.forEachRemaining(vnfcList::add);
-               return vnfcList;
+               return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
+                               .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
+                               .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
        }
 
-       public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
-               VfModuleCustomization vfModuleCust = this.getSingleVfModuleCustomization(
-                               UriBuilder.fromUri(endpoint + "/vfModuleCustomization/" + modelCustomizationUUID).build());
-               if (vfModuleCust != null) {
-                       vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
-               }
-               return vfModuleCust;
+       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.getSingleNorthBoundRequest(UriBuilder
-                               .fromUri(endpoint + "/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarte")
-                               .queryParam("ACTION", requestAction).queryParam("REQUEST_SCOPE", resourceName)
-                               .queryParam("IS_ALACARTE", aLaCarte).build());
+               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.getSingleRainyDayHandlerStatus(UriBuilder
-                               .fromUri(
-                                               endpoint + "/rainy_day_handler_macro/search/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep")
-                               .queryParam("FLOW_NAME", flowName).queryParam("SERVICE_TYPE", serviceType)
-                               .queryParam("VNF_TYPE", vnfType).queryParam("ERROR_CODE", errorCode).queryParam("WORK_STEP", workStep)
-                               .build());
+               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.getSingleServiceRecipe(UriBuilder.fromUri(findFirstByServiceModelUUIDAndActionURI)
+               return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
+                               .fromUri(findFirstByServiceModelUUIDAndActionURI)
                                .queryParam(SERVICE_MODEL_UUID,modelUUID)
-                               .queryParam(ACTION,action)
-                               .build());
+                               .queryParam(ACTION,action).build().toString()));
        }
-       
-       public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
-               return this.getSingleService(UriBuilder.fromUri(findFirstByModelNameURI)
-                               .queryParam(MODEL_NAME,modelName)
-                               .build());
-       }
-       
-       public ControllerSelectionReference getControllerSelectionReferenceByVnfType(String vnfType) {
-               return this.getSingleControllerSelectionReference(UriBuilder
-                               .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfType")
-                                               .queryParam("VNF_TYPE", vnfType).build());
 
+       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.getSingleControllerSelectionReference(UriBuilder
+               return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
                                .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
                                                .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
        }
-       
-       private CollectionNetworkResourceCustomization getSingleCollectionNetworkResourceCustomization(URI uri) {
-               return collectionNetworkResourceCustomizationClient.get(uri);
+
+       public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
+               return this.getSingleResource(serviceClient,UriBuilder
+                               .fromUri(findFirstByModelNameURI)
+                               .queryParam(MODEL_NAME,modelName).build());
        }
 
-       public CloudifyManager getCloudifyManager(String id) {
-               return this.getSingleCloudifyManager(UriBuilder.fromUri(endpoint+"/cloudifyManager/"+id).build());
+       public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName){
+               return this.getSingleResource(externalServiceToInternalServiceClient, getUri(UriBuilder
+                               .fromUri(findExternalToInternalServiceByServiceName)
+                               .queryParam(SERVICE_NAME,serviceName).build().toString()));
        }
-       
-       public CloudSite getCloudSite(String id){
-               return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/"+id).build());
+
+       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 CloudIdentity getCloudIdentity(String id){
-               return this.getSingleCloudIdentity(UriBuilder.fromUri(endpoint+"/cloudIdentity/"+id).build());
+
+       public Service getServiceByModelName(String modelName){
+               return this.getSingleResource(serviceClient,getUri(UriBuilder
+                               .fromUri(findServiceByModelName)
+                               .queryParam(MODEL_NAME,modelName).build().toString()));
        }
-       
-       public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
-               return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/search/findByClliAndCloudVersion")
-               .queryParam("CLLI",clli).queryParam("CLOUD_VERSION",cloudVersion)
-               .build());
+
+       public Service getServiceByModelUUID(String modelModelUUID){
+               return this.getSingleResource(serviceClient,getUri(UriBuilder
+                               .fromUri(findServiceByModelUUID)
+                               .queryParam(MODEL_UUID,modelModelUUID).build().toString()));
        }
 
-       private InstanceGroup getSingleInstanceGroup(URI uri) {
-               return instanceGroupClient.get(uri);
+       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()));
        }
 
-       private Service getSingleService(URI uri) {
-               return serviceClient.get(uri);
+
+       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()));
        }
 
-       private VfModuleCustomization getSingleVfModuleCustomization(URI uri) {
-               return vfModuleCustomizationClient.get(uri);
+       public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action){
+               return this.getSingleResource(vnfRecipeClient,getUri(UriBuilder
+                               .fromUri(findFirstVnfRecipeByNfRoleAndAction)
+                               .queryParam(NF_ROLE,nfRole)
+                               .queryParam(ACTION,action).build().toString()));
        }
 
-       private NorthBoundRequest getSingleNorthBoundRequest(URI uri) {
-               return northBoundRequestClient.get(uri);
+       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()));
        }
 
-       private RainyDayHandlerStatus getSingleRainyDayHandlerStatus(URI uri) {
-               return rainyDayHandlerStatusClient.get(uri);
+       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()));
        }
-       
-       private ServiceRecipe getSingleServiceRecipe(URI uri){
-               return serviceRecipeClient.get(uri);
+       protected URI getUri(String template){
+               return URI.create(template);
        }
 
-       protected CloudSite getSinglCloudSite(URI uri) {
-               return cloudSiteClient.get(uri);
+       public CloudifyManager getCloudifyManager(String id) {
+               return this.getSingleResource(cloudifyManagerClient,getUri(cloudifyManagerURI + id));
        }
 
-       protected CloudIdentity getSingleCloudIdentity(URI uri) {
-               return cloudIdentityClient.get(uri);
+       public CloudSite getCloudSite(String id){
+               return this.getSingleResource(cloudSiteClient, getUri(cloudSiteURI + id));
        }
 
-       protected CloudifyManager getSingleCloudifyManager(URI uri) {
-               return cloudifyManagerClient.get(uri);
+       public void postCloudSite(CloudSite cloudSite){
+               this.postSingleResource(cloudSiteClient, cloudSite);
        }
 
-       private ControllerSelectionReference getSingleControllerSelectionReference(URI uri) {
-               return controllerSelectionReferenceClient.get(uri);
+
+       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.getSingleService(
-                               UriBuilder.fromUri(findByModelVersionAndModelInvariantUUIDURI)
-                                               .queryParam(MODEL_VERSION, modelVersion)
-                                               .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build());
+               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;
        }
 
-       //USED FOR TEST ONLY
-       public void setPortToEndpoint(String port) {
-               endpoint = endpoint + port;
+       private <T> URI postSingleResource(Client<T> client, T type){
+               return client.post(type);
        }
        
-       //USED FOR TEST ONLY
-       public void removePortFromEndpoint() {
-               endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);
+       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;
+       }
+
 }