package com.yummynoodlebar.core.domain; import com.yummynoodlebar.core.events.orders.OrderDetails; import org.springframework.beans.BeanUtils; import java.util.*; public class Order { private final Date dateTimeOfSubmission; private Map<String, Integer> orderItems; private final UUID key; private Customer customer; private OrderStatus status; private List<OrderStatus> statusHistory; public Order(final Date dateTimeOfSubmission) { this.key = UUID.randomUUID(); this.dateTimeOfSubmission = dateTimeOfSubmission; statusHistory = new ArrayList<OrderStatus>(); } public void addStatus(OrderStatus newStatus) { statusHistory.add(newStatus); status = newStatus; } public OrderStatus getStatus() { return status; } public Date getDateTimeOfSubmission() { return dateTimeOfSubmission; } public UUID getKey() { return key; } public void setOrderItems(Map<String, Integer> orderItems) { if (orderItems == null) { this.orderItems = Collections.emptyMap(); } else { this.orderItems = Collections.unmodifiableMap(orderItems); } } public Map<String, Integer> getOrderItems() { return orderItems; } public boolean canBeDeleted() { return true; } public OrderDetails toOrderDetails() { OrderDetails details = new OrderDetails(); BeanUtils.copyProperties(this, details); return details; } public static Order fromOrderDetails(OrderDetails orderDetails) { Order order = new Order(orderDetails.getDateTimeOfSubmission()); BeanUtils.copyProperties(orderDetails, order); return order; } }