package no.niths.domain.school;
import javax.persistence.Column;
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.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import no.niths.common.constants.DomainConstantNames;
import no.niths.domain.Domain;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
/**
* Domain class for Subject
*
* <p>
* Subject has these variables:
* lockerNumber = example 23 (must be unique)
* </p>
* <p>
* And relations too:
* Student (as owner)
* </p>
*/
@Entity
@XmlRootElement(name = DomainConstantNames.LOCKERS)
@Table(name = DomainConstantNames.LOCKERS)
@XmlAccessorType(XmlAccessType.FIELD)
@JsonSerialize(include = Inclusion.NON_NULL)
public class Locker implements Domain {
@Transient
private static final long serialVersionUID = -1430199434685615379L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "locker_number", unique = true)
@Pattern(regexp = "\\d{1,3}", message = "Invalid locker number")
@XmlElement(name = "lockernumber")
private String lockerNumber;
@JsonSerialize(as = Student.class)
@ManyToOne(fetch = FetchType.LAZY, targetEntity = Student.class)
@JoinTable(
name = "students_lockers",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "locker_id"))
private Student owner;
public Locker(Long id, String lockerNumber) {
this.id = id;
this.lockerNumber = lockerNumber;
}
public Locker() {
this(null,null);
setOwner(null);
}
public Locker(Long id) {
this.id = id;
}
public Locker(String lockerNumber) {
this.lockerNumber = lockerNumber;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLockerNumber() {
return lockerNumber;
}
public void setLockerNumber(String lockerNumber) {
this.lockerNumber = lockerNumber;
}
public Student getOwner() {
return owner;
}
public void setOwner(Student owner) {
this.owner = owner;
}
@Override
public boolean equals(Object obj) {
boolean equal = false;
if (obj instanceof Locker) {
Locker locker = (Locker) obj;
equal = locker == this
? true : locker.getId() == id
|| locker.getLockerNumber() == lockerNumber
? true : false;
}
return equal;
}
}