1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.ibatis.jpetstore.domain;
17
18 import com.ibatis.common.util.PaginatedArrayList;
19 import com.ibatis.common.util.PaginatedList;
20
21 import java.io.Serializable;
22 import java.math.BigDecimal;
23 import java.util.*;
24
25 public class Cart implements Serializable {
26
27
28
29 private final Map itemMap = Collections.synchronizedMap(new HashMap());
30 private final PaginatedList itemList = new PaginatedArrayList(4);
31
32
33
34 public Iterator getCartItems() {
35 return itemList.iterator();
36 }
37
38 public PaginatedList getCartItemList() {
39 return itemList;
40 }
41
42 public int getNumberOfItems() {
43 return itemList.size();
44 }
45
46
47
48 public Iterator getAllCartItems() {
49 List allItems = new ArrayList();
50 itemList.gotoPage(0);
51 allItems.addAll(itemList);
52 while (itemList.nextPage()) {
53 allItems.addAll(itemList);
54 }
55 return allItems.iterator();
56 }
57
58 public boolean containsItemId(String itemId) {
59 return itemMap.containsKey(itemId);
60 }
61
62 public void addItem(Item item, boolean isInStock) {
63 CartItem cartItem = (CartItem) itemMap.get(item.getItemId());
64 if (cartItem == null) {
65 cartItem = new CartItem();
66 cartItem.setItem(item);
67 cartItem.setQuantity(0);
68 cartItem.setInStock(isInStock);
69 itemMap.put(item.getItemId(), cartItem);
70 itemList.add(cartItem);
71 }
72 cartItem.incrementQuantity();
73 }
74
75
76 public Item removeItemById(String itemId) {
77 CartItem cartItem = (CartItem) itemMap.remove(itemId);
78 if (cartItem == null) {
79 return null;
80 } else {
81 itemList.remove(cartItem);
82 return cartItem.getItem();
83 }
84 }
85
86 public void incrementQuantityByItemId(String itemId) {
87 CartItem cartItem = (CartItem) itemMap.get(itemId);
88 cartItem.incrementQuantity();
89 }
90
91 public void setQuantityByItemId(String itemId, int quantity) {
92 CartItem cartItem = (CartItem) itemMap.get(itemId);
93 cartItem.setQuantity(quantity);
94 }
95
96 public BigDecimal getSubTotal() {
97 BigDecimal subTotal = new BigDecimal("0");
98 Iterator items = getAllCartItems();
99 while (items.hasNext()) {
100 CartItem cartItem = (CartItem) items.next();
101 Item item = cartItem.getItem();
102 BigDecimal listPrice = item.getListPrice();
103 BigDecimal quantity = new BigDecimal(String.valueOf(cartItem.getQuantity()));
104 subTotal = subTotal.add(listPrice.multiply(quantity));
105 }
106 return subTotal;
107 }
108
109 }