3 import json.Credential;
4 import json.Environment;
5 import json.response.ElementsResponse.Element;
6 import json.response.ElementsResponse.ElementsResponse;
7 import json.response.ItemsResponse.Item;
8 import json.response.ItemsResponse.ItemsResponse;
9 import org.apache.http.impl.client.CloseableHttpClient;
10 import org.apache.http.impl.client.HttpClientBuilder;
11 import org.apache.http.message.BasicHeader;
12 import org.onap.sdc.dcae.composition.restmodels.CreateVFCMTRequest;
13 import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed;
14 import org.springframework.http.*;
15 import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
16 import org.springframework.stereotype.Component;
17 import org.springframework.web.client.RestTemplate;
19 import javax.annotation.PostConstruct;
20 import java.util.ArrayList;
21 import java.util.Arrays;
22 import java.util.List;
23 import java.util.stream.Collectors;
24 import java.util.stream.Stream;
26 @Component("dcaerestclient")
27 public class DcaeRestClient implements IDcaeRestClient {
29 private static final String GET_RESOURCES_BY_CATEGORY = "/getResourcesByCategory";
30 private static final String CREATE_VFCMT = "/createVFCMT";
31 private static final String ELEMENTS = "/elements";
34 private static final String ECOMP_INSTANCE_ID_HEADER = "X-ECOMP-InstanceID";
35 private static final String USER_ID_HEADER = "USER_ID";
39 private RestTemplate client;
40 private Credential credential;
42 public DcaeRestClient(Credential credential) {
43 this.credential = credential;
47 public String getUserId() {
48 return credential.getUsername();
53 public void init(Environment environment) {
54 credential = environment.getCredential();
55 CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultHeaders(defaultHeaders(credential)).build();
56 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
57 requestFactory.setHttpClient(httpClient);
58 client = new RestTemplate(requestFactory);
59 uri = String.format("%s:%s%s", environment.getDcaeBeHost(), environment.getDcaeBePort(), environment.getApiPath());
62 private List<BasicHeader> defaultHeaders(Credential credential) {
63 List<BasicHeader> headers = new ArrayList<>();
64 headers.add(new BasicHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE));
65 headers.add(new BasicHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE));
66 headers.add(new BasicHeader(ECOMP_INSTANCE_ID_HEADER, credential.getUsername()));
71 public List<ResourceDetailed> getAllVfcmts() {
72 String url = buildRequestPath(GET_RESOURCES_BY_CATEGORY);
73 return Arrays.asList(client.getForObject(url, ResourceDetailed[].class));
77 public ResourceDetailed createResource(CreateVFCMTRequest resource) {
78 String url = buildRequestPath(CREATE_VFCMT);
79 return client.postForObject(url, new HttpEntity<>(resource, postResourceHeaders(credential.getUsername())), ResourceDetailed.class);
83 public ResourceDetailed checkoutVfcmt(String vfcmtUuid) {
84 String url = buildRequestPath(String.format("/checkout/vfcmt/%s", vfcmtUuid));
85 ResponseEntity<ResourceDetailed> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), ResourceDetailed.class);
87 return resourceDetailedResponse.getBody();
91 public ResourceDetailed checkinVfcmt(String vfcmtUuid) {
92 String url = buildRequestPath(String.format("/checkin/vfcmt/%s", vfcmtUuid));
93 ResponseEntity<ResourceDetailed> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), ResourceDetailed.class);
95 return resourceDetailedResponse.getBody();
99 public List<Element> getElements() {
100 String url = buildRequestPath(ELEMENTS);
101 return client.getForObject(url, ElementsResponse.class).getData().getElements();
104 public List<Item> getItem(String element) {
105 String url = buildRequestPath("/"+ element + ELEMENTS);
106 return client.getForObject(url, ItemsResponse.class).getData().getElement() == null ? null : client.getForObject(url, ItemsResponse.class).getData().getElement().getItems();
110 public String getItemModel(String elementId) {
111 String url = buildRequestPath("/"+ elementId +"/model");
112 return client.getForObject(url, String.class);
115 public String getItemType(String elementId, String type) {
116 String url = buildRequestPath("/"+ elementId +"/type/"+ type +"/");
117 return client.getForObject(url, String.class);
121 public String saveComposition(String componentId, String body) {
122 String url = buildRequestPath("/saveComposition/" + componentId);
123 ResponseEntity<String> resourceDetailedResponse = client.exchange(url, HttpMethod.POST, new HttpEntity<>(body, postResourceHeaders(credential.getUsername())), String.class);
125 return resourceDetailedResponse.getBody();
129 public String certifyVfcmt(String vfcmtUuid) {
130 String url = buildRequestPath(String.format("/certify/vfcmt/%s", vfcmtUuid));
131 ResponseEntity<String> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), String.class);
133 return resourceDetailedResponse.getBody();
136 private HttpHeaders postResourceHeaders(String userId) {
137 HttpHeaders headers = new HttpHeaders();
138 headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
139 headers.add(USER_ID_HEADER, userId);
143 private String buildRequestPath(String... args){
144 return uri + Stream.of(args).collect(Collectors.joining());
148 public void updateResource(ResourceDetailed vfcmt) {