package nl.oose.dea.orderservice.withoutsrp; import javax.mail.MessagingException; import java.util.logging.Logger; public class Order { private Logger logger = Logger.getLogger(getClass().getName()); public void checkout(Cart cart, PaymentDetails paymentDetails, boolean notifyCustomer) { if (paymentDetails.paymentMethod == PaymentMethod.CreditCard) chargeCard(paymentDetails, cart); reserveInventory(cart); if (notifyCustomer) notifyCustomer(cart); } private void notifyCustomer(Cart cart) { MailClient mailClient = new MailClient(); try { mailClient.send("Your order is processed.", cart.getCustomerEmail()); } catch (MessagingException e) { logger.severe(e.getMessage()); throw new OrderException("Cannot send mail to " + cart.getCustomerEmail(), e); } } private void reserveInventory(Cart cart) { for(Item item : cart.getItems()) { try { InventorySystem inventorySystem = new InventorySystem(); inventorySystem.reserve(item.sku, item.quantity); } catch(InsufficientInventoryException insufficientInventoryException) { throw new OrderException("Insufficient inventory for item " + item.sku, insufficientInventoryException); } } } private void chargeCard(PaymentDetails paymentDetails, Cart cart) { PaymentGateway paymentGateway = new PaymentGateway(); paymentGateway.charge(cart.getBillingTotal(), cart.getCustomerName(), paymentDetails.cardNumber); } }