1   package org.org.usurper.jpetstoredomain;
2   
3   import java.io.Serializable;
4   import java.util.Collections;
5   import java.util.HashMap;
6   import java.util.Iterator;
7   import java.util.Map;
8   
9   import org.springframework.beans.support.PagedListHolder;
10  
11  public class Cart implements Serializable {
12  
13      /* Private Fields */
14  
15      /**
16       * 
17       */
18      private static final long serialVersionUID = 8718906374052788514L;
19  
20      private final Map<String, CartItem> itemMap = Collections.synchronizedMap(new HashMap<String, CartItem>());
21  
22      private final PagedListHolder itemList = new PagedListHolder();
23  
24      /* JavaBeans Properties */
25  
26      public Cart() {
27          this.itemList.setPageSize(4);
28      }
29  
30      public Iterator<?> getAllCartItems() {
31          return itemList.getSource().iterator();
32      }
33  
34      public PagedListHolder getCartItemList() {
35          return itemList;
36      }
37  
38      public int getNumberOfItems() {
39          return itemList.getSource().size();
40      }
41  
42      /* Public Methods */
43  
44      public boolean containsItemId(String itemId) {
45          return itemMap.containsKey(itemId);
46      }
47  
48      @SuppressWarnings("unchecked")
49      public void addItem(Item item, boolean isInStock) {
50          CartItem cartItem = (CartItem) itemMap.get(item.getItemId());
51          if (cartItem == null) {
52              cartItem = new CartItem();
53              cartItem.setItem(item);
54              cartItem.setQuantity(0);
55              cartItem.setInStock(isInStock);
56              itemMap.put(item.getItemId(), cartItem);
57              itemList.getSource().add(cartItem);
58          }
59          cartItem.incrementQuantity();
60      }
61  
62      public Item removeItemById(String itemId) {
63          CartItem cartItem = (CartItem) itemMap.remove(itemId);
64          if (cartItem == null) {
65              return null;
66          } else {
67              itemList.getSource().remove(cartItem);
68              return cartItem.getItem();
69          }
70      }
71  
72      public void incrementQuantityByItemId(String itemId) {
73          CartItem cartItem = (CartItem) itemMap.get(itemId);
74          cartItem.incrementQuantity();
75      }
76  
77      public void setQuantityByItemId(String itemId, int quantity) {
78          CartItem cartItem = (CartItem) itemMap.get(itemId);
79          cartItem.setQuantity(quantity);
80      }
81  
82      public double getSubTotal() {
83          double subTotal = 0;
84          Iterator<?> items = getAllCartItems();
85          while (items.hasNext()) {
86              CartItem cartItem = (CartItem) items.next();
87              Item item = cartItem.getItem();
88              double listPrice = item.getListPrice();
89              int quantity = cartItem.getQuantity();
90              subTotal += listPrice * quantity;
91          }
92          return subTotal;
93      }
94  
95  }