package br.com.dextra.dextranet.conteudo.post.comentario;
import java.util.ArrayList;
import java.util.List;
import br.com.dextra.dextranet.indexacao.IndexacaoRepository;
import br.com.dextra.dextranet.persistencia.EntidadeOrdenacao;
import br.com.dextra.dextranet.persistencia.EntidadeRepository;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.EntityNotFoundException;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.Filter;
import com.google.appengine.api.datastore.Query.FilterOperator;
import com.google.appengine.api.datastore.Query.SortDirection;
public class ComentarioRepository extends EntidadeRepository {
private IndexacaoRepository indexacao = new IndexacaoRepository();
public Comentario persiste(Comentario comentario) {
Comentario comentarioPersistido = super.persiste(comentario);
indexacao.indexar(comentarioPersistido);
return comentarioPersistido;
}
public void remove(String id) {
super.remove(id, Comentario.class);
indexacao.removeIndexacao(Comentario.class.getName(), id);
}
public void removeComentariosPost(String postId) {
List<Comentario> comentarios = listaPorPost(postId);
for (Comentario comentario : comentarios) {
remove(comentario.getId());
}
}
public Comentario obtemPorId(String id) throws EntityNotFoundException {
Entity comentario = super.obtemPorId(id, Comentario.class);
return new Comentario(comentario);
}
public List<Comentario> lista(EntidadeOrdenacao... criterioOrdenacao) {
List<Comentario> comentarios = new ArrayList<Comentario>();
Iterable<Entity> entidades = super.lista(Comentario.class, criterioOrdenacao);
for (Entity entidade : entidades) {
comentarios.add(new Comentario(entidade));
}
return comentarios;
}
public List<Comentario> listaPorPost(String postId) {
Filter filtroPorPostId = new Query.FilterPredicate(ComentarioFields.postId.name(), FilterOperator.EQUAL, postId);
Query query = new Query(Comentario.class.getName());
query.setFilter(filtroPorPostId);
query.addSort(ComentarioFields.dataDeCriacao.name(), SortDirection.ASCENDING);
PreparedQuery pquery = this.datastore.prepare(query);
List<Comentario> comentarios = new ArrayList<Comentario>();
Iterable<Entity> entidades = pquery.asIterable();
for (Entity entidade : entidades) {
comentarios.add(new Comentario(entidade));
}
return comentarios;
}
}