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;
30 import javax.annotation.PostConstruct;
31 import javax.ws.rs.core.MediaType;
32 import javax.ws.rs.core.UriBuilder;
34 import org.apache.http.HttpStatus;
35 import org.onap.so.db.request.beans.ArchivedInfraRequests;
36 import org.onap.so.db.request.beans.InfraActiveRequests;
37 import org.onap.so.db.request.beans.OperationStatus;
38 import org.onap.so.db.request.beans.OperationalEnvDistributionStatus;
39 import org.onap.so.db.request.beans.OperationalEnvServiceModelStatus;
40 import org.onap.so.db.request.beans.RequestProcessingData;
41 import org.onap.so.db.request.beans.ResourceOperationStatus;
42 import org.onap.so.db.request.beans.SiteStatus;
43 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
44 import org.onap.so.db.request.beans.WatchdogDistributionStatus;
45 import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
46 import org.onap.so.db.request.data.controller.InstanceNameDuplicateCheckRequest;
47 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.beans.factory.annotation.Value;
50 import org.springframework.context.annotation.Primary;
51 import org.springframework.core.ParameterizedTypeReference;
52 import org.springframework.http.HttpEntity;
53 import org.springframework.http.HttpHeaders;
54 import org.springframework.http.HttpMethod;
55 import org.springframework.http.ResponseEntity;
56 import org.springframework.http.client.BufferingClientHttpRequestFactory;
57 import org.springframework.http.client.ClientHttpRequestFactory;
58 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
59 import org.springframework.stereotype.Component;
60 import org.springframework.web.client.HttpClientErrorException;
61 import org.springframework.web.client.RestTemplate;
63 import uk.co.blackpepper.bowman.ClientFactory;
64 import uk.co.blackpepper.bowman.Configuration;
66 @Component("RequestsDbClient")
68 public class RequestsDbClient {
70 private static final String SERVICE_ID = "SERVICE_ID";
71 private static final String OPERATION_ID = "OPERATION_ID";
72 private static final String SO_REQUEST_ID = "SO_REQUEST_ID";
73 private static final String REQUEST_ID = "REQUEST_ID";
74 private static final String OPERATIONAL_ENVIRONMENT_ID = "OPERATIONAL_ENV_ID";
75 private static final String SERVICE_MODEL_VERSION_ID = "SERVICE_MODEL_VERSION_ID";
78 @Value("${mso.adapters.requestDb.endpoint}")
79 protected String endpoint;
81 @Value("${mso.adapters.requestDb.auth}")
82 private String msoAdaptersAuth;
84 private String getOrchestrationFilterURI = "/infraActiveRequests/getOrchestrationFiltersFromInfraActive/";
85 private static final String OPERATION_STATUS_SEARCH = "/operationStatus/search";
86 private static final String OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH = "/operationalEnvServiceModelStatus/search";
89 private String checkVnfIdStatus = "/infraActiveRequests/checkVnfIdStatus/";
91 private String infraActiveRequestURI = "/infraActiveRequests/";
93 private String checkInstanceNameDuplicate = "/infraActiveRequests/checkInstanceNameDuplicate";
95 private String operationalEnvDistributionStatusURI = "/operationalEnvDistributionStatus/";
97 private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
99 private String findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI = "/findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId";
101 private String findAllByOperationalEnvIdAndRequestIdURI = "/findAllByOperationalEnvIdAndRequestId";
103 private String cloudOrchestrationFiltersFromInfraActive = "/infraActiveRequests/getCloudOrchestrationFiltersFromInfraActive";
105 private String requestProcessingDataURI = "/requestProcessingData";
107 private final String findBySoRequestIdOrderByGroupingIdDesc = "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc";
111 protected RestTemplate restTemplate;
114 ClassURLMapper classURLMapper;
118 getOrchestrationFilterURI = endpoint + getOrchestrationFilterURI;
119 infraActiveRequestURI = endpoint + infraActiveRequestURI;
120 checkVnfIdStatus = endpoint + checkVnfIdStatus;
121 checkInstanceNameDuplicate = endpoint + checkInstanceNameDuplicate;
122 cloudOrchestrationFiltersFromInfraActive = endpoint + cloudOrchestrationFiltersFromInfraActive;
123 findOneByServiceIdAndOperationIdURI = endpoint + OPERATION_STATUS_SEARCH + findOneByServiceIdAndOperationIdURI;
124 requestProcessingDataURI = endpoint + requestProcessingDataURI;
125 operationalEnvDistributionStatusURI = endpoint + operationalEnvDistributionStatusURI;
126 findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI;
127 findAllByOperationalEnvIdAndRequestIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findAllByOperationalEnvIdAndRequestIdURI;
130 private ClientFactory getClientFactory(){
131 URI baseUri = UriBuilder.fromUri(endpoint).build();
132 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
134 return Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
135 restTemplate.getInterceptors().add((new SpringClientFilter()));
137 restTemplate.getInterceptors().add((request, body, execution) -> {
139 request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
140 return execution.execute(request, body);
142 }).build().buildClientFactory();
146 public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive(Map<String, String> orchestrationMap){
147 URI uri = getUri(cloudOrchestrationFiltersFromInfraActive);
148 HttpHeaders headers = getHttpHeaders();
149 HttpEntity<Map> entity = new HttpEntity<>(orchestrationMap, headers);
151 return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
152 }catch(HttpClientErrorException e){
153 if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
160 public InfraActiveRequests getInfraActiveRequestbyRequestId(String requestId) {
162 HttpEntity<?> entity = getHttpEntity();
163 InfraActiveRequests infraActiveRequests = restTemplate.exchange(getUri(endpoint + "/infraActiveRequests/" + requestId), HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
164 if (infraActiveRequests != null) {
165 infraActiveRequests.setRequestId(requestId);
167 return infraActiveRequests;
168 } catch (HttpClientErrorException e) {
169 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
176 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive(Map<String, List<String>> orchestrationMap) {
177 HttpHeaders headers = getHttpHeaders();
178 URI uri = getUri(getOrchestrationFilterURI);
179 HttpEntity<Map<String, List<String>>> entity = new HttpEntity<>(orchestrationMap, headers);
180 return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
183 public InfraActiveRequests checkVnfIdStatus(String operationalEnvironmentId) {
184 HttpEntity<?> entity = getHttpEntity();
185 URI uri = getUri(checkVnfIdStatus + operationalEnvironmentId);
186 return restTemplate.exchange(uri, HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
189 public InfraActiveRequests checkInstanceNameDuplicate(HashMap<String, String> instanceIdMap, String instanceName, String requestScope) {
190 HttpHeaders headers = getHttpHeaders();
191 URI uri = getUri(checkInstanceNameDuplicate);
192 HttpEntity<InstanceNameDuplicateCheckRequest> entity = new HttpEntity<>(new InstanceNameDuplicateCheckRequest(instanceIdMap, instanceName, requestScope), headers);
194 ResponseEntity<InfraActiveRequests> response = restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class);
195 if(response != null && response.hasBody()) {
196 return restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class).getBody();
200 }catch(HttpClientErrorException e){
201 if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
209 public OperationStatus getOneByServiceIdAndOperationId(String serviceId, String operationId) {
211 HttpEntity<?> entity = getHttpEntity();
212 OperationStatus operationStatus = restTemplate.exchange(getUri(UriBuilder.fromUri(getUri(findOneByServiceIdAndOperationIdURI))
213 .queryParam(SERVICE_ID, serviceId)
214 .queryParam(OPERATION_ID, operationId)
215 .build().toString()), HttpMethod.GET, entity, OperationStatus.class).getBody();
216 if (operationStatus != null) {
217 operationStatus.setServiceId(serviceId);
218 operationStatus.setOperationId(operationId);
221 return operationStatus;
222 } catch (HttpClientErrorException e) {
223 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
230 public OperationalEnvServiceModelStatus findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestId(String operationalEnvironmentId, String serviceModelVersionId, String requestId) {
232 HttpEntity<?> entity = getHttpEntity();
233 OperationalEnvServiceModelStatus modelStatus = restTemplate.exchange(getUri(UriBuilder.fromUri(findOneByOperationalEnvIdAndServiceModelVersionIdAndRequestIdURI)
234 .queryParam(OPERATIONAL_ENVIRONMENT_ID, operationalEnvironmentId)
235 .queryParam(SERVICE_MODEL_VERSION_ID, serviceModelVersionId)
236 .queryParam(REQUEST_ID, requestId)
237 .build().toString()), HttpMethod.GET, entity, OperationalEnvServiceModelStatus.class).getBody();
238 if (null != modelStatus) {
239 modelStatus.setOperationalEnvId(operationalEnvironmentId);
240 modelStatus.setServiceModelVersionId(serviceModelVersionId);
241 modelStatus.setRequestId(requestId);
244 }catch(HttpClientErrorException e){
245 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
252 public List<OperationalEnvServiceModelStatus> getAllByOperationalEnvIdAndRequestId(String operationalEnvironmentId, String requestId){
253 return this.getMultipleOperationalEnvServiceModelStatus(getUri(UriBuilder.fromUri(findAllByOperationalEnvIdAndRequestIdURI)
254 .queryParam(OPERATIONAL_ENVIRONMENT_ID,operationalEnvironmentId)
255 .queryParam(REQUEST_ID,requestId)
256 .build().toString()));
259 public OperationalEnvDistributionStatus getDistributionStatusById(String distributionId){
261 HttpEntity<?> entity = getHttpEntity();
262 OperationalEnvDistributionStatus distributionStatus = restTemplate.exchange(getUri(operationalEnvDistributionStatusURI + distributionId),
263 HttpMethod.GET, entity, OperationalEnvDistributionStatus.class).getBody();
264 if(null != distributionStatus){
265 distributionStatus.setDistributionId(distributionId);
267 return distributionStatus;
268 }catch(HttpClientErrorException e){
269 if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
276 private List<OperationalEnvServiceModelStatus> getMultipleOperationalEnvServiceModelStatus(URI uri){
277 Iterable <OperationalEnvServiceModelStatus> iterable = getClientFactory().create(OperationalEnvServiceModelStatus.class).getAll(uri);
278 List<OperationalEnvServiceModelStatus> serviceModelStatuses = new ArrayList<>();
279 Iterator<OperationalEnvServiceModelStatus> statusIterator = iterable.iterator();
280 statusIterator.forEachRemaining(serviceModelStatuses::add);
281 return serviceModelStatuses;
284 public void save(InfraActiveRequests infraActiveRequests) {
285 HttpHeaders headers = getHttpHeaders();
286 URI uri = getUri(infraActiveRequestURI);
287 HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(infraActiveRequests, headers);
288 restTemplate.postForLocation(uri, entity);
291 public <T> void save(T object){
292 HttpHeaders headers = getHttpHeaders();
293 URI uri = getUri(endpoint+classURLMapper.getURI(object.getClass()));
294 HttpEntity<T> entity = new HttpEntity<>(object, headers);
295 restTemplate.postForLocation(uri, entity);
298 public void updateInfraActiveRequests(InfraActiveRequests request) {
299 HttpHeaders headers = getHttpHeaders();
300 URI uri = getUri(infraActiveRequestURI+request.getRequestId());
301 HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(request, headers);
302 restTemplate.put(uri, entity);
305 protected URI getUri(String uri) {
306 return URI.create(uri);
309 public void saveRequestProcessingData(RequestProcessingData requestProcessingData) {
310 HttpHeaders headers = getHttpHeaders();
311 URI uri = getUri(requestProcessingDataURI);
312 HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
313 restTemplate.postForLocation(uri, entity);
316 public List<RequestProcessingData> getRequestProcessingDataBySoRequestId(String soRequestId) {
317 return this.getRequestProcessingData(getUri(UriBuilder.fromUri(endpoint + findBySoRequestIdOrderByGroupingIdDesc)
318 .queryParam(SO_REQUEST_ID,soRequestId)
319 .build().toString()));
322 private List<RequestProcessingData> getRequestProcessingData(URI uri) {
323 Iterable<RequestProcessingData> requestProcessingDataIterator = getClientFactory().create(RequestProcessingData.class).getAll(uri);
324 List<RequestProcessingData> requestProcessingDataList = new ArrayList<>();
325 Iterator<RequestProcessingData> it = requestProcessingDataIterator.iterator();
326 it.forEachRemaining(requestProcessingDataList::add);
327 return requestProcessingDataList;
331 static class ClassURLMapper {
332 private static final Map <Class,String> classURLMap = new HashMap<>();
335 classURLMap.put(ArchivedInfraRequests.class,"/archivedInfraRequests/");
336 classURLMap.put(InfraActiveRequests.class,"/infraActiveRequests/");
337 classURLMap.put(OperationalEnvDistributionStatus.class,"/operationalEnvDistributionStatus/");
338 classURLMap.put(OperationalEnvServiceModelStatus.class,"/operationalEnvServiceModelStatus/");
339 classURLMap.put(OperationStatus.class,"/operationStatus/");
340 classURLMap.put(ResourceOperationStatus.class,"/resourceOperationStatus/");
341 classURLMap.put(SiteStatus.class,"/siteStatus/");
342 classURLMap.put(WatchdogComponentDistributionStatus.class,"/watchdogComponentDistributionStatus/");
343 classURLMap.put(WatchdogDistributionStatus.class,"/watchdogDistributionStatus/");
344 classURLMap.put(WatchdogServiceModVerIdLookup.class,"/watchdogServiceModVerIdLookup/");
347 <T> String getURI(Class<T> className) {
348 Class actualClass = classURLMap.keySet()
350 .filter(requestdbClass -> requestdbClass.isAssignableFrom(className))
353 return classURLMap.get(actualClass);
358 public void setPortToEndpoint(String port) {
359 endpoint = endpoint + port;
363 public void removePortFromEndpoint() {
364 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);
367 private HttpHeaders getHttpHeaders() {
368 HttpHeaders headers = new HttpHeaders();
369 headers.set(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
370 headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
371 headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
375 private HttpEntity<?> getHttpEntity() {
376 HttpHeaders headers = getHttpHeaders();
377 return new HttpEntity<>(headers);