3 import java.io.IOException;
4 import java.io.UnsupportedEncodingException;
5 import java.net.URLEncoder;
7 import java.util.logging.Level;
8 import java.util.logging.Logger;
10 import com.rometools.rome.io.FeedException;
13 import pnews.Category;
14 import pnews.EntityStat;
15 import pnews.Language;
18 private static final String CLASS_NAME= HTML.class.getName();
19 private static final Logger LOG = Logger.getLogger(CLASS_NAME);
21 private static void appendA(StringBuffer buf, String child, String href, String cl) {
22 buf.append("<a href='");
26 buf.append(" class='");
35 private static void appendDiv(StringBuffer buf, String child) {
38 buf.append("</div>\n");
41 private static void appendP(StringBuffer buf, String child) {
47 private static void append(StringBuffer buf, Article a) throws UnsupportedEncodingException {
48 buf.append("<div class='article'>\n");
50 buf.append("<div class='article-image'>\n");
51 if (a.thumbnail != null) {
52 buf.append("<img class='left' src='");
53 buf.append(a.thumbnail);
56 buf.append("</div>\n");
58 buf.append("<div class='article-content'>\n");
60 buf.append("<div class='article-title'>\n");
61 appendA(buf, a.title, "/redirect?url=" + URLEncoder.encode(a.link, "UTF-8"), null);
62 buf.append("</div>\n");
64 buf.append("<div class='article-info'>" + a.website + " - " + a.publicationDate + "</div>");
66 buf.append("<div class='article-description'>\n");
67 if (a.description != null) {
69 buf.append(a.description);
72 buf.append("</div>\n");
74 buf.append("</div>\n");
76 buf.append("</div>\n");
79 private static void appendMenu(StringBuffer buf, Category catActive, Config cfg) {
82 buf.append("<nav>\n");
85 for (Category cat: cfg.getCategories()) {
86 if (!cat.getLanguage().equals(catActive.getLanguage()))
91 if (cat.equals(catActive))
96 appendA(buf, cat.getLabel(), cat.getURL(), cl);
100 for (Language l: cfg.getLanguages())
101 buf.append("<li><a href='" + l.toURL() + "'>" + l.getLabel() + "</a></li>");
103 buf.append("</ul>\n");
105 buf.append("</nav>\n");
108 private static String toURL(Category catActive, String entity) {
110 return catActive.getURL() + "?entity=" + URLEncoder.encode(entity, "UTF-8");
111 } catch (UnsupportedEncodingException e) {
112 LOG.log(Level.SEVERE, "Failed to generate link to entity " + entity, e);
113 return catActive.getURL();
117 public static String toHTML(List<Article> articles, Category catActive, String entityActive, Config cfg, ArticleProvider provider) {
120 List<EntityStat> entities;
123 buf = new StringBuffer();
124 buf.append("<!DOCTYPE html>\n");
125 buf.append("<html lang='fr'>\n");
126 buf.append("<head>\n");
127 buf.append("<meta charset=\"UTF-8\">\n");
128 buf.append("<link rel='stylesheet' href='/style.css' />\n");
129 buf.append("<title>");
130 buf.append(catActive.getTitle());
131 buf.append(" - PNews</title>\n");
132 buf.append("</head>\n");
133 buf.append("<body>\n");
135 appendMenu(buf, catActive, cfg);
138 entities = provider.getEntityStats(catActive);
140 if (entities.size() > 0) {
144 for (EntityStat s: entities) {
146 if (entityActive != null && s.getEntity().equals(entityActive))
150 appendA(buf, s.getEntity(), toURL(catActive, s.getEntity()), cl);
151 buf.append("</li>\n");
156 buf.append("</ul>\n");
157 buf.append("</nav>\n");
159 } catch (IllegalArgumentException | FeedException | IOException e2) {
160 LOG.log(Level.SEVERE, "Failed to get entities", e2);
164 for (Article e: articles) {
167 } catch (UnsupportedEncodingException e1) {
168 LOG.log(Level.SEVERE, "Failed to convert article to HTML", e1);
176 buf.append("</body>\n");
177 buf.append("</html>\n");
179 return buf.toString();