package org.atomhopper.adapter.jpa;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.io.Serializable;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.TimeZone;
@Entity
@Table(name = "Entries")
public class PersistedEntry implements Serializable {
@Id
@Column(name = "EntryID")
private String entryId;
@Basic(optional = false)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "Feed")
private PersistedFeed feed;
@ManyToMany(fetch = FetchType.LAZY, cascade={CascadeType.ALL})
@JoinTable(name = "CategoryEntryReferences",
joinColumns = {
@JoinColumn(name = "entryId", referencedColumnName = "EntryID")},
inverseJoinColumns = {
@JoinColumn(name = "category", referencedColumnName = "Term")})
private Set<PersistedCategory> categories;
@Column(name = "EntryBody")
@Lob
private String entryBody;
@Basic(optional = false)
@Column(name = "CreationDate")
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Basic(optional = false)
@Column(name = "DateLastUpdated")
@Temporal(TemporalType.TIMESTAMP)
private Date dateLastUpdated;
public PersistedEntry() {
categories = Collections.EMPTY_SET;
final Calendar localNow = Calendar.getInstance(TimeZone.getDefault());
localNow.setTimeInMillis(System.currentTimeMillis());
creationDate = localNow.getTime();
dateLastUpdated = localNow.getTime();
}
public PersistedEntry(String entryId) {
this();
categories = new HashSet<PersistedCategory>();
this.entryId = entryId;
}
public Date getCreationDate() {
return (Date) creationDate.clone();
}
public void setCreationDate(Date creationDate) {
this.creationDate = (Date) creationDate.clone();
}
public Date getDateLastUpdated() {
return (Date) dateLastUpdated.clone();
}
public void setDateLastUpdated(Date dateLastUpdated) {
this.dateLastUpdated = (Date) dateLastUpdated.clone();
}
public Set<PersistedCategory> getCategories() {
return categories;
}
public void setCategories(Set<PersistedCategory> categories) {
this.categories = categories;
}
public String getEntryBody() {
return entryBody;
}
public void setEntryBody(String entryBody) {
this.entryBody = entryBody;
}
public PersistedFeed getFeed() {
return feed;
}
public void setFeed(PersistedFeed feed) {
this.feed = feed;
}
public String getEntryId() {
return entryId;
}
public void setEntryId(String entryId) {
this.entryId = entryId;
}
}