1 package org.springframework.samples.jpetstore.web.spring; 2 3 import java.util.ArrayList ; 4 import java.util.HashMap ; 5 import java.util.List ; 6 import java.util.Map ; 7 8 import javax.servlet.http.HttpServletRequest ; 9 import javax.servlet.http.HttpServletResponse ; 10 11 import org.springframework.samples.jpetstore.domain.Account; 12 import org.springframework.samples.jpetstore.domain.Cart; 13 import org.springframework.samples.jpetstore.domain.logic.OrderValidator; 14 import org.springframework.samples.jpetstore.domain.logic.PetStoreFacade; 15 import org.springframework.validation.BindException; 16 import org.springframework.validation.Errors; 17 import org.springframework.web.servlet.ModelAndView; 18 import org.springframework.web.servlet.ModelAndViewDefiningException; 19 import org.springframework.web.servlet.mvc.AbstractWizardFormController; 20 21 25 public class OrderFormController extends AbstractWizardFormController { 26 27 private PetStoreFacade petStore; 28 29 public OrderFormController() { 30 setCommandName("orderForm"); 31 setPages(new String [] {"NewOrderForm", "ShippingForm", "ConfirmOrder"}); 32 } 33 34 public void setPetStore(PetStoreFacade petStore) { 35 this.petStore = petStore; 36 } 37 38 protected Object formBackingObject(HttpServletRequest request) throws ModelAndViewDefiningException { 39 UserSession userSession = (UserSession) request.getSession().getAttribute("userSession"); 40 Cart cart = (Cart) request.getSession().getAttribute("sessionCart"); 41 if (cart != null) { 42 Account account = this.petStore.getAccount(userSession.getAccount().getUsername()); 44 OrderForm orderForm = new OrderForm(); 45 orderForm.getOrder().initOrder(account, cart); 46 return orderForm; 47 } 48 else { 49 ModelAndView modelAndView = new ModelAndView("Error"); 50 modelAndView.addObject("message", "An order could not be created because a cart could not be found."); 51 throw new ModelAndViewDefiningException(modelAndView); 52 } 53 } 54 55 protected void onBindAndValidate(HttpServletRequest request, Object command, BindException errors, int page) { 56 if (page == 0 && request.getParameter("shippingAddressRequired") == null) { 57 OrderForm orderForm = (OrderForm) command; 58 orderForm.setShippingAddressRequired(false); 59 } 60 } 61 62 protected Map referenceData(HttpServletRequest request, int page) { 63 if (page == 0) { 64 List creditCardTypes = new ArrayList (); 65 creditCardTypes.add("Visa"); 66 creditCardTypes.add("MasterCard"); 67 creditCardTypes.add("American Express"); 68 Map model = new HashMap (); 69 model.put("creditCardTypes", creditCardTypes); 70 return model; 71 } 72 return null; 73 } 74 75 protected int getTargetPage(HttpServletRequest request, Object command, Errors errors, int currentPage) { 76 OrderForm orderForm = (OrderForm) command; 77 if (currentPage == 0 && orderForm.isShippingAddressRequired()) { 78 return 1; 79 } 80 else { 81 return 2; 82 } 83 } 84 85 protected void validatePage(Object command, Errors errors, int page) { 86 OrderForm orderForm = (OrderForm) command; 87 OrderValidator orderValidator = (OrderValidator) getValidator(); 88 errors.setNestedPath("order"); 89 switch (page) { 90 case 0: 91 orderValidator.validateCreditCard(orderForm.getOrder(), errors); 92 orderValidator.validateBillingAddress(orderForm.getOrder(), errors); 93 break; 94 case 1: 95 orderValidator.validateShippingAddress(orderForm.getOrder(), errors); 96 } 97 errors.setNestedPath(""); 98 } 99 100 protected ModelAndView processFinish( 101 HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) { 102 OrderForm orderForm = (OrderForm) command; 103 this.petStore.insertOrder(orderForm.getOrder()); 104 request.getSession().removeAttribute("sessionCart"); 105 Map model = new HashMap (); 106 model.put("order", orderForm.getOrder()); 107 model.put("message", "Thank you, your order has been submitted."); 108 return new ModelAndView("ViewOrder", model); 109 } 110 111 } 112 | Popular Tags |