/* * Copyright 2009-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ibatis.domain.jpetstore; import java.io.Serializable; import java.math.BigDecimal; import java.util.*; public class Cart implements Serializable { private static final long serialVersionUID = 1L; private final Map<String, CartItem> itemMap = Collections.synchronizedMap(new HashMap<String, CartItem>()); private final List<CartItem> itemList = new ArrayList<CartItem>(); public Iterator<CartItem> getCartItems() { return itemList.iterator(); } public List<CartItem> getCartItemList() { return itemList; } public int getNumberOfItems() { return itemList.size(); } public boolean containsItemId(String itemId) { return itemMap.containsKey(itemId); } public void addItem(Item item, boolean isInStock) { CartItem cartItem = (CartItem) itemMap.get(item.getItemId()); if (cartItem == null) { cartItem = new CartItem(); cartItem.setItem(item); cartItem.setQuantity(0); cartItem.setInStock(isInStock); itemMap.put(item.getItemId(), cartItem); itemList.add(cartItem); } cartItem.incrementQuantity(); } public Item removeItemById(String itemId) { CartItem cartItem = (CartItem) itemMap.remove(itemId); if (cartItem == null) { return null; } else { itemList.remove(cartItem); return cartItem.getItem(); } } public void incrementQuantityByItemId(String itemId) { CartItem cartItem = (CartItem) itemMap.get(itemId); cartItem.incrementQuantity(); } public void setQuantityByItemId(String itemId, int quantity) { CartItem cartItem = (CartItem) itemMap.get(itemId); cartItem.setQuantity(quantity); } public BigDecimal getSubTotal() { BigDecimal subTotal = new BigDecimal("0"); Iterator<CartItem> items = getCartItems(); while (items.hasNext()) { CartItem cartItem = (CartItem) items.next(); Item item = cartItem.getItem(); BigDecimal listPrice = item.getListPrice(); BigDecimal quantity = new BigDecimal(String.valueOf(cartItem.getQuantity())); subTotal = subTotal.add(listPrice.multiply(quantity)); } return subTotal; } }