Created Ref Data tbl for controllerSelection
[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.CollectionNetworkResourceCustomization;
25 import org.onap.so.db.catalog.beans.CollectionResourceInstanceGroupCustomization;
26 import org.onap.so.db.catalog.beans.ControllerSelectionReference;
27 import org.onap.so.db.catalog.beans.InstanceGroup;
28 import org.onap.so.db.catalog.beans.NetworkCollectionResourceCustomization;
29 import org.onap.so.db.catalog.beans.OrchestrationAction;
30 import org.onap.so.db.catalog.beans.OrchestrationStatus;
31 import org.onap.so.db.catalog.beans.OrchestrationStatusStateTransitionDirective;
32 import org.onap.so.db.catalog.beans.ResourceType;
33 import org.onap.so.db.catalog.beans.Service;
34 import org.onap.so.db.catalog.beans.VfModuleCustomization;
35 import org.onap.so.db.catalog.beans.VnfcInstanceGroupCustomization;
36 import org.onap.so.db.catalog.beans.CloudSite;
37 import org.onap.so.db.catalog.beans.CloudIdentity;
38 import org.onap.so.db.catalog.beans.CloudifyManager;
39 import org.onap.so.db.catalog.beans.ServiceRecipe;
40 import org.onap.so.db.catalog.beans.macro.NorthBoundRequest;
41 import org.onap.so.db.catalog.beans.macro.OrchestrationFlow;
42 import org.onap.so.db.catalog.beans.macro.RainyDayHandlerStatus;
43 import org.onap.so.logging.jaxrs.filter.jersey.SpringClientFilter;
44 import org.springframework.beans.factory.annotation.Value;
45 import org.springframework.http.client.BufferingClientHttpRequestFactory;
46 import org.springframework.http.client.ClientHttpRequestFactory;
47 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
48 import org.springframework.stereotype.Component;
49 import uk.co.blackpepper.bowman.Client;
50 import uk.co.blackpepper.bowman.ClientFactory;
51 import uk.co.blackpepper.bowman.Configuration;
52
53 import javax.annotation.PostConstruct;
54 import javax.ws.rs.core.UriBuilder;
55 import java.net.URI;
56 import java.util.ArrayList;
57 import java.util.Iterator;
58 import java.util.List;
59
60 @Component("CatalogDbClient")
61 public class CatalogDbClient {
62
63         private static final String SERVICE_RECIPE_SEARCH = "/serviceRecipe/search";
64         private static final String SERVICE_MODEL_UUID = "SERVICE_MODEL_UUID";
65         private static final String ACTION = "ACTION";
66         private static final String MODEL_NAME = "MODEL_NAME";
67         private static final String SERVICE_SEARCH = "/service/search";
68         private static final String MODEL_VERSION = "MODEL_VERSION";
69         private static final String MODEL_INVARIANT_UUID = "MODEL_INVARIANT_UUID";
70         private String findFirstByModelNameURI = "/findFirstByModelNameOrderByModelVersionDesc";
71         private String findFirstByServiceModelUUIDAndActionURI = "/findFirstByServiceModelUUIDAndAction";
72         private String findByModelVersionAndModelInvariantUUIDURI = "/findByModelVersionAndModelInvariantUUID";
73         
74         private Client<Service> serviceClient;
75
76         private Client<VfModuleCustomization> vfModuleCustomizationClient;
77
78         private Client<OrchestrationFlow> orchestrationClient;
79
80         private Client<NorthBoundRequest> northBoundRequestClient;
81
82         private Client<RainyDayHandlerStatus> rainyDayHandlerStatusClient;
83
84         private Client<BuildingBlockDetail> buildingBlockDetailClient;
85
86         private Client<OrchestrationStatusStateTransitionDirective> orchestrationStatusStateTransitionDirectiveClient;
87
88         private Client<VnfcInstanceGroupCustomization> vnfcInstanceGroupCustomizationClient;
89
90         private Client<CollectionResourceInstanceGroupCustomization> collectionResourceInstanceGroupCustomizationClient;
91
92         private Client<InstanceGroup> instanceGroupClient;
93         
94         private Client<NetworkCollectionResourceCustomization> networkCollectionResourceCustomizationClient;
95         
96         private Client<CollectionNetworkResourceCustomization> collectionNetworkResourceCustomizationClient;
97
98         private Client<ServiceRecipe> serviceRecipeClient;
99
100         private Client<CloudSite> cloudSiteClient;
101
102         private Client<CloudIdentity> cloudIdentityClient;
103
104         private Client<CloudifyManager> cloudifyManagerClient;
105
106         protected Client<ControllerSelectionReference> controllerSelectionReferenceClient;
107
108         @Value("${mso.catalog.db.spring.endpoint}")
109         private String endpoint;
110
111         @Value("${mso.db.auth}")
112         private String msoAdaptersAuth;
113
114         @PostConstruct
115         public void init(){
116                 findFirstByModelNameURI = endpoint + SERVICE_SEARCH + findFirstByModelNameURI;
117                 findByModelVersionAndModelInvariantUUIDURI = endpoint + SERVICE_SEARCH + findByModelVersionAndModelInvariantUUIDURI;
118                 findFirstByServiceModelUUIDAndActionURI = endpoint + SERVICE_RECIPE_SEARCH + findFirstByServiceModelUUIDAndActionURI; 
119         }
120
121         public CatalogDbClient() {
122                 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
123                 
124                 ClientFactory clientFactory = Configuration.builder().setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
125                         restTemplate.getInterceptors().add((new SpringClientFilter()));
126                         
127                         restTemplate.getInterceptors().add((request, body, execution) -> {
128
129                                 request.getHeaders().add("Authorization", msoAdaptersAuth);
130                                 return execution.execute(request, body);
131                         });
132                 }).build().buildClientFactory();
133                 serviceClient = clientFactory.create(Service.class);
134                 orchestrationClient = clientFactory.create(OrchestrationFlow.class);
135                 vfModuleCustomizationClient = clientFactory.create(VfModuleCustomization.class);
136                 northBoundRequestClient = clientFactory.create(NorthBoundRequest.class);
137                 rainyDayHandlerStatusClient = clientFactory.create(RainyDayHandlerStatus.class);
138                 buildingBlockDetailClient = clientFactory.create(BuildingBlockDetail.class);
139                 orchestrationStatusStateTransitionDirectiveClient = clientFactory
140                                 .create(OrchestrationStatusStateTransitionDirective.class);
141                 vnfcInstanceGroupCustomizationClient = clientFactory.create(VnfcInstanceGroupCustomization.class);
142                 collectionResourceInstanceGroupCustomizationClient = clientFactory
143                                 .create(CollectionResourceInstanceGroupCustomization.class);
144                 instanceGroupClient = clientFactory.create(InstanceGroup.class);
145                 networkCollectionResourceCustomizationClient = clientFactory.create(NetworkCollectionResourceCustomization.class);
146                 collectionNetworkResourceCustomizationClient = clientFactory.create(CollectionNetworkResourceCustomization.class);
147                 cloudSiteClient = clientFactory.create(CloudSite.class);
148                 cloudIdentityClient = clientFactory.create(CloudIdentity.class);
149                 cloudifyManagerClient = clientFactory.create(CloudifyManager.class);
150                 serviceRecipeClient = clientFactory.create(ServiceRecipe.class);
151                 controllerSelectionReferenceClient = clientFactory.create(ControllerSelectionReference.class);
152         }
153         
154         public NetworkCollectionResourceCustomization getNetworkCollectionResourceCustomizationByID(String modelCustomizationUUID) {
155                 NetworkCollectionResourceCustomization networkCollectionResourceCustomization = 
156                                 this.getSingleNetworkCollectionResourceCustomization(UriBuilder.fromUri(endpoint + "/networkCollectionResourceCustomization/" + modelCustomizationUUID).build());
157                 if (networkCollectionResourceCustomization != null) {
158                         networkCollectionResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
159                 }
160                 return networkCollectionResourceCustomization;
161         }
162
163         private NetworkCollectionResourceCustomization getSingleNetworkCollectionResourceCustomization(URI uri) {
164                 return networkCollectionResourceCustomizationClient.get(uri);
165         }
166
167         public Service getServiceByID(String modelUUID) {
168                 Service service = this.getSingleService(UriBuilder.fromUri(endpoint + "/service/" + modelUUID).build());
169                 if (service != null) {
170                         service.setModelUUID(modelUUID);
171                 }
172                 return service;
173         }
174
175         public BuildingBlockDetail getBuildingBlockDetail(String buildingBlockName) {
176                 BuildingBlockDetail buildingBlockDetail = buildingBlockDetailClient
177                                 .get(UriBuilder.fromUri(endpoint + "/buildingBlockDetail/search/findOneByBuildingBlockName")
178                                                 .queryParam("buildingBlockName", buildingBlockName).build());
179                 if (buildingBlockDetail != null) {
180                         buildingBlockDetail.setBuildingBlockName(buildingBlockName);
181                 }
182                 return buildingBlockDetail;
183         }
184
185         public CollectionNetworkResourceCustomization getCollectionNetworkResourceCustomizationByID(String modelCustomizationUUID) {
186                 CollectionNetworkResourceCustomization collectionNetworkResourceCustomization = 
187                                 this.getSingleCollectionNetworkResourceCustomization(
188                                                 UriBuilder.fromUri(endpoint + "/collectionNetworkResourceCustomization/" + modelCustomizationUUID).build());
189                 if (collectionNetworkResourceCustomization != null) {
190                         collectionNetworkResourceCustomization.setModelCustomizationUUID(modelCustomizationUUID);
191                 }
192                 return collectionNetworkResourceCustomization;
193         }
194
195         public InstanceGroup getInstanceGroupByModelUUID(String modelUUID) {
196                 InstanceGroup instanceGroup = this
197                                 .getSingleInstanceGroup(UriBuilder.fromUri(endpoint + "/instanceGroup/" + modelUUID).build());
198                 if (instanceGroup != null) {
199                         instanceGroup.setModelUUID(modelUUID);
200                 }
201                 return instanceGroup;
202         }
203
204         public OrchestrationStatusStateTransitionDirective getOrchestrationStatusStateTransitionDirective(
205                         ResourceType resourceType, OrchestrationStatus orchestrationStatus, OrchestrationAction targetAction) {
206                 return orchestrationStatusStateTransitionDirectiveClient.get(UriBuilder
207                                 .fromUri(
208                                                 endpoint + "/orchestrationStatusStateTransitionDirective/search/findOneByResourceTypeAndOrchestrationStatusAndTargetAction")
209                                 .queryParam("resourceType", resourceType.name())
210                                 .queryParam("orchestrationStatus", orchestrationStatus.name())
211                                 .queryParam("targetAction", targetAction.name()).build());
212         }
213
214         public List<OrchestrationFlow> getOrchestrationFlowByAction(String action) {
215                 return this
216                                 .getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/search/findByAction")
217                                                 .queryParam("COMPOSITE_ACTION", action).build());
218         }
219
220         public List<OrchestrationFlow> getAllOrchestrationFlows() {
221                 return this.getMultipleOrchestrationFlows(UriBuilder.fromUri(endpoint + "/orchestrationFlow/").build());
222         }
223
224         private List<OrchestrationFlow> getMultipleOrchestrationFlows(URI uri) {
225                 Iterable<OrchestrationFlow> orchIterator = orchestrationClient.getAll(uri);
226                 List<OrchestrationFlow> orchList = new ArrayList<>();
227                 Iterator<OrchestrationFlow> it = orchIterator.iterator();
228                 it.forEachRemaining(orchList::add);
229                 return orchList;
230         }
231
232         public List<VnfcInstanceGroupCustomization> getVnfcInstanceGroupsByVnfResourceCust(String modelCustomizationUUID) {
233                 return this.getMultipleVnfcInstanceGroupCustomizations(
234                                 UriBuilder.fromUri(endpoint + "/vnfcInstanceGroupCustomization/search/findByModelCustomizationUUID")
235                                                 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
236         }
237
238         public List<CollectionResourceInstanceGroupCustomization> getCollectionResourceInstanceGroupCustomizationByModelCustUUID(
239                         String modelCustomizationUUID) {
240                 return this.getMultipleCollectionResourceInstanceGroupCustomizations(UriBuilder
241                                 .fromUri(endpoint + "/collectionResourceInstanceGroupCustomization/search/findByModelCustomizationUUID")
242                                 .queryParam("MODEL_CUSTOMIZATION_UUID", modelCustomizationUUID).build());
243         }
244
245         private List<CollectionResourceInstanceGroupCustomization> getMultipleCollectionResourceInstanceGroupCustomizations(
246                         URI uri) {
247                 Iterable<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustIter = collectionResourceInstanceGroupCustomizationClient
248                                 .getAll(uri);
249                 List<CollectionResourceInstanceGroupCustomization> collectionInstanceGroupCustList = new ArrayList<>();
250                 Iterator<CollectionResourceInstanceGroupCustomization> it = collectionInstanceGroupCustIter.iterator();
251                 it.forEachRemaining(collectionInstanceGroupCustList::add);
252                 return collectionInstanceGroupCustList;
253         }
254
255         private List<VnfcInstanceGroupCustomization> getMultipleVnfcInstanceGroupCustomizations(URI uri) {
256                 Iterable<VnfcInstanceGroupCustomization> vnfcIterator = vnfcInstanceGroupCustomizationClient.getAll(uri);
257                 List<VnfcInstanceGroupCustomization> vnfcList = new ArrayList<>();
258                 Iterator<VnfcInstanceGroupCustomization> it = vnfcIterator.iterator();
259                 it.forEachRemaining(vnfcList::add);
260                 return vnfcList;
261         }
262
263         public VfModuleCustomization getVfModuleCustomizationByModelCuztomizationUUID(String modelCustomizationUUID) {
264                 VfModuleCustomization vfModuleCust = this.getSingleVfModuleCustomization(
265                                 UriBuilder.fromUri(endpoint + "/vfModuleCustomization/" + modelCustomizationUUID).build());
266                 if (vfModuleCust != null) {
267                         vfModuleCust.setModelCustomizationUUID(modelCustomizationUUID);
268                 }
269                 return vfModuleCust;
270         }
271
272         public NorthBoundRequest getNorthBoundRequestByActionAndIsALaCarteAndRequestScope(String requestAction,
273                         String resourceName, boolean aLaCarte) {
274                 return this.getSingleNorthBoundRequest(UriBuilder
275                                 .fromUri(endpoint + "/northbound_request_ref_lookup/search/findOneByActionAndRequestScopeAndIsAlacarte")
276                                 .queryParam("ACTION", requestAction).queryParam("REQUEST_SCOPE", resourceName)
277                                 .queryParam("IS_ALACARTE", aLaCarte).build());
278         }
279
280         public RainyDayHandlerStatus getRainyDayHandlerStatusByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep(
281                         String flowName, String serviceType, String vnfType, String errorCode, String workStep) {
282                 return this.getSingleRainyDayHandlerStatus(UriBuilder
283                                 .fromUri(
284                                                 endpoint + "/rainy_day_handler_macro/search/findOneByFlowNameAndServiceTypeAndVnfTypeAndErrorCodeAndWorkStep")
285                                 .queryParam("FLOW_NAME", flowName).queryParam("SERVICE_TYPE", serviceType)
286                                 .queryParam("VNF_TYPE", vnfType).queryParam("ERROR_CODE", errorCode).queryParam("WORK_STEP", workStep)
287                                 .build());
288         }
289         
290         public  ServiceRecipe getFirstByServiceModelUUIDAndAction(String modelUUID, String action){
291                 return this.getSingleServiceRecipe(UriBuilder.fromUri(findFirstByServiceModelUUIDAndActionURI)
292                                 .queryParam(SERVICE_MODEL_UUID,modelUUID)
293                                 .queryParam(ACTION,action)
294                                 .build());
295         }
296         
297         public Service getFirstByModelNameOrderByModelVersionDesc(String modelName){
298                 return this.getSingleService(UriBuilder.fromUri(findFirstByModelNameURI)
299                                 .queryParam(MODEL_NAME,modelName)
300                                 .build());
301         }
302         
303         public ControllerSelectionReference getControllerSelectionReferenceByVnfType(String vnfType) {
304                 return this.getSingleControllerSelectionReference(UriBuilder
305                                 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfType")
306                                                 .queryParam("VNF_TYPE", vnfType).build());
307
308         }
309         
310         public ControllerSelectionReference getControllerSelectionReferenceByVnfTypeAndActionCategory(String vnfType, String actionCategory) {
311                 return this.getSingleControllerSelectionReference(UriBuilder
312                                 .fromUri(endpoint + "/controllerSelectionReference/search/findControllerSelectionReferenceByVnfTypeAndActionCategory")
313                                                 .queryParam("VNF_TYPE", vnfType).queryParam("ACTION_CATEGORY", actionCategory).build());
314         }
315         
316         private CollectionNetworkResourceCustomization getSingleCollectionNetworkResourceCustomization(URI uri) {
317                 return collectionNetworkResourceCustomizationClient.get(uri);
318         }
319
320         public CloudifyManager getCloudifyManager(String id) {
321                 return this.getSingleCloudifyManager(UriBuilder.fromUri(endpoint+"/cloudifyManager/"+id).build());
322         }
323         
324         public CloudSite getCloudSite(String id){
325                 return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/"+id).build());
326         }
327         
328         public CloudIdentity getCloudIdentity(String id){
329                 return this.getSingleCloudIdentity(UriBuilder.fromUri(endpoint+"/cloudIdentity/"+id).build());
330         }
331         
332         public CloudSite getCloudSiteByClliAndAicVersion (String clli, String cloudVersion){
333                 return this.getSinglCloudSite(UriBuilder.fromUri(endpoint+"/cloudSite/search/findByClliAndCloudVersion")
334                 .queryParam("CLLI",clli).queryParam("CLOUD_VERSION",cloudVersion)
335                 .build());
336         }
337
338         private InstanceGroup getSingleInstanceGroup(URI uri) {
339                 return instanceGroupClient.get(uri);
340         }
341
342         private Service getSingleService(URI uri) {
343                 return serviceClient.get(uri);
344         }
345
346         private VfModuleCustomization getSingleVfModuleCustomization(URI uri) {
347                 return vfModuleCustomizationClient.get(uri);
348         }
349
350         private NorthBoundRequest getSingleNorthBoundRequest(URI uri) {
351                 return northBoundRequestClient.get(uri);
352         }
353
354         private RainyDayHandlerStatus getSingleRainyDayHandlerStatus(URI uri) {
355                 return rainyDayHandlerStatusClient.get(uri);
356         }
357         
358         private ServiceRecipe getSingleServiceRecipe(URI uri){
359                 return serviceRecipeClient.get(uri);
360         }
361
362         protected CloudSite getSinglCloudSite(URI uri) {
363                 return cloudSiteClient.get(uri);
364         }
365
366         protected CloudIdentity getSingleCloudIdentity(URI uri) {
367                 return cloudIdentityClient.get(uri);
368         }
369
370         protected CloudifyManager getSingleCloudifyManager(URI uri) {
371                 return cloudifyManagerClient.get(uri);
372         }
373
374         private ControllerSelectionReference getSingleControllerSelectionReference(URI uri) {
375                 return controllerSelectionReferenceClient.get(uri);
376         }
377
378         public Service getServiceByModelVersionAndModelInvariantUUID(String modelVersion, String modelInvariantUUID) {
379                 return this.getSingleService(
380                                 UriBuilder.fromUri(findByModelVersionAndModelInvariantUUIDURI)
381                                                 .queryParam(MODEL_VERSION, modelVersion)
382                                                 .queryParam(MODEL_INVARIANT_UUID, modelInvariantUUID).build());
383         }
384
385         //USED FOR TEST ONLY
386         public void setPortToEndpoint(String port) {
387                 endpoint = endpoint + port;
388         }
389         
390         //USED FOR TEST ONLY
391         public void removePortFromEndpoint() {
392                 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);
393         }
394 }