package com.aperture_software.glados_wiki.entities;
import com.aperture_software.glados_wiki.entities.page_acl.DefaultAclPolicy;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.bson.types.ObjectId;
import org.mongodb.morphia.annotations.Entity;
import org.mongodb.morphia.annotations.Id;
import org.mongodb.morphia.annotations.Indexed;
import org.mongodb.morphia.annotations.Reference;
import org.mongodb.morphia.utils.IndexDirection;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: jhyun
* Date: 13. Nov. 15
* Time: 14:09
*/
@Entity
public class Page implements Serializable, Cloneable {
private static final long serialVersionUID = -5493099655093174578L;
@Id
private ObjectId id;
@NotNull
@Indexed(value = IndexDirection.ASC, background = true, unique = true, dropDups = false)
private String title;
@Reference(ignoreMissing = true)
private PageContent current;
@Reference(ignoreMissing = true)
private List<PageContent> versions = new ArrayList<PageContent>();
private Date ctime = new Date();
private Date mtime;
private String aclForEveryone = DefaultAclPolicy.NONE;
@Reference(ignoreMissing = true)
private List<UserAuthentication> readables = new ArrayList<UserAuthentication>();
@Reference(ignoreMissing = true)
private List<UserAuthentication> writables = new ArrayList<UserAuthentication>();
@Reference
private List<String> tags = new ArrayList<String>();
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public PageContent getCurrent() {
return current;
}
public void setCurrent(PageContent current) {
this.current = current;
}
public List<PageContent> getVersions() {
return versions;
}
public void setVersions(List<PageContent> versions) {
this.versions = versions;
}
public Date getCtime() {
return ctime;
}
public void setCtime(Date ctime) {
this.ctime = ctime;
}
public Date getMtime() {
return mtime;
}
public void setMtime(Date mtime) {
this.mtime = mtime;
}
public List<UserAuthentication> getReadables() {
return readables;
}
public void setReadables(List<UserAuthentication> readables) {
this.readables = readables;
}
public List<UserAuthentication> getWritables() {
return writables;
}
public void setWritables(List<UserAuthentication> writables) {
this.writables = writables;
}
public String getAclForEveryone() {
return aclForEveryone;
}
public void setAclForEveryone(String aclForEveryone) {
this.aclForEveryone = aclForEveryone;
}
public List<String> getTags() {
return tags;
}
public void setTags(List<String> tags) {
this.tags = tags;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}