package scrum.server.collaboration;
import ilarkesto.base.AFactoryCache;
import ilarkesto.base.Cache;
import ilarkesto.base.time.DateAndTime;
import ilarkesto.core.base.Str;
import ilarkesto.fp.Predicate;
import ilarkesto.persistence.AEntity;
import java.util.Set;
public class CommentDao extends GCommentDao {
@Override
public void clearCaches() {
super.clearCaches();
commentsByParentIdCache.clear();
}
public Set<Comment> getPublishedCommentsByParent(final AEntity parent) {
return getEntities(new Predicate<Comment>() {
@Override
public boolean test(Comment c) {
return c.isPublished() && c.isParent(parent);
}
});
}
private Cache<String, Set<Comment>> commentsByParentIdCache = new AFactoryCache<String, Set<Comment>>() {
@Override
public Set<Comment> create(final String parentId) {
return getEntities(new Predicate<Comment>() {
@Override
public boolean test(Comment e) {
return e.getParent().getId().equals(parentId);
}
});
}
};
public Set<Comment> getCommentsByParentId(final String parentId) {
return commentsByParentIdCache.get(parentId);
}
public Comment postComment(AEntity entity, String text, String name, String email, boolean publish) {
assert entity != null;
if (Str.isBlank(name)) name = "anonymous";
Comment comment = newEntityInstance();
comment.setParent(entity);
comment.setText(text);
comment.setAuthorName(name);
comment.setAuthorEmail(email);
comment.setDateAndTime(DateAndTime.now());
comment.setPublished(publish);
saveEntity(comment);
return comment;
}
}