package camelinaction.dummy; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import camelinaction.Order; import camelinaction.OrderInvalidException; import camelinaction.OrderNotFoundException; import camelinaction.OrderService; public class DummyOrderService implements OrderService { // in memory dummy order system private Map<Integer, Order> orders = new HashMap<>(); private final AtomicInteger idGen = new AtomicInteger(); public DummyOrderService() throws Exception { // setup some dummy orders to start with setupDummyOrders(); } @Override public Order getOrder(int orderId) throws OrderNotFoundException { Order order = orders.get(orderId); if (order == null) { throw new OrderNotFoundException(orderId); } return order; } @Override public void updateOrder(Order order) throws OrderInvalidException { if (order.getAmount() == 0) { throw new OrderInvalidException("Use cancel instead"); } int id = order.getId(); orders.remove(id); orders.put(id, order); } @Override public String createOrder(Order order) throws OrderInvalidException { if (order.getAmount() <= 0) { throw new OrderInvalidException("Amount must be 1 or higher"); } if ("kaboom".equals(order.getPartName())) { throw new IllegalStateException("Forced error due to kaboom"); } int id = idGen.incrementAndGet(); order.setId(id); orders.put(id, order); return "" + id; } @Override public void cancelOrder(int orderId) { orders.remove(orderId); } public void setupDummyOrders() throws Exception { Order order = new Order(); order.setAmount(1); order.setPartName("motor"); order.setCustomerName("honda"); createOrder(order); order = new Order(); order.setAmount(3); order.setPartName("brake"); order.setCustomerName("toyota"); createOrder(order); } }