Replaced all tabs with spaces in java and pom.xml
[so.git] / mso-api-handlers / mso-requests-db / src / main / java / org / onap / so / db / request / client / RequestsDbClient.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.request.client;
22
23 import java.net.URI;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
28 import java.util.Map;
29 import javax.annotation.PostConstruct;
30 import javax.ws.rs.core.MediaType;
31 import javax.ws.rs.core.UriBuilder;
32 import org.apache.http.HttpStatus;
33 import org.onap.so.db.request.beans.ArchivedInfraRequests;
34 import org.onap.so.db.request.beans.InfraActiveRequests;
35 import org.onap.so.db.request.beans.OperationStatus;
36 import org.onap.so.db.request.beans.OperationalEnvDistributionStatus;
37 import org.onap.so.db.request.beans.OperationalEnvServiceModelStatus;
38 import org.onap.so.db.request.beans.RequestProcessingData;
39 import org.onap.so.db.request.beans.ResourceOperationStatus;
40 import org.onap.so.db.request.beans.SiteStatus;
41 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
42 import org.onap.so.db.request.beans.WatchdogDistributionStatus;
43 import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
44 import org.onap.so.db.request.data.controller.InstanceNameDuplicateCheckRequest;
45 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.beans.factory.annotation.Value;
48 import org.springframework.context.annotation.Primary;
49 import org.springframework.core.ParameterizedTypeReference;
50 import org.springframework.http.HttpEntity;
51 import org.springframework.http.HttpHeaders;
52 import org.springframework.http.HttpMethod;
53 import org.springframework.http.ResponseEntity;
54 import org.springframework.http.client.BufferingClientHttpRequestFactory;
55 import org.springframework.http.client.ClientHttpRequestFactory;
56 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
57 import org.springframework.stereotype.Component;
58 import org.springframework.web.client.HttpClientErrorException;
59 import org.springframework.web.client.RestTemplate;
60 import uk.co.blackpepper.bowman.ClientFactory;
61 import uk.co.blackpepper.bowman.Configuration;
62
63 @Component("RequestsDbClient")
64 @Primary
65 public class RequestsDbClient {
66
67     private static final String SERVICE_ID = "SERVICE_ID";
68     private static final String OPERATION_ID = "OPERATION_ID";
69     private static final String SO_REQUEST_ID = "SO_REQUEST_ID";
70     private static final String REQUEST_ID = "REQUEST_ID";
71     private static final String OPERATIONAL_ENVIRONMENT_ID = "OPERATIONAL_ENV_ID";
72     private static final String SERVICE_MODEL_VERSION_ID = "SERVICE_MODEL_VERSION_ID";
73
74
75     @Value("${mso.adapters.requestDb.endpoint}")
76     protected String endpoint;
77
78     @Value("${mso.adapters.requestDb.auth}")
79     private String msoAdaptersAuth;
80
81     private String getOrchestrationFilterURI = "/infraActiveRequests/getOrchestrationFiltersFromInfraActive/";
82     private static final String OPERATION_STATUS_SEARCH = "/operationStatus/search";
83     private static final String OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH =
84             "/operationalEnvServiceModelStatus/search";
85
86
87     private String checkVnfIdStatus = "/infraActiveRequests/checkVnfIdStatus/";
88
89     private String infraActiveRequestURI = "/infraActiveRequests/";
90
91     private String checkInstanceNameDuplicate = "/infraActiveRequests/checkInstanceNameDuplicate";
92
93     private String operationalEnvDistributionStatusURI = "/operationalEnvDistributionStatus/";
94
95     private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
96
97     private String findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI =
98             "/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId";
99
100     private String findAllByOperationalEnvIdAndRequestIdURI = "/findAllByOperationalEnvIdAndRequestId";
101
102     private String cloudOrchestrationFiltersFromInfraActive =
103             "/infraActiveRequests/getCloudOrchestrationFiltersFromInfraActive";
104
105     private String requestProcessingDataURI = "/requestProcessingData";
106
107     private final String findBySoRequestIdOrderByGroupingIdDesc =
108             "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc";
109
110
111     @Autowired
112     protected RestTemplate restTemplate;
113
114     @Autowired
115     ClassURLMapper classURLMapper;
116
117     @PostConstruct
118     public void init() {
119         getOrchestrationFilterURI = endpoint + getOrchestrationFilterURI;
120         infraActiveRequestURI = endpoint + infraActiveRequestURI;
121         checkVnfIdStatus = endpoint + checkVnfIdStatus;
122         checkInstanceNameDuplicate = endpoint + checkInstanceNameDuplicate;
123         cloudOrchestrationFiltersFromInfraActive = endpoint + cloudOrchestrationFiltersFromInfraActive;
124         findOneByServiceIdAndOperationIdURI = endpoint + OPERATION_STATUS_SEARCH + findOneByServiceIdAndOperationIdURI;
125         requestProcessingDataURI = endpoint + requestProcessingDataURI;
126         operationalEnvDistributionStatusURI = endpoint + operationalEnvDistributionStatusURI;
127         findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI =
128                 endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH
129                         + findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI;
130         findAllByOperationalEnvIdAndRequestIdURI =
131                 endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findAllByOperationalEnvIdAndRequestIdURI;
132     }
133
134     private ClientFactory getClientFactory() {
135         URI baseUri = UriBuilder.fromUri(endpoint).build();
136         ClientHttpRequestFactory factory =
137                 new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
138
139         return Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory)
140                 .setRestTemplateConfigurer(restTemplate -> {
141                     restTemplate.getInterceptors().add((new SpringClientFilter()));
142
143                     restTemplate.getInterceptors().add((request, body, execution) -> {
144
145                         request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
146                         return execution.execute(request, body);
147                     });
148                 }).build().buildClientFactory();
149     }
150
151
152     public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive(Map<String, String> orchestrationMap) {
153         URI uri = getUri(cloudOrchestrationFiltersFromInfraActive);
154         HttpHeaders headers = getHttpHeaders();
155         HttpEntity<Map> entity = new HttpEntity<>(orchestrationMap, headers);
156         try {
157             return restTemplate.exchange(uri, HttpMethod.POST, entity,
158                     new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
159         } catch (HttpClientErrorException e) {
160             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
161                 return null;
162             }
163             throw e;
164         }
165     }
166
167     public InfraActiveRequests getInfraActiveRequestbyRequestId(String requestId) {
168         try {
169             HttpEntity<?> entity = getHttpEntity();
170             InfraActiveRequests infraActiveRequests =
171                     restTemplate.exchange(getUri(endpoint + "/infraActiveRequests/" + requestId), HttpMethod.GET,
172                             entity, InfraActiveRequests.class).getBody();
173             if (infraActiveRequests != null) {
174                 infraActiveRequests.setRequestId(requestId);
175             }
176             return infraActiveRequests;
177         } catch (HttpClientErrorException e) {
178             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
179                 return null;
180             }
181             throw e;
182         }
183     }
184
185     public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive(
186             Map<String, List<String>> orchestrationMap) {
187         HttpHeaders headers = getHttpHeaders();
188         URI uri = getUri(getOrchestrationFilterURI);
189         HttpEntity<Map<String, List<String>>> entity = new HttpEntity<>(orchestrationMap, headers);
190         return restTemplate
191                 .exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {})
192                 .getBody();
193     }
194
195     public InfraActiveRequests checkVnfIdStatus(String operationalEnvironmentId) {
196         HttpEntity<?> entity = getHttpEntity();
197         URI uri = getUri(checkVnfIdStatus + operationalEnvironmentId);
198         return restTemplate.exchange(uri, HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
199     }
200
201     public InfraActiveRequests checkInstanceNameDuplicate(HashMap<String, String> instanceIdMap, String instanceName,
202             String requestScope) {
203         HttpHeaders headers = getHttpHeaders();
204         URI uri = getUri(checkInstanceNameDuplicate);
205         HttpEntity<InstanceNameDuplicateCheckRequest> entity = new HttpEntity<>(
206                 new InstanceNameDuplicateCheckRequest(instanceIdMap, instanceName, requestScope), headers);
207         try {
208             ResponseEntity<InfraActiveRequests> response =
209                     restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class);
210             if (response != null && response.hasBody()) {
211                 return restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class).getBody();
212             } else {
213                 return null;
214             }
215         } catch (HttpClientErrorException e) {
216             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
217                 return null;
218             }
219             throw e;
220         }
221
222     }
223
224     public OperationStatus getOneByServiceIdAndOperationId(String serviceId, String operationId) {
225         try {
226             HttpEntity<?> entity = getHttpEntity();
227             OperationStatus operationStatus = restTemplate.exchange(getUri(
228                     UriBuilder.fromUri(getUri(findOneByServiceIdAndOperationIdURI)).queryParam(SERVICE_ID, serviceId)
229                             .queryParam(OPERATION_ID, operationId).build().toString()),
230                     HttpMethod.GET, entity, OperationStatus.class).getBody();
231             if (operationStatus != null) {
232                 operationStatus.setServiceId(serviceId);
233                 operationStatus.setOperationId(operationId);
234             }
235
236             return operationStatus;
237         } catch (HttpClientErrorException e) {
238             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
239                 return null;
240             }
241             throw e;
242         }
243     }
244
245     public OperationalEnvServiceModelStatus findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId(
246             String operationalEnvironmentId, String serviceModelVersionId, String requestId) {
247         try {
248             HttpEntity<?> entity = getHttpEntity();
249             OperationalEnvServiceModelStatus modelStatus = restTemplate.exchange(
250                     getUri(UriBuilder.fromUri(findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI)
251                             .queryParam(OPERATIONAL_ENVIRONMENT_ID, operationalEnvironmentId)
252                             .queryParam(SERVICE_MODEL_VERSION_ID, serviceModelVersionId)
253                             .queryParam(REQUEST_ID, requestId).build().toString()),
254                     HttpMethod.GET, entity, OperationalEnvServiceModelStatus.class).getBody();
255             if (null != modelStatus) {
256                 modelStatus.setOperationalEnvId(operationalEnvironmentId);
257                 modelStatus.setServiceModelVersionId(serviceModelVersionId);
258                 modelStatus.setRequestId(requestId);
259             }
260             return modelStatus;
261         } catch (HttpClientErrorException e) {
262             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
263                 return null;
264             }
265             throw e;
266         }
267     }
268
269     public List<OperationalEnvServiceModelStatus> getAllByOperationalEnvIdAndRequestId(String operationalEnvironmentId,
270             String requestId) {
271         return this.getMultipleOperationalEnvServiceModelStatus(
272                 getUri(UriBuilder.fromUri(findAllByOperationalEnvIdAndRequestIdURI)
273                         .queryParam(OPERATIONAL_ENVIRONMENT_ID, operationalEnvironmentId)
274                         .queryParam(REQUEST_ID, requestId).build().toString()));
275     }
276
277     public OperationalEnvDistributionStatus getDistributionStatusById(String distributionId) {
278         try {
279             HttpEntity<?> entity = getHttpEntity();
280             OperationalEnvDistributionStatus distributionStatus =
281                     restTemplate.exchange(getUri(operationalEnvDistributionStatusURI + distributionId), HttpMethod.GET,
282                             entity, OperationalEnvDistributionStatus.class).getBody();
283             if (null != distributionStatus) {
284                 distributionStatus.setDistributionId(distributionId);
285             }
286             return distributionStatus;
287         } catch (HttpClientErrorException e) {
288             if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
289                 return null;
290             }
291             throw e;
292         }
293     }
294
295     private List<OperationalEnvServiceModelStatus> getMultipleOperationalEnvServiceModelStatus(URI uri) {
296         Iterable<OperationalEnvServiceModelStatus> iterable =
297                 getClientFactory().create(OperationalEnvServiceModelStatus.class).getAll(uri);
298         List<OperationalEnvServiceModelStatus> serviceModelStatuses = new ArrayList<>();
299         Iterator<OperationalEnvServiceModelStatus> statusIterator = iterable.iterator();
300         statusIterator.forEachRemaining(serviceModelStatuses::add);
301         return serviceModelStatuses;
302     }
303
304     public void save(InfraActiveRequests infraActiveRequests) {
305         HttpHeaders headers = getHttpHeaders();
306         URI uri = getUri(infraActiveRequestURI);
307         HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(infraActiveRequests, headers);
308         restTemplate.postForLocation(uri, entity);
309     }
310
311     public <T> void save(T object) {
312         HttpHeaders headers = getHttpHeaders();
313         URI uri = getUri(endpoint + classURLMapper.getURI(object.getClass()));
314         HttpEntity<T> entity = new HttpEntity<>(object, headers);
315         restTemplate.postForLocation(uri, entity);
316     }
317
318     public void updateInfraActiveRequests(InfraActiveRequests request) {
319         HttpHeaders headers = getHttpHeaders();
320         URI uri = getUri(infraActiveRequestURI + request.getRequestId());
321         HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(request, headers);
322         restTemplate.put(uri, entity);
323     }
324
325     protected URI getUri(String uri) {
326         return URI.create(uri);
327     }
328
329     public void saveRequestProcessingData(RequestProcessingData requestProcessingData) {
330         HttpHeaders headers = getHttpHeaders();
331         URI uri = getUri(requestProcessingDataURI);
332         HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
333         restTemplate.postForLocation(uri, entity);
334     }
335
336     public List<RequestProcessingData> getRequestProcessingDataBySoRequestId(String soRequestId) {
337         return this
338                 .getRequestProcessingData(getUri(UriBuilder.fromUri(endpoint + findBySoRequestIdOrderByGroupingIdDesc)
339                         .queryParam(SO_REQUEST_ID, soRequestId).build().toString()));
340     }
341
342     private List<RequestProcessingData> getRequestProcessingData(URI uri) {
343         Iterable<RequestProcessingData> requestProcessingDataIterator =
344                 getClientFactory().create(RequestProcessingData.class).getAll(uri);
345         List<RequestProcessingData> requestProcessingDataList = new ArrayList<>();
346         Iterator<RequestProcessingData> it = requestProcessingDataIterator.iterator();
347         it.forEachRemaining(requestProcessingDataList::add);
348         return requestProcessingDataList;
349     }
350
351     @Component
352     static class ClassURLMapper {
353         private static final Map<Class, String> classURLMap = new HashMap<>();
354
355         ClassURLMapper() {
356             classURLMap.put(ArchivedInfraRequests.class, "/archivedInfraRequests/");
357             classURLMap.put(InfraActiveRequests.class, "/infraActiveRequests/");
358             classURLMap.put(OperationalEnvDistributionStatus.class, "/operationalEnvDistributionStatus/");
359             classURLMap.put(OperationalEnvServiceModelStatus.class, "/operationalEnvServiceModelStatus/");
360             classURLMap.put(OperationStatus.class, "/operationStatus/");
361             classURLMap.put(ResourceOperationStatus.class, "/resourceOperationStatus/");
362             classURLMap.put(SiteStatus.class, "/siteStatus/");
363             classURLMap.put(WatchdogComponentDistributionStatus.class, "/watchdogComponentDistributionStatus/");
364             classURLMap.put(WatchdogDistributionStatus.class, "/watchdogDistributionStatus/");
365             classURLMap.put(WatchdogServiceModVerIdLookup.class, "/watchdogServiceModVerIdLookup/");
366         }
367
368         <T> String getURI(Class<T> className) {
369             Class actualClass = classURLMap.keySet().stream()
370                     .filter(requestdbClass -> requestdbClass.isAssignableFrom(className)).findFirst().get();
371             return classURLMap.get(actualClass);
372         }
373     }
374
375     // USED FOR TEST ONLY
376     public void setPortToEndpoint(String port) {
377         endpoint = endpoint + port;
378     }
379
380     // USED FOR TEST ONLY
381     public void removePortFromEndpoint() {
382         endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);
383     }
384
385     private HttpHeaders getHttpHeaders() {
386         HttpHeaders headers = new HttpHeaders();
387         headers.set(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
388         headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
389         headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
390         return headers;
391     }
392
393     private HttpEntity<?> getHttpEntity() {
394         HttpHeaders headers = getHttpHeaders();
395         return new HttpEntity<>(headers);
396     }
397
398 }