Update Logging
[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 org.onap.so.db.catalog.beans.BuildingBlockDetail;
24 import org.onap.so.db.catalog.beans.CloudSite;
25 import org.onap.so.db.catalog.beans.CloudifyManager;
26 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
27 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
28 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
29 import org.onap.so.db.catalog.beans.InstanceGroup;
30 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
31 import org.onap.so.db.catalog.beans.NetworkRecipe;
32 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
33 import org.onap.so.db.catalog.beans.OrchestrationAction;
34 import org.onap.so.db.catalog.beans.OrchestrationStatus;
35 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
36 import org.onap.so.db.catalog.beans.ResourceType;
37 import org.onap.so.db.catalog.beans.Service;
38 import org.onap.so.db.catalog.beans.ServiceRecipe;
39 import org.onap.so.db.catalog.beans.VfModule;
40 import org.onap.so.db.catalog.beans.VfModuleCustomization;
41 import org.onap.so.db.catalog.beans.VnfComponentsRecipe;
42 import org.onap.so.db.catalog.beans.VnfRecipe;
43 import org.onap.so.db.catalog.beans.VnfResource;
44 import org.onap.so.db.catalog.beans.VnfResourceCustomization;
45 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
46 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
47 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
48 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
49 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
50 import org.springframework.beans.factory.annotation.Value;
51 import org.springframework.http.HttpHeaders;
52 import org.springframework.http.client.BufferingClientHttpRequestFactory;
53 import org.springframework.http.client.ClientHttpRequestFactory;
54 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
55 import org.springframework.stereotype.Component;
56 import uk.co.blackpepper.bowman.Client;
57 import uk.co.blackpepper.bowman.ClientFactory;
58 import uk.co.blackpepper.bowman.Configuration;
59
60 import javax.annotation.PostConstruct;
61 import javax.ws.rs.core.UriBuilder;
62 import java.net.URI;
63 import java.util.ArrayList;
64 import java.util.Iterator;
65 import java.util.List;
66
67 @Component("CatalogDbClient")
68 public class CatalogDbClient {
69
70         private static final String CLOUD_SITE = "/cloudSite";
71         private static final String CLOUDIFY_MANAGER = "/cloudifyManager";
72         private static final String RAINY_DAY_HANDLER_MACRO = "/rainy_day_handler_macro";
73         private static final String NORTHBOUND_REQUEST_REF_LOOKUP = "/northbound_request_ref_lookup";
74         private static final String NETWORK_RESOURCE_CUSTOMIZATION = "/networkResourceCustomization";
75         private static final String COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION = "/collectionResourceInstanceGroupCustomization";
76         private static final String VNFC_INSTANCE_GROUP_CUSTOMIZATION = "/vnfcInstanceGroupCustomization";
77         private static final String ORCHESTRATION_FLOW = "/orchestrationFlow";
78         private static final String ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE = "/orchestrationStatusStateTransitionDirective";
79         private static final String INSTANCE_GROUP = "/instanceGroup";
80         private static final String COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION = "/collectionNetworkResourceCustomization";
81         private static final String BUILDING_BLOCK_DETAIL = "/buildingBlockDetail";
82         private static final String NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION = "/networkCollectionResourceCustomization";
83         private static final String VNF_RESOURCE_CUSTOMIZATION = "/vnfResourceCustomization";
84         private static final String SERVICE = "/service";
85         private static final String VNF_RESOURCE = "/vnfResource";
86         private static final String VNF_RECIPE = "/vnfRecipe";
87         private static final String VFMODULE = "/vfModule";
88         private static final String VFMODULE_CUSTOMIZATION = "/vfModuleCustomization";
89         private static final String VNF_COMPONENTS_RECIPE = "/vnfComponentsRecipe";
90         private static final String SERVICE_RECIPE = "/serviceRecipe";
91         private static final String NETWORK_RECIPE = "/networkRecipe";
92
93         private static final String SEARCH = "/search";
94         private static final String URI_SEPARATOR = "/";
95
96         private static final String SERVICE_MODEL_UUID = "serviceModelUUID";
97         private static final String MODEL_CUSTOMIZATION_UUID = "modelCustomizationUUID";
98         private static final String ACTION = "action";
99         private static final String MODEL_NAME = "modelName";
100         private static final String MODEL_VERSION = "modelVersion";
101         private static final String MODEL_INVARIANT_UUID = "modelInvariantUUID";
102         private static final String MODEL_INSTANCE_NAME = "modelInstanceName";
103         private static final String VNF_RESOURCE_MODEL_UUID = "vnfResourceModelUUID";
104         private static final String NF_ROLE = "nfRole";
105         private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
106         private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
107         private static final String BUILDING_BLOCK_NAME = "buildingBlockName";
108         private static final String RESOURCE_TYPE = "resourceType";
109         private static final String ORCHESTRATION_STATUS = "orchestrationStatus";
110         private static final String TARGET_ACTION = "targetAction";
111         private static final String REQUEST_SCOPE = "requestScope";
112         private static final String IS_ALACARTE = "isALaCarte";
113         private static final String FLOW_NAME = "flowName";
114         private static final String SERVICE_TYPE = "serviceType";
115         private static final String VNF_TYPE = "vnfType";
116         private static final String ERROR_CODE = "errorCode";
117         private static final String WORK_STEP = "workStep";
118         private static final String CLLI = "clli";
119         private static final String CLOUD_VERSION = "cloudVersion";
120
121         private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
122         private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
123         private String findFirstByModelVersionAndModelInvariantUUIDURI = "/findFirstByModelVersionAndModelInvariantUUID";
124         private String findByModelInvariantUUIDURI = "/findByModelInvariantUUIDOrderByModelVersionDesc";
125         private String findFirstByModelNameAndAction = "/findFirstByModelNameAndAction";
126         private String findFirstResourceByModelInvariantUUIDAndModelVersion = "/findFirstResourceByModelInvariantUUIDAndModelVersion";
127         private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
128         private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
129         private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findByModelCustomizationUUIDAndVfModuleModelUUID";
130         private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
131         private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
132         private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = "/findByModelInvariantUUIDOrderByModelVersionDesc";
133         private String findFirstVfModuleByModelInvariantUUIDAndModelVersion = "/findFirstVfModuleByModelInvariantUUIDAndModelVersion";
134         private String findOneByBuildingBlockName = "/findOneByBuildingBlockName";
135         private String findOneByResourceTypeAndOrchestrationStatusAndTargetAction = "/findOneByResourceTypeAndOrchestrationStatusAndTargetAction";
136         private String findByAction = "/findByAction";
137         private String findVnfcInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
138         private String findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
139         private String findOneByActionAndRequestScopeAndIsAlacarte = "/findOneByActionAndRequestScopeAndIsAlacarte";
140         private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep";
141         private String findByClliAndCloudVersion = "/findByClliAndCloudVersion";
142
143         private String serviceURI;
144         private String vfModuleURI;
145         private String vnfResourceURI;
146         private String vfModuleCustomizationURI;
147         private String networkCollectionResourceCustomizationURI;
148         private String networkResourceCustomizationURI;
149         private String vnfResourceCustomizationURI;
150         private String collectionNetworkResourceCustomizationURI;
151         private String instanceGroupURI;
152         private String cloudifyManagerURI;
153         private String cloudSiteURI;
154
155         private final Client<Service> serviceClient;
156
157         private final Client<NetworkRecipe> networkRecipeClient;
158
159         private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
160
161         private final Client<VnfResource> vnfResourceClient;
162
163         private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
164
165         private final Client<VnfRecipe> vnfRecipeClient;
166
167         private final Client<VfModuleCustomization> vfModuleCustomizationClient;
168
169         private final Client<VfModule> vfModuleClient;
170
171         private final Client<VnfComponentsRecipe> vnfComponentsRecipeClient;
172
173         private final Client<OrchestrationFlow> orchestrationClient;
174
175         private final Client<NorthBoundRequest> northBoundRequestClient;
176
177         private final Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
178
179         private final Client<BuildingBlockDetail> buildingBlockDetailClient;
180
181         private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
182
183         private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
184
185         private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
186
187         private final Client<InstanceGroup> instanceGroupClient;
188
189         private final Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
190
191         private final Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
192
193         private final Client<ServiceRecipe> serviceRecipeClient;
194
195         private final Client<CloudSite> cloudSiteClient;
196
197         private final Client<CloudifyManager> cloudifyManagerClient;
198
199         private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
200
201         @Value("${mso.catalog.db.spring.endpoint}")
202         private String endpoint;
203
204         @Value("${mso.db.auth}")
205         private String msoAdaptersAuth;
206
207
208         @PostConstruct
209         public void init(){
210                 findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
211                 findFirstByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
212                 findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
213                 findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE + SEARCH + findFirstByServiceModelUUIDAndActionURI;
214                 findFirstByModelNameAndAction = endpoint + NETWORK_RECIPE + SEARCH + findFirstByModelNameAndAction;
215                 findFirstResourceByModelInvariantUUIDAndModelVersion =  endpoint + VNF_RESOURCE + SEARCH + findFirstResourceByModelInvariantUUIDAndModelVersion;
216                 findByModelInstanceNameAndVnfResources =  endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findByModelInstanceNameAndVnfResources;
217                 findFirstVnfRecipeByNfRoleAndAction = endpoint + VNF_RECIPE + SEARCH + findFirstVnfRecipeByNfRoleAndAction;
218                 findByModelCustomizationUUIDAndVfModuleModelUUID = endpoint + VFMODULE_CUSTOMIZATION + SEARCH + findByModelCustomizationUUIDAndVfModuleModelUUID;
219                 findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction;
220                 findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVnfComponentTypeAndAction;
221                 findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = endpoint + VFMODULE + SEARCH +findVfModuleByModelInvariantUUIDOrderByModelVersionDesc;
222                 findFirstVfModuleByModelInvariantUUIDAndModelVersion = endpoint + VFMODULE + SEARCH + findFirstVfModuleByModelInvariantUUIDAndModelVersion;
223                 findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
224                 findOneByResourceTypeAndOrchestrationStatusAndTargetAction = endpoint + ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE + SEARCH + findOneByResourceTypeAndOrchestrationStatusAndTargetAction;
225                 findByAction = endpoint + ORCHESTRATION_FLOW + SEARCH + findByAction;
226                 findVnfcInstanceGroupCustomizationByModelCustomizationUUID = endpoint + VNFC_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findVnfcInstanceGroupCustomizationByModelCustomizationUUID;
227                 findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = endpoint + COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID;
228                 findOneByActionAndRequestScopeAndIsAlacarte = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarte;
229                 findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH + findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep;
230                 findByClliAndCloudVersion = endpoint + CLOUD_SITE + SEARCH + findByClliAndCloudVersion;
231
232                 serviceURI = endpoint + SERVICE + URI_SEPARATOR;
233                 vfModuleURI = endpoint + VFMODULE + URI_SEPARATOR;
234                 vnfResourceURI = endpoint + VNF_RESOURCE + URI_SEPARATOR;
235                 vfModuleCustomizationURI = endpoint + VFMODULE_CUSTOMIZATION + URI_SEPARATOR;
236                 networkCollectionResourceCustomizationURI = endpoint + NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
237                 networkResourceCustomizationURI = endpoint + NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
238                 vnfResourceCustomizationURI = endpoint + VNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
239                 collectionNetworkResourceCustomizationURI = endpoint + COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
240                 instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR;
241                 cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR;
242                 cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR;
243         }
244
245         public CatalogDbClient() {
246                 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
247
248                 ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
249                         restTemplate.getInterceptors().add((new SpringClientFilter()));
250
251                         restTemplate.getInterceptors().add((request, body, execution) -> {
252
253                                 request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
254                                 return execution.execute(request, body);
255                         });
256                 }).build().buildClientFactory();
257                 serviceClient = clientFactory.create(Service.class);
258                 networkRecipeClient = clientFactory.create(NetworkRecipe.class);
259                 networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
260                 vnfResourceClient = clientFactory.create(VnfResource.class);
261                 vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
262                 vnfRecipeClient = clientFactory.create(VnfRecipe.class);
263                 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
264                 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
265                 vfModuleClient = clientFactory.create(VfModule.class);
266                 vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
267                 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
268                 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
269                 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
270                 orchestrationStatusStateTransitionDirectiveClient = clientFactory
271                                 .create(OrchestrationStatusStateTransitionDirective.class);
272                 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
273                 collectionResourceInstanceGroupCustomizationClient = clientFactory
274                                 .create(CollectionResourceInstanceGroupCustomization.class);
275                 instanceGroupClient = clientFactory.create(InstanceGroup.class);
276                 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
277                 collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
278                 cloudSiteClient = clientFactory.create(CloudSite.class);
279                 cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
280                 serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
281                 controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
282         }
283
284         public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
285                 NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
286                                 this.getSingleResource(networkCollectionResourceCustomizationClient, getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
287                 if (networkCollectionResourceCustomization != null) {
288                         networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
289                 }
290                 return networkCollectionResourceCustomization;
291         }
292
293         public Service getServiceByID(String modelUUID) {
294                 Service service = getSingleResource(serviceClient,getUri(serviceURI + modelUUID));
295                 if (service != null) {
296                         service.setModelUUID(modelUUID);
297                 }
298                 return service;
299         }
300
301         public VfModule getVfModuleByModelUUID(String modelUUID) {
302                 VfModule vfModule = getSingleResource(vfModuleClient,getUri(vfModuleURI + modelUUID));
303                 if (vfModule != null) {
304                         vfModule.setModelUUID(modelUUID);
305                 }
306                 return vfModule;
307         }
308
309         public VnfResource getVnfResourceByModelUUID(String modelUUID){
310
311                 VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
312                 if (vnfResource != null) {
313                         vnfResource.setModelUUID(modelUUID);
314                 }
315                 return vnfResource;
316         }
317
318         public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
319                 VnfResourceCustomization vnfResourceCustomization = getSingleResource(vnfResourceCustomizationClient, getUri(vnfResourceCustomizationURI + modelCustomizationUUID));
320                 if (vnfResourceCustomization != null) {
321                         vnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
322                 }
323                 return vnfResourceCustomization;
324         }
325
326         public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
327                 CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
328                                 this.getSingleResource(collectionNetworkResourceCustomizationClient,getUri(UriBuilder
329                                                 .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
330                 if (collectionNetworkResourceCustomization != null) {
331                         collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
332                 }
333                 return collectionNetworkResourceCustomization;
334         }
335
336         public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
337                 InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
338                 if (instanceGroup != null) {
339                         instanceGroup.setModelUUID(modelUUID);
340                 }
341                 return instanceGroup;
342         }
343
344         public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
345                 VfModuleCustomization vfModuleCust = this.getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
346                 if (vfModuleCust != null) {
347                         vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
348                 }
349                 return vfModuleCust;
350         }
351
352         public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
353                 NetworkResourceCustomization networkResourceCustomization =
354                                 this.getSingleResource(networkResourceCustomizationClient, getUri(networkResourceCustomizationURI + modelCustomizationUUID));
355                 if (networkResourceCustomization != null) {
356                         networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
357                 }
358                 return networkResourceCustomization;
359         }
360
361         public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
362                 BuildingBlockDetail buildingBlockDetail = getSingleResource(buildingBlockDetailClient, getUri(UriBuilder
363                                 .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build().toString()));
364                 if (buildingBlockDetail != null) {
365                         buildingBlockDetail.setBuildingBlockName(buildingBlockName);
366                 }
367                 return buildingBlockDetail;
368         }
369
370
371         public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
372                         ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
373                 return getSingleResource(orchestrationStatusStateTransitionDirectiveClient, UriBuilder
374                                 .fromUri(findOneByResourceTypeAndOrchestrationStatusAndTargetAction)
375                                 .queryParam(RESOURCE_TYPE, resourceType.name())
376                                 .queryParam(ORCHESTRATION_STATUS, orchestrationStatus.name())
377                                 .queryParam(TARGET_ACTION, targetAction.name()).build());
378         }
379
380         public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
381                 return this.getMultipleResources(orchestrationClient, UriBuilder
382                                 .fromUri(findByAction).queryParam(ACTION, action).build());
383         }
384
385         public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
386                 return this.getMultipleResources(vnfcInstanceGroupCustomizationClient, UriBuilder
387                                 .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
388                                 .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
389         }
390
391         public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
392                         String modelCustomizationUUID) {
393                 return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
394                                 .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
395                                 .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
396         }
397
398         public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(String modelCustomizationUUID, String vfModuleModelUUID) {
399                 return this.getSingleResource(vfModuleCustomizationClient, getUri(UriBuilder
400                                 .fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
401                                 .queryParam(MODEL_CUSTOMIZATION_UUID,modelCustomizationUUID)
402                                 .queryParam(VF_MODULE_MODEL_UUID,vfModuleModelUUID).build().toString()));
403         }
404
405         public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
406                         String resourceName, boolean aLaCarte) {
407                 return this.getSingleResource(northBoundRequestClient, UriBuilder
408                                 .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
409                                 .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
410                                 .queryParam(IS_ALACARTE, aLaCarte).build());
411         }
412
413         public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
414                         String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
415                 return this.getSingleResource(rainyDayHandlerStatusClient, UriBuilder
416                                 .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
417                                 .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
418                                 .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
419                                 .build());
420         }
421
422         public  ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
423                 return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
424                                 .fromUri(findFirstByServiceModelUUIDAndActionURI)
425                                 .queryParam(SERVICE_MODEL_UUID,modelUUID)
426                                 .queryParam(ACTION,action).build().toString()));
427         }
428
429         public  NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action){
430                 return this.getSingleResource(networkRecipeClient, UriBuilder
431                                 .fromUri(findFirstByModelNameAndAction)
432                                 .queryParam(MODEL_NAME,modelName)
433                                 .queryParam(ACTION,action).build());
434         }
435         
436         public ControllerSelectionReference getControllerSelectionReferenceByVnfType(String vnfType) {
437                 return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
438                                 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfType")
439                                                 .queryParam("VNF_TYPE", vnfType).build());
440
441         }
442         
443         public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType, String actionCategory) {
444                 return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
445                                 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
446                                                 .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
447         }
448
449         public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
450                 return this.getSingleResource(serviceClient,UriBuilder
451                                 .fromUri(findFirstByModelNameURI)
452                                 .queryParam(MODEL_NAME,modelName).build());
453         }
454
455
456         public VnfResource getFirstVnfResourceByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
457                 return this.getSingleResource(vnfResourceClient, getUri(UriBuilder
458                                 .fromUri(findFirstResourceByModelInvariantUUIDAndModelVersion)
459                                 .queryParam(MODEL_INVARIANT_UUID,modelInvariantUUID)
460                                 .queryParam(MODEL_VERSION,modelVersion).build().toString()));
461         }
462
463
464         public VnfResourceCustomization getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(String modelInstanceName, VnfResource vnfResource){
465                 return this.getSingleResource(vnfResourceCustomizationClient, getUri(UriBuilder
466                                 .fromUri(findByModelInstanceNameAndVnfResources)
467                                 .queryParam(MODEL_INSTANCE_NAME,modelInstanceName)
468                                 .queryParam(VNF_RESOURCE_MODEL_UUID,vnfResource.getModelUUID()).build().toString()));
469         }
470
471         public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action){
472                 return this.getSingleResource(vnfRecipeClient,getUri(UriBuilder
473                                 .fromUri(findFirstVnfRecipeByNfRoleAndAction)
474                                 .queryParam(NF_ROLE,nfRole)
475                                 .queryParam(ACTION,action).build().toString()));
476         }
477
478         public VnfComponentsRecipe getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(String vfModuleModelUUID, String vnfComponentType, String action){
479                 return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
480                                 .fromUri(findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction)
481                                 .queryParam(VF_MODULE_MODEL_UUID,vfModuleModelUUID)
482                                 .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
483                                 .queryParam(ACTION,action).build().toString()));
484         }
485
486         public VnfComponentsRecipe getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(String vnfComponentType, String action) {
487                 return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
488                                 .fromUri(findFirstVnfComponentsRecipeByVnfComponentTypeAndAction)
489                                 .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
490                                 .queryParam(ACTION,action).build().toString()));
491         }
492         protected URI getUri(String template){
493                 return URI.create(template);
494         }
495
496         public CloudifyManager getCloudifyManager(String id) {
497                 return this.getSingleResource(cloudifyManagerClient,getUri(cloudifyManagerURI + id));
498         }
499
500         public CloudSite getCloudSite(String id){
501                 return this.getSingleResource(cloudSiteClient, getUri(cloudSiteURI + id));
502         }
503
504         public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
505                 return this.getSingleResource(cloudSiteClient, getUri(UriBuilder
506                                 .fromUri(findByClliAndCloudVersion)
507                                 .queryParam(CLLI,clli).queryParam(CLOUD_VERSION,cloudVersion).build().toString()));
508         }
509
510         public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
511                 return this.getSingleResource(serviceClient, getUri(UriBuilder
512                                 .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI)
513                                 .queryParam(MODEL_VERSION, modelVersion)
514                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
515         }
516
517         public VfModule getVfModuleByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
518                 return this.getSingleResource(vfModuleClient,getUri(UriBuilder
519                                 .fromUri(findFirstVfModuleByModelInvariantUUIDAndModelVersion)
520                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
521                                 .queryParam(MODEL_VERSION, modelVersion).build().toString()));
522         }
523
524         public List<Service> getServiceByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
525                 return this.getMultipleResources(serviceClient, getUri(UriBuilder
526                                 .fromUri(findByModelInvariantUUIDURI)
527                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
528         }
529
530         public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
531                 return this.getMultipleResources(vfModuleClient, getUri(UriBuilder
532                                 .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
533                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
534         }
535
536         private <T> T getSingleResource(Client<T> client, URI uri) {
537                 return client.get(uri);
538         }
539
540         private <T> List<T> getMultipleResources(Client<T> client, URI uri) {
541                 Iterable<T> iterator = client.getAll(uri);
542                 List<T> list = new ArrayList<>();
543                 Iterator<T> it = iterator.iterator();
544                 it.forEachRemaining(list::add);
545                 return list;
546         }
547
548 }