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
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
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
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 }