//$Id$
package org.hibernate.ejb.test.cascade;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PreRemove;
import javax.persistence.Table;
import javax.persistence.Transient;
/**
* @author Emmanuel Bernard
*/
@Entity
@Table(name = "portal_pk_docs_extraction_info")
//@Cache(usage = READ_WRITE)
@org.hibernate.annotations.Entity(dynamicInsert = true, dynamicUpdate = true)
public class ExtractionDocumentInfo implements Serializable {
private Long id;
private Date lastModified;
private Conference conference;
private List<ExtractionDocument> documents;
public ExtractionDocumentInfo() {
lastModified = new Date();
}
public ExtractionDocumentInfo(Conference conference) {
this.conference = conference;
lastModified = new Date();
documents = new ArrayList<ExtractionDocument>();
documents.add( new ExtractionDocument( this ) );
}
@Transient
public ExtractionDocument getDocument() {
if ( documents.isEmpty() ) {
documents.add( new ExtractionDocument( this ) );
}
Iterator<ExtractionDocument> iterator = documents.iterator();
return iterator.next();
}
@Transient
public byte[] getBody() {
return getDocument().getBody();
}
public void setBody(byte[] body) {
getDocument().setBody( body );
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@OneToMany(mappedBy = "documentInfo", cascade = CascadeType.ALL)
public List<ExtractionDocument> getDocuments() {
return documents;
}
public void setDocuments(List<ExtractionDocument> documents) {
this.documents = documents;
}
@ManyToOne
@JoinColumn(name = "conference_id")
public Conference getConference() {
return conference;
}
public void setConference(Conference conference) {
this.conference = conference;
}
@Column(name = "last_modified", nullable = false)
public Date getLastModified() {
return lastModified;
}
public void setLastModified(Date lastModified) {
this.lastModified = lastModified;
}
public boolean equals(Object o) {
if ( this == o ) return true;
if ( !( o instanceof ExtractionDocumentInfo ) ) return false;
final ExtractionDocumentInfo newsInfo = (ExtractionDocumentInfo) o;
return id.equals( newsInfo.id );
}
public int hashCode() {
return id.hashCode();
}
@PreRemove
public void preRemove() {
getConference().setExtractionDocument( null );
}
}