package au.org.aurin.wif.controller.suitability;
import static au.org.aurin.wif.io.RestAPIConstants.HEADER_USER_ID_KEY;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindException;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import au.org.aurin.wif.controller.OWIURLs;
import au.org.aurin.wif.exception.config.WifInvalidConfigException;
import au.org.aurin.wif.exception.validate.InvalidLabelException;
import au.org.aurin.wif.exception.validate.WifInvalidInputException;
import au.org.aurin.wif.model.suitability.SuitabilityLU;
import au.org.aurin.wif.svc.suitability.SuitabilityLUService;
/**
* The Class SuitabilityLUController.
*/
@Controller
@RequestMapping(OWIURLs.PROJECT_SVC_URI)
public class SuitabilityLUController {
/**
* logger.
*/
private static final Logger LOGGER = LoggerFactory
.getLogger(SuitabilityLUController.class);
/** the service. */
@Resource
private SuitabilityLUService suitabilityLUService;
/**
* Sets the suitability lu service.
*
* @param suitabilityLUService
* the new suitability lu service
*/
public void setSuitabilityLUService(
final SuitabilityLUService suitabilityLUService) {
this.suitabilityLUService = suitabilityLUService;
}
// TODO Gerson to wrap the service calls in try-catch blocks so that we can
// log what sort of exceptions were thrown while accessing the service.
/**
* Gets the suitability l us for project.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @return the suitability l us for project
* @throws WifInvalidInputException
* the wif invalid input exception
*/
@RequestMapping(method = RequestMethod.GET, value = "/{projectId}/suitabilityLUs", produces = "application/json")
@ResponseStatus(HttpStatus.OK)
public @ResponseBody
List<SuitabilityLU> getSuitabilityLUsForProject(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId)
throws WifInvalidInputException {
LOGGER.info(
"*******>> getSuitabilityLUsForProject request for project id ={}",
projectId);
return suitabilityLUService.getSuitabilityLUs(projectId);
}
/**
* Gets the suitability lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param id
* the id
* @return the suitability lu
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.GET, value = "/{projectId}/suitabilityLUs/{id}", produces = "application/json")
@ResponseStatus(HttpStatus.OK)
public @ResponseBody
SuitabilityLU getSuitabilityLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("id") final String id) throws WifInvalidInputException,
WifInvalidConfigException {
LOGGER.info("*******>> getSuitabilityLU request for project id ={}",
projectId);
return suitabilityLUService.getSuitabilityLU(id);
}
/**
* Creates the suitability lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param suitabilityLU
* the suitability lu
* @param response
* the response
* @return the suitability lu
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws BindException
* the bind exception
* @throws WifInvalidConfigException
* the wif invalid config exception
* @throws InvalidLabelException
*/
@RequestMapping(method = RequestMethod.POST, value = "/{projectId}/suitabilityLUs", consumes = "application/json", produces = "application/json")
@ResponseStatus(HttpStatus.CREATED)
public @ResponseBody
SuitabilityLU createSuitabilityLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@RequestBody final SuitabilityLU suitabilityLU,
final HttpServletResponse response) throws WifInvalidInputException,
BindException, WifInvalidConfigException, InvalidLabelException {
LOGGER.info("*******>> createSuitabilityLU request for project id ={}",
projectId);
return suitabilityLUService.createSuitabilityLU(suitabilityLU, projectId);
}
/**
* Update suitability lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param id
* the id
* @param suitabilityLU
* the suitability lu
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws BindException
* the bind exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.PUT, value = "/{projectId}/suitabilityLUs/{id}", consumes = "application/json")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void updateSuitabilityLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("id") final String id,
@RequestBody final SuitabilityLU suitabilityLU)
throws WifInvalidInputException, BindException, WifInvalidConfigException {
LOGGER.info("*******>> updateSuitabilityLU request for project id ={}",
projectId);
suitabilityLU.setId(id);
suitabilityLUService.updateSuitabilityLU(suitabilityLU, projectId);
}
/**
* Delete suitability lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param id
* the id
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/{projectId}/suitabilityLUs/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteSuitabilityLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("id") final String id) throws WifInvalidInputException,
WifInvalidConfigException {
LOGGER.info("*******>> deleteSuitabilityLU request for project id ={}",
projectId);
suitabilityLUService.deleteSuitabilityLU(id, projectId);
}
/**
* Adds the associated lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param suitabilityLUId
* the suitability lu id
* @param id
* the id
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws BindException
* the bind exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.PUT, value = "/{projectId}/suitabilityLUs/{suitabilityLUId}/associatedLUs/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void addAssociatedLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("suitabilityLUId") final String suitabilityLUId,
@PathVariable("id") final String id) throws WifInvalidInputException,
BindException, WifInvalidConfigException {
LOGGER.info("*******>> addAssociatedLU request for project id ={}",
projectId);
suitabilityLUService.addAssociatedLU(id, suitabilityLUId, projectId);
}
/**
* Delete associated lu.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param suitabilityLUId
* the suitability lu id
* @param id
* the id
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws BindException
* the bind exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.DELETE, value = "/{projectId}/suitabilityLUs/{suitabilityLUId}/associatedLUs/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteAssociatedLU(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("suitabilityLUId") final String suitabilityLUId,
@PathVariable("id") final String id) throws WifInvalidInputException,
BindException, WifInvalidConfigException {
LOGGER.info("*******>> deleteAssociatedLU request for project id ={}",
projectId);
suitabilityLUService.deleteAssociatedLU(id, suitabilityLUId, projectId);
}
/**
* Gets the associated lus.
*
* @param roleId
* the role id
* @param projectId
* the project id
* @param suitabilityLUId
* the suitability lu id
* @return the associated l us
* @throws WifInvalidInputException
* the wif invalid input exception
* @throws WifInvalidConfigException
* the wif invalid config exception
*/
@RequestMapping(method = RequestMethod.GET, value = "/{projectId}/suitabilityLUs/{suitabilityLUId}/associatedLUs")
public @ResponseBody
List<String> getAssociatedLUs(
@RequestHeader(HEADER_USER_ID_KEY) final String roleId,
@PathVariable("projectId") final String projectId,
@PathVariable("suitabilityLUId") final String suitabilityLUId)
throws WifInvalidInputException, WifInvalidConfigException {
LOGGER.info("*******>> getAssociatedLUs request for project id ={}",
projectId);
return suitabilityLUService.getAssociatedLUs(suitabilityLUId, projectId);
}
}