/** * Copyright 2011 Marin Solutions Ltd */ package com.captaindebug.store; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.captaindebug.store.beans.Item; import com.captaindebug.store.beans.OrderForm; import com.captaindebug.store.beans.UserSelections; import com.captaindebug.store.dummydao.Catalogue; /** * Ajax / JSON example. Uses a shopping scenario. * * @author Roger * */ @Controller public class OrderController { private static final Logger logger = LoggerFactory.getLogger(OrderController.class); private static final String FORM_VIEW = "shopping"; private final Catalogue catalogue; @Autowired public OrderController(Catalogue catalogue) { this.catalogue = catalogue; } /** * Create the form */ @RequestMapping(value = "/shopping", method = RequestMethod.GET) public String createForm(Model model) { logger.debug("Displaying items available in the store..."); addDisplayItemsToModel(model); addFormObjectToModel(model); return FORM_VIEW; } private void addDisplayItemsToModel(Model model) { List<Item> items = catalogue.read(); model.addAttribute("items", items); } private void addFormObjectToModel(Model model) { UserSelections userSelections = new UserSelections(); model.addAttribute(userSelections); } /** * Create an order form for user confirmation */ @RequestMapping(value = "/confirm", method = RequestMethod.POST) public @ResponseBody OrderForm confirmPurchases(@ModelAttribute("userSelections") UserSelections userSelections) { logger.debug("Confirming purchases..."); OrderForm orderForm = createOrderForm(userSelections.getSelection()); return orderForm; } private OrderForm createOrderForm(List<String> selections) { List<Item> items = findItemsInCatalogue(selections); String purchaseId = getPurchaseId(); OrderForm orderForm = new OrderForm(items, purchaseId); return orderForm; } private List<Item> findItemsInCatalogue(List<String> selections) { List<Item> items = new ArrayList<Item>(); for (String selection : selections) { Item item = catalogue.findItem(Integer.valueOf(selection)); items.add(item); } return items; } private String getPurchaseId() { return UUID.randomUUID().toString(); } }