Package com.emc.plants.web.servlets

Source Code of com.emc.plants.web.servlets.ShoppingServlet

//"This sample program is provided AS IS and may be used, executed, copied and modified without royalty payment by customer (a) for its own
//instruction and study, (b) in order to develop applications designed to run with an IBM WebSphere product, either for customer's own internal use
//or for redistribution by customer, as part of such an application, in customer's own products. "

//Product 5630-A36,  (C) COPYRIGHT International Business Machines Corp., 2001,2004
//All Rights Reserved * Licensed Materials - Property of IBM

package com.emc.plants.web.servlets;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import com.emc.plants.messaging.publisher.PaymentInfoPublisher;
import com.emc.plants.persistence.Inventory;
import com.emc.plants.pojo.beans.CustomerInfo;
import com.emc.plants.pojo.beans.OrderInfo;
import com.emc.plants.pojo.beans.ShoppingCartContents;
import com.emc.plants.pojo.beans.ShoppingCartItem;
import com.emc.plants.service.exceptions.MailerAppException;
import com.emc.plants.service.interfaces.Catalog;
import com.emc.plants.service.interfaces.Mailer;
import com.emc.plants.service.interfaces.ShoppingCart;
import com.emc.plants.utils.Util;
import com.emc.plants.web.util.WebUtil;

/**
* Servlet to handle shopping needs.
*/
//@EJB(name="ejb/ShoppingCart", beanName="ShoppingCart", beanInterface=ShoppingCart.class)
public class ShoppingServlet extends HttpServlet
{
  /**
   *
   */
  private static final long serialVersionUID = 1L;
//  Servlet action codes.
  public static final String ACTION_ADDTOCART = "addtocart";
  public static final String ACTION_COMPLETECHECKOUT = "completecheckout";
  public static final String ACTION_GOTOCART = "gotocart";
  public static final String ACTION_INITCHECKOUT = "initcheckout";
  public static final String ACTION_ORDERINFODONE = "orderinfodone";
  public static final String ACTION_PRODUCTDETAIL = "productdetail";
  public static final String ACTION_SHOPPING = "shopping";
  public static final String ACTION_UPDATEQUANTITY = "updatequantity";

//  @EJB(beanName="Catalog")
  @Autowired
  Catalog catalog;

//  @EJB(name="Mailer")
  @Autowired
  private Mailer mailer;

  //@EJB(beanName="ShoppingCart")
  public void init(ServletConfig config) throws ServletException
  {
    super.init(config);
    this.catalog = (Catalog)WebUtil.getSpringBean(this.getServletContext(), "catalog");
    this.mailer = (Mailer)WebUtil.getSpringBean(this.getServletContext(), "mailer");
   
    Util.setDebug(true);
//    shoppingCartHome = (ShoppingCartHome) Util.getEJBHome("java:comp/env/ejb/ShoppingCart", com.ibm.websphere.samples.pbwejb.ShoppingCartHome.class);
//    catalogHome = (CatalogHome) Util.getEJBHome("java:comp/env/ejb/Catalog", com.ibm.websphere.samples.pbwejb.CatalogHome.class);
  }
  /**
   * Process incoming HTTP GET requests
   *
   * @param request Object that encapsulates the request to the servlet
   * @param response Object that encapsulates the response from the servlet
   */
  public void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, IOException
  {
    performTask(request, response);
  }
  /**
   * Process incoming HTTP POST requests
   *
   * @param request Object that encapsulates the request to the servlet
   * @param response Object that encapsulates the response from the servlet
   */
  public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, IOException
  {
    //sanitize the request parameters to prevent XSS security vulnerability
    Enumeration names=request.getParameterNames();
    while (names.hasMoreElements()){
      String val=(String)request.getParameter((String)names.nextElement());
      if (!Util.validateString(val)){
        throw new ServletException("Invalid input parameter in ShoppingServlet:"+URLEncoder.encode(val,"UTF8"));
      }
    }
    performTask(request, response);
  }
  /**
   * Main service method for ShoppingServlet
   *
   * @param req Object that encapsulates the request to the servlet
   * @param resp Object that encapsulates the response from the servlet
   */
  public void performTask(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
  {
    String action = null;
    action = req.getParameter(Util.ATTR_ACTION);
    Util.debug("action=" + action);
    if (action.equals(ACTION_SHOPPING))
    {
      String category = (String) req.getParameter("category");
      HttpSession session = req.getSession(true);
      // Get session category if none on request, such as
      // 'Continue Shopping' from the Shopping Cart jsp.
      if ((category == null) || (category.equals("null")))
      {
        category = (String) session.getAttribute(Util.ATTR_CATEGORY);
      }
      // If categoyr still null, default to first category.
      if ((category == null) || (category.equals("null")))
      {
        category = "0";
      }
      session.setAttribute(Util.ATTR_CATEGORY, category);
      // Get the shopping items from the catalog.
      Collection c = catalog.getItemsByCategory(Integer.parseInt(category));
      ArrayList items = new ArrayList(c);
      for (int i = 0; i < items.size();)
      {
        if (((Inventory) items.get(i)).isPublic())
          i++;
        else
          items.remove(i);
      }
      req.setAttribute(Util.ATTR_INVITEMS, items);
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_SHOPPING);
    }
    else if (action.equals(ACTION_PRODUCTDETAIL))
    {
      String invID = (String) req.getParameter("itemID");
      req.setAttribute(Util.ATTR_INVITEM, catalog.getItemInventory(invID));
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_PRODUCT);
    }
    else if (action.equals(ACTION_GOTOCART))
    {
      HttpSession session = req.getSession(true);
      // Get shopping cart.
      ShoppingCart shoppingCart = (ShoppingCart) session.getAttribute(Util.ATTR_CART);
      if (shoppingCart != null)
      {
        // Make sure ShopingCart reference has not timed out.
        try
        {
          shoppingCart.getItems();
        }
        // TODO: what exception would be thrown?
        catch (RuntimeException e)
        {
          Util.debug("gotocart: shopping cart ref must have timed out");
          ShoppingCartContents cartContents = (ShoppingCartContents) session.getAttribute(Util.ATTR_CART_CONTENTS);
          shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
          session.setAttribute(Util.ATTR_CART, shoppingCart);
        }
      }
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_CART);
    }
    else if (action.equals(ACTION_ADDTOCART))
    {
      ShoppingCart shoppingCart = null;
      // Get shopping cart.
      HttpSession session = req.getSession(true);
      shoppingCart = (ShoppingCart) session.getAttribute(Util.ATTR_CART);
      if (shoppingCart == null)
      {
        Util.debug("shopping cart is NULL, must create it");
        shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
        System.out.println("Items:: " +shoppingCart.getItems()+ " Size :: " +shoppingCart.getItems().size());
        shoppingCart.setItems(new ArrayList<ShoppingCartItem>());
      }
      else
      {
        // Make sure ShopingCart reference has not timed out.
        try
        {
          Util.debug("shopping cart is not null, check items, size=" + shoppingCart.getItems().size());
          shoppingCart.getItems();
        }
        // TODO: what exception would be thrown?
        catch (RuntimeException e)
        {
          // ShoppingCart timed out, so create a new one.
          Util.debug("addtocart: shopping cart ref must have timed out, create a new one");
          ShoppingCartContents cartContents = (ShoppingCartContents) session.getAttribute(Util.ATTR_CART_CONTENTS);
          shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
          if (cartContents != null) {
            shoppingCart.setCartContents(cartContents);
          }
        }
      }
      // Add item to cart.
      if (shoppingCart != null)
      {
        String invID = req.getParameter("itemID");

        // Gets detached instance
        Inventory inv = catalog.getItemInventory(invID);
        ShoppingCartItem si = new ShoppingCartItem(inv);
        si.setQuantity(Integer.parseInt(req.getParameter("qty").trim()));
        shoppingCart.addItem(si);
        session.setAttribute(Util.ATTR_CART, shoppingCart);
        session.setAttribute(Util.ATTR_CART_CONTENTS, shoppingCart.getCartContents());
      }
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_CART);
    }
    else if (action.equals(ACTION_UPDATEQUANTITY))
    {
      // Get shopping cart.
      HttpSession session = req.getSession(true);
      ShoppingCart shoppingCart = (ShoppingCart) session.getAttribute(Util.ATTR_CART);
      // Make sure ShopingCart reference has not timed out.
      try
      {
        shoppingCart.getItems();
      }
      // TODO: what exception gets thrown?
      catch (RuntimeException e)
      {
        // ShoppingCart timed out, so create a new one.
        Util.debug("updatequantity: shopping cart ref must have timed out, create a new one");
        ShoppingCartContents cartContents = (ShoppingCartContents) session.getAttribute(Util.ATTR_CART_CONTENTS);
        shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
       
       
        if (cartContents != null) {
          shoppingCart.setCartContents(cartContents);
        }
      }
      // Update item quantity in cart.
      if (shoppingCart != null)
      {
        try
        {
          int cnt = 0;
          Collection c = shoppingCart.getItems();
          ArrayList items;

          if (c instanceof ArrayList)
            items = (ArrayList) c;
          else
            items = new ArrayList(c);
          ShoppingCartItem si;
          String parm, parmval;
          // Check all quantity values from cart form.
          for (int parmcnt = 0;; parmcnt++)
          {
            parm = "itemqty" + String.valueOf(parmcnt);
            parmval = req.getParameter(parm);
            // No more quantity fields, so break out.
            if ((parmval == null) || parmval.equals("null"))
            {
              break;
            }
            else // Check quantity value of cart item.
            {
              int quantity = Integer.parseInt(parmval);
              // Quantity set to 0, so remove from cart.
              if (quantity == 0)
              {
                items.remove(cnt);
              }
              else // Change quantity of cart item.
              {
                si = (ShoppingCartItem) items.get(cnt);
                si.setQuantity(quantity);
                items.set(cnt, si);
                cnt++;
              }
            }
          }
          // Are items in cart? Yes, set the session attributes.
          if (items.size() > 0)
          {
            shoppingCart.setItems(items);
            session.setAttribute(Util.ATTR_CART, shoppingCart);
            session.setAttribute(Util.ATTR_CART_CONTENTS, shoppingCart.getCartContents());
          }
          else // No items in cart, so remove attributes from session.
          {
            session.removeAttribute(Util.ATTR_CART);
            session.removeAttribute(Util.ATTR_CART_CONTENTS);
          }
        }
        catch (Exception e)
        {
          //  Log the exception but try to continue.
          Util.debug("ShoppingServlet.performAction() -> Exception caught: " +e);
          // This should take us to the error page.
          throw new ServletException(e.getMessage());
        }
      }
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_CART);
    }
    else if (action.equals(ACTION_INITCHECKOUT))
    {
      String url;
      HttpSession session = req.getSession(true);
      CustomerInfo customerInfo = (CustomerInfo) session.getAttribute(Util.ATTR_CUSTOMER);
      if (customerInfo == null)
      {
        req.setAttribute(Util.ATTR_RESULTS, "You must login or register before checking out.");
        session.setAttribute(Util.ATTR_CHECKOUT, new Boolean(true));
        url = Util.PAGE_LOGIN;
      }
      else
      {
        url = Util.PAGE_ORDERINFO;
      }
      requestDispatch(getServletConfig().getServletContext(), req, resp, url);
    }
    else if (action.equals(ACTION_ORDERINFODONE))
    {
      OrderInfo orderinfo = null;
      ShoppingCart shoppingCart = null;
      HttpSession session = req.getSession(true);
      CustomerInfo customerInfo = (CustomerInfo) session.getAttribute(Util.ATTR_CUSTOMER);
      String customerID = customerInfo.getCustomerID();
      shoppingCart = (ShoppingCart) session.getAttribute(Util.ATTR_CART);
      // Make sure ShopingCart reference has not timed out.
      try
      {
        Util.debug("orderinfodone: ShoppingCart timeout? check getItems() method");
        shoppingCart.getItems();
      }
      // TODO: what exception gets thrown?
      catch (RuntimeException e)
      {
        // ShoppingCart timed out, so create a new one.
        Util.debug("orderinfodone: ShoppingCart ref must have timed out");
        ShoppingCartContents cartContents = (ShoppingCartContents) session.getAttribute(Util.ATTR_CART_CONTENTS);
        if (cartContents != null)
        {
          shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
          shoppingCart.setCartContents(cartContents);
        }
        else
        {
          Util.debug("NoSuchObject Exception!!!");
          Util.debug("Major Problem!!!");
          shoppingCart = null;
        }
      }
      Util.debug("orderinfodone: got cart?");
      if (shoppingCart != null)
      {
        Util.debug("orderinfodone: cart not NULL");
        String billName = req.getParameter("bname");
        String billAddr1 = req.getParameter("baddr1");
        String billAddr2 = req.getParameter("baddr2");
        String billCity = req.getParameter("bcity");
        String billState = req.getParameter("bstate");
        String billZip = req.getParameter("bzip");
        String billPhone = req.getParameter("bphone");
        String shipName = req.getParameter("sname");
        String shipAddr1 = req.getParameter("saddr1");
        String shipAddr2 = req.getParameter("saddr2");
        String shipCity = req.getParameter("scity");
        String shipState = req.getParameter("sstate");
        String shipZip = req.getParameter("szip");
        String shipPhone = req.getParameter("sphone");
        int shippingMethod = Integer.parseInt(req.getParameter("shippingMethod"));
        String creditCard = req.getParameter("ccardname");
        String ccNum = req.getParameter("ccardnum");
        String ccExpireMonth = req.getParameter("ccexpiresmonth");
        String ccExpireYear = req.getParameter("ccexpiresyear");
        String cardHolder = req.getParameter("ccholdername");
        orderinfo = shoppingCart.createOrder(customerID, billName, billAddr1, billAddr2, billCity, billState, billZip, billPhone, shipName, shipAddr1, shipAddr2, shipCity, shipState, shipZip, shipPhone, creditCard, ccNum, ccExpireMonth, ccExpireYear, cardHolder, shippingMethod, shoppingCart.getItems());
        Util.debug("orderinfodone: order created");
      }
      if (orderinfo != null)
      {
        req.setAttribute(Util.ATTR_ORDERINFO, orderinfo);
        req.setAttribute(Util.ATTR_CARTITEMS, shoppingCart.getItems());
        session.setAttribute(Util.ATTR_ORDERKEY, orderinfo.getID());
        requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_CHECKOUTFINAL);
      }
    }
    else if (action.equals(ACTION_COMPLETECHECKOUT))
    {
      ShoppingCart shoppingCart = null;
      HttpSession session = req.getSession(true);
      long key = (Long) session.getAttribute(Util.ATTR_ORDERKEY);
      req.setAttribute(Util.ATTR_ORDERID, key);
      long orderKey = key;
      Util.debug("completecheckout: order id ="+orderKey );
      CustomerInfo customerInfo = (CustomerInfo) session.getAttribute(Util.ATTR_CUSTOMER);
      // Check the available inventory and backorder if necessary.
      shoppingCart = (ShoppingCart) session.getAttribute(Util.ATTR_CART);
      // Make sure ShopingCart reference has not timed out.
      try
      {
        Util.debug("completecheckout: ShoppingCart timeout? check getItems() method");
        shoppingCart.getItems();
      }
      // TODO: what exception gets thrown?
      catch (RuntimeException e)
      {
        // ShoppingCart timed out, so create a new one.
        Util.debug("completecheckout: ShoppingCart ref must have timed out");
        ShoppingCartContents cartContents = (ShoppingCartContents) session.getAttribute(Util.ATTR_CART_CONTENTS);
        if (cartContents != null)
        {
          shoppingCart = (ShoppingCart) WebUtil.getSpringBean(this.getServletContext(), "shopping");
          shoppingCart.setCartContents(cartContents);
        }
        else
        {
          Util.debug("NoSuchObject Exception!!!");
          Util.debug("Major Problem!!!");
          shoppingCart = null;
        }
      }
      if (shoppingCart != null)
      {
        ShoppingCartItem si;
        Collection items = shoppingCart.getItems();
        for (Object o : items)
        {
          si = (ShoppingCartItem) o;
          shoppingCart.checkInventory(si);
          Util.debug("ShoppingCart.checkInventory() - checking Inventory quantity of item: " + si.getID());
        }
      }

     
      try
      {
        PaymentInfoPublisher pInfoPublisher = (PaymentInfoPublisher)Util.getSpringBean("paymentInfoPublisher");
       
        pInfoPublisher.publishMessage("Order placed successfully for Customer : " +customerInfo.getCustomerID()+" with Order ID : "+orderKey);
      }
      catch (Exception e)
      {
        System.out.println("Exception during Posting message to RabbitMQ :"+e);
        e.printStackTrace();
      }
     
      try
      {
        mailer.createAndSendMail(customerInfo, orderKey);
      }
      catch (MailerAppException e)
      {
        System.out.println("MailerAppException:"+e);
        e.printStackTrace();
      }
      catch (Exception e)
      {
        System.out.println("Exception during create and send mail :"+e);
        e.printStackTrace();
      }
      // Remove items saved in HttpSession.
      session.removeAttribute(Util.ATTR_CART);
      session.removeAttribute(Util.ATTR_CART_CONTENTS);
      session.removeAttribute(Util.ATTR_CATEGORY);
      session.removeAttribute(Util.ATTR_ORDERKEY);
      session.removeAttribute(Util.ATTR_CHECKOUT);
      HttpSession httpSession = req.getSession(true);
     
      //httpSession.invalidate();
      requestDispatch(getServletConfig().getServletContext(), req, resp, Util.PAGE_ORDERDONE);
    }
  }
  /**
   * Send redirect
   */
  private void sendRedirect(HttpServletResponse resp, String page) throws ServletException, IOException
  {
    resp.sendRedirect(resp.encodeRedirectURL(page));
  }
  /**
   * Request dispatch
   */
  private void requestDispatch(ServletContext ctx, HttpServletRequest req, HttpServletResponse resp, String page) throws ServletException, IOException
  {
    resp.setContentType("text/html");
    ctx.getRequestDispatcher("/"+page).forward(req, resp);
  }
}
TOP

Related Classes of com.emc.plants.web.servlets.ShoppingServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.