package au.org.aurin.wif.restclient.suitability;
import static au.org.aurin.wif.io.RestAPIConstants.HEADER_USER_ID_KEY;
import static au.org.aurin.wif.io.RestUtil.removeTrailingSlash;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.validation.BindException;
import org.springframework.web.client.RestTemplate;
import au.org.aurin.wif.controller.OWIURLs;
import au.org.aurin.wif.exception.config.WifInvalidConfigException;
import au.org.aurin.wif.exception.validate.WifInvalidInputException;
import au.org.aurin.wif.io.ServiceException;
import au.org.aurin.wif.model.suitability.SuitabilityLU;
/**
* The Class SuitabilityLUServiceClientImpl.
*/
public class SuitabilityLUServiceClientImpl implements
SuitabilityLUServiceClient {
/** The url. */
private String url;
/** The rest template. */
@Autowired
private RestTemplate restTemplate;
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#setUrl(java.lang
* .String)
*/
public void setUrl(final String url) {
this.url = url;
}
/*
* (non-Javadoc)
* @see au.org.aurin.wif.restclient.SuitabilityLUServiceClient#
* getSuitabilityLUsForProject(java.lang.String, java.lang.String)
*/
public List<SuitabilityLU> getSuitabilityLUsForProject(final String roleId,
final String projectId) throws WifInvalidInputException {
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<List> response = restTemplate.exchange(
removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + projectId
+ "/suitabilityLUs", 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 + "/" + roleId
+ "/" + projectId + "/suitabilityLUs.");
}
return response.getBody();
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#getSuitabilityLU
* (java.lang.String, java.lang.String, java.lang.String)
*/
public SuitabilityLU getSuitabilityLU(final String roleId,
final String projectId, final String id) throws WifInvalidInputException,
WifInvalidConfigException {
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<SuitabilityLU> response = restTemplate.exchange(
removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + projectId
+ "/suitabilityLUs/" + id, HttpMethod.GET, requestEntity,
SuitabilityLU.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 + "/" + roleId
+ "/" + projectId + "/suitabilityLUs/" + id + ".");
}
return response.getBody();
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#createSuitabilityLU
* (java.lang.String, java.lang.String,
* au.org.aurin.wif.model.suitability.SuitabilityLU)
*/
public String createSuitabilityLU(final String roleId,
final String projectId, final SuitabilityLU suitabilityLU)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add(HEADER_USER_ID_KEY, roleId);
final HttpEntity<Object> requestEntity = new HttpEntity<Object>(
suitabilityLU, headers);
final ResponseEntity<SuitabilityLU> response = restTemplate.exchange(
removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + projectId
+ "/suitabilityLUs/", HttpMethod.POST, requestEntity,
SuitabilityLU.class);
if (response.getStatusCode() != HttpStatus.CREATED) {
throw new ServiceException("HTTP Response Status Code: "
+ response.getStatusCode()
+ " was thrown while creating a SuitabilityLU.");
}
final SuitabilityLU persistedSuitabilityLU = response.getBody();
return persistedSuitabilityLU.getId().toString();
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#updateSuitabilityLU
* (java.lang.String, java.lang.String, java.lang.String,
* au.org.aurin.wif.model.suitability.SuitabilityLU)
*/
public void updateSuitabilityLU(final String roleId, final String projectId,
final String id, final SuitabilityLU suitabilityLU)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
final MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add(HEADER_USER_ID_KEY, roleId);
final HttpEntity<Object> requestEntity = new HttpEntity<Object>(
suitabilityLU, headers);
restTemplate.exchange(removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI
+ "/" + projectId + "/suitabilityLUs/" + id, HttpMethod.PUT,
requestEntity, null);
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#deleteSuitabilityLU
* (java.lang.String, java.lang.String, java.lang.String)
*/
public void deleteSuitabilityLU(final String roleId, final String projectId,
final String id) throws WifInvalidInputException {
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
+ "/" + projectId + "/suitabilityLUs/" + id, HttpMethod.DELETE,
requestEntity, null);
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#addAssociatedLU(
* java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
public void addAssociatedLU(final String roleId, final String projectId,
final String suitabilityLUId, final String id)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
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
+ "/" + projectId + "/suitabilityLUs/" + suitabilityLUId
+ "/associatedLUs/" + id, HttpMethod.PUT, requestEntity, null);
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#deleteAssociatedLU
* (java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
public void deleteAssociatedLU(final String roleId, final String projectId,
final String suitabilityLUId, final String id)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
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
+ "/" + projectId + "/suitabilityLUs/" + suitabilityLUId
+ "/associatedLUs/" + id, HttpMethod.DELETE, requestEntity, null);
}
/*
* (non-Javadoc)
* @see
* au.org.aurin.wif.restclient.SuitabilityLUServiceClient#getAssociatedLUs
* (java.lang.String, java.lang.String, java.lang.String)
*/
public List<String> getAssociatedLUs(final String roleId,
final String projectId, final String suitabilityLUId)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
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<List> response = restTemplate.exchange(
removeTrailingSlash(url) + OWIURLs.PROJECT_SVC_URI + "/" + projectId
+ "/suitabilityLUs/" + suitabilityLUId + "/associatedLUs",
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 + "/" + roleId
+ "/" + projectId + "/suitabilityLUs/" + suitabilityLUId
+ "/associatedLUs.");
}
return response.getBody();
}
}