package gov.samhsa.consent2share.web.controller; import gov.samhsa.consent2share.common.AuthenticatedUser; import gov.samhsa.consent2share.common.UserContext; import gov.samhsa.consent2share.service.dto.ValueSetCategoryDto; import gov.samhsa.consent2share.service.valueset.ValueSetCategoryNotFoundException; import gov.samhsa.consent2share.service.valueset.ValueSetCategoryService; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.mvc.support.RedirectAttributes; @Controller @SessionAttributes("valueSetCategory") @RequestMapping("/sysadmin") public class ValueSetCategoryController extends AbstractNodeController { private static final Logger LOGGER = LoggerFactory .getLogger(ValueSetController.class); protected static final String ERROR_MESSAGE_KEY_DELETED_VALUESETCATEGORY_WAS_NOT_FOUND = "Deleted valueSetCategory was not found."; protected static final String ERROR_MESSAGE_KEY_EDITED_VALUESETCATEGORY_WAS_NOT_FOUND = "Edited valueSetCategory was not found."; protected static final String MODEL_ATTIRUTE_VALUESETCATEGORYDTO = "valueSetCategoryDto"; protected static final String MODEL_ATTRIBUTE_VALUESETCATEGORYDTOS = "valueSetCategoryDtos"; protected static final String VALUESETCATEGORY_ADD_FORM_VIEW = "views/sysadmin/valueSetCategoryAdd"; protected static final String VALUESETCATEGORY_EDIT_FORM_VIEW = "views/sysadmin/valueSetCategoryEdit"; protected static final String VALUESETCATEGORY_LIST_VIEW = "views/sysadmin/valueSetCategoryList"; protected static final String REQUEST_MAPPING_LIST = "/valueSetCategoryList"; protected static final String REDIRECT_MAPPING_LIST = "../valueSetCategoryList"; protected static final String REDIRECT_ID_MAPPING_LIST = "../../valueSetCategoryList"; @Resource private ValueSetCategoryService valueSetCategoryService; /** The user context. */ @Autowired UserContext userContext; /** * Processes create valueSetCategory requests. * * @param model * @return The name of the create valueSetCategory form view. */ @RequestMapping(value = REQUEST_MAPPING_LIST, method = RequestMethod.GET) public String showCreateValueSetForm(Model model, HttpServletRequest request) { LOGGER.debug("Rendering Value Set Category list page"); List<ValueSetCategoryDto> valueSetCategories = valueSetCategoryService .findAll(); model.addAttribute(MODEL_ATTRIBUTE_VALUESETCATEGORYDTOS, valueSetCategories); return VALUESETCATEGORY_LIST_VIEW; } /** * Processes the submissions of create valueSetCategory form. * * @param created * The information of the created valueSetCategories. * @param bindingResult * @param attributes * @return */ @RequestMapping(value = "valueSetCategoryAdd.html", method = RequestMethod.GET) public String valueSetCategoryAddForm(Model model, HttpServletRequest request) { LOGGER.debug("Rendering Value Set Category Add Form "); AuthenticatedUser currentUser = userContext.getCurrentUser(); model.addAttribute("currentUser", currentUser); ValueSetCategoryDto valueSetCategoryDto = (ValueSetCategoryDto) model .asMap().get(MODEL_ATTIRUTE_VALUESETCATEGORYDTO); model.addAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO, (valueSetCategoryDto == null) ? new ValueSetCategoryDto() : valueSetCategoryDto); return VALUESETCATEGORY_ADD_FORM_VIEW; } /** * Processes the submissions of create valueSetCategory form. * * @param created * The information of the created valueSetCategories. * @param bindingResult * @param attributes * @return */ @RequestMapping(value = "/valueSetCategory/create", method = RequestMethod.POST) public String submitCreateValueSetForm( @Valid @ModelAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO) ValueSetCategoryDto created, RedirectAttributes redirectAttribute, Model model) { LOGGER.debug("Create valueSetCategory form was submitted with information: " + created); AuthenticatedUser currentUser = userContext.getCurrentUser(); String notification = ""; ValueSetCategoryDto valueSetCategoryDto; String path = REDIRECT_MAPPING_LIST; try { created.setUserName(currentUser.getUsername()); valueSetCategoryDto = valueSetCategoryService.create(created); created.setError(false); created.setSuccessMessage("Value Set Category with code:" + valueSetCategoryDto.getCode() + " and Name: " + valueSetCategoryDto.getName() + " is Added Successfully"); } catch (DataIntegrityViolationException ex) { LOGGER.info(ex.getLocalizedMessage()); Throwable t = ex.getCause(); String message = null; if (t != null) { message = "Cause: " + t.getMessage(); } created.setError(true); created.setErrorMessage("Value Set Category is not Added " + message); path = "../valueSetCategoryAdd.html"; } model.addAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO, created); redirectAttribute.addFlashAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO, created); model.addAttribute("notification", notification); return createRedirectViewPath(path); } /** * Processes delete valueSetCategory requests. * * @param id * The id of the deleted valueSetCategory. * @param attributes * @return */ @RequestMapping(value = "/valueSetCategory/delete/{id}", method = RequestMethod.POST) public String delete(@PathVariable("id") Long id, RedirectAttributes redirectAttribute) { LOGGER.debug("Deleting valueSetCategory with id: " + id); ValueSetCategoryDto deleted = new ValueSetCategoryDto(); try { deleted = valueSetCategoryService.delete(id); deleted.setError(false); deleted.setSuccessMessage(" ValueSetCategory with Code: " + deleted.getCode() + " and Name: " + deleted.getName() + " is deleted Successfully. "); } catch (ValueSetCategoryNotFoundException e) { LOGGER.debug("No valueSetCategory found with id: " + id); deleted.setError(true); deleted.setErrorMessage(ERROR_MESSAGE_KEY_DELETED_VALUESETCATEGORY_WAS_NOT_FOUND); } redirectAttribute.addFlashAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO, deleted); return createRedirectViewPath(REDIRECT_ID_MAPPING_LIST); } /** * Processes edit valueSetCategory requests. * * @param id * The id of the edited valueSetCategory. * @param model * @param attributes * @return The name of the edit valueSetCategory form view. */ @RequestMapping(value = "/valueSetCategory/edit/{id}", method = RequestMethod.GET) public String showEditValueSetCategoryForm(@PathVariable("id") Long id, Model model, RedirectAttributes attributes) { LOGGER.debug("Rendering edit valueSetCategory form for valueSetCategory with id: " + id); ValueSetCategoryDto valueSetCategoryDto = valueSetCategoryService .findById(id); if (valueSetCategoryDto == null) { LOGGER.debug("No valueSetCategory found with id: " + id); valueSetCategoryDto = new ValueSetCategoryDto(); valueSetCategoryDto.setError(true); valueSetCategoryDto .setErrorMessage(ERROR_MESSAGE_KEY_EDITED_VALUESETCATEGORY_WAS_NOT_FOUND); return createRedirectViewPath(REDIRECT_ID_MAPPING_LIST); } model.addAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO, valueSetCategoryDto); return VALUESETCATEGORY_EDIT_FORM_VIEW; } /** * Processes the submissions of edit valueSetCategory form. * * @param updated * The information of the edited valueSetCategory. * @param bindingResult * @param attributes * @return */ @RequestMapping(value = "/valueSetCategory/edit/{id}", method = RequestMethod.POST) public String submitEditValueSetCategoryForm( @ModelAttribute(MODEL_ATTIRUTE_VALUESETCATEGORYDTO) ValueSetCategoryDto updated, @PathVariable("id") Long id) { LOGGER.debug("Edit valueSetCategory form was submitted with information: " + updated + id); try { AuthenticatedUser currentUser = userContext.getCurrentUser(); updated.setUserName(currentUser.getUsername()); updated.setId(id); updated = valueSetCategoryService.update(updated); updated.setError(false); updated.setSuccessMessage("Value Set Category with Code: " + updated.getCode() + " and Name: " + updated.getName() + " is Edited Successfully"); } catch (ValueSetCategoryNotFoundException e) { LOGGER.debug("No valueSetCategory was found with id: " + updated.getId()); updated.setError(true); updated.setErrorMessage("Edited Value Set Category is not found"); } return createRedirectViewPath(REDIRECT_ID_MAPPING_LIST); } /** * This setter method should only be used by unit tests * * @param valueSetCategoryService */ protected void setValueSetCategoryService( ValueSetCategoryService valueSetCategoryService) { this.valueSetCategoryService = valueSetCategoryService; } }