package org.jboss.seam.example.seambay; import static org.jboss.seam.ScopeType.CONVERSATION; import java.io.Serializable; import java.util.Date; import javax.faces.application.FacesMessage; import javax.persistence.EntityExistsException; import javax.persistence.EntityManager; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.End; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; import org.jboss.seam.faces.FacesMessages; import org.jboss.seam.security.Identity; @Scope(CONVERSATION) @Name("registerAction") public class RegisterAction implements Serializable { private static final long serialVersionUID = -4349512217411197622L; @In EntityManager entityManager; @Out private User newuser; private String confirm; @Begin(join = true) public void newRegistration() { if (newuser == null) { newuser = new User(); newuser.setAccount(new Account()); } } @End(ifOutcome = "success") public String register() { if (confirm == null || !confirm.equals(newuser.getPassword())) { FacesMessages.instance().addToControl("confirm", "Passwords do not match"); return null; } if (entityManager.createQuery("from User where username = :username") .setParameter("username", newuser.getUsername()) .getResultList().size() > 0) { FacesMessages.instance().addToControl("username", "That user ID is already taken, please choose a different one"); return null; } newuser.getAccount().setFeedbackPercent(0); newuser.getAccount().setFeedbackScore(0); newuser.getAccount().setMemberSince(new Date()); // The account name *could* be different to the username if we want newuser.getAccount().setName(newuser.getUsername()); try { entityManager.persist(newuser.getAccount()); entityManager.persist(newuser); Identity.instance().setUsername(newuser.getUsername()); Identity.instance().setPassword(newuser.getPassword()); Identity.instance().login(); return "success"; } catch (EntityExistsException ex) { FacesMessages.instance().addToControl("username", "That user ID is already taken, please choose a different one"); return null; } } public String getConfirm() { return confirm; } public void setConfirm(String confirm) { this.confirm = confirm; } }