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
17
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;
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 }