DCAE-D be initial commit
[sdc/dcae-d/dt-be-main.git] / dcaedt_tools / src / main / java / utilities / DcaeRestClient.java
1 package utilities;
2
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;
18
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;
25
26 @Component("dcaerestclient")
27 public class DcaeRestClient implements IDcaeRestClient {
28
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";
32
33
34     private static final String ECOMP_INSTANCE_ID_HEADER = "X-ECOMP-InstanceID";
35     private static final String USER_ID_HEADER = "USER_ID";
36
37
38     private String uri;
39     private RestTemplate client;
40     private Credential credential;
41
42     public DcaeRestClient(Credential credential) {
43         this.credential = credential;
44     }
45
46     @Override
47     public String getUserId() {
48         return credential.getUsername();
49     }
50
51     @PostConstruct
52     @Override
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());
60     }
61
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()));
67         return headers;
68     }
69
70     @Override
71     public List<ResourceDetailed> getAllVfcmts() {
72         String url = buildRequestPath(GET_RESOURCES_BY_CATEGORY);
73         return Arrays.asList(client.getForObject(url, ResourceDetailed[].class));
74     }
75
76     @Override
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);
80     }
81
82     @Override
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);
86
87         return resourceDetailedResponse.getBody();
88     }
89
90     @Override
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);
94
95         return resourceDetailedResponse.getBody();
96     }
97
98     @Override
99     public List<Element> getElements() {
100         String url = buildRequestPath(ELEMENTS);
101         return client.getForObject(url, ElementsResponse.class).getData().getElements();
102     }
103     @Override
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();
107     }
108
109     @Override
110     public String getItemModel(String elementId) {
111         String url = buildRequestPath("/"+ elementId +"/model");
112         return client.getForObject(url, String.class);
113     }
114     @Override
115     public String getItemType(String elementId, String type) {
116         String url = buildRequestPath("/"+ elementId +"/type/"+ type +"/");
117         return client.getForObject(url, String.class);
118     }
119
120     @Override
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);
124
125         return resourceDetailedResponse.getBody();
126     }
127
128     @Override
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);
132
133         return resourceDetailedResponse.getBody();
134     }
135
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);
140         return headers;
141     }
142
143     private String buildRequestPath(String... args){
144         return uri + Stream.of(args).collect(Collectors.joining());
145     }
146
147     @Override
148     public void updateResource(ResourceDetailed vfcmt) {
149         // Do nothing
150     }
151 }