/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package com.jboss.dvd.seam; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.annotation.Resource; import javax.ejb.Remove; import javax.ejb.SessionContext; import javax.ejb.Stateful; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import org.hibernate.validator.InvalidStateException; import org.hibernate.validator.InvalidValue; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.bpm.Actor; import org.jboss.seam.contexts.Context; import org.jboss.seam.faces.FacesMessages; import org.jboss.seam.security.Identity; @Stateful @Name("editCustomer") public class EditCustomerAction implements EditCustomer { @PersistenceContext EntityManager em; @Resource SessionContext ctx; @In Context sessionContext; @In(create=true) @Out Customer customer; @In FacesMessages facesMessages; @In Identity identity; String password = null; public void setPasswordVerify(String password) { this.password = password; } public String getPasswordVerify() { return password; } @Begin(nested=true, pageflow="newuser") public void startEdit() { } public boolean isValidNamePassword() { boolean ok = true; if (!isUniqueName()) { facesMessages.add("userName", "This name is already in use"); ok = false; } if (!isPasswordsMatch()) { facesMessages.add("passwordVerify", "Must match password field"); ok = false; } return ok; } @SuppressWarnings("unchecked") private boolean isUniqueName() { String name = customer.getUserName(); if (name == null) return true; List<Customer> results = em.createQuery("select c from Customer c where c.userName = :name") .setParameter("name", name) .getResultList(); return results.size() == 0; } private boolean isPasswordsMatch() { String customerpass = customer.getPassword(); return (password != null) && (customerpass != null) && (customerpass.equals(password)); } public String saveUser() { if (!isValidNamePassword()) { facesMessages.add("User name #{customer.userName} is not unique"); return null; } try { em.persist(customer); sessionContext.set("currentUser", customer); Actor.instance().setId(customer.getUserName()); identity.setUsername(customer.getUserName()); identity.setPassword(customer.getPassword()); identity.login(); facesMessages.addFromResourceBundle("createCustomerSuccess"); return "success"; } catch (InvalidStateException e) { InvalidValue[] vals = e.getInvalidValues(); for (InvalidValue val: vals) { facesMessages.add(val); } return null; } catch (RuntimeException e) { ctx.setRollbackOnly(); facesMessages.addFromResourceBundle("createCustomerError"); return null; } } public Map<String,Integer> getCreditCardTypes() { Map<String,Integer> map = new TreeMap<String,Integer>(); for (int i=1; i<=5; i++) { map.put(Customer.cctypes[i-1], i); } return map; } @Remove public void destroy() {} }