class Order {

	public static final String LINE_ID_HEADER = "HEA";

	public static final String LINE_ID_FOOTER = "FOT";

	// header
	private long orderId;

	private Date orderDate;

	// footer
	private int totalLines;

	private int totalItems;

	private BigDecimal totalPrice;

	private Customer customer;

	private Address billingAddress;

	private Address shippingAddress;

	private BillingInfo billing;

	private ShippingInfo shipping;

	// order items
	private List<LineItem> lineItems;

	public BillingInfo getBilling() {
		return billing;
	}

	public void setBilling(BillingInfo billing) {
		this.billing = billing;
	}

	public Address getBillingAddress() {
		return billingAddress;
	}

	public void setBillingAddress(Address billingAddress) {
		this.billingAddress = billingAddress;
	}

	public Customer getCustomer() {
		return customer;
	}

	public void setCustomer(Customer customer) {
		this.customer = customer;
	}

	public List<LineItem> getLineItems() {
		return lineItems;
	}

	public void setLineItems(List<LineItem> lineItems) {
		this.lineItems = lineItems;
	}

	public Date getOrderDate() {
		return orderDate;
	}

	public void setOrderDate(Date orderDate) {
		this.orderDate = orderDate;
	}

	public long getOrderId() {
		return orderId;
	}

	public void setOrderId(long orderId) {
		this.orderId = orderId;
	}

	public ShippingInfo getShipping() {
		return shipping;
	}

	public void setShipping(ShippingInfo shipping) {
		this.shipping = shipping;
	}

	public Address getShippingAddress() {
		return shippingAddress;
	}

	public void setShippingAddress(Address shippingAddress) {
		this.shippingAddress = shippingAddress;
	}

	public BigDecimal getTotalPrice() {
		return totalPrice;
	}

	public void setTotalPrice(BigDecimal totalPrice) {
		this.totalPrice = totalPrice;
	}

	public int getTotalItems() {
		return totalItems;
	}

	public void setTotalItems(int totalItems) {
		this.totalItems = totalItems;
	}

	public int getTotalLines() {
		return totalLines;
	}

	public void setTotalLines(int totalLines) {
		this.totalLines = totalLines;
	}

	@Override
	public String toString() {
		return "Order [customer=" + customer + ", orderId=" + orderId + ", totalItems=" + totalItems + ", totalPrice="
				+ totalPrice + "]";
	}

	@Override
	public int hashCode() {<FILL_FUNCTION_BODY>}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		Order other = (Order) obj;
		if (billing == null) {
			if (other.billing != null) {
				return false;
			}
		}
		else if (!billing.equals(other.billing)) {
			return false;
		}
		if (billingAddress == null) {
			if (other.billingAddress != null) {
				return false;
			}
		}
		else if (!billingAddress.equals(other.billingAddress)) {
			return false;
		}
		if (customer == null) {
			if (other.customer != null) {
				return false;
			}
		}
		else if (!customer.equals(other.customer)) {
			return false;
		}
		if (lineItems == null) {
			if (other.lineItems != null) {
				return false;
			}
		}
		else if (!lineItems.equals(other.lineItems)) {
			return false;
		}
		if (orderDate == null) {
			if (other.orderDate != null) {
				return false;
			}
		}
		else if (!orderDate.equals(other.orderDate)) {
			return false;
		}
		if (orderId != other.orderId) {
			return false;
		}
		if (shipping == null) {
			if (other.shipping != null) {
				return false;
			}
		}
		else if (!shipping.equals(other.shipping)) {
			return false;
		}
		if (shippingAddress == null) {
			if (other.shippingAddress != null) {
				return false;
			}
		}
		else if (!shippingAddress.equals(other.shippingAddress)) {
			return false;
		}
		if (totalItems != other.totalItems) {
			return false;
		}
		if (totalLines != other.totalLines) {
			return false;
		}
		if (totalPrice == null) {
			if (other.totalPrice != null) {
				return false;
			}
		}
		else if (!totalPrice.equals(other.totalPrice)) {
			return false;
		}

		return true;
	}

}

		final int prime = 31;
		int result = 1;
		result = prime * result + ((billing == null) ? 0 : billing.hashCode());
		result = prime * result + ((billingAddress == null) ? 0 : billingAddress.hashCode());
		result = prime * result + ((customer == null) ? 0 : customer.hashCode());
		result = prime * result + ((lineItems == null) ? 0 : lineItems.hashCode());
		result = prime * result + ((orderDate == null) ? 0 : orderDate.hashCode());
		result = prime * result + (int) (orderId ^ (orderId >>> 32));
		result = prime * result + ((shipping == null) ? 0 : shipping.hashCode());
		result = prime * result + ((shippingAddress == null) ? 0 : shippingAddress.hashCode());
		result = prime * result + totalItems;
		result = prime * result + totalLines;
		result = prime * result + ((totalPrice == null) ? 0 : totalPrice.hashCode());
		return result;
	
<no_super_class>