package org.kalipo.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import org.joda.time.DateTime;
import org.kalipo.config.Constants;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.mongodb.core.mapping.Document;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
/**
* A Thread.
*/
@Document(collection = "T_THREAD")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Thread implements Serializable {
@Id
private String id;
/**
* todo the amount of url is defined via Roles
*/
private Set<String> uriHooks = new HashSet<>();
@NotNull(message = "{constraint.notnull.title}")
@Size(min = 10, max = 64)
private String title;
@CreatedDate
private DateTime createdDate;
@JsonIgnore
@LastModifiedDate
private DateTime lastModifiedDate;
private Integer commentCount = 0;
private Integer pendingCount = 0;
@JsonIgnore
@NotNull(message = "{constraint.notnull.initiatorId}")
private String initiatorId;
@NotNull
private String displayName;
/**
* Sum of all comment likes in discussion
*/
private Integer likes = 0;
/**
* Sum of all comment dislikes in discussion
*/
private Integer dislikes = 0;
/**
* minimal user-reputation required to participate the discussion
* todo impl
*/
private Integer reputationChallenge = 0;
/**
* hide thread from listings/search
*/
private Boolean hidden;
/**
* score represents the current hotness
*/
private double score;
private Status status;
private Set<String> tags;
@NotNull(message = "{constraint.notnull.body}")
@Size(min = 2, max = Constants.LIM_MAX_LEN_BODY, message = "{constraint.length.body}")
private String body;
private String bodyHtml;
@Size(max = Constants.LIM_MAX_LEN_URL, message = "{constraint.length.link}")
private String link;
private String domain;
@NotNull
private String siteId;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getSiteId() {
return siteId;
}
public void setSiteId(String siteId) {
this.siteId = siteId;
}
public Set<String> getUriHooks() {
return uriHooks;
}
public void setUriHooks(Set<String> uriHooks) {
this.uriHooks = uriHooks;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public DateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(DateTime createdDate) {
this.createdDate = createdDate;
}
public DateTime getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(DateTime lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
public Integer getCommentCount() {
return commentCount;
}
public void setCommentCount(Integer commentCount) {
this.commentCount = commentCount;
}
public Integer getLikes() {
return likes;
}
public void setLikes(Integer likes) {
this.likes = likes;
}
public Integer getDislikes() {
return dislikes;
}
public void setDislikes(Integer dislikes) {
this.dislikes = dislikes;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getInitiatorId() {
return initiatorId;
}
public void setInitiatorId(String initiatorId) {
this.initiatorId = initiatorId;
}
public Integer getPendingCount() {
return pendingCount;
}
public void setPendingCount(Integer pendingCount) {
this.pendingCount = pendingCount;
}
public String getBodyHtml() {
return bodyHtml;
}
public void setBodyHtml(String bodyHtml) {
this.bodyHtml = bodyHtml;
}
public Integer getReputationChallenge() {
return reputationChallenge;
}
public void setReputationChallenge(Integer reputationChallenge) {
this.reputationChallenge = reputationChallenge;
}
public String getDomain() {
return domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public Boolean getHidden() {
return hidden;
}
public void setHidden(Boolean hidden) {
this.hidden = hidden;
}
public Set<String> getTags() {
return tags;
}
public void setTags(Set<String> tags) {
this.tags = tags;
}
/**
* Created by damoeb on 7/28/14.
*/
public enum Status {
OPEN, LOCKED, CLOSED
}
}