|
OrderHandler |
|
/* * $Id: OrderHandler.java,v 1.14.4.8 2001/03/15 00:39:58 brydon Exp $ * Copyright 2001 Sun Microsystems, Inc. All rights reserved. * Copyright 2001 Sun Microsystems, Inc. Tous droits réservés. * */ package com.sun.j2ee.blueprints.petstore.control.ejb; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.AbstractList; import java.util.Collection; import java.util.Iterator; import java.util.HashMap; import java.util.Locale; import javax.naming.NamingException; import javax.ejb.CreateException; import javax.ejb.DuplicateKeyException; import javax.ejb.EJBException; import javax.ejb.FinderException; import com.sun.j2ee.blueprints.util.tracer.Debug; import com.sun.j2ee.blueprints.petstore.util.JNDIUtil; import com.sun.j2ee.blueprints.petstore.util.EJBUtil; import com.sun.j2ee.blueprints.inventory.ejb.InventoryHome; import com.sun.j2ee.blueprints.inventory.ejb.Inventory; // order imports import com.sun.j2ee.blueprints.customer.customer.ejb.Customer; import com.sun.j2ee.blueprints.customer.customer.ejb.CustomerHome; import com.sun.j2ee.blueprints.customer.order.model.LineItem; // cart imports import com.sun.j2ee.blueprints.shoppingcart.cart.ejb.ShoppingCart; import com.sun.j2ee.blueprints.shoppingcart.cart.model.ShoppingCartModel; import com.sun.j2ee.blueprints.shoppingcart.cart.model.CartItem; // email imports import com.sun.j2ee.blueprints.mail.ejb.Mailer; import com.sun.j2ee.blueprints.petstore.control.event.OrderEvent; import com.sun.j2ee.blueprints.petstore.control.event.EStoreEvent; import com.sun.j2ee.blueprints.petstore.control.exceptions.EStoreAppException; import com.sun.j2ee.blueprints.petstore.control.exceptions.EStoreEventException; import com.sun.j2ee.blueprints.petstore.control.exceptions.GeneralFailureException; import com.sun.j2ee.blueprints.customer.customer.exceptions.CustomerAppException; public class OrderHandler extends StateHandlerSupport { public void perform(EStoreEvent event) throws EStoreEventException { try { String userName = (String)machine.getAttribute("userName"); OrderEvent oe = (OrderEvent)event; ShoppingCart cart = machine.getShoppingClientControllerEJB().getShoppingCart(); Locale locale = oe.getLocale(); InventoryHome inventHome = EJBUtil.getInventoryHome(); Iterator ci = ((ShoppingCartModel)cart.getDetails(locale)).getItems(); ArrayList lineItems = new ArrayList(); int lineNo = 0; double total = 0; while (ci.hasNext()) { lineNo++; CartItem cartItem = (CartItem) ci.next(); LineItem li = new LineItem(cartItem.getItemId(), cartItem.getQuantity(), cartItem.getUnitCost(), lineNo); lineItems.add(li); total += (cartItem.getUnitCost() * (double) cartItem.getQuantity()); } for (Iterator it = lineItems.iterator(); it.hasNext();){ LineItem LI = (LineItem)it.next(); Inventory inventRef = inventHome.findByPrimaryKey(LI.getItemNo()); inventRef.reduceQuantity(LI.getQty()); } CustomerHome home = EJBUtil.getCustomerHome(); Customer cust = home.create(); Debug.println("OrderHandler: created customer " + userName); int order = cust.createOrder(userName, lineItems, oe.getShippingAddress(), oe.getBillingAddress(), oe.getShipToFirstName(), oe.getShipToLastName(), oe.getBillToFirstName(), oe.getBillToLastName(), oe.getCreditCard(), oe.getCarrier(), total, locale); Debug.println("OrderHandler: created order " + order); // put the requestId and the orderId in a table to match up later HashMap orderTable = (HashMap)machine.getAttribute("orderTable"); if (orderTable == null) { orderTable = new HashMap(); machine.setAttribute("orderTable", orderTable); } orderTable.put(oe.getRequestId() + "", order +""); // empty shopping cart cart.empty(); if (JNDIUtil.sendConfirmationMail()) { // send order confirmation mail. MailAction mAction = new MailAction(); mAction.sendConfirmationMessage(userName, order, locale); } } catch (CreateException ce) { throw new EStoreAppException("Unable to create order : " + ce.getMessage()); } catch (FinderException fe) { throw new EStoreAppException("Unable find required information while creating an order " + fe.getMessage()); } catch (CustomerAppException cust) { throw new EStoreAppException("Error while processing user input fields. Probably some field was left empty or reload button was hit after an order was commited"); } catch(NamingException nex) { throw new GeneralFailureException("Irrecoverable error while createing order : " + nex); } catch (RemoteException ex) { throw new GeneralFailureException("Irrecoverable error while createing order : " + ex); } } }
|
OrderHandler |
|