2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.so.db.request.client;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.Iterator;
27 import java.util.List;
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;
63 @Component("RequestsDbClient")
65 public class RequestsDbClient {
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";
75 @Value("${mso.adapters.requestDb.endpoint}")
76 protected String endpoint;
78 @Value("${mso.adapters.requestDb.auth}")
79 private String msoAdaptersAuth;
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";
87 private String checkVnfIdStatus = "/infraActiveRequests/checkVnfIdStatus/";
89 private String infraActiveRequestURI = "/infraActiveRequests/";
91 private String checkInstanceNameDuplicate = "/infraActiveRequests/checkInstanceNameDuplicate";
93 private String operationalEnvDistributionStatusURI = "/operationalEnvDistributionStatus/";
95 private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
97 private String findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI =
98 "/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId";
100 private String findAllByOperationalEnvIdAndRequestIdURI = "/findAllByOperationalEnvIdAndRequestId";
102 private String cloudOrchestrationFiltersFromInfraActive =
103 "/infraActiveRequests/getCloudOrchestrationFiltersFromInfraActive";
105 private String requestProcessingDataURI = "/requestProcessingData";
107 private final String findBySoRequestIdOrderByGroupingIdDesc =
108 "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc";
112 protected RestTemplate restTemplate;
115 ClassURLMapper classURLMapper;
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;
134 private ClientFactory getClientFactory() {
135 URI baseUri = UriBuilder.fromUri(endpoint).build();
136 ClientHttpRequestFactory factory =
137 new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
139 return Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory)
140 .setRestTemplateConfigurer(restTemplate -> {
141 restTemplate.getInterceptors().add((new SpringClientFilter()));
143 restTemplate.getInterceptors().add((request, body, execution) -> {
145 request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
146 return execution.execute(request, body);
148 }).build().buildClientFactory();
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);
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()) {
167 public InfraActiveRequests getInfraActiveRequestbyRequestId(String requestId) {
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);
176 return infraActiveRequests;
177 } catch (HttpClientErrorException e) {
178 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
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);
191 .exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {})
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();
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);
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();
215 } catch (HttpClientErrorException e) {
216 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
224 public OperationStatus getOneByServiceIdAndOperationId(String serviceId, String operationId) {
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);
236 return operationStatus;
237 } catch (HttpClientErrorException e) {
238 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
245 public OperationalEnvServiceModelStatus findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId(
246 String operationalEnvironmentId, String serviceModelVersionId, String requestId) {
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);
261 } catch (HttpClientErrorException e) {
262 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
269 public List<OperationalEnvServiceModelStatus> getAllByOperationalEnvIdAndRequestId(String operationalEnvironmentId,
271 return this.getMultipleOperationalEnvServiceModelStatus(
272 getUri(UriBuilder.fromUri(findAllByOperationalEnvIdAndRequestIdURI)
273 .queryParam(OPERATIONAL_ENVIRONMENT_ID, operationalEnvironmentId)
274 .queryParam(REQUEST_ID, requestId).build().toString()));
277 public OperationalEnvDistributionStatus getDistributionStatusById(String distributionId) {
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);
286 return distributionStatus;
287 } catch (HttpClientErrorException e) {
288 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
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;
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);
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);
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);
325 protected URI getUri(String uri) {
326 return URI.create(uri);
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);
336 public List<RequestProcessingData> getRequestProcessingDataBySoRequestId(String soRequestId) {
338 .getRequestProcessingData(getUri(UriBuilder.fromUri(endpoint + findBySoRequestIdOrderByGroupingIdDesc)
339 .queryParam(SO_REQUEST_ID, soRequestId).build().toString()));
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;
352 static class ClassURLMapper {
353 private static final Map<Class, String> classURLMap = new HashMap<>();
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/");
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);
375 // USED FOR TEST ONLY
376 public void setPortToEndpoint(String port) {
377 endpoint = endpoint + port;
380 // USED FOR TEST ONLY
381 public void removePortFromEndpoint() {
382 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);
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);
393 private HttpEntity<?> getHttpEntity() {
394 HttpHeaders headers = getHttpHeaders();
395 return new HttpEntity<>(headers);