package models; import static javax.persistence.GenerationType.IDENTITY; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.Transient; import static javax.persistence.TemporalType.TIMESTAMP; @Entity @Table(name="shopping_carts") public class ShoppingCart { public static final String SESSION_ID_KEY = "cartId"; public static final String SESSION_ACCESS_KEY = "accessKey"; private int id; private String accessKey; private Date createdTime; private List<ShoppingCartProduct> products; @Id @GeneratedValue(strategy = IDENTITY) @Column(name="id") public int getId() { return this.id; } @Column(name="access_key") public String getAccessKey() { return this.accessKey; } @Temporal(TIMESTAMP) @Column(name="created") public Date getCreatedTime() { return this.createdTime; } @OneToMany(mappedBy = "shoppingCart", cascade=CascadeType.ALL) public List<ShoppingCartProduct> getProducts() { if (this.products == null) { setProducts(new ArrayList<ShoppingCartProduct>()); } return this.products; } public void setId(int id) { this.id = id; } public void setAccessKey(String accessKey) { this.accessKey = accessKey; } public void setCreatedTime(Date createdTime) { this.createdTime = createdTime; } public void setProducts(List<ShoppingCartProduct> products) { this.products = products; } /** * Checks if shopping cart contains given product. * * @param product Product to check * @return True if product is already in the shopping cart. False otherwise. */ public boolean containsProduct(Product product) { for (ShoppingCartProduct cartProduct : getProducts()) { if (cartProduct.getProduct() != null && cartProduct.getProduct().getId() == product.getId()) { return true; } } return false; } /** * Changes the quantity of products in the shopping cart. * * @param product Product which quantity must be changed. * @param value Value: can be positive (addition) or negative (subtraction) */ public void changeProductQuantity(Product product, int value) { for (ShoppingCartProduct cartProduct : getProducts()) { if (cartProduct.getProduct() != null && cartProduct.getProduct().getId() == product.getId()) { cartProduct.setQuantity(cartProduct.getQuantity() + value); break; } } } public ShoppingCart addProduct(Product product) { getProducts().add(new ShoppingCartProduct(this, product, 1)); return this; } public static String generateAccessKey() { // TODO : change on dynamic generation mechanism - it's static here only for learning purposes ! return "AFDDFSDFD3"; } @Transient public boolean isEmpty() { return getProducts().size() == 0; } @Override public String toString() { return "ShoppingCart {created: "+this.createdTime+", products: "+this.products+"}"; } }