package edu.asu.spring.quadriga.web.dictionary; import java.security.Principal; import java.util.Locale; 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.ui.ModelMap; 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.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import edu.asu.spring.quadriga.domain.IUser; import edu.asu.spring.quadriga.domain.factory.dictionary.IDictionaryFactory; import edu.asu.spring.quadriga.domain.impl.dictionary.Dictionary; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.service.IUserManager; import edu.asu.spring.quadriga.service.dictionary.IDictionaryManager; import edu.asu.spring.quadriga.validator.NewDictionaryValidator; @Controller public class AddDictionaryController { @Autowired private IDictionaryManager dictionaryManager; @Autowired private IDictionaryFactory dictionaryFactory; @Autowired private IUserManager usermanager; @Autowired private MessageSource messageSource; @Autowired private NewDictionaryValidator dictionaryValidator; @InitBinder protected void initBinder(WebDataBinder validateBinder) { validateBinder.setValidator(dictionaryValidator); } /** * Handles the bean mapping from form tag * * * @return Used to handle the data from the form:form tag and map it to * Dicitonary object */ @RequestMapping(value = "auth/dictionaries/add", method = RequestMethod.GET) public String addDictionaryForm(Model m) { m.addAttribute("dictionary", dictionaryFactory.createDictionaryObject()); return "auth/dictionaries/addDictionary"; } /** * Admin can use this page to new dictionary to his list * * @return Return to the add dictionary status page * @throws QuadrigaStorageException */ @RequestMapping(value = "auth/dictionaries/add", method = RequestMethod.POST) public String addDictionaryHandle(@Validated @ModelAttribute("dictionary") Dictionary dictionary, BindingResult results, ModelMap model, Principal principal, RedirectAttributes redirectAttrs, Locale locale) throws QuadrigaStorageException { IUser user = usermanager.getUser(principal.getName()); dictionary.setOwner(user); if (results.hasErrors()) { model.addAttribute("dictionary", dictionary); model.addAttribute("show_error_alert", true); model.addAttribute("error_alert_msg", messageSource.getMessage("dictionary.create.failure", new Object[] {}, locale)); return "auth/dictionaries/addDictionary"; } dictionaryManager.addNewDictionary(dictionary); redirectAttrs.addFlashAttribute("show_success_alert", true); redirectAttrs.addFlashAttribute("success_alert_msg", messageSource.getMessage("dictionary.create.success", new Object[] {}, locale)); return "redirect:/auth/dictionaries"; } }