/* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * * You may not modify, use, reproduce, or distribute this software * except in compliance with the terms of the license at: * http://developer.sun.com/berkeley_license.html */ package session; import cart.*; import entity.*; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.SessionContext; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagementType; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; /** * * @author tgiunipero */ @Stateless @TransactionManagement(TransactionManagementType.CONTAINER) public class OrderManager { @PersistenceContext(unitName = "AffableBeanPU") private EntityManager em; @Resource private SessionContext context; @EJB private ProductFacade productFacade; @EJB private CustomerOrderFacade customerOrderFacade; @EJB private OrderedProductFacade orderedProductFacade; @TransactionAttribute(TransactionAttributeType.REQUIRED) public int placeOrder(String name, String email, String phone, String address, String cityRegion, String ccNumber, ShoppingCart cart) { try { Customer customer = addCustomer(name, email, phone, address, cityRegion, ccNumber); CustomerOrder order = addOrder(customer, cart); addOrderedItems(order, cart); return order.getId(); } catch (Exception e) { context.setRollbackOnly(); return 0; } } private Customer addCustomer(String name, String email, String phone, String address, String cityRegion, String ccNumber) { Customer customer = new Customer(); customer.setName(name); customer.setEmail(email); customer.setPhone(phone); customer.setAddress(address); customer.setCityRegion(cityRegion); customer.setCcNumber(ccNumber); em.persist(customer); return customer; } private CustomerOrder addOrder(Customer customer, ShoppingCart cart) { // set up customer order CustomerOrder order = new CustomerOrder(); order.setCustomer(customer); order.setAmount(BigDecimal.valueOf(cart.getTotal())); // create confirmation number Random random = new Random(); int i = random.nextInt(999999999); order.setConfirmationNumber(i); em.persist(order); return order; } private void addOrderedItems(CustomerOrder order, ShoppingCart cart) { em.flush(); List<ShoppingCartItem> items = cart.getItems(); // iterate through shopping cart and create OrderedProducts for (ShoppingCartItem scItem : items) { int productId = scItem.getProduct().getId(); // set up primary key object OrderedProductPK orderedProductPK = new OrderedProductPK(); orderedProductPK.setCustomerOrderId(order.getId()); orderedProductPK.setProductId(productId); // create ordered item using PK object OrderedProduct orderedItem = new OrderedProduct(orderedProductPK); // set quantity orderedItem.setQuantity(scItem.getQuantity()); em.persist(orderedItem); } } public Map getOrderDetails(int orderId) { Map orderMap = new HashMap(); // get order CustomerOrder order = customerOrderFacade.find(orderId); // get customer Customer customer = order.getCustomer(); // get all ordered products List<OrderedProduct> orderedProducts = orderedProductFacade.findByOrderId(orderId); // get product details for ordered items List<Product> products = new ArrayList<Product>(); for (OrderedProduct op : orderedProducts) { Product p = (Product) productFacade.find(op.getOrderedProductPK().getProductId()); products.add(p); } // add each item to orderMap orderMap.put("orderRecord", order); orderMap.put("customer", customer); orderMap.put("orderedProducts", orderedProducts); orderMap.put("products", products); return orderMap; } }