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 java.util.Date; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import org.apache.commons.lang.StringUtils; import org.joda.time.DateTime; import org.opentestsystem.delivery.testadmin.domain.FacilityAvailability; import org.opentestsystem.delivery.testadmin.domain.FacilityAvailability.FacilityTimeSlot; import org.opentestsystem.delivery.testadmin.domain.TestAdminBase; import org.opentestsystem.delivery.testadmin.domain.search.FacilityAvailabilitySearchRequest; import org.opentestsystem.delivery.testadmin.persistence.validator.FacilityAvailabilityValidator; import org.opentestsystem.delivery.testadmin.service.FacilityAvailabilityService; 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.format.annotation.DateTimeFormat; 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.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.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @Controller public class FacilityAvailabilityController extends TestAdminBaseController { private static final Logger LOGGER = LoggerFactory.getLogger(FacilityAvailabilityController.class); @Autowired private FacilityAvailabilityService facilityAvailabilityService; @Autowired private FacilityAvailabilityValidator facilityAvailabilityValidator; @InitBinder protected void initBinder(WebDataBinder binder) { if (binder.getTarget() != null && TestAdminBase.class.isAssignableFrom(binder.getTarget().getClass())) { binder.setValidator(this.facilityAvailabilityValidator); } } /** * Gets facilityAvailability by facilityAvailabilityId. * @param facilityAvailability id. * @return FacilityAvailability object. */ @RequestMapping(value = "/facilityAvailability/{facilityAvailabilityId}", method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_FacilityAvailability Read" }) @ResponseBody public FacilityAvailability findFacilityAvailabilityById(@PathVariable final String facilityAvailabilityId) { LOGGER.debug("Finding facilityAvailability for Id: " + facilityAvailabilityId); return facilityAvailabilityService.getFacilityAvailability(facilityAvailabilityId); } /** * Creates FacilityAvailability. * @param facilityAvailability to be saved. * @param response HttpServletResponse. * @return FacilityAvailability newly created facilityAvailability object. */ @ResponseStatus(HttpStatus.CREATED) @RequestMapping(value = "/facilityAvailability", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_FacilityAvailability Modify" }) @ResponseBody public FacilityAvailability saveFacilityAvailability( @RequestBody @Valid final FacilityAvailability facilityAvailability, final HttpServletResponse response) { LOGGER.debug("Saving FacilityAvailability"); FacilityAvailability savedFacilityAvailability = facilityAvailabilityService .saveFacilityAvailability(facilityAvailability); response.setHeader("Location", savedFacilityAvailability.getUrl()); return savedFacilityAvailability; } /** * Updates FacilityAvailability. * @param facilityAvailability to be saved. * @param response HttpServletResponse. * @return FacilityAvailability updated facilityAvailability object. */ @ResponseStatus(HttpStatus.OK) @RequestMapping(value = "/facilityAvailability/{facilityAvailabilityId}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_FacilityAvailability Modify" }) @ResponseBody public FacilityAvailability updateFacilityAvailability(@PathVariable final String facilityAvailabilityId, @RequestBody @Valid final FacilityAvailability facilityAvailability, final HttpServletResponse response) { if (facilityAvailability == null || StringUtils.isEmpty(facilityAvailability.getId()) || !facilityAvailabilityId.equals(facilityAvailability.getId())) { throw new LocalizedException("facilityAvailability.invalid.id"); } else { FacilityAvailability savedFacilityAvailability = facilityAvailabilityService .saveFacilityAvailability(facilityAvailability); response.setHeader("Location", savedFacilityAvailability.getUrl()); return savedFacilityAvailability; } } /** * Removes FacilityAvailability. * @param facilityAvailabilityId facilityAvailability Id. */ @ResponseStatus(HttpStatus.NO_CONTENT) @RequestMapping(value = "/facilityAvailability/{facilityAvailabilityId}", method = RequestMethod.DELETE) @Secured({ "ROLE_FacilityAvailability Modify" }) public void removeFacilityAvailabilityById(@PathVariable final String facilityAvailabilityId) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("Removing facilityAvailability with Id:" + facilityAvailabilityId); } facilityAvailabilityService.removeFacilityAvailability(facilityAvailabilityId); } /** * Can query the /facilityAvailability endpoint with query parameters in a querystring. * @param request HttpServletRequest * @param response HttpServletResponse * @return SearchResponse<FacilityAvailability> */ @RequestMapping(value = "/facilityAvailability", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_FacilityAvailability Read" }) @ResponseBody public SearchResponse<FacilityAvailability> searchFacilityAvailability(final HttpServletRequest request, final HttpServletResponse response) { FacilityAvailabilitySearchRequest searchRequest = new FacilityAvailabilitySearchRequest( request.getParameterMap()); SearchResponse<FacilityAvailability> searchResponse; if (searchRequest.isValid()) { searchResponse = facilityAvailabilityService.searchFacilityAvailabilities(searchRequest); } else { throw new RestException("facilityAvailability.search.invalidSearchCriteria"); } return searchResponse; } @RequestMapping(value = "/facilityAvailabilityTimeSlot", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_FacilityAvailability Read" }) @ResponseBody public FacilityTimeSlot findFacilityAvailabilityTimeSlot( @RequestParam(value = "scheduledDate", required = true) @DateTimeFormat(pattern = "yyyy-MM-dd") Date scheduledDate, @RequestParam(value = "timeSlotId", required = true) String timeSlotId, @RequestParam(value = "facilityId", required = true) String facilityId, @RequestParam(value = "institutionId", required = true) String institutionId) { return facilityAvailabilityService.getFacilityTimeSlot(facilityId, institutionId, new DateTime(scheduledDate.getTime()), timeSlotId); } }