package br.com.arsmachina.eloquentia.dao.mongodb;
import java.util.List;
import org.mongojack.DBCursor;
import org.mongojack.DBQuery;
import org.mongojack.DBRef;
import org.mongojack.JacksonDBCollection;
import br.com.arsmachina.dao.SortCriterion;
import br.com.arsmachina.eloquentia.dao.CommentDAO;
import br.com.arsmachina.eloquentia.entity.Comment;
import br.com.arsmachina.eloquentia.entity.Page;
/**
* Implementation of {@link CommentDAO} using MongoDB.
*
* @author Thiago H. de Paula Figueiredo (http://machina.com.br/thiago)
*/
public class CommentDAOImpl extends AbstractDAOImpl<Comment, String> implements CommentDAO {
private static final SortCriterion[] DEFAULT_SORT_CRITERIA = {new SortCriterion("posted", false)};
final private static PrimaryKeyEncoder<Comment, String> ID_VALUE_EXTRACTOR = new PrimaryKeyEncoder<Comment, String>() {
public String get(Comment object) {
return object != null ? object.getId() : null;
}
public void set(Comment object, String id) {
object.setId(id);
}
};
public CommentDAOImpl() {
super(ID_VALUE_EXTRACTOR);
final JacksonDBCollection<Comment, String> dbCollection = getDbCollection();
dbCollection.ensureIndex("pageRef");
dbCollection.ensureIndex("postedByRef");
dbCollection.ensureIndex("parentRef");
}
@Override
public List<Comment> findByPage(Page page) {
final DBCursor<Comment> cursor = getDbCollection().find(DBQuery.is("pageRef",
new DBRef<Page, String>(page.getId(), Page.class)));
addSortCriteria(cursor, getDefaultSortCriteria());
return toList(cursor);
}
public SortCriterion[] getDefaultSortCriteria() {
return DEFAULT_SORT_CRITERIA;
}
}