package edu.ualberta.med.biobank.model; import java.util.Date; import java.util.HashSet; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.validation.constraints.NotNull; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.CascadeType; import org.hibernate.annotations.Type; import org.hibernate.validator.constraints.NotEmpty; import edu.ualberta.med.biobank.validator.constraint.NotUsed; import edu.ualberta.med.biobank.validator.constraint.Unique; import edu.ualberta.med.biobank.validator.group.PreDelete; import edu.ualberta.med.biobank.validator.group.PrePersist; @Entity @Table(name = "PROCESSING_EVENT") @NotUsed.List({ @NotUsed(by = Specimen.class, property = "processingEvent", groups = PreDelete.class), @NotUsed(by = Specimen.class, property = "parentSpecimen.processingEvent", groups = PreDelete.class) }) @Unique(properties = "worksheet", groups = PrePersist.class) public class ProcessingEvent extends AbstractBiobankModel { private static final long serialVersionUID = 1L; private String worksheet; private Date createdAt; private Center center; private Set<Specimen> specimens = new HashSet<Specimen>(0); private ActivityStatus activityStatus = ActivityStatus.ACTIVE; private Set<Comment> comments = new HashSet<Comment>(0); @NotEmpty(message = "{edu.ualberta.med.biobank.model.ProcessingEvent.worksheet.NotEmpty}") @Column(name = "WORKSHEET", length = 150, unique = true) public String getWorksheet() { return this.worksheet; } public void setWorksheet(String worksheet) { this.worksheet = worksheet; } @NotNull(message = "{edu.ualberta.med.biobank.model.ProcessingEvent.createdAt.NotNull}") @Column(name = "CREATED_AT", nullable = false) public Date getCreatedAt() { return this.createdAt; } public void setCreatedAt(Date createdAt) { this.createdAt = createdAt; } @NotNull(message = "{edu.ualberta.med.biobank.model.ProcessingEvent.center.NotNull}") @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "CENTER_ID", nullable = false) public Center getCenter() { return this.center; } public void setCenter(Center center) { this.center = center; } @OneToMany(fetch = FetchType.LAZY, mappedBy = "processingEvent") @Cascade({ CascadeType.SAVE_UPDATE }) public Set<Specimen> getSpecimens() { return this.specimens; } public void setSpecimens(Set<Specimen> specimens) { this.specimens = specimens; } @NotNull(message = "{edu.ualberta.med.biobank.model.ProcessingEvent.activityStatus.NotNull}") @Column(name = "ACTIVITY_STATUS_ID", nullable = false) @Type(type = "activityStatus") public ActivityStatus getActivityStatus() { return this.activityStatus; } public void setActivityStatus(ActivityStatus activityStatus) { this.activityStatus = activityStatus; } @ManyToMany(cascade = javax.persistence.CascadeType.REMOVE, fetch = FetchType.LAZY) @JoinTable(name = "PROCESSING_EVENT_COMMENT", joinColumns = { @JoinColumn(name = "PROCESSING_EVENT_ID", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "COMMENT_ID", unique = true, nullable = false, updatable = false) }) public Set<Comment> getComments() { return this.comments; } public void setComments(Set<Comment> comments) { this.comments = comments; } }