diff options
Diffstat (limited to 'src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java')
-rw-r--r-- | src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java b/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java new file mode 100644 index 0000000..223e408 --- /dev/null +++ b/src/main/java/org/onap/nbi/apis/serviceorder/MultiClient.java @@ -0,0 +1,196 @@ +package org.onap.nbi.apis.serviceorder; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import org.onap.nbi.OnapComponentsUrlPaths; +import org.onap.nbi.apis.serviceorder.model.consumer.SubscriberInfo; +import org.onap.nbi.exceptions.BackendFunctionalException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +@Service +public class MultiClient { + + @Autowired + private RestTemplate restTemplate; + + @Value("${aai.host}") + private String aaiHost; + + @Value("${aai.header.authorization}") + private String aaiHeaderAuthorization; + + @Value("${aai.api.id}") + private String aaiApiId; + + @Value("${onap.lcpCloudRegionId}") + private String lcpCloudRegionId; + + @Value("${onap.tenantId}") + private String tenantId; + + @Value("${onap.cloudOwner}") + private String cloudOwner; + + @Autowired + private ServiceCatalogUrl serviceCatalogUrl; + + @Autowired + private ServiceInventoryUrl serviceInventoryUrl; + + + private static final String HEADER_AUTHORIZATION = "Authorization"; + private static final String X_FROM_APP_ID = "X-FromAppId"; + + private static final Logger LOGGER = LoggerFactory.getLogger(MultiClient.class); + + public ResponseEntity<Object> getServiceCatalog(String id) { + StringBuilder callURL = new StringBuilder().append(serviceCatalogUrl.getServiceCatalogUrl()).append(id); + ResponseEntity<Object> response = callApiGet(callURL.toString(), new HttpHeaders(), null); + return response; + } + + public boolean doesServiceExistInServiceInventory(String id, String serviceName, String globalSubscriberId) { + StringBuilder callURL = new StringBuilder().append(serviceInventoryUrl.getServiceInventoryUrl()).append(id); + Map<String, String> param = new HashMap<>(); + param.put("serviceSpecification.name", serviceName); + param.put("relatedParty.id", globalSubscriberId); + + ResponseEntity<Object> response = callApiGet(callURL.toString(), new HttpHeaders(), param); + if (response == null || !response.getStatusCode().equals(HttpStatus.OK)) { + return false; + } + return true; + } + + + private HttpHeaders buildRequestHeaderForAAI() { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add(HEADER_AUTHORIZATION, aaiHeaderAuthorization); + httpHeaders.add(X_FROM_APP_ID, aaiApiId); + httpHeaders.add("Accept", "application/json"); + httpHeaders.add("Content-Type", "application/json"); + return httpHeaders; + } + + + public boolean isTenantIdPresentInAAI() { + StringBuilder callURL = new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_TENANTS_PATH); + String callUrlFormated = callURL.toString().replace("$onap.lcpCloudRegionId", lcpCloudRegionId); + callUrlFormated = callUrlFormated.replace("$onap.cloudOwner", cloudOwner); + + ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI(), null); + if (response != null) { + LinkedHashMap body = (LinkedHashMap) response.getBody(); + List<LinkedHashMap> tenants = (List<LinkedHashMap>) body.get("tenant"); + for (LinkedHashMap tenant : tenants) { + if (tenantId.equalsIgnoreCase((String) tenant.get("tenant-id"))) { + return true; + } + } + } + return false; + } + + public boolean isCustomerPresentInAAI(String customerId) { + StringBuilder callURL = new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_CUSTOMER_PATH) + .append(customerId); + ResponseEntity<Object> response = callApiGet(callURL.toString(), buildRequestHeaderForAAI(), null); + if (response != null && response.getStatusCode().equals(HttpStatus.OK)) { + return true; + } + return false; + } + + + public void putCustomer(SubscriberInfo subscriberInfo) { + Map<String, String> param = new HashMap<>(); + param.put("global-customer-id", subscriberInfo.getGlobalSubscriberId()); + param.put("subscriber-name", subscriberInfo.getSubscriberName()); + param.put("subscriber-type", "BSS"); + String callURL = + aaiHost + OnapComponentsUrlPaths.AAI_GET_CUSTOMER_PATH + subscriberInfo.getGlobalSubscriberId(); + + putRequest(param, callURL, buildRequestHeaderForAAI()); + } + + + public LinkedHashMap getServicesInAaiForCustomer(String customerId) { + StringBuilder callURL = + new StringBuilder().append(aaiHost).append(OnapComponentsUrlPaths.AAI_GET_SERVICES_FOR_CUSTOMER_PATH); + String callUrlFormated = callURL.toString().replace("$customerId", customerId); + + ResponseEntity<Object> response = callApiGet(callUrlFormated, buildRequestHeaderForAAI(), null); + if (response != null && response.getStatusCode().equals(HttpStatus.OK)) { + return (LinkedHashMap) response.getBody(); + } + return null; + } + + public void putServiceType(String globalSubscriberId, String serviceName) { + Map<String, String> param = new HashMap<>(); + param.put("service-type", serviceName); + String callURL = aaiHost + OnapComponentsUrlPaths.AAI_PUT_SERVICE_FOR_CUSTOMER_PATH + serviceName; + String callUrlFormated = callURL.toString().replace("$customerId", globalSubscriberId); + putRequest(param, callUrlFormated, buildRequestHeaderForAAI()); + } + + + private void putRequest(Map<String, String> param, String callUrl, HttpHeaders httpHeaders) { + try { + ResponseEntity<Object> response = + restTemplate.exchange(callUrl, HttpMethod.PUT, new HttpEntity<>(param, httpHeaders), Object.class); + LOGGER.info("response status : " + response.getStatusCodeValue()); + if (!response.getStatusCode().equals(HttpStatus.CREATED)) { + LOGGER.warn("HTTP call on " + callUrl + " returns " + response.getStatusCodeValue() + ", " + + response.getBody().toString()); + } + } catch (BackendFunctionalException e) { + LOGGER.error("error on calling " + callUrl + " ," + e); + } + } + + private ResponseEntity<Object> callApiGet(String callURL, HttpHeaders httpHeaders, Map<String, String> param) { + + + try { + + UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(callURL); + if (param != null) { + for (String paramName : param.keySet()) { + builder.queryParam(paramName, param.get(paramName)); + } + } + String uriBuilder = builder.build().encode().toUriString(); + + + ResponseEntity<Object> response = + restTemplate.exchange(uriBuilder, HttpMethod.GET, new HttpEntity<>(httpHeaders), Object.class); + LOGGER.debug("response body : " + response.getBody().toString()); + LOGGER.info("response status : " + response.getStatusCodeValue()); + if (!response.getStatusCode().equals(HttpStatus.OK)) { + LOGGER.warn("HTTP call on " + callURL + " returns " + response.getStatusCodeValue() + ", " + + response.getBody().toString()); + } + return response; + + } catch (BackendFunctionalException e) { + LOGGER.error("error on calling " + callURL + " ," + e); + return null; + } + } + + +} |