package de.dhbw.humbuch.model.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; /** * @author David Vitt * */ @Entity @Table(name="borrowedMaterial") public class BorrowedMaterial implements de.dhbw.humbuch.model.entity.Entity, Serializable, Comparable<BorrowedMaterial> { private static final long serialVersionUID = -7956138735111492455L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @ManyToOne(fetch=FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @JoinColumn(name="studentId", referencedColumnName="id") private Student student; @ManyToOne(fetch=FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @JoinColumn(name="teachingMaterialId", referencedColumnName="id") private TeachingMaterial teachingMaterial; private Date borrowFrom; private Date borrowUntil; private Date returnDate; private boolean received; /** * Required by Hibernate.<p> * Use the {@link Builder} instead. * * @see Builder */ @Deprecated public BorrowedMaterial() {} public int getId() { return id; } public void setId(int id) { this.id = id; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public TeachingMaterial getTeachingMaterial() { return teachingMaterial; } public void setTeachingMaterial(TeachingMaterial teachingMaterial) { this.teachingMaterial = teachingMaterial; } public Date getBorrowFrom() { return borrowFrom; } public void setBorrowFrom(Date borrowFrom) { this.borrowFrom = borrowFrom; } public Date getBorrowUntil() { return borrowUntil; } public void setBorrowUntil(Date borrowUntil) { this.borrowUntil = borrowUntil; } public Date getReturnDate() { return returnDate; } public void setReturnDate(Date returnDate) { this.returnDate = returnDate; } public boolean isReceived() { return received; } public boolean isReturned() { return getReturnDate() != null ? true : false; } public void setReceived(boolean received) { this.received = received; } public static class Builder { private final Student student; private final TeachingMaterial teachingMaterial; private final Date borrowFrom; private Date borrowUntil; private Date returnDate; private boolean received; public Builder(Student student, TeachingMaterial teachingMaterial, Date borrowFrom) { this.student = student; this.teachingMaterial = teachingMaterial; this.borrowFrom = borrowFrom; } public Builder borrowUntil(Date borrowUntil) { this.borrowUntil = borrowUntil; return this; } public Builder returnDate(Date returnDate) { this.returnDate = returnDate; return this; } public Builder received(boolean received) { this.received = received; return this; } public BorrowedMaterial build() { return new BorrowedMaterial(this); } } private BorrowedMaterial(Builder builder) { this.student = builder.student; this.teachingMaterial = builder.teachingMaterial; this.borrowFrom = builder.borrowFrom; this.borrowUntil = builder.borrowUntil; this.returnDate = builder.returnDate; this.received = builder.received; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof BorrowedMaterial)) return false; BorrowedMaterial other = (BorrowedMaterial) obj; if (getId() != other.getId()) return false; return true; } @Override public int compareTo(BorrowedMaterial o) { int compareResult = getTeachingMaterial().compareTo(o.getTeachingMaterial()); if(compareResult != 0) { return compareResult; } return Integer.compare(hashCode(), o.hashCode()); } }