Merge "update install and configure document"
[so.git] / mso-api-handlers / mso-api-handler-infra / src / main / java / org / onap / so / apihandlerinfra / 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.apihandlerinfra;
22
23 import org.apache.http.HttpStatus;
24 import org.onap.so.db.request.beans.InfraActiveRequests;
25 import org.onap.so.db.request.beans.OperationStatus;
26 import org.onap.so.db.request.data.controller.InstanceNameDuplicateCheckRequest;
27 import org.springframework.beans.factory.annotation.Autowired;
28 import org.springframework.beans.factory.annotation.Value;
29 import org.springframework.context.annotation.Bean;
30 import org.springframework.core.ParameterizedTypeReference;
31 import org.springframework.http.HttpEntity;
32 import org.springframework.http.HttpHeaders;
33 import org.springframework.http.HttpMethod;
34 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
35 import org.springframework.stereotype.Component;
36 import org.springframework.web.client.HttpClientErrorException;
37 import org.springframework.web.client.RestTemplate;
38 import uk.co.blackpepper.bowman.Client;
39 import uk.co.blackpepper.bowman.ClientFactory;
40 import uk.co.blackpepper.bowman.Configuration;
41
42 import javax.annotation.PostConstruct;
43 import javax.ws.rs.core.UriBuilder;
44 import java.net.URI;
45 import java.util.HashMap;
46 import java.util.List;
47 import java.util.Map;
48
49 @Component("RequestDbClient")
50 public class RequestsDbClient {
51
52         private static final String SERVICE_ID = "SERVICE_ID";
53         private static final String OPERATION_ID = "OPERATION_ID";
54         
55         private Client<InfraActiveRequests> infraActiveRequestClient;
56         private Client<OperationStatus> operationStatusClient;
57
58         @Value("${mso.adapters.requestDb.endpoint}")
59         private String endpoint;
60
61         @Value("${mso.adapters.requestDb.auth}")
62         private String msoAdaptersAuth;
63
64         private String getOrchestrationFilterURI = "/infraActiveRequests/getOrchestrationFiltersFromInfraActive/";
65         private static final String OPERATION_STATUS_REPOSITORY_SEARCH = "/operationStatusRepository/search";
66
67         private String checkVnfIdStatus = "/infraActiveRequests/checkVnfIdStatus/";
68
69         private String infraActiveRequestURI = "/infraActiveRequests/";
70
71         private String checkInstanceNameDuplicate = "/infraActiveRequests/checkInstanceNameDuplicate";
72         
73         private String findOneByServiceIdAndOperationIdURI = "/findOneByServiceIdAndOperationId";
74
75         private String cloudOrchestrationFiltersFromInfraActive = "/infraActiveRequests/getCloudOrchestrationFiltersFromInfraActive";
76
77         private HttpHeaders headers;
78
79         @Autowired
80         private RestTemplate restTemplate;
81
82         @PostConstruct
83         public void init() {
84                 getOrchestrationFilterURI = endpoint + getOrchestrationFilterURI;
85                 infraActiveRequestURI = endpoint + infraActiveRequestURI;
86                 checkVnfIdStatus = endpoint + checkVnfIdStatus;
87                 checkInstanceNameDuplicate = endpoint + checkInstanceNameDuplicate;
88                 cloudOrchestrationFiltersFromInfraActive = endpoint + cloudOrchestrationFiltersFromInfraActive;
89                 findOneByServiceIdAndOperationIdURI = endpoint + OPERATION_STATUS_REPOSITORY_SEARCH + findOneByServiceIdAndOperationIdURI;
90                 headers = new HttpHeaders();
91                 headers.set("Authorization", msoAdaptersAuth);
92         }
93
94         public RequestsDbClient() {
95                 ClientFactory clientFactory = Configuration.builder().setRestTemplateConfigurer(restTemplate -> restTemplate.getInterceptors().add((request, body, execution) -> {
96                         request.getHeaders().add("Authorization", msoAdaptersAuth);
97                         return execution.execute(request, body);
98                 })).build().buildClientFactory();
99                 infraActiveRequestClient = clientFactory.create(InfraActiveRequests.class);
100                 operationStatusClient = clientFactory.create(OperationStatus.class);
101        
102         }
103         public List<InfraActiveRequests> getCloudOrchestrationFiltersFromInfraActive(Map<String, String> orchestrationMap){
104                 URI uri = getUri(cloudOrchestrationFiltersFromInfraActive);
105                 HttpEntity<Map> entity = new HttpEntity<>(orchestrationMap, headers);
106                 try{
107                         return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
108                 }catch(HttpClientErrorException e){
109                         if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
110                                 return null;
111                         }
112                         throw e;
113                 }
114         }
115         public InfraActiveRequests getInfraActiveRequestbyRequestId(String requestId) {
116                 return this.getSingleInfraActiveRequests(this.getUri(endpoint + "/infraActiveRequests/" + requestId));
117         }
118
119         public List<InfraActiveRequests> getOrchestrationFiltersFromInfraActive(Map<String, List<String>> orchestrationMap) {
120                 URI uri = getUri(getOrchestrationFilterURI);
121                 HttpEntity<Map<String, List<String>>> entity = new HttpEntity<>(orchestrationMap, headers);
122                 return restTemplate.exchange(uri, HttpMethod.POST, entity, new ParameterizedTypeReference<List<InfraActiveRequests>>() {}).getBody();
123         }
124
125         public InfraActiveRequests checkVnfIdStatus(String operationalEnvironmentId) {
126                 URI uri = getUri(checkVnfIdStatus + operationalEnvironmentId);
127                 return restTemplate.exchange(uri, HttpMethod.GET, HttpEntity.EMPTY, InfraActiveRequests.class).getBody();
128         }
129         public InfraActiveRequests checkInstanceNameDuplicate(HashMap<String, String> instanceIdMap, String instanceName, String requestScope) {
130                 URI uri = getUri(checkInstanceNameDuplicate);
131                 HttpEntity<InstanceNameDuplicateCheckRequest> entity = new HttpEntity<>(new InstanceNameDuplicateCheckRequest(instanceIdMap, instanceName, requestScope), headers);
132                 try{
133                         return restTemplate.exchange(uri, HttpMethod.POST, entity, InfraActiveRequests.class).getBody();
134                 }catch(HttpClientErrorException e){
135                         if(HttpStatus.SC_NOT_FOUND == e.getStatusCode().value()){
136                                 return null;
137                         }
138                         throw e;
139                 }
140
141         }
142         
143         public  OperationStatus getOneByServiceIdAndOperationId(String serviceId, String operationId){
144                 return this.getSingleOperationStatus(UriBuilder.fromUri(findOneByServiceIdAndOperationIdURI)
145                                 .queryParam(SERVICE_ID,serviceId)
146                                 .queryParam(OPERATION_ID,operationId)
147                                 .build());
148         }
149
150         public void save(InfraActiveRequests infraActiveRequests) {
151                 URI uri = getUri(infraActiveRequestURI);
152                 HttpEntity<InfraActiveRequests> entity = new HttpEntity<>(infraActiveRequests, headers);
153                 restTemplate.postForLocation(uri, entity);
154         }
155
156         protected InfraActiveRequests getSingleInfraActiveRequests(URI uri) {
157                 return infraActiveRequestClient.get(uri);
158         }
159
160         public void updateInfraActiveRequests(InfraActiveRequests request) {            
161                 infraActiveRequestClient.put(request);
162         }
163         
164         public OperationStatus getSingleOperationStatus(URI uri){
165                 return operationStatusClient.get(uri);
166         }
167
168         protected URI getUri(String uri) {
169                 return URI.create(uri);
170         }
171
172         @Bean
173         public RestTemplate restTemplate() {
174                 return new RestTemplate( new HttpComponentsClientHttpRequestFactory());
175         }
176 }