cleanup and refactored to move to net.wpitchoune package
[pnews.git] / war / src / main / java / pnews / servlet / HTML.java
index 321c5a7..ac7a749 100644 (file)
@@ -1,13 +1,19 @@
 package pnews.servlet;
 
+import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import pnews.Article;
-import pnews.Category;
+import com.rometools.rome.io.FeedException;
+
+import net.wpitchoune.pnews.Article;
+import net.wpitchoune.pnews.Category;
+import net.wpitchoune.pnews.Config;
+import net.wpitchoune.pnews.EntityStat;
+import net.wpitchoune.pnews.Language;
 
 public class HTML {
         private static final String CLASS_NAME= HTML.class.getName();
@@ -43,9 +49,9 @@ public class HTML {
                buf.append("<div class='article'>\n");
                
                buf.append("<div class='article-image'>\n");
-               if (a.thumbnail != null) {
+               if (a.getThumbnail() != null) {
                        buf.append("<img class='left' src='");
-                       buf.append(a.thumbnail);
+                       buf.append(a.getThumbnail());
                        buf.append("'/>\n");
                }
                buf.append("</div>\n");
@@ -53,15 +59,20 @@ public class HTML {
                buf.append("<div class='article-content'>\n");
 
                buf.append("<div class='article-title'>\n");
-               appendA(buf, a.title, "/redirect?url=" + URLEncoder.encode(a.link, "UTF-8"), null);
+               appendA(buf, a.getTitle(), "/redirect?url=" + URLEncoder.encode(a.getLink(), "UTF-8"), null);
                buf.append("</div>\n");
                
-               buf.append("<div class='article-info'>" + a.website + " - " + a.publicationDate + "</div>");
+               buf.append("<div class='article-info'>" + a.getWebsite() + " - " + a.getPublicationDate() + "</div>");
                
                buf.append("<div class='article-description'>\n");
-               if (a.description != null) {
+               if (a.getDescription() != null) {
                        buf.append("<p>");
-                       buf.append(a.description);
+                       if (a.getDescription().length() < 512) {
+                               buf.append(a.getDescription());
+                       } else {
+                               buf.append(a.getDescription().substring(0, 512));
+                               buf.append("[..]");
+                       }
                        buf.append("</p>");
                }
                 buf.append("</div>\n");                
@@ -71,13 +82,16 @@ public class HTML {
                buf.append("</div>\n");         
        }
        
-       private static void appendMenu(StringBuffer buf, Category catActive, Category[] cats) {
+       private static void appendMenu(StringBuffer buf, Category catActive, Config cfg) {
                String cl;
                
                buf.append("<nav>\n");
                buf.append("<ul>\n");
 
-               for (Category cat: cats) {
+               for (Category cat: cfg.getCategories()) {
+                       if (!cat.getLanguage().equals(catActive.getLanguage()))
+                               continue;
+                       
                        buf.append("<li>");
                        
                        if (cat.equals(catActive))
@@ -88,16 +102,29 @@ public class HTML {
                        appendA(buf, cat.getLabel(), cat.getURL(), cl);
                        buf.append("</li>");
                }
-                buf.append("<li><a href='/en'>EN</a></li>");
-                buf.append("<li><a href='/fr'>FR</a></li>");           
+               
+               for (Language l: cfg.getLanguages())
+                       buf.append("<li><a href='" + l.toURL() + "'>" + l.getLabel() + "</a></li>");
+                
                buf.append("</ul>\n");
                
                buf.append("</nav>\n");
        }
        
-       public static String toHTML(List<Article> articles, Category catActive, Category[] cats) {
+       private static String toURL(Category catActive, String entity) {
+               try {
+                       return catActive.getURL() + "?entity=" + URLEncoder.encode(entity, "UTF-8");
+               } catch (UnsupportedEncodingException e) {
+                       LOG.log(Level.SEVERE, "Failed to generate link to entity " + entity, e);
+                       return catActive.getURL();
+               }
+       }
+       
+       public static String toHTML(List<Article> articles, Category catActive, String entityActive, Config cfg, ArticleProvider provider) {
                StringBuffer buf;
                int i;
+               List<EntityStat> entities;
+               String cl;
                
                buf = new StringBuffer();
                buf.append("<!DOCTYPE html>\n");
@@ -111,7 +138,33 @@ public class HTML {
                buf.append("</head>\n");
                buf.append("<body>\n");
                
-               appendMenu(buf, catActive, cats);
+               appendMenu(buf, catActive, cfg);
+               
+               try {
+                       entities = provider.getEntityStats(catActive);
+
+                       if (entities.size() > 0) {
+                               buf.append("<nav>");
+                               buf.append("<ul>");
+                               i = 0;
+                               for (EntityStat s: entities) {
+                                       buf.append("<li>");
+                                       if (entityActive != null && s.getEntity().equals(entityActive))
+                                               cl = "active";
+                                       else
+                                               cl = null;
+                                       appendA(buf, s.getEntity(), toURL(catActive, s.getEntity()), cl);
+                                       buf.append("</li>\n");
+                                       i++;
+                                       if (i > 10)
+                                               break;
+                               }                               
+                               buf.append("</ul>\n");
+                               buf.append("</nav>\n");
+                       }
+                } catch (IllegalArgumentException | FeedException | IOException e2) {
+                        LOG.log(Level.SEVERE, "Failed to get entities", e2);
+                }
                
                i = 0;
                for (Article e: articles) {