package pl.com.bottega.documentmanagement.domain; import com.google.common.base.Objects; import javax.persistence.*; import java.util.Date; /** * Created by maciuch on 07.08.16. */ @Entity public class Reader { @Id @GeneratedValue private Long id; @ManyToOne private Document document; @ManyToOne(cascade = CascadeType.ALL) private Employee employee; private boolean confirmed; @Temporal(TemporalType.TIMESTAMP) private Date confirmedAt; @ManyToOne private Employee confirmedBy; Reader() {} public Reader(Document document, Employee employee) { this.document = document; this.employee = employee; } public boolean confirmed() { return confirmed; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Reader reader = (Reader) o; return confirmed == reader.confirmed && Objects.equal(document, reader.document) && Objects.equal(employee, reader.employee) && Objects.equal(confirmedBy, reader.confirmedBy); } @Override public int hashCode() { return Objects.hashCode(document, employee, confirmed, confirmedBy); } public Date confirmedAt() { return confirmedAt; } public boolean concernsEmployee(Employee employee) { return this.employee.equals(employee); } void confirm() { confirmed = true; confirmedAt = new Date(); } public Employee confirmedBy() { return confirmedBy; } public void confirm(Employee confirmator) { confirm(); this.confirmedBy = confirmator; } public EmployeeId employeeId() { return employee.employeeId(); } }