package com.ibatis.jpetstore.presentation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.struts.beanaction.ActionContext;
import com.ibatis.common.util.PaginatedList;
import com.ibatis.jpetstore.domain.Order;
import com.ibatis.jpetstore.service.AccountService;
import com.ibatis.jpetstore.service.OrderService;
public class OrderBean extends AbstractBean {
private static final List CARD_TYPE_LIST;
private AccountService accountService;
private OrderService orderService;
private Order order;
private int orderId;
private boolean shippingAddressRequired;
private boolean confirmed;
private PaginatedList orderList;
private String pageDirection;
static {
List cardList = new ArrayList();
cardList.add("Visa");
cardList.add("MasterCard");
cardList.add("American Express");
CARD_TYPE_LIST = Collections.unmodifiableList(cardList);
}
public OrderBean() {
this(new AccountService(), new OrderService());
}
public OrderBean(AccountService accountService, OrderService orderService) {
order = new Order();
shippingAddressRequired = false;
confirmed = false;
this.accountService = accountService;
this.orderService = orderService;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public boolean isShippingAddressRequired() {
return shippingAddressRequired;
}
public void setShippingAddressRequired(boolean shippingAddressRequired) {
this.shippingAddressRequired = shippingAddressRequired;
}
public boolean isConfirmed() {
return confirmed;
}
public void setConfirmed(boolean confirmed) {
this.confirmed = confirmed;
}
public List getCreditCardTypes() {
return CARD_TYPE_LIST;
}
public String getPageDirection() {
return pageDirection;
}
public void setPageDirection(String pageDirection) {
this.pageDirection = pageDirection;
}
public PaginatedList getOrderList() {
return orderList;
}
public String listOrders() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = (AccountBean) sessionMap.get("accountBean");
orderList = orderService.getOrdersByUsername(accountBean.getAccount().getUsername());
return SUCCESS;
}
public String switchOrderPage() {
if ("next".equals(pageDirection)) {
orderList.nextPage();
} else if ("previous".equals(pageDirection)) {
orderList.previousPage();
}
return SUCCESS;
}
public String newOrderForm() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = (AccountBean) sessionMap.get("accountBean");
CartBean cartBean = (CartBean) sessionMap.get("cartBean");
clear();
if (accountBean == null || !accountBean.isAuthenticated()) {
setMessage("You must sign on before attempting to check out. Please sign on and try checking out again.");
return SIGNON;
} else if (cartBean != null) {
order.initOrder(accountBean.getAccount(), cartBean.getCart());
return SUCCESS;
} else {
setMessage("An order could not be created because a cart could not be found.");
return FAILURE;
}
}
public String newOrder() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
if (shippingAddressRequired) {
shippingAddressRequired = false;
return SHIPPING;
} else if (!isConfirmed()) {
return CONFIRM;
} else if (getOrder() != null) {
orderService.insertOrder(order);
CartBean cartBean = (CartBean) sessionMap.get("cartBean");
cartBean.clear();
setMessage("Thank you, your order has been submitted.");
return SUCCESS;
} else {
setMessage("An error occurred processing your order (order was null).");
return FAILURE;
}
}
public String viewOrder() {
Map sessionMap = ActionContext.getActionContext().getSessionMap();
AccountBean accountBean = (AccountBean) sessionMap.get("accountBean");
order = orderService.getOrder(orderId);
if (accountBean.getAccount().getUsername().equals(order.getUsername())) {
return SUCCESS;
} else {
order = null;
setMessage("You may only view your own orders.");
return FAILURE;
}
}
public void reset() {
shippingAddressRequired = false;
}
public void clear() {
order = new Order();
orderId = 0;
shippingAddressRequired = false;
confirmed = false;
orderList = null;
pageDirection = null;
}
}