package org.appfuse.webapp.controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.appfuse.model.User;
import org.appfuse.service.UserExistsException;
import org.appfuse.service.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.Validator;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/userform*")
public class UserFormController extends BaseFormController {
private final Log log = LogFactory.getLog(UserFormController.class);
@Autowired
UserManager userManager;
@Autowired(required = false)
Validator validator;
@RequestMapping(method = RequestMethod.POST)
public String onSubmit(User user, BindingResult result, HttpServletRequest request) throws Exception {
if (request.getParameter("cancel") != null) {
return "redirect:users";
}
if (validator != null && request.getParameter("delete") == null) { // validator is null during testing
validator.validate(user, result);
if (result.hasErrors()) {
return "userform";
}
}
log.debug("entering 'onSubmit' method...");
if (request.getParameter("delete") != null) {
userManager.removeUser(user.getId().toString());
saveMessage(request, getText("user.deleted", user.getFullName(), request.getLocale()));
} else {
try {
userManager.saveUser(user);
} catch (UserExistsException uex) {
result.addError(new ObjectError("user", uex.getMessage()));
return "userform";
}
saveMessage(request, getText("user.saved", user.getFullName(), request.getLocale()));
}
return "redirect:users";
}
@ModelAttribute
@RequestMapping(method = RequestMethod.GET)
protected User getUser(HttpServletRequest request) {
String userId = request.getParameter("id");
if ((userId != null) && !userId.equals("")) {
return userManager.getUser(userId);
} else {
return new User();
}
}
}