3e35e78e7ae5cf48b1824c616310931476fc06e3
[so.git] / mso-catalog-db / src / main / java / org / onap / so / db / catalog / client / CatalogDbClient.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.db.catalog.client;
22
23 import java.net.URI;
24 import java.util.ArrayList;
25 import java.util.Iterator;
26 import java.util.List;
27 import javax.annotation.PostConstruct;
28 import javax.ws.rs.core.UriBuilder;
29 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
30 import org.onap.so.db.catalog.beans.CloudSite;
31 import org.onap.so.db.catalog.beans.CloudifyManager;
32 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
33 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
34 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
35 import org.onap.so.db.catalog.beans.CvnfcCustomization;
36 import org.onap.so.db.catalog.beans.ExternalServiceToInternalService;
37 import org.onap.so.db.catalog.beans.HomingInstance;
38 import org.onap.so.db.catalog.beans.InstanceGroup;
39 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
40 import org.onap.so.db.catalog.beans.NetworkRecipe;
41 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
42 import org.onap.so.db.catalog.beans.OrchestrationAction;
43 import org.onap.so.db.catalog.beans.OrchestrationStatus;
44 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
45 import org.onap.so.db.catalog.beans.PnfResource;
46 import org.onap.so.db.catalog.beans.PnfResourceCustomization;
47 import org.onap.so.db.catalog.beans.ResourceType;
48 import org.onap.so.db.catalog.beans.Service;
49 import org.onap.so.db.catalog.beans.ServiceRecipe;
50 import org.onap.so.db.catalog.beans.VfModule;
51 import org.onap.so.db.catalog.beans.VfModuleCustomization;
52 import org.onap.so.db.catalog.beans.VnfComponentsRecipe;
53 import org.onap.so.db.catalog.beans.VnfRecipe;
54 import org.onap.so.db.catalog.beans.VnfResource;
55 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
56 import org.onap.so.db.catalog.beans.VnfVfmoduleCvnfcConfigurationCustomization;
57 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
58 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
59 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
60 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
61 import org.onap.so.logger.LogConstants;
62 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
63 import org.springframework.beans.factory.annotation.Value;
64 import org.springframework.http.HttpHeaders;
65 import org.springframework.http.client.BufferingClientHttpRequestFactory;
66 import org.springframework.http.client.ClientHttpRequestFactory;
67 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
68 import org.springframework.stereotype.Component;
69 import uk.co.blackpepper.bowman.Client;
70 import uk.co.blackpepper.bowman.ClientFactory;
71 import uk.co.blackpepper.bowman.Configuration;
72
73 @Component("CatalogDbClient")
74 public class CatalogDbClient {
75
76     private static final String CLOUD_SITE = "/cloudSite";
77     private static final String CLOUDIFY_MANAGER = "/cloudifyManager";
78     private static final String CVNFC_CUSTOMZIATION = "/cvnfcCustomization";
79     private static final String RAINY_DAY_HANDLER_MACRO = "/rainy_day_handler_macro";
80     private static final String NORTHBOUND_REQUEST_REF_LOOKUP = "/northbound_request_ref_lookup";
81     private static final String NETWORK_RESOURCE_CUSTOMIZATION = "/networkResourceCustomization";
82     private static final String COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION = "/collectionResourceInstanceGroupCustomization";
83     private static final String VNFC_INSTANCE_GROUP_CUSTOMIZATION = "/vnfcInstanceGroupCustomization";
84     private static final String ORCHESTRATION_FLOW = "/orchestrationFlow";
85     private static final String ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE = "/orchestrationStatusStateTransitionDirective";
86     private static final String INSTANCE_GROUP = "/instanceGroup";
87     private static final String COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION = "/collectionNetworkResourceCustomization";
88     private static final String BUILDING_BLOCK_DETAIL = "/buildingBlockDetail";
89     private static final String NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION = "/networkCollectionResourceCustomization";
90     private static final String VNF_RESOURCE_CUSTOMIZATION = "/vnfResourceCustomization";
91     private static final String SERVICE = "/service";
92     private static final String EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING = "/externalServiceToInternalService";
93     private static final String VNF_RESOURCE = "/vnfResource";
94     private static final String VNF_RECIPE = "/vnfRecipe";
95     private static final String VFMODULE = "/vfModule";
96     private static final String VFMODULE_CUSTOMIZATION = "/vfModuleCustomization";
97     private static final String VNF_COMPONENTS_RECIPE = "/vnfComponentsRecipe";
98     private static final String SERVICE_RECIPE = "/serviceRecipe";
99     private static final String NETWORK_RECIPE = "/networkRecipe";
100     private static final String PNF_RESOURCE = "/pnfResource";
101     private static final String PNF_RESOURCE_CUSTOMIZATION = "/pnfResourceCustomization";
102
103
104     private static final String SEARCH = "/search";
105     private static final String URI_SEPARATOR = "/";
106
107     private static final String SERVICE_MODEL_UUID = "serviceModelUUID";
108     private static final String SERVICE_NAME = "serviceName";
109     private static final String MODEL_UUID = "modelUUID";
110     private static final String MODEL_CUSTOMIZATION_UUID = "modelCustomizationUUID";
111     private static final String ACTION = "action";
112     private static final String MODEL_NAME = "modelName";
113     private static final String MODEL_VERSION = "modelVersion";
114     private static final String MODEL_INVARIANT_UUID = "modelInvariantUUID";
115     private static final String MODEL_INSTANCE_NAME = "modelInstanceName";
116     private static final String VNF_RESOURCE_MODEL_UUID = "vnfResourceModelUUID";
117     private static final String NF_ROLE = "nfRole";
118     private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
119     private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
120     private static final String BUILDING_BLOCK_NAME = "buildingBlockName";
121     private static final String RESOURCE_TYPE = "resourceType";
122     private static final String ORCHESTRATION_STATUS = "orchestrationStatus";
123     private static final String TARGET_ACTION = "targetAction";
124     private static final String REQUEST_SCOPE = "requestScope";
125     private static final String IS_ALACARTE = "isALaCarte";
126     private static final String CLOUD_OWNER = "cloudOwner";
127     private static final String FLOW_NAME = "flowName";
128     private static final String SERVICE_TYPE = "serviceType";
129     private static final String VNF_TYPE = "vnfType";
130     private static final String ERROR_CODE = "errorCode";
131     private static final String WORK_STEP = "workStep";
132     private static final String CLLI = "clli";
133     private static final String CLOUD_VERSION = "cloudVersion";
134     private static final String HOMING_INSTANCE = "/homingInstance";
135
136     private static final String TARGET_ENTITY = "SO:CatalogDB";
137     private static final String ASTERISK = "*";
138
139     private String findExternalToInternalServiceByServiceName = "/findByServiceName";
140     private String findServiceByModelName = "/findOneByModelName";
141     private String findServiceRecipeByActionAndServiceModelUUID = "/findByActionAndServiceModelUUID";
142     private String findServiceByModelUUID = "/findOneByModelUUID";
143     private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
144     private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
145     private String findFirstByModelVersionAndModelInvariantUUIDURI = "/findFirstByModelVersionAndModelInvariantUUID";
146     private String findByModelInvariantUUIDURI = "/findByModelInvariantUUIDOrderByModelVersionDesc";
147     private String findFirstByModelNameAndAction = "/findFirstByModelNameAndAction";
148     private String findFirstResourceByModelInvariantUUIDAndModelVersion = "/findFirstResourceByModelInvariantUUIDAndModelVersion";
149     private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
150     private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
151     private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findByModelCustomizationUUIDAndVfModuleModelUUID";
152     private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
153     private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
154     private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = "/findByModelInvariantUUIDOrderByModelVersionDesc";
155     private String findFirstVfModuleByModelInvariantUUIDAndModelVersion = "/findFirstVfModuleByModelInvariantUUIDAndModelVersion";
156     private String findOneByBuildingBlockName = "/findOneByBuildingBlockName";
157     private String findOneByResourceTypeAndOrchestrationStatusAndTargetAction = "/findOneByResourceTypeAndOrchestrationStatusAndTargetAction";
158     private String findByAction = "/findByAction";
159     private String findVnfcInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
160     private String findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
161     private String findOneByActionAndRequestScopeAndIsAlacarte = "/findOneByActionAndRequestScopeAndIsAlacarte";
162     private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner";
163     private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType = "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType";
164     private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep";
165     private String findByClliAndCloudVersion = "/findByClliAndCloudVersion";
166     private String findServiceByServiceInstanceId = "/findServiceByServiceInstanceId";
167
168
169     private String serviceURI;
170     private String vfModuleURI;
171     private String vnfResourceURI;
172     private String vfModuleCustomizationURI;
173     private String networkCollectionResourceCustomizationURI;
174     private String networkResourceCustomizationURI;
175     private String vnfResourceCustomizationURI;
176     private String collectionNetworkResourceCustomizationURI;
177     private String instanceGroupURI;
178     private String cloudifyManagerURI;
179     private String cloudSiteURI;
180     private String homingInstanceURI;
181     private String cvnfcResourceCustomizationURI;
182     private String pnfResourceURI;
183     private String pnfResourceCustomizationURI;
184
185     private final Client<Service> serviceClient;
186
187     private final Client<NetworkRecipe> networkRecipeClient;
188
189     private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
190
191     private final Client<VnfResource> vnfResourceClient;
192
193     private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
194
195     private final Client<VnfRecipe> vnfRecipeClient;
196
197     private final Client<VfModuleCustomization> vfModuleCustomizationClient;
198
199     private final Client<VfModule> vfModuleClient;
200
201     private final Client<VnfComponentsRecipe> vnfComponentsRecipeClient;
202
203     private final Client<OrchestrationFlow> orchestrationClient;
204
205     private final Client<NorthBoundRequest> northBoundRequestClient;
206
207     private final Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
208
209     private final Client<BuildingBlockDetail> buildingBlockDetailClient;
210
211     private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
212
213     private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
214
215     private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
216
217     private final Client<InstanceGroup> instanceGroupClient;
218
219     private final Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
220
221     private final Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
222
223     private final Client<ServiceRecipe> serviceRecipeClient;
224
225     private final Client<ExternalServiceToInternalService> externalServiceToInternalServiceClient;
226
227     private final Client<CloudSite> cloudSiteClient;
228
229     private final Client<HomingInstance> homingInstanceClient;
230
231     private final Client<CloudifyManager> cloudifyManagerClient;
232
233     private final Client<CvnfcCustomization> cvnfcCustomizationClient;
234
235     private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
236
237     private final Client<PnfResource> pnfResourceClient;
238
239     private final Client<PnfResourceCustomization> pnfResourceCustomizationClient;
240
241     @Value("${mso.catalog.db.spring.endpoint:#{null}}")
242     private String endpoint;
243
244     @Value("${mso.db.auth:#{null}}")
245     private String msoAdaptersAuth;
246
247
248     @PostConstruct
249     public void init() {
250         findExternalToInternalServiceByServiceName =
251             endpoint + EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING + SEARCH + findExternalToInternalServiceByServiceName;
252         findServiceByModelName = endpoint + SERVICE + SEARCH + findServiceByModelName;
253         findServiceRecipeByActionAndServiceModelUUID =
254             endpoint + SERVICE_RECIPE + SEARCH + findServiceRecipeByActionAndServiceModelUUID;
255         findServiceByModelUUID = endpoint + SERVICE + SEARCH + findServiceByModelUUID;
256         findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
257         findFirstByModelVersionAndModelInvariantUUIDURI =
258             endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
259         findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
260         findFirstByServiceModelUUIDAndActionURI =
261             endpoint + SERVICE_RECIPE + SEARCH + findFirstByServiceModelUUIDAndActionURI;
262         findFirstByModelNameAndAction = endpoint + NETWORK_RECIPE + SEARCH + findFirstByModelNameAndAction;
263         findFirstResourceByModelInvariantUUIDAndModelVersion =
264             endpoint + VNF_RESOURCE + SEARCH + findFirstResourceByModelInvariantUUIDAndModelVersion;
265         findByModelInstanceNameAndVnfResources =
266             endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findByModelInstanceNameAndVnfResources;
267         findFirstVnfRecipeByNfRoleAndAction = endpoint + VNF_RECIPE + SEARCH + findFirstVnfRecipeByNfRoleAndAction;
268         findByModelCustomizationUUIDAndVfModuleModelUUID =
269             endpoint + VFMODULE_CUSTOMIZATION + SEARCH + findByModelCustomizationUUIDAndVfModuleModelUUID;
270         findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction =
271             endpoint + VNF_COMPONENTS_RECIPE + SEARCH
272                 + findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction;
273         findFirstVnfComponentsRecipeByVnfComponentTypeAndAction =
274             endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVnfComponentTypeAndAction;
275         findVfModuleByModelInvariantUUIDOrderByModelVersionDesc =
276             endpoint + VFMODULE + SEARCH + findVfModuleByModelInvariantUUIDOrderByModelVersionDesc;
277         findFirstVfModuleByModelInvariantUUIDAndModelVersion =
278             endpoint + VFMODULE + SEARCH + findFirstVfModuleByModelInvariantUUIDAndModelVersion;
279         findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
280         findOneByResourceTypeAndOrchestrationStatusAndTargetAction =
281             endpoint + ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE + SEARCH
282                 + findOneByResourceTypeAndOrchestrationStatusAndTargetAction;
283         findByAction = endpoint + ORCHESTRATION_FLOW + SEARCH + findByAction;
284         findVnfcInstanceGroupCustomizationByModelCustomizationUUID =
285             endpoint + VNFC_INSTANCE_GROUP_CUSTOMIZATION + SEARCH
286                 + findVnfcInstanceGroupCustomizationByModelCustomizationUUID;
287         findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID =
288             endpoint + COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION + SEARCH
289                 + findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID;
290         findOneByActionAndRequestScopeAndIsAlacarte =
291             endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarte;
292         findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH
293             + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner;
294         findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType =
295             endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH
296                 + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType;
297         findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH
298             + findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep;
299         findByClliAndCloudVersion = endpoint + CLOUD_SITE + SEARCH + findByClliAndCloudVersion;
300
301         serviceURI = endpoint + SERVICE + URI_SEPARATOR;
302         vfModuleURI = endpoint + VFMODULE + URI_SEPARATOR;
303         vnfResourceURI = endpoint + VNF_RESOURCE + URI_SEPARATOR;
304         vfModuleCustomizationURI = endpoint + VFMODULE_CUSTOMIZATION + URI_SEPARATOR;
305         networkCollectionResourceCustomizationURI =
306             endpoint + NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
307         networkResourceCustomizationURI = endpoint + NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
308         cvnfcResourceCustomizationURI = endpoint + CVNFC_CUSTOMZIATION + URI_SEPARATOR;
309         vnfResourceCustomizationURI = endpoint + VNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
310         collectionNetworkResourceCustomizationURI =
311             endpoint + COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
312         instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR;
313         cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR;
314         cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR;
315         homingInstanceURI = endpoint + HOMING_INSTANCE + URI_SEPARATOR;
316         pnfResourceURI = endpoint + PNF_RESOURCE + URI_SEPARATOR;
317         pnfResourceCustomizationURI = endpoint + PNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
318
319     }
320
321     public CatalogDbClient() {
322         ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(
323             new HttpComponentsClientHttpRequestFactory());
324
325         ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory)
326             .setRestTemplateConfigurer(restTemplate -> {
327                 restTemplate.getInterceptors().add((new SpringClientFilter()));
328
329                 restTemplate.getInterceptors().add((request, body, execution) -> {
330
331                     request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
332                     request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER, TARGET_ENTITY);
333                     return execution.execute(request, body);
334                 });
335             }).build().buildClientFactory();
336         serviceClient = clientFactory.create(Service.class);
337         networkRecipeClient = clientFactory.create(NetworkRecipe.class);
338         networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
339         vnfResourceClient = clientFactory.create(VnfResource.class);
340         vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
341         vnfRecipeClient = clientFactory.create(VnfRecipe.class);
342         orchestrationClient = clientFactory.create(OrchestrationFlow.class);
343         vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
344         vfModuleClient = clientFactory.create(VfModule.class);
345         vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
346         northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
347         rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
348         buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
349         orchestrationStatusStateTransitionDirectiveClient = clientFactory
350             .create(OrchestrationStatusStateTransitionDirective.class);
351         vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
352         collectionResourceInstanceGroupCustomizationClient = clientFactory
353             .create(CollectionResourceInstanceGroupCustomization.class);
354         instanceGroupClient = clientFactory.create(InstanceGroup.class);
355         networkCollectionResourceCustomizationClient = clientFactory
356             .create(NetworkCollectionResourceCustomization.class);
357         collectionNetworkResourceCustomizationClient = clientFactory
358             .create(CollectionNetworkResourceCustomization.class);
359         cloudSiteClient = clientFactory.create(CloudSite.class);
360         homingInstanceClient = clientFactory.create(HomingInstance.class);
361         cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
362         serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
363         cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
364         controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
365         externalServiceToInternalServiceClient = clientFactory.create(ExternalServiceToInternalService.class);
366         pnfResourceClient = clientFactory.create(PnfResource.class);
367         pnfResourceCustomizationClient = clientFactory.create(PnfResourceCustomization.class);
368     }
369
370     public CatalogDbClient(String baseUri, String auth) {
371         ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(
372             new HttpComponentsClientHttpRequestFactory());
373
374         ClientFactory clientFactory = Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory)
375             .setRestTemplateConfigurer(restTemplate -> {
376                 restTemplate.getInterceptors().add((new SpringClientFilter()));
377
378                 restTemplate.getInterceptors().add((request, body, execution) -> {
379
380                     request.getHeaders().add(HttpHeaders.AUTHORIZATION, auth);
381                     request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER, TARGET_ENTITY);
382                     return execution.execute(request, body);
383                 });
384             }).build().buildClientFactory();
385         serviceClient = clientFactory.create(Service.class);
386         networkRecipeClient = clientFactory.create(NetworkRecipe.class);
387         networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
388         vnfResourceClient = clientFactory.create(VnfResource.class);
389         vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
390         vnfRecipeClient = clientFactory.create(VnfRecipe.class);
391         orchestrationClient = clientFactory.create(OrchestrationFlow.class);
392         vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
393         vfModuleClient = clientFactory.create(VfModule.class);
394         vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
395         northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
396         rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
397         buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
398         orchestrationStatusStateTransitionDirectiveClient = clientFactory
399             .create(OrchestrationStatusStateTransitionDirective.class);
400         vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
401         collectionResourceInstanceGroupCustomizationClient = clientFactory
402             .create(CollectionResourceInstanceGroupCustomization.class);
403         instanceGroupClient = clientFactory.create(InstanceGroup.class);
404         networkCollectionResourceCustomizationClient = clientFactory
405             .create(NetworkCollectionResourceCustomization.class);
406         collectionNetworkResourceCustomizationClient = clientFactory
407             .create(CollectionNetworkResourceCustomization.class);
408         cloudSiteClient = clientFactory.create(CloudSite.class);
409         homingInstanceClient = clientFactory.create(HomingInstance.class);
410         cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
411         serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
412         cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
413         controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
414         externalServiceToInternalServiceClient = clientFactory.create(ExternalServiceToInternalService.class);
415         pnfResourceClient = clientFactory.create(PnfResource.class);
416         pnfResourceCustomizationClient = clientFactory.create(PnfResourceCustomization.class);
417     }
418
419     public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(
420         String modelCustomizationUUID) {
421         NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
422             this.getSingleResource(networkCollectionResourceCustomizationClient,
423                 getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
424         if (networkCollectionResourceCustomization != null) {
425             networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
426         }
427         return networkCollectionResourceCustomization;
428     }
429
430     public Service getServiceByID(String modelUUID) {
431         Service service = getSingleResource(serviceClient, getUri(serviceURI + modelUUID));
432         if (service != null) {
433             service.setModelUUID(modelUUID);
434         }
435         return service;
436     }
437
438     public VfModule getVfModuleByModelUUID(String modelUUID) {
439         VfModule vfModule = getSingleResource(vfModuleClient, getUri(vfModuleURI + modelUUID));
440         if (vfModule != null) {
441             vfModule.setModelUUID(modelUUID);
442         }
443         return vfModule;
444     }
445
446     public VnfResource getVnfResourceByModelUUID(String modelUUID) {
447
448         VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
449         if (vnfResource != null) {
450             vnfResource.setModelUUID(modelUUID);
451         }
452         return vnfResource;
453     }
454
455     public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID) {
456         VnfResourceCustomization vnfResourceCustomization = getSingleResource(vnfResourceCustomizationClient,
457             getUri(vnfResourceCustomizationURI + modelCustomizationUUID));
458         if (vnfResourceCustomization != null) {
459             vnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
460         }
461         return vnfResourceCustomization;
462     }
463
464     public PnfResource getPnfResourceByModelUUID(String modelUUID) {
465         PnfResource PnfResource = this.getSingleResource(pnfResourceClient, getUri(pnfResourceURI + modelUUID));
466         if (PnfResource != null) {
467             PnfResource.setModelUUID(modelUUID);
468         }
469         return PnfResource;
470     }
471
472     public PnfResourceCustomization getPnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID) {
473         PnfResourceCustomization pnfResourceCustomization = getSingleResource(pnfResourceCustomizationClient,
474             getUri(pnfResourceCustomizationURI + modelCustomizationUUID));
475         if (pnfResourceCustomization != null) {
476             pnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
477         }
478         return pnfResourceCustomization;
479     }
480
481     public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(
482         String modelCustomizationUUID) {
483         CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
484             this.getSingleResource(collectionNetworkResourceCustomizationClient, getUri(UriBuilder
485                 .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
486         if (collectionNetworkResourceCustomization != null) {
487             collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
488         }
489         return collectionNetworkResourceCustomization;
490     }
491
492     public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
493         InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
494         if (instanceGroup != null) {
495             instanceGroup.setModelUUID(modelUUID);
496         }
497         return instanceGroup;
498     }
499
500     public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
501         VfModuleCustomization vfModuleCust = this
502             .getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
503         if (vfModuleCust != null) {
504             vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
505         }
506         return vfModuleCust;
507     }
508
509     public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(
510         String modelCustomizationUUID) {
511         NetworkResourceCustomization networkResourceCustomization =
512             this.getSingleResource(networkResourceCustomizationClient,
513                 getUri(networkResourceCustomizationURI + modelCustomizationUUID));
514         if (networkResourceCustomization != null) {
515             networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
516         }
517         return networkResourceCustomization;
518     }
519
520     public CvnfcCustomization getCvnfcCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
521         CvnfcCustomization cvnfcResourceCustomization =
522                 this.getSingleResource(cvnfcCustomizationClient, getUri(cvnfcResourceCustomizationURI + modelCustomizationUUID));
523         if (cvnfcResourceCustomization != null) {
524             cvnfcResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
525         }
526         return cvnfcResourceCustomization;
527     }
528
529     public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
530         BuildingBlockDetail buildingBlockDetail = getSingleResource(buildingBlockDetailClient, getUri(UriBuilder
531             .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build()
532             .toString()));
533         if (buildingBlockDetail != null) {
534             buildingBlockDetail.setBuildingBlockName(buildingBlockName);
535         }
536         return buildingBlockDetail;
537     }
538
539
540     public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
541         ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
542         return getSingleResource(orchestrationStatusStateTransitionDirectiveClient, UriBuilder
543             .fromUri(findOneByResourceTypeAndOrchestrationStatusAndTargetAction)
544             .queryParam(RESOURCE_TYPE, resourceType.name())
545             .queryParam(ORCHESTRATION_STATUS, orchestrationStatus.name())
546             .queryParam(TARGET_ACTION, targetAction.name()).build());
547     }
548
549     public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
550         return this.getMultipleResources(orchestrationClient, UriBuilder
551             .fromUri(findByAction).queryParam(ACTION, action).build());
552     }
553
554     public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
555         return this.getMultipleResources(vnfcInstanceGroupCustomizationClient, UriBuilder
556             .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
557             .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
558     }
559
560     public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
561         String modelCustomizationUUID) {
562         return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
563             .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
564             .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
565     }
566
567     public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(
568         String modelCustomizationUUID, String vfModuleModelUUID) {
569         return this.getSingleResource(vfModuleCustomizationClient, getUri(UriBuilder
570             .fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
571             .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID)
572             .queryParam(VF_MODULE_MODEL_UUID, vfModuleModelUUID).build().toString()));
573     }
574
575     public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
576         String resourceName, boolean aLaCarte) {
577         return this.getSingleResource(northBoundRequestClient, UriBuilder
578             .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
579             .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
580             .queryParam(IS_ALACARTE, aLaCarte).build());
581     }
582
583     public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(String requestAction,
584         String resourceName, boolean aLaCarte, String cloudOwner) {
585         return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
586             .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
587             .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
588             .queryParam(IS_ALACARTE, aLaCarte)
589             .queryParam(CLOUD_OWNER, cloudOwner)
590             .queryParam(SERVICE_TYPE, ASTERISK).build().toString()));
591     }
592
593     public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(
594         String requestAction,
595         String resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
596         return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
597             .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
598             .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
599             .queryParam(IS_ALACARTE, aLaCarte)
600             .queryParam(CLOUD_OWNER, cloudOwner)
601             .queryParam(SERVICE_TYPE, serviceType).build().toString()));
602     }
603
604     public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
605         String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
606         return this.getSingleResource(rainyDayHandlerStatusClient, getUri(UriBuilder
607             .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
608             .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
609             .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
610             .build().toString()));
611     }
612
613     public ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action) {
614         return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
615             .fromUri(findFirstByServiceModelUUIDAndActionURI)
616             .queryParam(SERVICE_MODEL_UUID, modelUUID)
617             .queryParam(ACTION, action).build().toString()));
618     }
619
620     public NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action) {
621         return this.getSingleResource(networkRecipeClient, UriBuilder
622             .fromUri(findFirstByModelNameAndAction)
623             .queryParam(MODEL_NAME, modelName)
624             .queryParam(ACTION, action).build());
625     }
626
627     public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType,
628         String actionCategory) {
629         return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
630             .fromUri(endpoint
631                 + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
632             .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
633     }
634
635     public Service getFirstByModelNameOrderByModelVersionDesc(String modelName) {
636         return this.getSingleResource(serviceClient, UriBuilder
637             .fromUri(findFirstByModelNameURI)
638             .queryParam(MODEL_NAME, modelName).build());
639     }
640
641     public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName) {
642         return this.getSingleResource(externalServiceToInternalServiceClient, getUri(UriBuilder
643             .fromUri(findExternalToInternalServiceByServiceName)
644             .queryParam(SERVICE_NAME, serviceName).build().toString()));
645     }
646
647     public ServiceRecipe findServiceRecipeByActionAndServiceModelUUID(String action, String modelUUID) {
648         return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
649             .fromUri(findServiceRecipeByActionAndServiceModelUUID)
650             .queryParam(ACTION, action)
651             .queryParam(SERVICE_MODEL_UUID, modelUUID).build().toString()));
652     }
653
654     public Service getServiceByModelName(String modelName) {
655         return this.getSingleResource(serviceClient, getUri(UriBuilder
656             .fromUri(findServiceByModelName)
657             .queryParam(MODEL_NAME, modelName).build().toString()));
658     }
659
660     public Service getServiceByModelUUID(String modelModelUUID) {
661         return this.getSingleResource(serviceClient, getUri(UriBuilder
662             .fromUri(findServiceByModelUUID)
663             .queryParam(MODEL_UUID, modelModelUUID).build().toString()));
664     }
665
666     public VnfResource getFirstVnfResourceByModelInvariantUUIDAndModelVersion(String modelInvariantUUID,
667         String modelVersion) {
668         return this.getSingleResource(vnfResourceClient, getUri(UriBuilder
669             .fromUri(findFirstResourceByModelInvariantUUIDAndModelVersion)
670             .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
671             .queryParam(MODEL_VERSION, modelVersion).build().toString()));
672     }
673
674
675     public VnfResourceCustomization getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(
676         String modelInstanceName, VnfResource vnfResource) {
677         return this.getSingleResource(vnfResourceCustomizationClient, getUri(UriBuilder
678             .fromUri(findByModelInstanceNameAndVnfResources)
679             .queryParam(MODEL_INSTANCE_NAME, modelInstanceName)
680             .queryParam(VNF_RESOURCE_MODEL_UUID, vnfResource.getModelUUID()).build().toString()));
681     }
682
683     public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action) {
684         return this.getSingleResource(vnfRecipeClient, getUri(UriBuilder
685             .fromUri(findFirstVnfRecipeByNfRoleAndAction)
686             .queryParam(NF_ROLE, nfRole)
687             .queryParam(ACTION, action).build().toString()));
688     }
689
690     public VnfComponentsRecipe getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(
691         String vfModuleModelUUID, String vnfComponentType, String action) {
692         return this.getSingleResource(vnfComponentsRecipeClient, getUri(UriBuilder
693             .fromUri(findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction)
694             .queryParam(VF_MODULE_MODEL_UUID, vfModuleModelUUID)
695             .queryParam(VNF_COMPONENT_TYPE, vnfComponentType)
696             .queryParam(ACTION, action).build().toString()));
697     }
698
699     public VnfComponentsRecipe getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(String vnfComponentType,
700         String action) {
701         return this.getSingleResource(vnfComponentsRecipeClient, getUri(UriBuilder
702             .fromUri(findFirstVnfComponentsRecipeByVnfComponentTypeAndAction)
703             .queryParam(VNF_COMPONENT_TYPE, vnfComponentType)
704             .queryParam(ACTION, action).build().toString()));
705     }
706
707     protected URI getUri(String template) {
708         return URI.create(template);
709     }
710
711     public CloudifyManager getCloudifyManager(String id) {
712         return this.getSingleResource(cloudifyManagerClient, getUri(cloudifyManagerURI + id));
713     }
714
715     public CloudSite getCloudSite(String id) {
716         return this.getSingleResource(cloudSiteClient,
717             getUri(cloudSiteURI + id));
718     }
719
720     public CloudSite getCloudSite(String id, String uri) {
721         return this.getSingleResource(cloudSiteClient,
722             getUri(uri + id));
723     }
724
725     public void postCloudSite(CloudSite cloudSite) {
726         this.postSingleResource(cloudSiteClient, cloudSite);
727     }
728
729     public CloudSite getCloudSiteByClliAndAicVersion(String clli, String cloudVersion) {
730         return this.getSingleResource(cloudSiteClient, getUri(UriBuilder
731             .fromUri(findByClliAndCloudVersion)
732             .queryParam(CLLI, clli).queryParam(CLOUD_VERSION, cloudVersion).build().toString()));
733     }
734
735     public HomingInstance getHomingInstance(String serviceInstanceId) {
736         return this.getSingleResource(homingInstanceClient,
737             getUri(homingInstanceURI + serviceInstanceId));
738     }
739
740     public HomingInstance getHomingInstance(String serviceInstanceId, String uri) {
741         return this.getSingleResource(homingInstanceClient,
742             getUri(uri + serviceInstanceId));
743     }
744
745     public void postHomingInstance(HomingInstance homingInstance) {
746         this.postSingleResource(homingInstanceClient, homingInstance);
747     }
748
749     public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
750         return this.getSingleResource(serviceClient, getUri(UriBuilder
751             .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI)
752             .queryParam(MODEL_VERSION, modelVersion)
753             .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
754     }
755
756     public VfModule getVfModuleByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion) {
757         return this.getSingleResource(vfModuleClient, getUri(UriBuilder
758             .fromUri(findFirstVfModuleByModelInvariantUUIDAndModelVersion)
759             .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
760             .queryParam(MODEL_VERSION, modelVersion).build().toString()));
761     }
762
763     public List<Service> getServiceByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
764         return this.getMultipleResources(serviceClient, getUri(UriBuilder
765             .fromUri(findByModelInvariantUUIDURI)
766             .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
767     }
768
769     public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
770         return this.getMultipleResources(vfModuleClient, getUri(UriBuilder
771             .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
772             .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
773     }
774
775     private <T> T getSingleResource(Client<T> client, URI uri) {
776         return client.get(uri);
777     }
778
779     private <T> List<T> getMultipleResources(Client<T> client, URI uri) {
780         Iterable<T> iterator = client.getAll(uri);
781         List<T> list = new ArrayList<>();
782         Iterator<T> it = iterator.iterator();
783         it.forEachRemaining(list::add);
784         return list;
785     }
786
787     private <T> URI postSingleResource(Client<T> client, T type) {
788         return client.post(type);
789     }
790
791     public List<CvnfcCustomization> getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID(
792         String vnfCustomizationUUID, String vfModuleCustomizationUUID) {
793
794         return this.getMultipleResources(cvnfcCustomizationClient, getUri(UriBuilder
795             .fromUri(endpoint + "/cvnfcCustomization/search/findByVnfResourceCustomizationAndVfModuleCustomization")
796             .queryParam("VNF_RESOURCE_CUST_MODEL_CUSTOMIZATION_UUID", vnfCustomizationUUID)
797             .queryParam("VF_MODULE_CUST_MODEL_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build().toString()));
798     }
799
800     public CvnfcCustomization getCvnfcCustomizationByCustomizationUUID(String cvnfcCustomizationUuid){
801         return this.getSingleResource(cvnfcCustomizationClient,getUri(UriBuilder
802                         .fromUri(endpoint + "/cvnfcCustomization/search/findOneByModelCustomizationUUID").queryParam("modelCustomizationUuid", cvnfcCustomizationUuid)
803                         .build().toString()));
804     }
805
806     //fetch all VnfVfmoduleCvnfcConfigurationCustomization underneath a vnfc
807     //find the VnfVfmoduleCvnfcConfigurationCustomization that is related to our vnf and our vf-module, filter all others.
808     public VnfVfmoduleCvnfcConfigurationCustomization getVnfVfmoduleCvnfcConfigurationCustomizationByVnfCustomizationUuidAndVfModuleCustomizationUuidAndCvnfcCustomizationUuid(
809             String vnfCustomizationUuid, String vfModuleCustomizationUuid, String cvnfcCustomizationUuid) {
810         CvnfcCustomization cvnfc = getCvnfcCustomizationByCustomizationUUID(cvnfcCustomizationUuid);
811         if (cvnfc != null) {
812             for(VnfVfmoduleCvnfcConfigurationCustomization vnfVfModuleCvnfcCust: cvnfc.getVnfVfmoduleCvnfcConfigurationCustomization()){
813                 if(vnfVfModuleCvnfcCust.getVnfResourceCustomization().getModelCustomizationUUID().equals(vnfCustomizationUuid) &&
814                     vnfVfModuleCvnfcCust.getVfModuleCustomization().getModelCustomizationUUID().equals(vfModuleCustomizationUuid)){
815                 return vnfVfModuleCvnfcCust;
816                 }
817             }
818         }
819         return null;
820         
821     }
822 }