/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package net.rrm.ehour.domain;
import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.Type;
import org.joda.time.DateTimeZone;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.util.Set;
// Generated Sep 26, 2006 11:58:17 PM by Hibernate Tools 3.2.0.beta7
@Entity
@Table(name = "USER_DEPARTMENT")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class UserDepartment extends DomainObject<Integer, UserDepartment> {
private static final long serialVersionUID = 7802944013593353L;
@Transient
private boolean deletable;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "DEPARTMENT_ID")
private Integer departmentId;
@NotNull
@Column(name = "NAME", nullable = false, length = 512)
private String name;
@NotNull
@Column(name = "CODE", nullable = false, length = 64)
private String code;
@ManyToOne(optional = true)
@JoinColumn(name = "MANAGER_USER_ID")
private User manager;
@Column(name = "timezone", nullable = true)
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTimeZoneAsString")
private DateTimeZone timeZone;
@ManyToOne(optional = true)
@JoinColumn(name = "PARENT_DEPARTMENT_ID")
private UserDepartment parentUserDepartment;
@OneToMany(cascade = {CascadeType.ALL}, mappedBy = "parentUserDepartment", orphanRemoval = true)
private Set<UserDepartment> childrenUserDepartments;
@ManyToMany(mappedBy = "userDepartments")
private Set<User> users;
public UserDepartment() {
}
public UserDepartment(Integer departmentId) {
this.departmentId = departmentId;
}
public UserDepartment(Integer departmentId, String name, String code) {
this.departmentId = departmentId;
this.name = name;
this.code = code;
}
public UserDepartment(Integer departmentId, String name, String code, Set<User> users) {
this.departmentId = departmentId;
this.name = name;
this.code = code;
this.users = users;
}
public boolean isRoot() {
return parentUserDepartment == null;
}
public Integer getDepartmentId() {
return this.departmentId;
}
public void setDepartmentId(Integer departmentId) {
this.departmentId = departmentId;
}
public String getName() {
return this.name;
}
@Override
public String getFullName() {
return getCode() + " - " + getName();
}
@Override
public Integer getPK() {
return departmentId;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof UserDepartment)) {
return false;
}
UserDepartment o = (UserDepartment) object;
return new EqualsBuilder()
.append(getCode(), o.getCode())
.append(getName(), o.getName())
.append(getManager(), o.getManager())
.append(getTimeZone(), o.getTimeZone())
.append(getParentUserDepartment(), o.getParentUserDepartment())
.isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder()
.append(getCode())
.append(getName())
.append(getManager())
.append(getTimeZone())
.append(getParentUserDepartment())
.toHashCode();
}
@Override
public int compareTo(UserDepartment o) {
return new CompareToBuilder()
.append(getCode(), o.getCode())
.append(getName(), o.getName())
.toComparison();
}
public void setName(String name) {
this.name = name;
}
public String getCode() {
return this.code;
}
public void setCode(String code) {
this.code = code;
}
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
public boolean isDeletable() {
return deletable;
}
public void setDeletable(boolean deletable) {
this.deletable = deletable;
}
public User getManager() {
return manager;
}
public void setManager(User manager) {
this.manager = manager;
}
public DateTimeZone getTimeZone() {
return timeZone;
}
public void setTimeZone(DateTimeZone timeZone) {
this.timeZone = timeZone;
}
public UserDepartment getParentUserDepartment() {
return parentUserDepartment;
}
public void setParentUserDepartment(UserDepartment parentUserDepartment) {
this.parentUserDepartment = parentUserDepartment;
}
public Set<UserDepartment> getChildrenUserDepartments() {
return childrenUserDepartments;
}
public void setChildrenUserDepartments(Set<UserDepartment> childrenUserDepartments) {
this.childrenUserDepartments = childrenUserDepartments;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}