/* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. * * You may not modify, use, reproduce, or distribute this software * except in compliance with the terms of the license at: * http://developer.sun.com/berkeley_license.html */ package rest; import cart.ShoppingCart; import entity.CustomerOrder; import entity.Product; import java.math.BigDecimal; import java.util.List; import java.util.Map; import javax.ejb.EJB; import javax.ejb.Singleton; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import session.OrderManager; import session.ProductFacade; @Singleton @Path("purchase") public class PurchaseService { @EJB private OrderManager orderManager; @EJB private ProductFacade productFacade; public PurchaseService() { } @POST @Consumes({"application/json"}) @Produces({"application/json"}) public OrderConfirmationJson placeOrder(OrderJson order) { int orderId = orderManager.placeOrder(order.name, order.email, order.phone, order.address, "X", order.ccNumber, convert(order.cart, order.surCharge)); Map orderMap = orderManager.getOrderDetails(orderId); return new OrderConfirmationJson(((CustomerOrder)orderMap.get("orderRecord")).getConfirmationNumber()); } private ShoppingCart convert(List<ProductJson> products, BigDecimal surCharge) { ShoppingCart cart = new ShoppingCart(); for (ProductJson productJson : products) { Product p = productFacade.find(productJson.id); cart.addItem(p); } cart.calculateTotal(surCharge.toPlainString()); return cart; } public static class OrderJson { public String name; public String email; public String phone; public String address; public String cityRegion; public String ccNumber; public BigDecimal surCharge; public List<ProductJson> cart; public OrderJson() { } } public static class ProductJson { public int id; public String name; public BigDecimal price; public ProductJson() { } public ProductJson(int id, String name, BigDecimal price) { this.id = id; this.name = name; this.price = price; } public ProductJson(Product p) { this(p.getId(), p.getName(), p.getPrice()); } } public static class OrderConfirmationJson { public int orderId; public OrderConfirmationJson() { } public OrderConfirmationJson(int orderId) { this.orderId = orderId; } @Override public String toString() { return "OrderConfirmation{" + "orderId=" + orderId + '}'; } } }