package br.com.dextra.dextranet.conteudo.post; import java.util.ArrayList; import java.util.List; import br.com.dextra.dextranet.conteudo.post.comentario.Comentario; import br.com.dextra.dextranet.conteudo.post.comentario.ComentarioRepository; 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; public class PostRepository extends EntidadeRepository { private IndexacaoRepository indexacao = new IndexacaoRepository(); public Post persiste(Post post) { Post postPersistido = super.persiste(post); indexacao.indexar(postPersistido); return postPersistido; } public void remove(String id) { super.remove(id, Post.class); ComentarioRepository repositorioDeComentarios = new ComentarioRepository(); repositorioDeComentarios.removeComentariosPost(id); indexacao.removeIndexacao(Post.class.getName(), id); } public Post obtemPorId(String id) throws EntityNotFoundException { Entity postEnt = super.obtemPorId(id, Post.class); Post post = new Post(postEnt); buscaComentariosPost(id, post); return post; } public List<Post> lista(EntidadeOrdenacao... criterioOrdenacao) { return this.lista(null, null, criterioOrdenacao); } public List<Post> lista(Integer registrosPorPagina, Integer numeroDaPagina, EntidadeOrdenacao... criterioOrdenacao) { List<Post> posts = new ArrayList<Post>(); Iterable<Entity> entidades = super.lista(Post.class, registrosPorPagina, numeroDaPagina, criterioOrdenacao); for (Entity entidade : entidades) { Post post = new Post(entidade); buscaComentariosPost(post.getId(), post); posts.add(post); } return posts; } private void buscaComentariosPost(String id, Post post) { List<Comentario> comentarios = new ComentarioRepository().listaPorPost(id); post.adicionarComentarios(comentarios); } public List<Post> toPosts(Iterable<Entity> asIterable) { List<Post> listaPosts = new ArrayList<Post>(); for (Entity entity : asIterable) { listaPosts.add(new Post(entity)); } return listaPosts; } }