/src/main/java/com/ingenieux/nullweblog/web/FeedServlet.java

https://bitbucket.org/aldrinleal/nullweblog · Java · 94 lines · 72 code · 22 blank · 0 comment · 7 complexity · edf4f2e8334b17dff540c11c084ce9ad MD5 · raw file

  1. package com.ingenieux.nullweblog.web;
  2. import java.io.IOException;
  3. import java.util.Collection;
  4. import java.util.Date;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import org.apache.abdera.Abdera;
  10. import org.apache.abdera.factory.Factory;
  11. import org.apache.abdera.model.Document;
  12. import org.apache.abdera.model.Entry;
  13. import org.apache.abdera.model.Feed;
  14. import org.apache.commons.lang.StringUtils;
  15. import com.google.inject.Inject;
  16. import com.google.inject.Singleton;
  17. import com.ingenieux.nullweblog.model.Post;
  18. import com.ingenieux.nullweblog.model.Usuario;
  19. import com.ingenieux.nullweblog.server.PostDao;
  20. import com.ingenieux.nullweblog.server.UsuarioDao;
  21. @Singleton
  22. public class FeedServlet extends HttpServlet {
  23. private static final long serialVersionUID = 1124037781342748204L;
  24. @Inject
  25. PostDao postDao;
  26. @Inject
  27. UsuarioDao usuarioDao;
  28. @Override
  29. protected void service(HttpServletRequest req, HttpServletResponse resp)
  30. throws ServletException, IOException {
  31. String synthLogin = (String) req.getAttribute("synthLogin");
  32. Long postId = Long.valueOf(StringUtils.defaultString(
  33. (String) req.getAttribute("postId"), "0"));
  34. Usuario usuario = usuarioDao.findBySynthLogin(synthLogin);
  35. if (null == usuario) {
  36. resp.sendError(440, "User not found");
  37. return;
  38. }
  39. if (0 != postId) {
  40. Post post = postDao.findByAutorAndId(usuario, postId);
  41. resp.getWriter().write(post.getContent());
  42. } else {
  43. Document<Feed> doc = getFeed(usuario);
  44. doc.writeTo(resp.getOutputStream());
  45. }
  46. }
  47. public Document<Feed> getFeed(Usuario usuario) {
  48. Collection<Post> posts = postDao.findByAutor(usuario.getId());
  49. Factory abderaFactory = new Abdera().getFactory();
  50. Feed feedObj = abderaFactory.newFeed();
  51. feedObj.setId("nullweblog:2010:" + usuario.getId());
  52. feedObj.setTitle("Feed for "
  53. + StringUtils.defaultString(usuario.getNome(),
  54. usuario.getLogin()));
  55. Date lastUpdated = usuario.getCreated();
  56. for (Post post : posts) {
  57. Entry entryObj = abderaFactory.newEntry();
  58. entryObj.setId("nullweblog:2010:" + usuario.getId() + ":"
  59. + post.getId());
  60. entryObj.setTitle(post.getTitle());
  61. entryObj.setContent(post.getContent());
  62. entryObj.setPublished(post.getCreated());
  63. entryObj.setUpdated(post.getLastUpdated());
  64. if (lastUpdated.before(post.getLastUpdated()))
  65. lastUpdated = post.getLastUpdated();
  66. feedObj.addEntry(entryObj);
  67. }
  68. feedObj.setUpdated(lastUpdated);
  69. Document<Feed> doc = feedObj.getDocument();
  70. return doc;
  71. }
  72. }