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;
23 import org.apache.http.HttpStatus;
24 import org.onap.so.db.request.beans.ArchivedInfraRequests;
25 import org.onap.so.db.request.beans.InfraActiveRequests;
26 import org.onap.so.db.request.beans.OperationStatus;
27 import org.onap.so.db.request.beans.OperationalEnvDistributionStatus;
28 import org.onap.so.db.request.beans.OperationalEnvServiceModelStatus;
29 import org.onap.so.db.request.beans.RequestProcessingData;
30 import org.onap.so.db.request.beans.ResourceOperationStatus;
31 import org.onap.so.db.request.beans.SiteStatus;
32 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
33 import org.onap.so.db.request.beans.WatchdogDistributionStatus;
34 import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
35 import org.onap.so.db.request.data.controller.InstanceNameDuplicateCheckRequest;
36 import org.onap.so.logging.jaxrs.filter.SpringClientFilter;
37 import org.springframework.beans.factory.annotation.Autowired;
38 import org.springframework.beans.factory.annotation.Value;
39 import org.springframework.context.annotation.Bean;
40 import org.springframework.context.annotation.Primary;
41 import org.springframework.core.ParameterizedTypeReference;
42 import org.springframework.http.HttpEntity;
43 import org.springframework.http.HttpHeaders;
44 import org.springframework.http.HttpMethod;
45 import org.springframework.http.HttpRequest;
46 import org.springframework.http.client.BufferingClientHttpRequestFactory;
47 import org.springframework.http.client.ClientHttpRequestExecution;
48 import org.springframework.http.client.ClientHttpRequestFactory;
49 import org.springframework.http.client.ClientHttpRequestInterceptor;
50 import org.springframework.http.client.ClientHttpResponse;
51 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
52 import org.springframework.stereotype.Component;
53 import org.springframework.web.client.HttpClientErrorException;
54 import org.springframework.web.client.RestTemplate;
55 import uk.co.blackpepper.bowman.Client;
56 import uk.co.blackpepper.bowman.ClientFactory;
57 import uk.co.blackpepper.bowman.Configuration;
58 import uk.co.blackpepper.bowman.RestTemplateConfigurer;
60 import javax.annotation.PostConstruct;
61 import javax.ws.rs.core.UriBuilder;
62 import java.io.IOException;
64 import java.util.ArrayList;
65 import java.util.HashMap;
66 import java.util.Iterator;
67 import java.util.List;
70 @Component("RequestsDbClient")
72 public class RequestsDbClient {
74 private static final String SERVICE_ID = "SERVICE_ID";
75 private static final String OPERATION_ID = "OPERATION_ID";
76 private static final String SO_REQUEST_ID = "SO_REQUEST_ID";
77 private static final String GROUPING_ID = "GROUPING_ID";
78 private static final String REQUEST_ID = "REQUEST_ID";
79 private static final String OPERATIONAL_ENVIRONMENT_ID = "OPERATIONAL_ENVIRONMENT_ID";
80 private static final String SERVICE_MODEL_VERSION_ID = "SERVICE_MODEL_VERSION_ID";
81 private static final String NAME = "NAME";
82 private static final String VALUE = "VALUE";
83 private static final String TAG = "TAG";
86 @Value("${mso.adapters.requestDb.endpoint}")
87 protected String endpoint;
89 @Value("${mso.adapters.requestDb.auth}")
90 private String msoAdaptersAuth;
92 private String getOrchestrationFilterURI = "/infraActiveRequests/getOrchestrationFiltersFromInfraActive/";
93 private static final String OPERATION_STATUS_SEARCH = "/operationStatus/search";
94 private static final String OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH = "/operationalEnvServiceModelStatus/search";
97 private String checkVnfIdStatus = "/infraActiveRequests/checkVnfIdStatus/";
99 private String infraActiveRequestURI = "/infraActiveRequests/";
101 private String checkInstanceNameDuplicate = "/infraActiveRequests/checkInstanceNameDuplicate";
103 private String operationalEnvDistributionStatusURI = "/operationalEnvDistributionStatus/";
105 private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
107 private String findOneByOperationalEnvIdAndServiceModelVersionIdURI = "/findOneByOperationalEnvIdAndServiceModelVersionId";
109 private String findAllByOperationalEnvIdAndRequestIdURI = "/findAllByOperationalEnvIdAndRequestId";
111 private String cloudOrchestrationFiltersFromInfraActive = "/infraActiveRequests/getCloudOrchestrationFiltersFromInfraActive";
113 private String requestProcessingDataURI = "/requestProcessingData";
115 private String findOneBySoRequestIdAndGroupingIdAndNameAndTagURI = "/requestProcessingData/search/findOneBySoRequestIdAndGroupingIdAndNameAndTag/";
117 private String findBySoRequestIdOrderByGroupingIdDesc = "/requestProcessingData/search/findBySoRequestIdOrderByGroupingIdDesc/";
121 protected RestTemplate restTemplate;
124 ClassURLMapper classURLMapper;
128 getOrchestrationFilterURI = endpoint + getOrchestrationFilterURI;
129 infraActiveRequestURI = endpoint + infraActiveRequestURI;
130 checkVnfIdStatus = endpoint + checkVnfIdStatus;
131 checkInstanceNameDuplicate = endpoint + checkInstanceNameDuplicate;
132 cloudOrchestrationFiltersFromInfraActive = endpoint + cloudOrchestrationFiltersFromInfraActive;
133 findOneByServiceIdAndOperationIdURI = endpoint + OPERATION_STATUS_SEARCH + findOneByServiceIdAndOperationIdURI;
134 requestProcessingDataURI = endpoint + requestProcessingDataURI;
135 operationalEnvDistributionStatusURI = endpoint + operationalEnvDistributionStatusURI;
136 findOneByOperationalEnvIdAndServiceModelVersionIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findOneByOperationalEnvIdAndServiceModelVersionIdURI;
137 findAllByOperationalEnvIdAndRequestIdURI = endpoint + OPERATIONAL_ENV_SERVICE_MODEL_STATUS_SEARCH + findAllByOperationalEnvIdAndRequestIdURI;
140 public ClientFactory getClientFactory(){
141 URI baseUri = UriBuilder.fromUri(endpoint).build();
142 ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(new HttpComponentsClientHttpRequestFactory());
144 return Configuration.builder().setBaseUri(baseUri).setClientHttpRequestFactory(factory).setRestTemplateConfigurer(restTemplate -> {
145 restTemplate.getInterceptors().add((new SpringClientFilter()));
147 restTemplate.getInterceptors().add((request, body, execution) -> {
149 request.getHeaders().add(HttpHeaders.AUTHORIZATION, msoAdaptersAuth);
150 return execution.execute(request, body);
152 }).build().buildClientFactory();
156 public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive(Map<String, String> orchestrationMap){
157 URI uri = getUri(cloudOrchestrationFiltersFromInfraActive);
158 HttpHeaders headers = new HttpHeaders();
159 headers.set("Authorization", msoAdaptersAuth);
160 HttpEntity<Map> entity = new HttpEntity<>(orchestrationMap, headers);
162 return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
163 }catch(HttpClientErrorException e){
164 if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
171 public InfraActiveRequests getInfraActiveRequestbyRequestId(String requestId) {
173 HttpHeaders headers = new HttpHeaders();
174 headers.set("Authorization", msoAdaptersAuth);
175 HttpEntity<?> entity = new HttpEntity<>(headers);
176 InfraActiveRequests infraActiveRequests = restTemplate.exchange(getUri(endpoint + "/infraActiveRequests/" + requestId), HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
177 if (infraActiveRequests != null) {
178 infraActiveRequests.setRequestId(requestId);
180 return infraActiveRequests;
181 } catch (HttpClientErrorException e) {
182 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
189 public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive(Map<String, List<String>> orchestrationMap) {
190 HttpHeaders headers = new HttpHeaders();
191 headers.set("Authorization", msoAdaptersAuth);
192 URI uri = getUri(getOrchestrationFilterURI);
193 HttpEntity<Map<String, List<String>>> entity = new HttpEntity<>(orchestrationMap, headers);
194 return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
197 public InfraActiveRequests checkVnfIdStatus(String operationalEnvironmentId) {
198 HttpHeaders headers = new HttpHeaders();
199 headers.set("Authorization", msoAdaptersAuth);
200 HttpEntity<?> entity = new HttpEntity<>(headers);
201 URI uri = getUri(checkVnfIdStatus + operationalEnvironmentId);
202 return restTemplate.exchange(uri, HttpMethod.GET, entity, InfraActiveRequests.class).getBody();
205 public InfraActiveRequests checkInstanceNameDuplicate(HashMap<String, String> instanceIdMap, String instanceName, String requestScope) {
206 HttpHeaders headers = new HttpHeaders();
207 headers.set("Authorization", msoAdaptersAuth);
208 URI uri = getUri(checkInstanceNameDuplicate);
209 HttpEntity<InstanceNameDuplicateCheckRequest> entity = new HttpEntity<>(new InstanceNameDuplicateCheckRequest(instanceIdMap, instanceName, requestScope), headers);
211 return restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class).getBody();
212 }catch(HttpClientErrorException e){
213 if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
221 public OperationStatus getOneByServiceIdAndOperationId(String serviceId, String operationId) {
223 HttpHeaders headers = new HttpHeaders();
224 headers.set("Authorization", msoAdaptersAuth);
225 HttpEntity<?> entity = new HttpEntity<>(headers);
226 OperationStatus operationStatus = restTemplate.exchange(UriBuilder.fromUri(getUri(findOneByServiceIdAndOperationIdURI))
227 .queryParam(SERVICE_ID, serviceId)
228 .queryParam(OPERATION_ID, operationId)
229 .build(), HttpMethod.GET, entity, OperationStatus.class).getBody();
230 if (operationStatus != null) {
231 operationStatus.setServiceId(serviceId);
232 operationStatus.setOperationId(operationId);
235 return operationStatus;
236 } catch (HttpClientErrorException e) {
237 if (HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()) {
244 public OperationalEnvServiceModelStatus findOneByOperationalEnvIdAndServiceModelVersionId(String operationalEnvironmentId, String serviceModelVersionId) {
245 return this.getSingleOperationalEnvServiceModelStatus(UriBuilder.fromUri(findOneByOperationalEnvIdAndServiceModelVersionIdURI)
246 .queryParam(OPERATIONAL_ENVIRONMENT_ID,operationalEnvironmentId)
247 .queryParam(SERVICE_MODEL_VERSION_ID,serviceModelVersionId)
251 public List<OperationalEnvServiceModelStatus> getAllByOperationalEnvIdAndRequestId(String operationalEnvironmentId, String requestId){
252 return this.getMultipleOperationalEnvServiceModelStatus(UriBuilder.fromUri(findAllByOperationalEnvIdAndRequestIdURI)
253 .queryParam(OPERATIONAL_ENVIRONMENT_ID,operationalEnvironmentId)
254 .queryParam(REQUEST_ID,requestId)
258 public OperationalEnvDistributionStatus getDistributionStatusById(String distributionId){
259 return this.getSingleOperationalEnvDistributionStatus(UriBuilder.fromUri(operationalEnvDistributionStatusURI+distributionId).build());
262 private OperationalEnvServiceModelStatus getSingleOperationalEnvServiceModelStatus(URI uri){
263 return getClientFactory().create(OperationalEnvServiceModelStatus.class).get(uri);
266 private List<OperationalEnvServiceModelStatus> getMultipleOperationalEnvServiceModelStatus(URI uri){
267 Iterable <OperationalEnvServiceModelStatus> iterable = getClientFactory().create(OperationalEnvServiceModelStatus.class).getAll(uri);
268 List<OperationalEnvServiceModelStatus> serviceModelStatuses = new ArrayList<>();
269 Iterator<OperationalEnvServiceModelStatus> statusIterator = iterable.iterator();
270 statusIterator.forEachRemaining(serviceModelStatuses::add);
271 return serviceModelStatuses;
274 public void save(InfraActiveRequests infraActiveRequests) {
275 HttpHeaders headers = new HttpHeaders();
276 headers.set("Authorization", msoAdaptersAuth);
277 URI uri = getUri(infraActiveRequestURI);
278 HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(infraActiveRequests, headers);
279 restTemplate.postForLocation(uri, entity);
282 public <T> void save(T object){
283 HttpHeaders headers = new HttpHeaders();
284 headers.set("Authorization", msoAdaptersAuth);
285 URI uri = getUri(endpoint+classURLMapper.getURI(object.getClass()));
286 HttpEntity<T> entity = new HttpEntity<>(object, headers);
287 restTemplate.postForLocation(uri, entity);
290 private OperationalEnvDistributionStatus getSingleOperationalEnvDistributionStatus(URI uri){
291 return getClientFactory().create(OperationalEnvDistributionStatus.class).get(uri);
294 public void updateInfraActiveRequests(InfraActiveRequests request) {
295 HttpHeaders headers = new HttpHeaders();
296 headers.set("Authorization", msoAdaptersAuth);
297 headers.set(HttpHeaders.CONTENT_TYPE,"application/json");
298 headers.set(HttpHeaders.ACCEPT, "application/json");
299 URI uri = getUri(infraActiveRequestURI+request.getRequestId());
300 HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(request, headers);
301 restTemplate.put(uri, entity);
304 protected URI getUri(String uri) {
305 return URI.create(uri);
308 public void saveRequestProcessingData(RequestProcessingData requestProcessingData) {
309 HttpHeaders headers = new HttpHeaders();
310 headers.set("Authorization", msoAdaptersAuth);
311 URI uri = getUri(endpoint + requestProcessingDataURI);
312 HttpEntity<RequestProcessingData> entity = new HttpEntity<>(requestProcessingData, headers);
313 restTemplate.postForLocation(uri, entity);
316 public RequestProcessingData getRequestProcessingDataBySoRequestIdAndGroupingIdAndNameAndTag(String soRequestId,
317 String groupingId, String name, String tag) {
318 return this.getSingleRequestProcessingData(UriBuilder.fromUri(endpoint + findOneBySoRequestIdAndGroupingIdAndNameAndTagURI)
319 .queryParam(SO_REQUEST_ID,soRequestId)
320 .queryParam(GROUPING_ID,groupingId)
321 .queryParam(NAME,name)
325 public List<RequestProcessingData> getRequestProcessingDataBySoRequestId(String soRequestId) {
326 return this.getRequestProcessingData(UriBuilder.fromUri(endpoint + findBySoRequestIdOrderByGroupingIdDesc)
327 .queryParam(SO_REQUEST_ID,soRequestId)
331 public RequestProcessingData getSingleRequestProcessingData(URI uri){
332 return getClientFactory().create(RequestProcessingData.class).get(uri);
335 private List<RequestProcessingData> getRequestProcessingData(URI uri) {
336 Iterable<RequestProcessingData> requestProcessingDataIterator = getClientFactory().create(RequestProcessingData.class).getAll(uri);
337 List<RequestProcessingData> requestProcessingDataList = new ArrayList<>();
338 Iterator<RequestProcessingData> it = requestProcessingDataIterator.iterator();
339 it.forEachRemaining(requestProcessingDataList::add);
340 return requestProcessingDataList;
343 public List<RequestProcessingData> getAllRequestProcessingData() {
345 return (List<RequestProcessingData>) this.getAllRequestProcessingData(UriBuilder.fromUri(endpoint + "/requestProcessingData").build());
348 private Iterable<RequestProcessingData> getAllRequestProcessingData(URI uri) {
349 return getClientFactory().create(RequestProcessingData.class).getAll(uri);
353 static class ClassURLMapper {
354 private static final Map <Class,String> classURLMap = new HashMap<>();
357 classURLMap.put(ArchivedInfraRequests.class,"/archivedInfraRequests/");
358 classURLMap.put(InfraActiveRequests.class,"/infraActiveRequests/");
359 classURLMap.put(OperationalEnvDistributionStatus.class,"/operationalEnvDistributionStatus/");
360 classURLMap.put(OperationalEnvServiceModelStatus.class,"/operationalEnvServiceModelStatus/");
361 classURLMap.put(OperationStatus.class,"/operationStatus/");
362 classURLMap.put(ResourceOperationStatus.class,"/resourceOperationStatus/");
363 classURLMap.put(SiteStatus.class,"/siteStatus/");
364 classURLMap.put(WatchdogComponentDistributionStatus.class,"/watchdogComponentDistributionStatus/");
365 classURLMap.put(WatchdogDistributionStatus.class,"/watchdogDistributionStatus/");
366 classURLMap.put(WatchdogServiceModVerIdLookup.class,"/watchdogServiceModVerIdLookup/");
369 <T> String getURI(Class<T> className) {
370 Class actualClass = classURLMap.keySet()
372 .filter(requestdbClass -> requestdbClass.isAssignableFrom(className))
375 return classURLMap.get(actualClass);
380 public void setPortToEndpoint(String port) {
381 endpoint = endpoint + port;
385 public void removePortFromEndpoint() {
386 endpoint = endpoint.substring(0, endpoint.lastIndexOf(':') + 1);