package persistency.entities;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Transient;
@NamedQueries({
@NamedQuery(name = "allComments", query = "SELECT e FROM Comment e WHERE e.session.id = :id"),
@NamedQuery(name = "allCommentsRaw", query = "SELECT e FROM Comment e"),
@NamedQuery(name = "allCommentsByUser", query = "SELECT e FROM Comment e WHERE e.cowner.id = :id"),
@NamedQuery(name = "commentById", query = "SELECT e FROM Comment e WHERE e.id = :id")})
@Entity
public class Comment implements Comparable<Comment>{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String text;
private int inReplyTo;
@OneToOne
private Session session;
private LoggedUser cowner;
@ManyToMany
private List<LoggedUser> likedBy;
@Transient
private int likes = 0;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public int getInReplyTo() {
return inReplyTo;
}
public void setInReplyTo(int inReplyTo) {
this.inReplyTo = inReplyTo;
}
public LoggedUser getCowner() {
return cowner;
}
public void setCowner(LoggedUser cowner) {
this.cowner = cowner;
}
public Session getSession() {
return session;
}
public void setSession(Session session) {
this.session = session;
}
public int getLikes() {
return getLikedBy()==null?0:getLikedBy().size();
}
@Override
public boolean equals(Object obj) {
if(obj == this){
return true;
}
if(obj instanceof Comment){
Comment c = (Comment) obj;
return (c.getCowner() != null && this.cowner != null && c.getCowner().getId() == this.cowner.getId()) &&
equalStrings(c.getText(), this.getText()) &&
(c.getSession().getId() == this.getSession().getId());
}
return false;
}
private boolean equalStrings(String c1, String c2) {
if(c1 != null && c2 != null){
return c1.equals(c2);
}
return c1 == c2;
}
@Override
public String toString() {
return "Text: "+ text + " likes: "+likes;
}
public List<LoggedUser> getLikedBy() {
return likedBy;
}
public void setLikedBy(List<LoggedUser> likedBy) {
this.likedBy = likedBy;
}
@Override
public int compareTo(Comment o) {
return o.getLikes() - getLikes();
}
}