package org.example.domain; import com.avaje.ebean.annotation.EnumValue; import org.example.domain.finder.OrderFinder; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.OrderBy; import javax.persistence.Table; import javax.validation.constraints.NotNull; import java.sql.Date; import java.util.ArrayList; import java.util.List; /** * Order entity bean. */ @Entity @Table(name = "o_order") public class Order extends BaseModel { /** * Convenience Finder for 'active record' style. */ public static final OrderFinder find = new OrderFinder(); public enum Status { @EnumValue("N") NEW, @EnumValue("A") APPROVED, @EnumValue("S") SHIPPED, @EnumValue("C") COMPLETE } @NotNull Status status = Status.NEW; Date orderDate; Date shipDate; @NotNull @ManyToOne Customer customer; @ManyToOne Address shippingAddress; @OneToMany(cascade = CascadeType.ALL, mappedBy = "order") @OrderBy("id asc") List<OrderDetail> details = new ArrayList<>(); public String toString() { return id + " status:" + status + " customer:" + customer; } /** * Return order date. */ public Date getOrderDate() { return orderDate; } /** * Set order date. */ public void setOrderDate(Date orderDate) { this.orderDate = orderDate; } /** * Return ship date. */ public Date getShipDate() { return shipDate; } /** * Set ship date. */ public void setShipDate(Date shipDate) { this.shipDate = shipDate; } /** * Return status. */ public Status getStatus() { return status; } /** * Set status. */ public void setStatus(Status status) { this.status = status; } /** * Return customer. */ public Customer getCustomer() { return customer; } /** * Set customer. */ public void setCustomer(Customer customer) { this.customer = customer; } /** * Set the customer with their current shipping address. */ public void setCustomerWithShipping(Customer customer) { this.customer = customer; this.shippingAddress = customer.getShippingAddress(); } /** * Return details. */ public List<OrderDetail> getDetails() { return details; } /** * Set details. */ public void setDetails(List<OrderDetail> details) { this.details = details; } public void addDetail(OrderDetail detail) { if (details == null) { details = new ArrayList<>(); } details.add(detail); } }