package au.org.aurin.wif.restclient; import static au.org.aurin.wif.io.RestAPIConstants.HEADER_USER_ID_KEY; import static au.org.aurin.wif.io.RestUtil.removeTrailingSlash; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import au.org.aurin.wif.controller.OWIURLs; import au.org.aurin.wif.io.ServiceException; import au.org.aurin.wif.model.WifProject; import au.org.aurin.wif.model.reports.ProjectReport; /** * The Class ProjectServiceClientImpl. */ public class ProjectServiceClientImpl implements ProjectServiceClient { /** The url. */ private String url; /** The rest template. */ @Autowired private RestTemplate restTemplate; /** The Constant LOGGER. */ private static final Logger LOGGER = LoggerFactory .getLogger(ProjectServiceClientImpl.class); /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#setUrl(java.lang.String) */ public void setUrl(final String url) { this.url = url; } /* * (non-Javadoc) * @see au.org.aurin.wif.restclient.ProjectServiceClient#getVersion() */ public Map<String, String> getVersion() { final ResponseEntity<Map> response = restTemplate.getForEntity( removeTrailingSlash(url) + "/version", Map.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + "/version."); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getProjectRevision(java * .lang.String, java.lang.String) */ public String getProjectRevision(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<String> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/revision", HttpMethod.GET, requestEntity, String.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/revision"); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getProject(java.lang.String * , java.lang.String) */ public HashMap<String, String> getStatus(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<HashMap> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/status", HttpMethod.GET, requestEntity, HashMap.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "."); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getProject(java.lang.String * , java.lang.String) */ public WifProject getProject(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<WifProject> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id, HttpMethod.GET, requestEntity, WifProject.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "."); } return response.getBody(); } public boolean downloadZip(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<Object> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/zipUAZ", HttpMethod.GET, requestEntity, null); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/zipUAZ"); } return true; } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#updateProject(java.lang * .String, java.lang.String, au.org.aurin.wif.model.WifProject) */ public void updateProject(final String roleId, final String id, final WifProject wifProject) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(wifProject, headers); restTemplate.exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id, HttpMethod.PUT, requestEntity, null); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#setupAllocationConfig( * java.lang.String, java.lang.String, au.org.aurin.wif.model.WifProject) */ public void setupAllocationConfig(final String roleId, final String id, final WifProject wifProject) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(wifProject, headers); restTemplate.exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/allocation/setup", HttpMethod.PUT, requestEntity, null); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#deleteProject(java.lang * .String, java.lang.String) */ public void deleteProject(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); restTemplate.exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id, HttpMethod.DELETE, requestEntity, null); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#updateUAZ(java.lang.String * , java.util.List) */ public void finalizeUAZ(final String roleId, final String id, final List<String> factorsList) { final String urlquery = removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/UAZ"; LOGGER.debug("Using link: " + urlquery); final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<List<String>> requestEntity = new HttpEntity<List<String>>( factorsList, headers); final ResponseEntity<Object> response = restTemplate.exchange(urlquery, HttpMethod.PUT, requestEntity, null); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException( "HTTP Response Status Code: " + response.getStatusCode() + " was thrown while accessing the ProjectServiceClientImpl.finalizeUAZ(roleId, projectId)."); } } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#createProject(java.lang * .String, au.org.aurin.wif.model.WifProject) */ public String createProject(final String roleId, final WifProject project) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); LOGGER.debug("Using link: " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/"); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(project, headers); final ResponseEntity<WifProject> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/", HttpMethod.POST, requestEntity, WifProject.class); if (response.getStatusCode() != HttpStatus.CREATED) { throw new ServiceException( "HTTP Response Status Code: " + response.getStatusCode() + " was thrown while accessing the ProjectServiceClientImpl.createProject(roleId, projectId)."); } return response.getBody().getId().toString(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getUAZAttributes(java. * lang.String) */ public List<String> getUAZAttributes(final String roleId, final String id) { // ResponseEntity<List> response = restTemplate.getForEntity( // removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id // + "/unionAttributes", List.class); final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); LOGGER.debug("Using link: " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/"); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<List> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/unionAttributes", HttpMethod.GET, requestEntity, List.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/unionAttributes."); } return response.getBody(); } /* * (non-Javadoc) * @see au.org.aurin.wif.restclient.ProjectServiceClient# * getDistinctEntriesForUAZAttribute(java.lang.String, java.lang.String) */ public List<String> getDistinctEntriesForUAZAttribute(final String roleId, final String id, final String attr) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); LOGGER.debug("Using link: " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/"); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<List> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/unionAttributes/" + attr + "/values", HttpMethod.GET, requestEntity, List.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/unionAttribute/" + attr + "/values."); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getAllProjects(java.lang * .String) */ public List<WifProject> getAllProjects(final String role) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, role); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<List> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/", HttpMethod.GET, requestEntity, List.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/"); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getProjectConfiguration * (java.lang.String, java.lang.String) */ public WifProject getProjectConfiguration(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<WifProject> response = restTemplate .exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/configuration", HttpMethod.GET, requestEntity, WifProject.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/configuration" + "."); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#restoreProject(java.lang * .String, au.org.aurin.wif.model.WifProject) */ public String restoreProject(final String roleId, final ProjectReport projectReport) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); LOGGER.debug("Using link: " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/restore"); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>( projectReport, headers); final ResponseEntity<WifProject> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/restore", HttpMethod.POST, requestEntity, WifProject.class); if (response.getStatusCode() != HttpStatus.CREATED) { throw new ServiceException( "HTTP Response Status Code: " + response.getStatusCode() + " was thrown while accessing the ProjectServiceClientImpl.restoreProject(roleId, projectId)."); } return response.getBody().getId().toString(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#deleteProject(java.lang * .String, java.lang.String, boolean) */ public void deleteProject(final String roleId, final String id, final boolean deleteUAZ) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); String option = ""; if (!deleteUAZ) { option = "/keepUAZ"; } restTemplate.exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + option, HttpMethod.DELETE, requestEntity, null); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getProjectReport(java. * lang.String, java.lang.String) */ public ProjectReport getProjectReport(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<ProjectReport> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/report", HttpMethod.GET, requestEntity, ProjectReport.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "."); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#getUploadStatus(java.lang * .String, java.lang.String) */ public HashMap<String, String> getUploadStatus(final String roleId, final String id) { final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<HashMap> response = restTemplate.exchange( removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/upload/status", HttpMethod.GET, requestEntity, HashMap.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against " + removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/upload/status"); } return response.getBody(); } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#uploadUAZ(java.lang.String * , java.lang.String) */ public void uploadUAZ(final String roleId, final String id) { final String urlquery = removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + id + "/upload"; LOGGER.debug("Using link: " + urlquery); final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>(); headers.add(HEADER_USER_ID_KEY, roleId); final HttpEntity<Object> requestEntity = new HttpEntity<Object>(headers); final ResponseEntity<Object> response = restTemplate.exchange(urlquery, HttpMethod.POST, requestEntity, null); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode()); } } /* * (non-Javadoc) * @see * au.org.aurin.wif.restclient.ProjectServiceClient#uploadZip(java.io.File) */ public String uploadZip(final File input) { final MultiValueMap<String, HttpEntity<FileSystemResource>> parts = new LinkedMultiValueMap<String, HttpEntity<FileSystemResource>>(); final HttpHeaders fileHeaders = new HttpHeaders(); fileHeaders.add("Content-type", MediaType.MULTIPART_FORM_DATA_VALUE); final FileSystemResource r = new FileSystemResource(input); final HttpEntity<FileSystemResource> sample_file = new HttpEntity<FileSystemResource>( r, fileHeaders); parts.add("file", sample_file); final HttpHeaders reqheaders = new HttpHeaders(); final HttpEntity<MultiValueMap<String, HttpEntity<FileSystemResource>>> ereq = new HttpEntity<MultiValueMap<String, HttpEntity<FileSystemResource>>>( parts, reqheaders); final ResponseEntity<String> response = restTemplate.exchange( removeTrailingSlash(url) + "/saveZip", HttpMethod.POST, ereq, String.class); if (response.getStatusCode() != HttpStatus.OK) { throw new ServiceException("HTTP Response Status Code: " + response.getStatusCode() + " was thrown while running a request against /saveZip for " + input.getName()); } return response.getBody(); } }