diff options
Diffstat (limited to 'dcaedt_tools/src/main/java/utilities/DcaeRestClient.java')
-rw-r--r-- | dcaedt_tools/src/main/java/utilities/DcaeRestClient.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java b/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java new file mode 100644 index 0000000..5e81038 --- /dev/null +++ b/dcaedt_tools/src/main/java/utilities/DcaeRestClient.java @@ -0,0 +1,151 @@ +package utilities; + +import json.Credential; +import json.Environment; +import json.response.ElementsResponse.Element; +import json.response.ElementsResponse.ElementsResponse; +import json.response.ItemsResponse.Item; +import json.response.ItemsResponse.ItemsResponse; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.message.BasicHeader; +import org.onap.sdc.dcae.composition.restmodels.CreateVFCMTRequest; +import org.onap.sdc.dcae.composition.restmodels.sdc.ResourceDetailed; +import org.springframework.http.*; +import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Component("dcaerestclient") +public class DcaeRestClient implements IDcaeRestClient { + + private static final String GET_RESOURCES_BY_CATEGORY = "/getResourcesByCategory"; + private static final String CREATE_VFCMT = "/createVFCMT"; + private static final String ELEMENTS = "/elements"; + + + private static final String ECOMP_INSTANCE_ID_HEADER = "X-ECOMP-InstanceID"; + private static final String USER_ID_HEADER = "USER_ID"; + + + private String uri; + private RestTemplate client; + private Credential credential; + + public DcaeRestClient(Credential credential) { + this.credential = credential; + } + + @Override + public String getUserId() { + return credential.getUsername(); + } + + @PostConstruct + @Override + public void init(Environment environment) { + credential = environment.getCredential(); + CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultHeaders(defaultHeaders(credential)).build(); + HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); + requestFactory.setHttpClient(httpClient); + client = new RestTemplate(requestFactory); + uri = String.format("%s:%s%s", environment.getDcaeBeHost(), environment.getDcaeBePort(), environment.getApiPath()); + } + + private List<BasicHeader> defaultHeaders(Credential credential) { + List<BasicHeader> headers = new ArrayList<>(); + headers.add(new BasicHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)); + headers.add(new BasicHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_OCTET_STREAM_VALUE)); + headers.add(new BasicHeader(ECOMP_INSTANCE_ID_HEADER, credential.getUsername())); + return headers; + } + + @Override + public List<ResourceDetailed> getAllVfcmts() { + String url = buildRequestPath(GET_RESOURCES_BY_CATEGORY); + return Arrays.asList(client.getForObject(url, ResourceDetailed[].class)); + } + + @Override + public ResourceDetailed createResource(CreateVFCMTRequest resource) { + String url = buildRequestPath(CREATE_VFCMT); + return client.postForObject(url, new HttpEntity<>(resource, postResourceHeaders(credential.getUsername())), ResourceDetailed.class); + } + + @Override + public ResourceDetailed checkoutVfcmt(String vfcmtUuid) { + String url = buildRequestPath(String.format("/checkout/vfcmt/%s", vfcmtUuid)); + ResponseEntity<ResourceDetailed> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), ResourceDetailed.class); + + return resourceDetailedResponse.getBody(); + } + + @Override + public ResourceDetailed checkinVfcmt(String vfcmtUuid) { + String url = buildRequestPath(String.format("/checkin/vfcmt/%s", vfcmtUuid)); + ResponseEntity<ResourceDetailed> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), ResourceDetailed.class); + + return resourceDetailedResponse.getBody(); + } + + @Override + public List<Element> getElements() { + String url = buildRequestPath(ELEMENTS); + return client.getForObject(url, ElementsResponse.class).getData().getElements(); + } + @Override + public List<Item> getItem(String element) { + String url = buildRequestPath("/"+ element + ELEMENTS); + return client.getForObject(url, ItemsResponse.class).getData().getElement() == null ? null : client.getForObject(url, ItemsResponse.class).getData().getElement().getItems(); + } + + @Override + public String getItemModel(String elementId) { + String url = buildRequestPath("/"+ elementId +"/model"); + return client.getForObject(url, String.class); + } + @Override + public String getItemType(String elementId, String type) { + String url = buildRequestPath("/"+ elementId +"/type/"+ type +"/"); + return client.getForObject(url, String.class); + } + + @Override + public String saveComposition(String componentId, String body) { + String url = buildRequestPath("/saveComposition/" + componentId); + ResponseEntity<String> resourceDetailedResponse = client.exchange(url, HttpMethod.POST, new HttpEntity<>(body, postResourceHeaders(credential.getUsername())), String.class); + + return resourceDetailedResponse.getBody(); + } + + @Override + public String certifyVfcmt(String vfcmtUuid) { + String url = buildRequestPath(String.format("/certify/vfcmt/%s", vfcmtUuid)); + ResponseEntity<String> resourceDetailedResponse = client.exchange(url, HttpMethod.PUT, new HttpEntity(postResourceHeaders(credential.getUsername())), String.class); + + return resourceDetailedResponse.getBody(); + } + + private HttpHeaders postResourceHeaders(String userId) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON_UTF8); + headers.add(USER_ID_HEADER, userId); + return headers; + } + + private String buildRequestPath(String... args){ + return uri + Stream.of(args).collect(Collectors.joining()); + } + + @Override + public void updateResource(ResourceDetailed vfcmt) { + // Do nothing + } +} |