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