package com.sun.j2ee.blueprints.petstore.controller.ejb.actions;
import java.util.Collection;
import java.util.Iterator;
import java.util.Date;
import java.util.Locale;
import javax.ejb.CreateException;
import javax.naming.NamingException;
import com.sun.j2ee.blueprints.waf.event.Event;
import com.sun.j2ee.blueprints.waf.event.EventResponse;
import com.sun.j2ee.blueprints.waf.event.EventException;
import com.sun.j2ee.blueprints.waf.controller.ejb.action.EJBActionSupport;
import com.sun.j2ee.blueprints.purchaseorder.ejb.PurchaseOrder;
import com.sun.j2ee.blueprints.lineitem.ejb.LineItem;
import com.sun.j2ee.blueprints.xmldocuments.XMLDocumentException;
import com.sun.j2ee.blueprints.petstore.controller.events.OrderEvent;
import com.sun.j2ee.blueprints.contactinfo.ejb.ContactInfo;
import com.sun.j2ee.blueprints.creditcard.ejb.CreditCard;
import com.sun.j2ee.blueprints.asyncsender.ejb.AsyncSenderLocalHome;
import com.sun.j2ee.blueprints.asyncsender.ejb.AsyncSender;
import com.sun.j2ee.blueprints.uidgen.ejb.UniqueIdGeneratorLocal;
import com.sun.j2ee.blueprints.uidgen.ejb.UniqueIdGeneratorLocalHome;
import com.sun.j2ee.blueprints.cart.ejb.ShoppingCartLocal;
import com.sun.j2ee.blueprints.cart.model.CartItem;
import com.sun.j2ee.blueprints.servicelocator.ejb.ServiceLocator;
import com.sun.j2ee.blueprints.servicelocator.ServiceLocatorException;
import com.sun.j2ee.blueprints.petstore.util.JNDINames;
import com.sun.j2ee.blueprints.petstore.util.PetstoreKeys;
import com.sun.j2ee.blueprints.petstore.controller.ejb.ShoppingClientFacadeLocal;
import com.sun.j2ee.blueprints.petstore.controller.events.OrderEvent;
import com.sun.j2ee.blueprints.petstore.controller.events.OrderEventResponse;
import com.sun.j2ee.blueprints.petstore.controller.exceptions.ShoppingCartEmptyOrderException;
public class OrderEJBAction extends EJBActionSupport {
public EventResponse perform(Event e) throws EventException {
OrderEvent oe = (OrderEvent)e;
PurchaseOrder purchaseOrder = new PurchaseOrder();
ContactInfo billTo = oe.getBillTo();
ContactInfo shipTo = oe.getShipTo();
CreditCard creditCard = oe.getCreditCard();
String orderIdString = null;
UniqueIdGeneratorLocal uidgen = null;
try {
ServiceLocator sl = new ServiceLocator();
UniqueIdGeneratorLocalHome home =
(UniqueIdGeneratorLocalHome)sl.getLocalHome(JNDINames.UIDG_EJBHOME);
uidgen = home.create();
} catch (javax.ejb.CreateException cx) {
cx.printStackTrace();
} catch (ServiceLocatorException slx) {
slx.printStackTrace();
}
orderIdString = uidgen.getUniqueId("1001");
ShoppingClientFacadeLocal scf = null;
scf = (ShoppingClientFacadeLocal)machine.getAttribute(PetstoreKeys.SHOPPING_CLIENT_FACADE);
String userId = scf.getUserId();
purchaseOrder.setOrderId(orderIdString);
purchaseOrder.setUserId(userId);
purchaseOrder.setEmailId(billTo.getEmail());
purchaseOrder.setOrderDate(new Date());
purchaseOrder.setShippingInfo(shipTo);
purchaseOrder.setBillingInfo(billTo);
purchaseOrder.setCreditCard(creditCard);
int lineItemCount = 0;
float totalCost = 0;
ShoppingCartLocal cart = scf.getShoppingCart();
Locale locale = (Locale)machine.getAttribute(PetstoreKeys.LOCALE);
purchaseOrder.setLocale(locale);
Collection items = cart.getItems();
if (items.size() == 0) {
throw new ShoppingCartEmptyOrderException("Shopping cart is empty");
}
Iterator it = items.iterator();
while (it.hasNext()) {
CartItem item = (CartItem)it.next();
float cost = new Float(item.getUnitCost()).floatValue();
totalCost += (cost*item.getQuantity());
purchaseOrder.addLineItem(new LineItem(item.getCategory(),
item.getProductId(),
item.getItemId(),
(lineItemCount++) + "",
item.getQuantity(),
cost));
}
purchaseOrder.setTotalPrice(totalCost);
try {
ServiceLocator sl = new ServiceLocator();
AsyncSenderLocalHome home = (AsyncSenderLocalHome)
sl.getLocalHome(JNDINames.ASYNCSENDER_LOCAL_EJB_HOME);
AsyncSender sender= home.create();
sender.sendAMessage(purchaseOrder.toXML());
} catch (ServiceLocatorException sle) {
sle.printStackTrace();
} catch (XMLDocumentException xde) {
xde.printStackTrace();
System.err.println(xde.getRootCause().getMessage());
} catch (CreateException ce) {
}
cart.empty();
return new OrderEventResponse(billTo.getEmail(), orderIdString);
}
}