package net.rrm.ehour.domain;
import com.google.common.collect.Lists;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
@Entity
@Table(name = "TIMESHEET_LOCK")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class TimesheetLock extends DomainObject<Integer, TimesheetLock> {
private static final long serialVersionUID = 2546435367535412269L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "LOCK_ID")
private Integer lockId;
@Column(name = "DATE_START")
@NotNull
private Date dateStart;
@Column(name = "DATE_END")
@NotNull
private Date dateEnd;
@Column(name = "NAME")
private String name;
@ManyToMany(targetEntity = User.class, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
@JoinTable(name = "TIMESHEET_LOCK_EXCLUSION",
joinColumns = @JoinColumn(name = "LOCK_ID"),
inverseJoinColumns = @JoinColumn(name = "USER_ID"))
private List<User> excludedUsers = Lists.newArrayList();
public TimesheetLock() {
}
public TimesheetLock(Date dateStart, Date dateEnd) {
this.dateStart = dateStart;
this.dateEnd = dateEnd;
}
public TimesheetLock(Date dateStart, Date dateEnd, List<User> excludedUsers) {
this(dateStart, dateEnd);
this.excludedUsers = excludedUsers;
}
public TimesheetLock(Date dateStart, Date dateEnd, String name, List<User> excludedUsers) {
this(dateStart, dateEnd, excludedUsers);
this.name = name;
}
public TimesheetLock(Integer lockId, Date dateStart, Date dateEnd, String name, List<User> excludedUsers) {
this(dateStart, dateEnd, name, excludedUsers);
this.lockId = lockId;
}
public Integer getLockId() {
return lockId;
}
public void setLockId(Integer lockId) {
this.lockId = lockId;
}
public Date getDateStart() {
return dateStart;
}
public void setDateStart(Date dateStart) {
this.dateStart = dateStart;
}
public Date getDateEnd() {
return dateEnd;
}
public void setDateEnd(Date dateEnd) {
this.dateEnd = dateEnd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getExcludedUsers() {
return excludedUsers;
}
public void setExcludedUsers(List<User> excludedUsers) {
this.excludedUsers = excludedUsers;
}
@Override
public Integer getPK() {
return lockId;
}
@Override
public boolean equals(Object other) {
if (!(other instanceof TimesheetLock)) {
return false;
}
TimesheetLock castOther = (TimesheetLock) other;
return new EqualsBuilder()
.append(dateStart, castOther.dateStart)
.append(dateEnd, castOther.dateEnd)
.append(name, castOther.name)
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(dateStart)
.append(dateEnd)
.append(name).toHashCode();
}
@Override
public int compareTo(TimesheetLock other) {
return new CompareToBuilder()
.append(dateStart, other.dateStart)
.append(dateEnd, other.dateEnd)
.append(name, other.name)
.toComparison();
}
}