package org.jboss.seam.wiki.core.model;
import org.hibernate.validator.Email;
import org.hibernate.validator.Length;
import org.jboss.seam.wiki.core.search.annotations.Searchable;
import org.jboss.seam.wiki.core.search.annotations.SearchableType;
import org.jboss.seam.wiki.core.search.annotations.CompositeSearchables;
import org.jboss.seam.wiki.core.search.annotations.CompositeSearchable;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Entity
@Table(name = "WIKI_COMMENT")
@org.hibernate.annotations.ForeignKey(name = "FK_WIKI_COMMENT_NODE_ID")
@org.hibernate.search.annotations.Indexed
@Searchable(description = "Comments")
@CompositeSearchables(
@CompositeSearchable(
description = "Content", type = SearchableType.PHRASE,
properties = {"subject", "content"}
)
)
public class WikiComment extends WikiNode<WikiComment> implements Serializable {
@Column(name = "SUBJECT", nullable = false)
@Length(min = 3, max = 255)
@org.hibernate.search.annotations.Field(index = org.hibernate.search.annotations.Index.TOKENIZED)
private String subject;
@Column(name = "FROM_USER_NAME", nullable = true)
@Length(min = 3, max = 100)
private String fromUserName;
@Column(name = "FROM_USER_EMAIL", nullable = true)
@Length(min = 0, max = 255)
@Email
private String fromUserEmail;
@Column(name = "FROM_USER_HOMEPAGE", nullable = true)
@Length(min = 0, max = 1023)
private String fromUserHomepage;
@Column(name = "CONTENT", nullable = false)
@Length(min = 1, max = 32767)
@Basic(fetch = FetchType.LAZY) // Lazy loaded through bytecode instrumentation
@org.hibernate.search.annotations.Field(index = org.hibernate.search.annotations.Index.TOKENIZED)
private String content;
@Column(name = "USE_WIKI_TEXT", nullable = false)
private boolean useWikiText = true;
public String getSubject() { return subject; }
public void setSubject(String subject) { this.subject = subject; }
public String getFromUserName() { return fromUserName; }
public void setFromUserName(String fromUserName) { this.fromUserName = fromUserName; }
public String getFromUserEmail() { return fromUserEmail; }
public void setFromUserEmail(String fromUserEmail) { this.fromUserEmail = fromUserEmail; }
public String getFromUserHomepage() { return fromUserHomepage;}
public void setFromUserHomepage(String fromUserHomepage) { this.fromUserHomepage = fromUserHomepage; }
public String getContent() { return content; }
public void setContent(String content) { this.content = content; }
public boolean isUseWikiText() { return useWikiText; }
public void setUseWikiText(boolean useWikiText) { this.useWikiText = useWikiText; }
public void flatCopy(WikiComment original, boolean copyLazyProperties) {
super.flatCopy(original, copyLazyProperties);
this.subject = original.subject;
this.fromUserName = original.fromUserName;
this.fromUserEmail = original.fromUserEmail;
this.fromUserHomepage = original.fromUserHomepage;
this.useWikiText = original.useWikiText;
if (copyLazyProperties) {
this.content = original.content;
}
}
public WikiComment duplicate(boolean copyLazyProperties) {
WikiComment dupe = new WikiComment();
dupe.flatCopy(this, copyLazyProperties);
return dupe;
}
public String[] getPropertiesForGroupingInQueries() {
return new String[]{
"version", "parent", "rating",
"areaNumber", "name", "wikiname", "createdBy", "createdOn", "messageId",
"lastModifiedBy", "lastModifiedOn", "readAccessLevel", "writeAccessLevel", "writeProtected",
"subject", "fromUserName", "fromUserEmail", "fromUserHomepage", "useWikiText",
};
}
public String[] getLazyPropertiesForGroupingInQueries() {
return new String[] {"content"};
}
public String getPermURL(String suffix) {
return getParent().getId() + suffix + "#comment" + getId();
}
public String getWikiURL() {
return getArea().getWikiname() + "/" + getParent().getWikiname() + "#comment" + getId();
}
public void setDerivedName(WikiNode node) {
setName(node.getName() + ".Comment" + new Date().getTime());
}
public String toString() {
return "Comment (" + getId() + ")," +
" Subject: '" + getSubject() + "'";
}
}