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