package models;
import java.util.Date;
import java.util.Set;
import java.util.UUID;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.Version;
import play.data.validation.Constraints.MaxLength;
import play.data.validation.Constraints.Required;
import play.db.ebean.Model;
import play.utils.dao.TimestampModel;
@Entity
@Table(name="TBL_POST")
@SuppressWarnings("serial")
public class Post extends Model implements TimestampModel<Long>, Owned<Long>, ActionSubject, ReputationSubject {
@Id
private Long key;
@Required
@Column(length=512, nullable = true)
@MaxLength(120)
private String title;
@Required
@Column(length=2048, nullable = true)
@MaxLength(2000)
private String content;
@Basic
private Integer rating = 0;
@Basic
private Date createdOn;
@Basic
private Date updatedOn;
@Basic
private Date approvedOn;
@Version
private int version;
@Basic
private String creatorIp;
@Basic
private String modifierIp;
@OneToOne()
private S3File image;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "post")
private Set<Comment> comments;
@ManyToOne
@JoinColumn(name = "created_by", nullable = false)
private User createdBy;
@ManyToOne
@JoinColumn(name = "updated_by", nullable = true)
private User updatedBy;
@ManyToOne
@JoinColumn(name = "approved_by", nullable = true)
private User approvedBy;
@ManyToOne
@JoinColumn(name = "category", nullable = false)
private Category category;
@Enumerated(value=EnumType.STRING)
private ContentStatus status = ContentStatus.NEW;
@Transient
private UUID imageKey;
@Override
public void associate(Action action) {
action.setTargetPost(this);
}
public Long getKey() {
return key;
}
public void setKey(Long key) {
this.key = key;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Set<Comment> getComments() {
return comments;
}
public void setComments(Set<Comment> comments) {
this.comments = comments;
}
public Date getCreatedOn() {
return createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
public Date getUpdatedOn() {
return updatedOn;
}
public void setUpdatedOn(Date updatedOn) {
this.updatedOn = updatedOn;
}
public User getCreatedBy() {
return createdBy;
}
public void setCreatedBy(User createdBy) {
this.createdBy = createdBy;
}
public User getUpdatedBy() {
return updatedBy;
}
public void setUpdatedBy(User updatedBy) {
this.updatedBy = updatedBy;
}
public Date getApprovedOn() {
return approvedOn;
}
public void setApprovedOn(Date approvedOn) {
this.approvedOn = approvedOn;
}
public User getApprovedBy() {
return approvedBy;
}
public void setApprovedBy(User approvedBy) {
this.approvedBy = approvedBy;
}
public Integer getRating() {
return rating;
}
public void setRating(Integer rating) {
this.rating = rating;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public S3File getImage() {
return image;
}
public void setImage(S3File image) {
this.image = image;
}
public String getCreatorIp() {
return creatorIp;
}
public void setCreatorIp(String ipToSet) {
this.creatorIp = ipToSet;
}
public String getModifierIp() {
return modifierIp;
}
public void setModifierIp(String ipToSet) {
this.modifierIp=ipToSet;
}
public int getVersion() {
return version;
}
public void setVersion(int version) {
this.version = version;
}
public int getRevision() {
return version;
}
public void setRevision(int revision) {
this.version = revision;
}
public ContentStatus getStatus() {
return status;
}
public void setStatus(ContentStatus status) {
this.status = status;
}
public UUID getImageKey() {
return imageKey;
}
public void setImageKey(UUID imageKey) {
this.imageKey = imageKey;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Post [key=").append(key).append(", version=")
.append(version).append(", title=").append(title)
.append(", content=").append(content).append(", rating=")
.append(rating).append(", createdOn=").append(createdOn)
.append(", updatedOn=").append(updatedOn)
.append(", creatorIp=").append(creatorIp)
.append(", modifierIp=").append(modifierIp).append(", image=")
.append(image).append(", comments=").append(comments)
.append(", createdBy=").append(createdBy)
.append(", updatedBy=").append(updatedBy).append(", category=")
.append(category).append("]");
return builder.toString();
}
}