package de.dhbw.humbuch.model.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; /** * @author David Vitt * */ @Entity @Table(name="schoolYear") public class SchoolYear implements de.dhbw.humbuch.model.entity.Entity, Serializable, Comparable<SchoolYear> { private static final long serialVersionUID = -3752454317452902743L; @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String year; private Date fromDate; private Date toDate; private Date endFirstTerm; private Date beginSecondTerm; /** * Required by Hibernate.<p> * Use the {@link Builder} instead. * * @see Builder */ @Deprecated public SchoolYear() {} public int getId() { return id; } public void setId(int id) { this.id = id; } public String getYear() { return year; } public void setYear(String year) { this.year = year; } public Date getFromDate() { return fromDate; } public void setFromDate(Date fromDate) { this.fromDate = fromDate; } public Date getToDate() { return toDate; } public void setToDate(Date toDate) { this.toDate = toDate; } public Date getEndFirstTerm() { return endFirstTerm; } public void setEndFirstTerm(Date endFirstTerm) { this.endFirstTerm = endFirstTerm; } public Date getBeginSecondTerm() { return beginSecondTerm; } public void setBeginSecondTerm(Date beginSecondTerm) { this.beginSecondTerm = beginSecondTerm; } public Date getEndOf(Term term) { return term == Term.FIRST ? getEndFirstTerm() : getToDate(); } public Term getRecentlyActiveTerm() { return getBeginSecondTerm().after(new Date()) ? Term.FIRST : Term.SECOND; } public boolean isActive() { Date today = new Date(); return getFromDate().before(today) && getToDate().after(today) ? true : false; } public enum Term { FIRST("1. Halbjahr"), SECOND("2. Halbjahr"); private String value; private Term(String value) { this.value = value; } @Override public String toString() { return value; } } public static class Builder { private final String year; private final Date fromDate; private final Date toDate; private Date endFirstTerm; private Date beginSecondTerm; public Builder(String year, Date fromDate, Date toDate) { this.year = year; this.fromDate = fromDate; this.toDate = toDate; } public Builder endFirstTerm(Date endFirstTerm) { this.endFirstTerm = endFirstTerm; return this; } public Builder beginSecondTerm(Date beginSecondTerm) { this.beginSecondTerm = beginSecondTerm; return this; } public SchoolYear build() { return new SchoolYear(this); } } private SchoolYear(Builder builder) { this.year = builder.year; this.fromDate = builder.fromDate; this.toDate = builder.toDate; this.endFirstTerm = builder.endFirstTerm; this.beginSecondTerm = builder.beginSecondTerm; } @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 SchoolYear)) return false; SchoolYear other = (SchoolYear) obj; if (getId() != other.getId()) return false; return true; } @Override public int compareTo(SchoolYear o) { int compareResult = getFromDate().compareTo(o.getFromDate()); if(compareResult != 0) { return compareResult; } return Integer.compare(hashCode(), o.hashCode()); } }