package ik.am.jpetstore.app.cart; import java.util.Iterator; import javax.inject.Inject; import ik.am.jpetstore.domain.model.Cart; import ik.am.jpetstore.domain.model.CartItem; import ik.am.jpetstore.domain.model.Item; import ik.am.jpetstore.domain.service.catalog.CatalogService; import org.springframework.stereotype.Component; @Component public class CartHelper { @Inject protected CatalogService catalogService; public void addItemToCart(String workingItemId, Cart cart) { if (cart.containsItemId(workingItemId)) { cart.incrementQuantityByItemId(workingItemId); } else { // isInStock is a "real-time" property that must be updated // every time an item is added to the cart, even if other // item details are cached. boolean isInStock = catalogService.isItemInStock(workingItemId); Item item = catalogService.getItem(workingItemId); cart.addItem(item, isInStock); } } public void updateCartQuantities(CartForm cartForm, Cart cart) { Iterator<CartItem> cartItems = cart.getAllCartItems(); while (cartItems.hasNext()) { CartItem cartItem = (CartItem) cartItems.next(); String itemId = cartItem.getItem().getItemId(); try { int quantity = cartForm.getQuantity().get(itemId); cart.setQuantityByItemId(itemId, quantity); if (quantity < 1) { cartItems.remove(); } } catch (Exception e) { // ignore parse exceptions on purpose } } } public void removeItemFromCart(String cartItem, Cart cart) { cart.removeItemById(cartItem); } }