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.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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.Status; import org.opentestsystem.delivery.testadmin.domain.TestStatus; import org.opentestsystem.delivery.testadmin.domain.TestStatusRequest; import org.opentestsystem.delivery.testadmin.domain.search.TestStatusSearchRequest; import org.opentestsystem.delivery.testadmin.persistence.validator.TestStatusValidator; import org.opentestsystem.delivery.testadmin.service.TestStatusService; import org.opentestsystem.shared.exception.LocalizedException; import org.opentestsystem.shared.exception.RestException; import org.opentestsystem.shared.search.domain.SearchResponse; 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.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 TestStatusController extends TestAdminBaseController { @Autowired private TestStatusService testStatusService; @Autowired private TestStatusValidator statusValidator; @Override @InitBinder protected void initBinder(final WebDataBinder binder) { if (binder.getTarget() != null && List.class.isAssignableFrom(binder.getTarget().getClass())) { binder.setValidator(this.statusValidator); } } /** * Creates TestStatus. * @param TestStatus to be saved. * @param response HttpServletResponse. * @return TestStatus newly created teststatus object. */ @ResponseStatus(HttpStatus.CREATED) @RequestMapping(value = "/testStatus", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = { MediaType.APPLICATION_JSON_VALUE }) @Secured({ "ROLE_TestStatus Modify" }) @ResponseBody public TestStatus saveTestStatus(@RequestBody @Valid final TestStatus testStatus, final HttpServletResponse response) { TestStatus savedTestStatus = testStatusService.saveTestStatus(testStatus); response.setHeader("Location", savedTestStatus.getUrl()); return savedTestStatus; } /** * Updates testStatus. * * @param testStatus to be saved. * @param response HttpServletResponse. * */ @ResponseStatus(HttpStatus.OK) @RequestMapping(value = "/testStatus", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_TestStatus Modify" }) public void updateTestStatus(@Valid @RequestBody final List<TestStatusRequest> statusRequests) { List<TestStatus> statusList = new ArrayList<TestStatus>(); List<TestStatus> status = TestStatusRequest.converToTestStatus(statusRequests); if (status != null) { for (TestStatus stat : status) { TestStatus statObj = testStatusService.findByAlternateId(stat.getStudentId(), stat.getStateAbbreviation(), stat.getAssessmentId(), stat.getOpportunity()); if (statObj != null) { statObj.setOpportunity(stat.getOpportunity()); statObj.setStatus(stat.getStatus()); if (stat.getStatus() == Status.STARTED) { statObj.setActualStart(stat.getActualStart()); statObj.setActualComplete(null); } else if (stat.getStatus() == Status.COMPLETED) { statObj.setActualComplete(stat.getActualComplete()); statObj.setActualStart(null); } statusList.add(statObj); } else { statusList.add(stat); } } testStatusService.saveTestStatuses(statusList); } } /** * Updates testStatus. * * @param id testStatus mongoid * @param testStatus * @param response HttpServletResponse * */ @ResponseStatus(HttpStatus.OK) @RequestMapping(value = "/testStatus/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_TestStatus Modify" }) public void editTestStatus(@PathVariable final String id, @Valid @RequestBody final TestStatus status, final HttpServletResponse response) { if (status == null || StringUtils.isEmpty(status.getId()) || !id.equals(status.getId())) { throw new LocalizedException("nonentity.invalid.id", new String[] { "TestStatus" }); } else { TestStatus savedTestStatus = testStatusService.getTestStatus(id); if (savedTestStatus != null) { savedTestStatus.setStatus(status.getStatus()); testStatusService.saveTestStatus(savedTestStatus); } } } /** * Can query the /testStatus endpoint with query parameters in a querystring. * @param request HttpServletRequest * @param response HttpServletResponse * @return SearchResponse<TestStatus> */ @RequestMapping(value = "/testStatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @Secured({ "ROLE_TestStatus Read" }) @ResponseBody public SearchResponse<TestStatus> searchTestStatuses(final HttpServletRequest request, final HttpServletResponse response) { Map<String, String[]> inRequestMap = new HashMap<String, String[]>(request.getParameterMap()); if (inRequestMap.containsKey(TestStatusSearchRequest.KEY_TEST_ID)) { inRequestMap.put(TestStatusSearchRequest.SEARCH_KEY_ASSESSMENT_ID, inRequestMap.get(TestStatusSearchRequest.KEY_TEST_ID)); inRequestMap.remove(TestStatusSearchRequest.KEY_TEST_ID); } TestStatusSearchRequest searchRequest = new TestStatusSearchRequest(inRequestMap); SearchResponse<TestStatus> searchResponse; if (searchRequest.isValid()) { searchResponse = testStatusService.searchTestStatuses(searchRequest); } else { throw new RestException("teststatus.search.invalidSearchCriteria"); } return searchResponse; } }