package org.appfuse.webapp.action;
import net.sourceforge.stripes.action.*;
import net.sourceforge.stripes.integration.spring.SpringBean;
import net.sourceforge.stripes.validation.LocalizableError;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidateNestedProperties;
import org.appfuse.model.User;
import org.appfuse.service.UserManager;
import org.appfuse.service.UserExistsException;
import org.springframework.orm.ObjectRetrievalFailureException;
@UrlBinding("/userform.action")
public class UserFormBean extends BaseActionBean {
@SpringBean
private UserManager userManager;
private User user;
private String id;
public void setId(String id) {
this.id = id;
}
public User getUser() {
return user;
}
@ValidateNestedProperties({
@Validate(field = "username", required = true, minlength = 2, maxlength = 50),
@Validate(field = "password", required = true, minlength = 2, maxlength = 50),
@Validate(field = "email", required = true, minlength = 4, maxlength = 50)
})
public void setUser(User user) {
this.user = user;
}
@DontValidate @DefaultHandler
public Resolution view() {
if (id != null) {
try {
user = userManager.getUser(id);
} catch (ObjectRetrievalFailureException e) {
e.printStackTrace();
getContext().getMessages().add(new LocalizableMessage("user.missing"));
return showList();
}
} else {
user = new User();
}
return showForm();
}
@HandlesEvent("save")
public Resolution save() {
try {
userManager.saveUser(user);
} catch (UserExistsException uex) {
getContext().getValidationErrors().addGlobalError(new LocalizableError("user.exists"));
return showForm();
}
getContext().getMessages().add(new LocalizableMessage("user.saved", user.getFullName()));
return showList();
}
@DontValidate
@HandlesEvent("delete")
public Resolution delete() {
userManager.removeUser(user.getId().toString());
getContext().getMessages().add(new LocalizableMessage("user.deleted", user.getFullName()));
return showList();
}
@DontValidate
@HandlesEvent("cancel")
public Resolution cancel() {
return showList();
}
private Resolution showList() {
return new RedirectResolution("/users").flash(this);
}
private Resolution showForm() {
return new ForwardResolution("/userForm.jsp");
}
}