Merge 'origin/casablanca' into master
[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
28 import javax.annotation.PostConstruct;
29 import javax.ws.rs.core.UriBuilder;
30
31 import org.onap.so.db.catalog.beans.BuildingBlockDetail;
32 import org.onap.so.db.catalog.beans.CloudSite;
33 import org.onap.so.db.catalog.beans.CloudifyManager;
34 import org.onap.so.db.catalog.beans.CollectionNetworkResourceCustomization;
35 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
36 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
37 import org.onap.so.db.catalog.beans.CvnfcCustomization;
38 import org.onap.so.db.catalog.beans.ExternalServiceToInternalService;
39 import org.onap.so.db.catalog.beans.HomingInstance;
40 import org.onap.so.db.catalog.beans.InstanceGroup;
41 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
42 import org.onap.so.db.catalog.beans.NetworkRecipe;
43 import org.onap.so.db.catalog.beans.NetworkResourceCustomization;
44 import org.onap.so.db.catalog.beans.OrchestrationAction;
45 import org.onap.so.db.catalog.beans.OrchestrationStatus;
46 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
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.VnfcInstanceGroupCustomization;
57 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
58 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
59 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
60 import org.onap.so.logger.LogConstants;
61 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
62 import org.springframework.beans.factory.annotation.Value;
63 import org.springframework.http.HttpHeaders;
64 import org.springframework.http.client.BufferingClientHttpRequestFactory;
65 import org.springframework.http.client.ClientHttpRequestFactory;
66 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
67 import org.springframework.stereotype.Component;
68
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 RAINY_DAY_HANDLER_MACRO = "/rainy_day_handler_macro";
79         private static final String NORTHBOUND_REQUEST_REF_LOOKUP = "/northbound_request_ref_lookup";
80         private static final String NETWORK_RESOURCE_CUSTOMIZATION = "/networkResourceCustomization";
81         private static final String COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION = "/collectionResourceInstanceGroupCustomization";
82         private static final String VNFC_INSTANCE_GROUP_CUSTOMIZATION = "/vnfcInstanceGroupCustomization";
83         private static final String ORCHESTRATION_FLOW = "/orchestrationFlow";
84         private static final String ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE = "/orchestrationStatusStateTransitionDirective";
85         private static final String INSTANCE_GROUP = "/instanceGroup";
86         private static final String COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION = "/collectionNetworkResourceCustomization";
87         private static final String BUILDING_BLOCK_DETAIL = "/buildingBlockDetail";
88         private static final String NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION = "/networkCollectionResourceCustomization";
89         private static final String VNF_RESOURCE_CUSTOMIZATION = "/vnfResourceCustomization";
90         private static final String SERVICE = "/service";
91         private static final String EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING = "/externalServiceToInternalService";
92         private static final String VNF_RESOURCE = "/vnfResource";
93         private static final String VNF_RECIPE = "/vnfRecipe";
94         private static final String VFMODULE = "/vfModule";
95         private static final String VFMODULE_CUSTOMIZATION = "/vfModuleCustomization";
96         private static final String VNF_COMPONENTS_RECIPE = "/vnfComponentsRecipe";
97         private static final String SERVICE_RECIPE = "/serviceRecipe";
98         private static final String NETWORK_RECIPE = "/networkRecipe";
99
100         private static final String SEARCH = "/search";
101         private static final String URI_SEPARATOR = "/";
102
103         private static final String SERVICE_MODEL_UUID = "serviceModelUUID";
104         private static final String SERVICE_NAME = "serviceName";
105         private static final String MODEL_UUID = "modelUUID";
106         private static final String MODEL_CUSTOMIZATION_UUID = "modelCustomizationUUID";
107         private static final String ACTION = "action";
108         private static final String MODEL_NAME = "modelName";
109         private static final String MODEL_VERSION = "modelVersion";
110         private static final String MODEL_INVARIANT_UUID = "modelInvariantUUID";
111         private static final String MODEL_INSTANCE_NAME = "modelInstanceName";
112         private static final String VNF_RESOURCE_MODEL_UUID = "vnfResourceModelUUID";
113         private static final String NF_ROLE = "nfRole";
114         private static final String VF_MODULE_MODEL_UUID = "vfModuleModelUUID";
115         private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
116         private static final String BUILDING_BLOCK_NAME = "buildingBlockName";
117         private static final String RESOURCE_TYPE = "resourceType";
118         private static final String ORCHESTRATION_STATUS = "orchestrationStatus";
119         private static final String TARGET_ACTION = "targetAction";
120         private static final String REQUEST_SCOPE = "requestScope";
121         private static final String IS_ALACARTE = "isALaCarte";
122         private static final String CLOUD_OWNER = "cloudOwner";
123         private static final String FLOW_NAME = "flowName";
124         private static final String SERVICE_TYPE = "serviceType";
125         private static final String VNF_TYPE = "vnfType";
126         private static final String ERROR_CODE = "errorCode";
127         private static final String WORK_STEP = "workStep";
128         private static final String CLLI = "clli";
129         private static final String CLOUD_VERSION = "cloudVersion";
130         private static final String HOMING_INSTANCE = "/homingInstance";
131         
132         private static final String TARGET_ENTITY = "SO:CatalogDB";
133         private static final String ASTERISK = "*";
134
135         private String findExternalToInternalServiceByServiceName = "/findByServiceName";
136         private String findServiceByModelName = "/findOneByModelName";
137         private String findServiceRecipeByActionAndServiceModelUUID = "/findByActionAndServiceModelUUID";
138         private String findServiceByModelUUID = "/findOneByModelUUID";
139         private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
140         private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
141         private String findFirstByModelVersionAndModelInvariantUUIDURI = "/findFirstByModelVersionAndModelInvariantUUID";
142         private String findByModelInvariantUUIDURI = "/findByModelInvariantUUIDOrderByModelVersionDesc";
143         private String findFirstByModelNameAndAction = "/findFirstByModelNameAndAction";
144         private String findFirstResourceByModelInvariantUUIDAndModelVersion = "/findFirstResourceByModelInvariantUUIDAndModelVersion";
145         private String findByModelInstanceNameAndVnfResources = "/findByModelInstanceNameAndVnfResources";
146         private String findFirstVnfRecipeByNfRoleAndAction = "/findFirstVnfRecipeByNfRoleAndAction";
147         private String findByModelCustomizationUUIDAndVfModuleModelUUID = "/findByModelCustomizationUUIDAndVfModuleModelUUID";
148         private String findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction";
149         private String findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = "/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction";
150         private String findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = "/findByModelInvariantUUIDOrderByModelVersionDesc";
151         private String findFirstVfModuleByModelInvariantUUIDAndModelVersion = "/findFirstVfModuleByModelInvariantUUIDAndModelVersion";
152         private String findOneByBuildingBlockName = "/findOneByBuildingBlockName";
153         private String findOneByResourceTypeAndOrchestrationStatusAndTargetAction = "/findOneByResourceTypeAndOrchestrationStatusAndTargetAction";
154         private String findByAction = "/findByAction";
155         private String findVnfcInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
156         private String findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = "/findByModelCustomizationUUID";
157         private String findOneByActionAndRequestScopeAndIsAlacarte = "/findOneByActionAndRequestScopeAndIsAlacarte";
158         private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner";
159         private String findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType = "/findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType";
160         private String findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = "/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep";
161         private String findByClliAndCloudVersion = "/findByClliAndCloudVersion";
162         private String findServiceByServiceInstanceId = "/findServiceByServiceInstanceId";
163
164
165         private String serviceURI;
166         private String vfModuleURI;
167         private String vnfResourceURI;
168         private String vfModuleCustomizationURI;
169         private String networkCollectionResourceCustomizationURI;
170         private String networkResourceCustomizationURI;
171         private String vnfResourceCustomizationURI;
172         private String collectionNetworkResourceCustomizationURI;
173         private String instanceGroupURI;
174         private String cloudifyManagerURI;
175         private String cloudSiteURI;
176         private String homingInstanceURI;
177
178         private final Client<Service> serviceClient;
179
180         private final Client<NetworkRecipe> networkRecipeClient;
181
182         private final Client<NetworkResourceCustomization> networkResourceCustomizationClient;
183
184         private final Client<VnfResource> vnfResourceClient;
185
186         private final Client<VnfResourceCustomization> vnfResourceCustomizationClient;
187
188         private final Client<VnfRecipe> vnfRecipeClient;
189
190         private final Client<VfModuleCustomization> vfModuleCustomizationClient;
191
192         private final Client<VfModule> vfModuleClient;
193
194         private final Client<VnfComponentsRecipe> vnfComponentsRecipeClient;
195
196         private final Client<OrchestrationFlow> orchestrationClient;
197
198         private final Client<NorthBoundRequest> northBoundRequestClient;
199
200         private final Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
201
202         private final Client<BuildingBlockDetail> buildingBlockDetailClient;
203
204         private final Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
205
206         private final Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
207
208         private final Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
209
210         private final Client<InstanceGroup> instanceGroupClient;
211
212         private final Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
213
214         private final Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
215
216         private final Client<ServiceRecipe> serviceRecipeClient;
217
218         private final Client<ExternalServiceToInternalService> externalServiceToInternalServiceClient;
219
220         private final Client<CloudSite> cloudSiteClient;
221
222         private final Client<HomingInstance> homingInstanceClient;
223
224         private final Client<CloudifyManager> cloudifyManagerClient;
225         
226         private Client<CvnfcCustomization> cvnfcCustomizationClient;
227
228         private final Client<ControllerSelectionReference> controllerSelectionReferenceClient;
229
230         @Value("${mso.catalog.db.spring.endpoint}")
231         private String endpoint;
232
233         @Value("${mso.db.auth}")
234         private String msoAdaptersAuth;
235
236
237         @PostConstruct
238         public void init(){
239                 findExternalToInternalServiceByServiceName = endpoint + EXTERNAL_SERVICE_TO_INTERNAL_MODEL_MAPPING + SEARCH + findExternalToInternalServiceByServiceName;
240                 findServiceByModelName =  endpoint + SERVICE + SEARCH + findServiceByModelName;
241                 findServiceRecipeByActionAndServiceModelUUID = endpoint + SERVICE_RECIPE + SEARCH + findServiceRecipeByActionAndServiceModelUUID;
242                 findServiceByModelUUID =  endpoint + SERVICE + SEARCH + findServiceByModelUUID;
243                 findFirstByModelNameURI = endpoint + SERVICE + SEARCH + findFirstByModelNameURI;
244                 findFirstByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findFirstByModelVersionAndModelInvariantUUIDURI;
245                 findByModelInvariantUUIDURI = endpoint + SERVICE + SEARCH + findByModelInvariantUUIDURI;
246                 findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE + SEARCH + findFirstByServiceModelUUIDAndActionURI;
247                 findFirstByModelNameAndAction = endpoint + NETWORK_RECIPE + SEARCH + findFirstByModelNameAndAction;
248                 findFirstResourceByModelInvariantUUIDAndModelVersion =  endpoint + VNF_RESOURCE + SEARCH + findFirstResourceByModelInvariantUUIDAndModelVersion;
249                 findByModelInstanceNameAndVnfResources =  endpoint + VNF_RESOURCE_CUSTOMIZATION + SEARCH + findByModelInstanceNameAndVnfResources;
250                 findFirstVnfRecipeByNfRoleAndAction = endpoint + VNF_RECIPE + SEARCH + findFirstVnfRecipeByNfRoleAndAction;
251                 findByModelCustomizationUUIDAndVfModuleModelUUID = endpoint + VFMODULE_CUSTOMIZATION + SEARCH + findByModelCustomizationUUIDAndVfModuleModelUUID;
252                 findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction;
253                 findFirstVnfComponentsRecipeByVnfComponentTypeAndAction = endpoint + VNF_COMPONENTS_RECIPE + SEARCH + findFirstVnfComponentsRecipeByVnfComponentTypeAndAction;
254                 findVfModuleByModelInvariantUUIDOrderByModelVersionDesc = endpoint + VFMODULE + SEARCH +findVfModuleByModelInvariantUUIDOrderByModelVersionDesc;
255                 findFirstVfModuleByModelInvariantUUIDAndModelVersion = endpoint + VFMODULE + SEARCH + findFirstVfModuleByModelInvariantUUIDAndModelVersion;
256                 findOneByBuildingBlockName = endpoint + BUILDING_BLOCK_DETAIL + SEARCH + findOneByBuildingBlockName;
257                 findOneByResourceTypeAndOrchestrationStatusAndTargetAction = endpoint + ORCHESTRATION_STATUS_STATE_TRANSITION_DIRECTIVE + SEARCH + findOneByResourceTypeAndOrchestrationStatusAndTargetAction;
258                 findByAction = endpoint + ORCHESTRATION_FLOW + SEARCH + findByAction;
259                 findVnfcInstanceGroupCustomizationByModelCustomizationUUID = endpoint + VNFC_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findVnfcInstanceGroupCustomizationByModelCustomizationUUID;
260                 findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID = endpoint + COLLECTION_RESOURCE_INSTANCE_GROUP_CUSTOMIZATION + SEARCH + findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID;
261                 findOneByActionAndRequestScopeAndIsAlacarte = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarte;
262                 findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwner;
263                 findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType = endpoint + NORTHBOUND_REQUEST_REF_LOOKUP + SEARCH + findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType;
264                 findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep = endpoint + RAINY_DAY_HANDLER_MACRO + SEARCH + findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep;
265                 findByClliAndCloudVersion = endpoint + CLOUD_SITE + SEARCH + findByClliAndCloudVersion;
266
267                 serviceURI = endpoint + SERVICE + URI_SEPARATOR;
268                 vfModuleURI = endpoint + VFMODULE + URI_SEPARATOR;
269                 vnfResourceURI = endpoint + VNF_RESOURCE + URI_SEPARATOR;
270                 vfModuleCustomizationURI = endpoint + VFMODULE_CUSTOMIZATION + URI_SEPARATOR;
271                 networkCollectionResourceCustomizationURI = endpoint + NETWORK_COLLECTION_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
272                 networkResourceCustomizationURI = endpoint + NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
273                 vnfResourceCustomizationURI = endpoint + VNF_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
274                 collectionNetworkResourceCustomizationURI = endpoint + COLLECTION_NETWORK_RESOURCE_CUSTOMIZATION + URI_SEPARATOR;
275                 instanceGroupURI = endpoint + INSTANCE_GROUP + URI_SEPARATOR;
276                 cloudifyManagerURI = endpoint + CLOUDIFY_MANAGER + URI_SEPARATOR;
277                 cloudSiteURI = endpoint + CLOUD_SITE + URI_SEPARATOR;
278                 homingInstanceURI = endpoint + HOMING_INSTANCE + URI_SEPARATOR;
279
280         }
281
282         public CatalogDbClient() {
283                 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
284
285                 ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
286                         restTemplate.getInterceptors().add((new SpringClientFilter()));
287
288                         restTemplate.getInterceptors().add((request, body, execution) -> {
289
290                                 request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
291                                 request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER,TARGET_ENTITY);
292                                 return execution.execute(request, body);
293                         });
294                 }).build().buildClientFactory();
295                 serviceClient = clientFactory.create(Service.class);
296                 networkRecipeClient = clientFactory.create(NetworkRecipe.class);
297                 networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
298                 vnfResourceClient = clientFactory.create(VnfResource.class);
299                 vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
300                 vnfRecipeClient = clientFactory.create(VnfRecipe.class);
301                 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
302                 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
303                 vfModuleClient = clientFactory.create(VfModule.class);
304                 vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
305                 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
306                 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
307                 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
308                 orchestrationStatusStateTransitionDirectiveClient = clientFactory
309                                 .create(OrchestrationStatusStateTransitionDirective.class);
310                 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
311                 collectionResourceInstanceGroupCustomizationClient = clientFactory
312                                 .create(CollectionResourceInstanceGroupCustomization.class);
313                 instanceGroupClient = clientFactory.create(InstanceGroup.class);
314                 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
315                 collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
316                 cloudSiteClient = clientFactory.create(CloudSite.class);
317                 homingInstanceClient = clientFactory.create(HomingInstance.class);
318                 cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
319                 serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
320                 cvnfcCustomizationClient = clientFactory.create(CvnfcCustomization.class);
321                 controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
322                 externalServiceToInternalServiceClient = clientFactory.create(ExternalServiceToInternalService.class);
323         }
324
325         public CatalogDbClient(String baseUri, String auth) {
326                 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
327
328                 ClientFactory clientFactory = Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
329                         restTemplate.getInterceptors().add((new SpringClientFilter()));
330
331                         restTemplate.getInterceptors().add((request, body, execution) -> {
332
333                                 request.getHeaders().add(HttpHeaders.AUTHORIZATION, auth);
334                                 request.getHeaders().add(LogConstants.TARGET_ENTITY_HEADER,TARGET_ENTITY);
335                                 return execution.execute(request, body);
336                         });
337                 }).build().buildClientFactory();
338                 serviceClient = clientFactory.create(Service.class);
339                 networkRecipeClient = clientFactory.create(NetworkRecipe.class);
340                 networkResourceCustomizationClient = clientFactory.create(NetworkResourceCustomization.class);
341                 vnfResourceClient = clientFactory.create(VnfResource.class);
342                 vnfResourceCustomizationClient = clientFactory.create(VnfResourceCustomization.class);
343                 vnfRecipeClient = clientFactory.create(VnfRecipe.class);
344                 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
345                 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
346                 vfModuleClient = clientFactory.create(VfModule.class);
347                 vnfComponentsRecipeClient = clientFactory.create(VnfComponentsRecipe.class);
348                 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
349                 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
350                 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
351                 orchestrationStatusStateTransitionDirectiveClient = clientFactory
352                                 .create(OrchestrationStatusStateTransitionDirective.class);
353                 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
354                 collectionResourceInstanceGroupCustomizationClient = clientFactory
355                                 .create(CollectionResourceInstanceGroupCustomization.class);
356                 instanceGroupClient = clientFactory.create(InstanceGroup.class);
357                 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
358                 collectionNetworkResourceCustomizationClient = clientFactory.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         }
367
368         public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
369                 NetworkCollectionResourceCustomization networkCollectionResourceCustomization =
370                                 this.getSingleResource(networkCollectionResourceCustomizationClient, getUri(networkCollectionResourceCustomizationURI + modelCustomizationUUID));
371                 if (networkCollectionResourceCustomization != null) {
372                         networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
373                 }
374                 return networkCollectionResourceCustomization;
375         }
376
377         public Service getServiceByID(String modelUUID) {
378                 Service service = getSingleResource(serviceClient,getUri(serviceURI + modelUUID));
379                 if (service != null) {
380                         service.setModelUUID(modelUUID);
381                 }
382                 return service;
383         }
384
385         public VfModule getVfModuleByModelUUID(String modelUUID) {
386                 VfModule vfModule = getSingleResource(vfModuleClient,getUri(vfModuleURI + modelUUID));
387                 if (vfModule != null) {
388                         vfModule.setModelUUID(modelUUID);
389                 }
390                 return vfModule;
391         }
392
393         public VnfResource getVnfResourceByModelUUID(String modelUUID){
394
395                 VnfResource vnfResource = this.getSingleResource(vnfResourceClient, getUri(vnfResourceURI + modelUUID));
396                 if (vnfResource != null) {
397                         vnfResource.setModelUUID(modelUUID);
398                 }
399                 return vnfResource;
400         }
401
402         public VnfResourceCustomization getVnfResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
403                 VnfResourceCustomization vnfResourceCustomization = getSingleResource(vnfResourceCustomizationClient, getUri(vnfResourceCustomizationURI + modelCustomizationUUID));
404                 if (vnfResourceCustomization != null) {
405                         vnfResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
406                 }
407                 return vnfResourceCustomization;
408         }
409
410         public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
411                 CollectionNetworkResourceCustomization collectionNetworkResourceCustomization =
412                                 this.getSingleResource(collectionNetworkResourceCustomizationClient,getUri(UriBuilder
413                                                 .fromUri(collectionNetworkResourceCustomizationURI + modelCustomizationUUID).build().toString()));
414                 if (collectionNetworkResourceCustomization != null) {
415                         collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
416                 }
417                 return collectionNetworkResourceCustomization;
418         }
419
420         public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
421                 InstanceGroup instanceGroup = this.getSingleResource(instanceGroupClient, getUri(instanceGroupURI + modelUUID));
422                 if (instanceGroup != null) {
423                         instanceGroup.setModelUUID(modelUUID);
424                 }
425                 return instanceGroup;
426         }
427
428         public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
429                 VfModuleCustomization vfModuleCust = this.getSingleResource(vfModuleCustomizationClient, getUri(vfModuleCustomizationURI + modelCustomizationUUID));
430                 if (vfModuleCust != null) {
431                         vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
432                 }
433                 return vfModuleCust;
434         }
435
436         public NetworkResourceCustomization getNetworkResourceCustomizationByModelCustomizationUUID(String modelCustomizationUUID){
437                 NetworkResourceCustomization networkResourceCustomization =
438                                 this.getSingleResource(networkResourceCustomizationClient, getUri(networkResourceCustomizationURI + modelCustomizationUUID));
439                 if (networkResourceCustomization != null) {
440                         networkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
441                 }
442                 return networkResourceCustomization;
443         }
444
445         public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
446                 BuildingBlockDetail buildingBlockDetail = getSingleResource(buildingBlockDetailClient, getUri(UriBuilder
447                                 .fromUri(findOneByBuildingBlockName).queryParam(BUILDING_BLOCK_NAME, buildingBlockName).build().toString()));
448                 if (buildingBlockDetail != null) {
449                         buildingBlockDetail.setBuildingBlockName(buildingBlockName);
450                 }
451                 return buildingBlockDetail;
452         }
453
454
455         public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
456                         ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
457                 return getSingleResource(orchestrationStatusStateTransitionDirectiveClient, UriBuilder
458                                 .fromUri(findOneByResourceTypeAndOrchestrationStatusAndTargetAction)
459                                 .queryParam(RESOURCE_TYPE, resourceType.name())
460                                 .queryParam(ORCHESTRATION_STATUS, orchestrationStatus.name())
461                                 .queryParam(TARGET_ACTION, targetAction.name()).build());
462         }
463
464         public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
465                 return this.getMultipleResources(orchestrationClient, UriBuilder
466                                 .fromUri(findByAction).queryParam(ACTION, action).build());
467         }
468
469         public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
470                 return this.getMultipleResources(vnfcInstanceGroupCustomizationClient, UriBuilder
471                                 .fromUri(findVnfcInstanceGroupCustomizationByModelCustomizationUUID)
472                                 .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
473         }
474
475         public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
476                         String modelCustomizationUUID) {
477                 return this.getMultipleResources(collectionResourceInstanceGroupCustomizationClient, UriBuilder
478                                 .fromUri(findCollectionResourceInstanceGroupCustomizationByModelCustomizationUUID)
479                                 .queryParam(MODEL_CUSTOMIZATION_UUID, modelCustomizationUUID).build());
480         }
481
482         public VfModuleCustomization getVfModuleCustomizationByModelCustomizationUUIDAndVfModuleModelUUID(String modelCustomizationUUID, String vfModuleModelUUID) {
483                 return this.getSingleResource(vfModuleCustomizationClient, getUri(UriBuilder
484                                 .fromUri(findByModelCustomizationUUIDAndVfModuleModelUUID)
485                                 .queryParam(MODEL_CUSTOMIZATION_UUID,modelCustomizationUUID)
486                                 .queryParam(VF_MODULE_MODEL_UUID,vfModuleModelUUID).build().toString()));
487         }
488
489         public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
490                         String resourceName, boolean aLaCarte) {
491                 return this.getSingleResource(northBoundRequestClient, UriBuilder
492                                 .fromUri(findOneByActionAndRequestScopeAndIsAlacarte)
493                                 .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
494                                 .queryParam(IS_ALACARTE, aLaCarte).build());
495         }
496         
497         public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwner(String requestAction,
498                         String resourceName, boolean aLaCarte, String cloudOwner) {
499                 return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
500                                 .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
501                                 .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
502                                 .queryParam(IS_ALACARTE, aLaCarte)
503                                 .queryParam(CLOUD_OWNER, cloudOwner)
504                                 .queryParam(SERVICE_TYPE, ASTERISK).build().toString()));
505         }
506         
507         public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScopeAndCloudOwnerAndServiceType(String requestAction,
508                         String resourceName, boolean aLaCarte, String cloudOwner, String serviceType) {
509                 return this.getSingleResource(northBoundRequestClient, getUri(UriBuilder
510                                 .fromUri(findOneByActionAndRequestScopeAndIsAlacarteAndCloudOwnerAndServiceType)
511                                 .queryParam(ACTION, requestAction).queryParam(REQUEST_SCOPE, resourceName)
512                                 .queryParam(IS_ALACARTE, aLaCarte)
513                                 .queryParam(CLOUD_OWNER, cloudOwner)
514                                 .queryParam(SERVICE_TYPE, serviceType).build().toString()));
515         }
516
517         public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
518                         String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
519                 return this.getSingleResource(rainyDayHandlerStatusClient, getUri(UriBuilder
520                                 .fromUri(findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep)
521                                 .queryParam(FLOW_NAME, flowName).queryParam(SERVICE_TYPE, serviceType)
522                                 .queryParam(VNF_TYPE, vnfType).queryParam(ERROR_CODE, errorCode).queryParam(WORK_STEP, workStep)
523                                 .build().toString()));
524         }
525
526         public  ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
527                 return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
528                                 .fromUri(findFirstByServiceModelUUIDAndActionURI)
529                                 .queryParam(SERVICE_MODEL_UUID,modelUUID)
530                                 .queryParam(ACTION,action).build().toString()));
531         }
532
533         public  NetworkRecipe getFirstNetworkRecipeByModelNameAndAction(String modelName, String action){
534                 return this.getSingleResource(networkRecipeClient, UriBuilder
535                                 .fromUri(findFirstByModelNameAndAction)
536                                 .queryParam(MODEL_NAME,modelName)
537                                 .queryParam(ACTION,action).build());
538         }
539         
540         public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType, String actionCategory) {
541                 return this.getSingleResource(controllerSelectionReferenceClient, UriBuilder
542                                 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
543                                                 .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
544         }
545
546         public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
547                 return this.getSingleResource(serviceClient,UriBuilder
548                                 .fromUri(findFirstByModelNameURI)
549                                 .queryParam(MODEL_NAME,modelName).build());
550         }
551
552         public ExternalServiceToInternalService findExternalToInternalServiceByServiceName(String serviceName){
553                 return this.getSingleResource(externalServiceToInternalServiceClient, getUri(UriBuilder
554                                 .fromUri(findExternalToInternalServiceByServiceName)
555                                 .queryParam(SERVICE_NAME,serviceName).build().toString()));
556         }
557
558         public  ServiceRecipe findServiceRecipeByActionAndServiceModelUUID(String action,String modelUUID){
559                 return this.getSingleResource(serviceRecipeClient, getUri(UriBuilder
560                                 .fromUri(findServiceRecipeByActionAndServiceModelUUID)
561                                 .queryParam(ACTION,action)
562                                 .queryParam(SERVICE_MODEL_UUID,modelUUID).build().toString()));
563         }
564
565         public Service getServiceByModelName(String modelName){
566                 return this.getSingleResource(serviceClient,getUri(UriBuilder
567                                 .fromUri(findServiceByModelName)
568                                 .queryParam(MODEL_NAME,modelName).build().toString()));
569         }
570
571         public Service getServiceByModelUUID(String modelModelUUID){
572                 return this.getSingleResource(serviceClient,getUri(UriBuilder
573                                 .fromUri(findServiceByModelUUID)
574                                 .queryParam(MODEL_UUID,modelModelUUID).build().toString()));
575         }
576
577         public VnfResource getFirstVnfResourceByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
578                 return this.getSingleResource(vnfResourceClient, getUri(UriBuilder
579                                 .fromUri(findFirstResourceByModelInvariantUUIDAndModelVersion)
580                                 .queryParam(MODEL_INVARIANT_UUID,modelInvariantUUID)
581                                 .queryParam(MODEL_VERSION,modelVersion).build().toString()));
582         }
583
584
585         public VnfResourceCustomization getFirstVnfResourceCustomizationByModelInstanceNameAndVnfResources(String modelInstanceName, VnfResource vnfResource){
586                 return this.getSingleResource(vnfResourceCustomizationClient, getUri(UriBuilder
587                                 .fromUri(findByModelInstanceNameAndVnfResources)
588                                 .queryParam(MODEL_INSTANCE_NAME,modelInstanceName)
589                                 .queryParam(VNF_RESOURCE_MODEL_UUID,vnfResource.getModelUUID()).build().toString()));
590         }
591
592         public VnfRecipe getFirstVnfRecipeByNfRoleAndAction(String nfRole, String action){
593                 return this.getSingleResource(vnfRecipeClient,getUri(UriBuilder
594                                 .fromUri(findFirstVnfRecipeByNfRoleAndAction)
595                                 .queryParam(NF_ROLE,nfRole)
596                                 .queryParam(ACTION,action).build().toString()));
597         }
598
599         public VnfComponentsRecipe getFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction(String vfModuleModelUUID, String vnfComponentType, String action){
600                 return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
601                                 .fromUri(findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction)
602                                 .queryParam(VF_MODULE_MODEL_UUID,vfModuleModelUUID)
603                                 .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
604                                 .queryParam(ACTION,action).build().toString()));
605         }
606
607         public VnfComponentsRecipe getFirstVnfComponentsRecipeByVnfComponentTypeAndAction(String vnfComponentType, String action) {
608                 return this.getSingleResource(vnfComponentsRecipeClient,getUri(UriBuilder
609                                 .fromUri(findFirstVnfComponentsRecipeByVnfComponentTypeAndAction)
610                                 .queryParam(VNF_COMPONENT_TYPE,vnfComponentType)
611                                 .queryParam(ACTION,action).build().toString()));
612         }
613         protected URI getUri(String template){
614                 return URI.create(template);
615         }
616
617         public CloudifyManager getCloudifyManager(String id) {
618                 return this.getSingleResource(cloudifyManagerClient,getUri(cloudifyManagerURI + id));
619         }
620
621         public CloudSite getCloudSite(String id){
622                 return this.getSingleResource(cloudSiteClient,
623                                 getUri(cloudSiteURI + id));
624         }
625
626         public CloudSite getCloudSite(String id, String uri){
627                 return this.getSingleResource(cloudSiteClient,
628                                 getUri(uri + id));
629         }
630
631         public void postCloudSite(CloudSite cloudSite){
632                 this.postSingleResource(cloudSiteClient, cloudSite);
633         }
634
635         public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
636                 return this.getSingleResource(cloudSiteClient, getUri(UriBuilder
637                                 .fromUri(findByClliAndCloudVersion)
638                                 .queryParam(CLLI,clli).queryParam(CLOUD_VERSION,cloudVersion).build().toString()));
639         }
640
641         public HomingInstance getHomingInstance (String serviceInstanceId){
642                 return this.getSingleResource(homingInstanceClient,
643                                 getUri(homingInstanceURI + serviceInstanceId));
644         }
645
646         public HomingInstance getHomingInstance (String serviceInstanceId, String uri){
647                 return this.getSingleResource(homingInstanceClient,
648                                 getUri(uri + serviceInstanceId));
649         }
650
651         public void postHomingInstance(HomingInstance homingInstance){
652                 this.postSingleResource(homingInstanceClient, homingInstance);
653         }
654
655         public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
656                 return this.getSingleResource(serviceClient, getUri(UriBuilder
657                                 .fromUri(findFirstByModelVersionAndModelInvariantUUIDURI)
658                                 .queryParam(MODEL_VERSION, modelVersion)
659                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
660         }
661
662         public VfModule getVfModuleByModelInvariantUUIDAndModelVersion(String modelInvariantUUID, String modelVersion){
663                 return this.getSingleResource(vfModuleClient,getUri(UriBuilder
664                                 .fromUri(findFirstVfModuleByModelInvariantUUIDAndModelVersion)
665                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID)
666                                 .queryParam(MODEL_VERSION, modelVersion).build().toString()));
667         }
668
669         public List<Service> getServiceByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
670                 return this.getMultipleResources(serviceClient, getUri(UriBuilder
671                                 .fromUri(findByModelInvariantUUIDURI)
672                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
673         }
674
675         public List<VfModule> getVfModuleByModelInvariantUUIDOrderByModelVersionDesc(String modelInvariantUUID) {
676                 return this.getMultipleResources(vfModuleClient, getUri(UriBuilder
677                                 .fromUri(findVfModuleByModelInvariantUUIDOrderByModelVersionDesc)
678                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build().toString()));
679         }
680
681         private <T> T getSingleResource(Client<T> client, URI uri) {
682                 return client.get(uri);
683         }
684
685         private <T> List<T> getMultipleResources(Client<T> client, URI uri) {
686                 Iterable<T> iterator = client.getAll(uri);
687                 List<T> list = new ArrayList<>();
688                 Iterator<T> it = iterator.iterator();
689                 it.forEachRemaining(list::add);
690                 return list;
691         }
692
693         private <T> URI postSingleResource(Client<T> client, T type){
694                 return client.post(type);
695         }
696         
697         public List<CvnfcCustomization> getCvnfcCustomizationByVnfCustomizationUUIDAndVfModuleCustomizationUUID(String vnfCustomizationUUID, String vfModuleCustomizationUUID){
698                 return this.getMultipleVnfcCustomizations(
699                                 UriBuilder.fromUri(endpoint + "/vnfcCustomization/search/findByVnfCustomizationUUIDAndVfModuleCustomizationUUID")
700                                                 .queryParam("VNF_CUSTOMIZATION_UUID", vnfCustomizationUUID)
701                                                 .queryParam("VFMODULE_CUSTOMIZATION_UUID", vfModuleCustomizationUUID).build());
702         }
703         
704         private List<CvnfcCustomization> getMultipleVnfcCustomizations(URI uri) {
705                 Iterable<CvnfcCustomization> vnfcIterator = cvnfcCustomizationClient.getAll(uri);
706                 List<CvnfcCustomization> vnfcList = new ArrayList<>();
707                 Iterator<CvnfcCustomization> it = vnfcIterator.iterator();
708                 it.forEachRemaining(vnfcList::add);
709                 return vnfcList;
710         }
711
712 }