package edu.asu.spring.quadriga.web.dictionary; import java.security.Principal; import java.util.Locale; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; 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.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.servlet.ModelAndView; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import edu.asu.spring.quadriga.aspects.annotations.AccessPolicies; import edu.asu.spring.quadriga.aspects.annotations.CheckedElementType; import edu.asu.spring.quadriga.aspects.annotations.ElementAccessPolicy; import edu.asu.spring.quadriga.domain.dictionary.IDictionary; import edu.asu.spring.quadriga.domain.impl.dictionary.Dictionary; import edu.asu.spring.quadriga.exceptions.QuadrigaAccessException; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.service.dictionary.IDictionaryManager; import edu.asu.spring.quadriga.validator.DictionaryValidator; import edu.asu.spring.quadriga.web.login.RoleNames; @Controller public class ModifyDictionaryController { @Autowired private IDictionaryManager dictManager; @Autowired private DictionaryValidator validator; @Autowired private MessageSource messageSource; private static final Logger logger = LoggerFactory.getLogger(ModifyDictionaryController.class); @InitBinder protected void initBinder(WebDataBinder validateBinder) { validateBinder.setValidator(validator); } /** * This method retrieves the dictionary details for updation * * @param dictionaryid * @param principal * @return ModelAndView * @throws QuadrigaStorageException */ @AccessPolicies({ @ElementAccessPolicy(type = CheckedElementType.DICTIONARY, paramIndex = 1, userRole = { RoleNames.ROLE_DICTIONARY_COLLABORATOR_ADMIN }) }) @RequestMapping(value = "auth/dictionaries/updatedictionary/{dictionaryid}", method = RequestMethod.GET) public ModelAndView updateDictionaryDetails(@PathVariable("dictionaryid") String dictionaryid, Principal principal) throws QuadrigaStorageException, QuadrigaAccessException { ModelAndView model = new ModelAndView("auth/dictionaries/updatedictionary"); IDictionary dictionary = dictManager.getDictionaryDetails(dictionaryid); model.getModelMap().put("dictionary", dictionary); model.getModelMap().put("dictionaryid", dictionaryid); return model; } /** * This method updates the dictionary details associated with the specified * dictioanry id * * @param dictionary * @param result * @param dictionaryid * @param principal * @return ModelAndView * @throws QuadrigaStorageException */ @AccessPolicies({ @ElementAccessPolicy(type = CheckedElementType.DICTIONARY, paramIndex = 3, userRole = { RoleNames.ROLE_DICTIONARY_COLLABORATOR_ADMIN }) }) @RequestMapping(value = "auth/dictionaries/updatedictionary/{dictionaryid}", method = RequestMethod.POST) public String updateDictionaryDetails(@Validated @ModelAttribute("dictionary") Dictionary dictionary, BindingResult result, @PathVariable("dictionaryid") String dictionaryid, Principal principal, Model model, RedirectAttributes redirectAttrs, Locale locale) throws QuadrigaStorageException, QuadrigaAccessException { String userName = principal.getName(); model.addAttribute("dictionaryid", dictionaryid); if (result.hasErrors()) { model.addAttribute("dictionary", dictionary); model.addAttribute("show_error_alert", true); model.addAttribute("error_alert_msg", messageSource.getMessage("dictionary.update.failure", new Object[] {}, locale)); return "auth/dictionaries/updatedictionary"; } dictionary.setDictionaryId(dictionaryid); dictManager.updateDictionaryDetailsRequest(dictionary, userName); redirectAttrs.addFlashAttribute("show_success_alert", true); redirectAttrs.addFlashAttribute("success_alert_msg", messageSource.getMessage("dictionary.update.success", new Object[] {}, locale)); return "redirect:/auth/dictionaries/" + dictionaryid; } }