PurchasingImpl.java
package ejava.examples.blpurchase.blimpl;
import java.util.Random;
import javax.persistence.EntityManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ejava.examples.blpurchase.bl.Purchasing;
import ejava.examples.blpurchase.bo.Account;
import ejava.examples.blpurchase.bo.Cart;
import ejava.examples.blpurchase.bo.Product;
/**
* This class implements basic logic used to implement the purchasing
* aspects of the application.
*/
public class PurchasingImpl implements Purchasing {
private static final Logger logger = LoggerFactory.getLogger(PurchasingImpl.class);
private EntityManager em;
private Random random=new Random();
public void setEntityManager(EntityManager em) {
this.em = em;
}
@Override
public Account createAccount(String email, String firstName, String lastName) {
int count=em.createNamedQuery(Account.FIND_BY_EMAIL_QUERY)
.setParameter("email", email)
.setMaxResults(1)
.getResultList()
.size();
if (count==0) {
Account account = new Account(email, firstName, lastName);
account.setPassword(generatePassword());
em.persist(account);
logger.debug("created account: {}", account);
return account;
}
return null; //don't return legacy accounts -- they have the password
}
@Override
public double checkout(String email, String password) {
Cart cart = em.find(Cart.class, email);
if (cart == null) {
logger.warn("cart not found");
return 0;
}
Account account = cart.getAccount();
if (!account.getPassword().equals(password)) {
logger.warn("wrong password");
return 0;
}
double total = 0;
for (Product product : cart.getProducts()) {
total += product.getPrice();
}
if (logger.isDebugEnabled()) {
logger.debug("checked out {} products for {}", cart.getProducts().size(), email);
}
cart.getProducts().clear();
return total;
}
private String generatePassword() {
byte[] password = new byte[8];
for (int i=0; i<password.length; i++) {
password[i] = (byte)('a' + random.nextInt(25));
}
return new String(password);
}
}