package cz.coffei.foodo.data.entities;
import cz.coffei.foodo.data.enums.OrderStatus;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import javax.persistence.*;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
import java.time.LocalTime;
import java.util.List;
/**
* Created by jtrantin on 25.7.15.
*/
@Table(name = "order_entity")
@Entity
public class Order {
@Id
@GeneratedValue
private Long id;
@NotNull
@NotEmpty
private String customerName;
@Email // can be null
private String customeremail;
private boolean takeaway;
@NotNull
@Min(value = 0)
private Integer totalPrice;
@NotNull
private Timestamp created;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "order", orphanRemoval = true)
private List<OrderItem> orderItems;
private LocalTime targetTime;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomeremail() {
return customeremail;
}
public void setCustomeremail(String customeremail) {
this.customeremail = customeremail;
}
public boolean isTakeaway() {
return takeaway;
}
public void setTakeaway(boolean takeaway) {
this.takeaway = takeaway;
}
public Integer getTotalPrice() {
return totalPrice;
}
public void setTotalPrice(Integer totalPrice) {
this.totalPrice = totalPrice;
}
public List<OrderItem> getOrderItems() {
return orderItems;
}
public void setOrderItems(List<OrderItem> orderItems) {
this.orderItems = orderItems;
}
/**
* @return timestamp representing a point of creation. The time is in UTC!
*/
public Timestamp getCreated() {
return created;
}
/**
* Sets the point of creation. The timestamp is representing UTC time!
* @param created
*/
public void setCreated(Timestamp created) {
this.created = created;
}
public OrderStatus getStatus() {
return status;
}
public void setStatus(OrderStatus status) {
this.status = status;
}
public LocalTime getTargetTime() {
return targetTime;
}
public void setTargetTime(LocalTime targetTime) {
this.targetTime = targetTime;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Order order = (Order) o;
if (takeaway != order.takeaway) return false;
if (id != null ? !id.equals(order.id) : order.id != null) return false;
if (customerName != null ? !customerName.equals(order.customerName) : order.customerName != null) return false;
if (customeremail != null ? !customeremail.equals(order.customeremail) : order.customeremail != null)
return false;
if (totalPrice != null ? !totalPrice.equals(order.totalPrice) : order.totalPrice != null) return false;
if (created != null ? !created.equals(order.created) : order.created != null) return false;
if (status != order.status) return false;
if (orderItems != null ? !orderItems.equals(order.orderItems) : order.orderItems != null) return false;
return !(targetTime != null ? !targetTime.equals(order.targetTime) : order.targetTime != null);
}
@Override
public int hashCode() {
int result = id != null ? id.hashCode() : 0;
result = 31 * result + (customerName != null ? customerName.hashCode() : 0);
result = 31 * result + (customeremail != null ? customeremail.hashCode() : 0);
result = 31 * result + (takeaway ? 1 : 0);
result = 31 * result + (totalPrice != null ? totalPrice.hashCode() : 0);
result = 31 * result + (created != null ? created.hashCode() : 0);
result = 31 * result + (status != null ? status.hashCode() : 0);
result = 31 * result + (orderItems != null ? orderItems.hashCode() : 0);
result = 31 * result + (targetTime != null ? targetTime.hashCode() : 0);
return result;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", customerName='" + customerName + '\'' +
", customeremail='" + customeremail + '\'' +
", takeaway=" + takeaway +
", totalPrice=" + totalPrice +
", created=" + created +
", status=" + status +
", orderItems=" + orderItems +
", targetTime=" + targetTime +
'}';
}
}