Java tutorial
/******************************************************************************* * Educational Online Test Delivery System * Copyright (c) 2013 American Institutes for Research * * Distributed under the AIR Open Source License, Version 1.0 * See accompanying file AIR-License-1_0.txt or at * http://www.smarterapp.org/documents/American_Institutes_for_Research_Open_Source_Software_License.pdf ******************************************************************************/ package org.opentestsystem.delivery.testadmin.rest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.apache.commons.lang.StringUtils; import org.opentestsystem.delivery.testadmin.domain.Facility; import org.opentestsystem.delivery.testadmin.domain.TestAdminBase; import org.opentestsystem.delivery.testadmin.domain.search.FacilitySearchRequest; import org.opentestsystem.delivery.testadmin.persistence.validator.FacilityValidator; import org.opentestsystem.delivery.testadmin.service.FacilityService; import org.opentestsystem.delivery.testreg.domain.DeleteOperation; import org.opentestsystem.delivery.testreg.upload.validation.ValidatedPathVariable; import org.opentestsystem.shared.exception.LocalizedException; import org.opentestsystem.shared.exception.RestException; import org.opentestsystem.shared.search.domain.SearchResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.security.access.annotation.Secured; import org.springframework.stereotype.Controller; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; 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; @Controller public class FacilityController extends TestAdminBaseController { private static final Logger LOGGER = LoggerFactory.getLogger(FacilityController.class); @Autowired private FacilityService facilityService; @Autowired private FacilityValidator facilityValidator; @InitBinder protected void initBinder(WebDataBinder binder) { if (binder.getTarget() != null && TestAdminBase.class.isAssignableFrom(binder.getTarget().getClass())) { binder.setValidator(this.facilityValidator); } } /** * Gets facility by facilityId. * @param facility id. * @return Facility object. */ @RequestMapping(value = "/facility/{facilityId}", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_Facility Read" }) @ResponseBody public Facility findFacilityById(@PathVariable final String facilityId) { LOGGER.debug("Finding facility for Id: " + facilityId); return facilityService.getFacility(facilityId); } /** * Creates Facility. * @param facility to be saved. * @param response HttpServletResponse. * @return Facility newly created facility object. */ @ResponseStatus(HttpStatus.CREATED) @RequestMapping(value = "/facility", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_Facility Modify" }) @ResponseBody public Facility saveFacility(@RequestBody @Valid final Facility facility, final HttpServletResponse response) { LOGGER.debug("Saving Facility"); Facility savedFacility = facilityService.saveFacility(facility); response.setHeader("Location", savedFacility.getUrl()); return savedFacility; } /** * Updates Facility. * @param facility to be saved. * @param response HttpServletResponse. * @return Facility updated facility object. */ @ResponseStatus(HttpStatus.OK) @RequestMapping(value = "/facility/{facilityId}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_Facility Modify" }) @ResponseBody public Facility updateFacility(@PathVariable final String facilityId, @RequestBody @Valid final Facility facility, final HttpServletResponse response) { if (facility == null || StringUtils.isEmpty(facility.getId()) || !facilityId.equals(facility.getId())) { throw new LocalizedException("facility.invalid.id"); } else { Facility savedFacility = facilityService.saveFacility(facility); response.setHeader("Location", savedFacility.getUrl()); return savedFacility; } } /** * Removes Facility. * @param facilityId facility Id. */ @ResponseStatus(HttpStatus.NO_CONTENT) @RequestMapping(value = "/facility/{facilityId}", method = RequestMethod.DELETE) @Secured({ "ROLE_Facility Modify" }) public void removeFacilityById( @ValidatedPathVariable @Validated(DeleteOperation.class) final Facility facility) { String facilityId = facility.getId(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Removing facility with Id:" + facilityId); } facilityService.removeFacility(facilityId); } /** * Can query the /facility endpoint with query parameters in a querystring. * @param request HttpServletRequest * @param response HttpServletResponse * @return SearchResponse<Facility> */ @RequestMapping(value = "/facility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_Facility Read" }) @ResponseBody public SearchResponse<Facility> searchFacility(final HttpServletRequest request, final HttpServletResponse response) { FacilitySearchRequest searchRequest = new FacilitySearchRequest(request.getParameterMap()); SearchResponse<Facility> searchResponse; if (searchRequest.isValid()) { searchResponse = facilityService.searchFacilities(searchRequest); } else { throw new RestException("facility.search.invalidSearchCriteria"); } return searchResponse; } }