View Javadoc
1   package ejava.examples.blpurchase.blimpl;
2   
3   import java.util.Random;
4   
5   import javax.persistence.EntityManager;
6   
7   import org.apache.commons.logging.Log;
8   import org.apache.commons.logging.LogFactory;
9   
10  import ejava.examples.blpurchase.bl.Purchasing;
11  import ejava.examples.blpurchase.bo.Account;
12  import ejava.examples.blpurchase.bo.Cart;
13  import ejava.examples.blpurchase.bo.Product;
14  
15  /**
16   * This class implements basic logic used to implement the purchasing
17   * aspects of the application.
18   */
19  public class PurchasingImpl implements Purchasing {
20  	private static Log log = LogFactory.getLog(PurchasingImpl.class);
21  	private EntityManager em;
22  	private Random random=new Random();
23  	
24  	public void setEntityManager(EntityManager em) {
25  		this.em = em;
26  	}
27  
28  	@Override
29  	public Account createAccount(String email, String firstName, String lastName) {
30  		int count=em.createNamedQuery(Account.FIND_BY_EMAIL)
31  				.setParameter("email", email)
32  				.getResultList().size();
33  		if (count==0) {
34  			Account account = new Account(email, firstName, lastName);
35  			account.setPassword(generatePassword());
36  			em.persist(account);
37  			log.debug("created account:" + account);
38  			return account;
39  		}
40  
41  		return null; //don't return legacy accounts -- they have the password
42  	}
43  
44  	@Override
45  	public double checkout(String email, String password) {
46  		Cart cart = em.find(Cart.class, email);
47  		if (cart == null) {
48  			log.warn("cart not found");
49  			return 0;
50  		}
51  		
52  		Account account = cart.getAccount();
53  		if (!account.getPassword().equals(password)) {
54  			log.warn("wrong password");
55  			return 0;
56  		}
57  		
58  		double total = 0;
59  		for (Product product : cart.getProducts()) {
60  			total += product.getPrice();
61  		}
62  		log.debug(String.format("checked out %d products for %s",cart.getProducts().size(), email));
63  		cart.getProducts().clear();
64  		
65  		return total;
66  	}
67  
68  	private String generatePassword() {
69  		byte[] password = new byte[8];
70  		for (int i=0; i<password.length; i++) {
71  			password[i] = (byte)('a' + random.nextInt(25));
72  		}
73  		return new String(password);
74  	}
75  }