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 if (a.description.length() < 512) {
70 buf.append(a.description);
72 buf.append(a.description.substring(0, 512));
77 buf.append("</div>\n");
79 buf.append("</div>\n");
81 buf.append("</div>\n");
84 private static void appendMenu(StringBuffer buf, Category catActive, Config cfg) {
87 buf.append("<nav>\n");
90 for (Category cat: cfg.getCategories()) {
91 if (!cat.getLanguage().equals(catActive.getLanguage()))
96 if (cat.equals(catActive))
101 appendA(buf, cat.getLabel(), cat.getURL(), cl);
105 for (Language l: cfg.getLanguages())
106 buf.append("<li><a href='" + l.toURL() + "'>" + l.getLabel() + "</a></li>");
108 buf.append("</ul>\n");
110 buf.append("</nav>\n");
113 private static String toURL(Category catActive, String entity) {
115 return catActive.getURL() + "?entity=" + URLEncoder.encode(entity, "UTF-8");
116 } catch (UnsupportedEncodingException e) {
117 LOG.log(Level.SEVERE, "Failed to generate link to entity " + entity, e);
118 return catActive.getURL();
122 public static String toHTML(List<Article> articles, Category catActive, String entityActive, Config cfg, ArticleProvider provider) {
125 List<EntityStat> entities;
128 buf = new StringBuffer();
129 buf.append("<!DOCTYPE html>\n");
130 buf.append("<html lang='fr'>\n");
131 buf.append("<head>\n");
132 buf.append("<meta charset=\"UTF-8\">\n");
133 buf.append("<link rel='stylesheet' href='/style.css' />\n");
134 buf.append("<title>");
135 buf.append(catActive.getTitle());
136 buf.append(" - PNews</title>\n");
137 buf.append("</head>\n");
138 buf.append("<body>\n");
140 appendMenu(buf, catActive, cfg);
143 entities = provider.getEntityStats(catActive);
145 if (entities.size() > 0) {
149 for (EntityStat s: entities) {
151 if (entityActive != null && s.getEntity().equals(entityActive))
155 appendA(buf, s.getEntity(), toURL(catActive, s.getEntity()), cl);
156 buf.append("</li>\n");
161 buf.append("</ul>\n");
162 buf.append("</nav>\n");
164 } catch (IllegalArgumentException | FeedException | IOException e2) {
165 LOG.log(Level.SEVERE, "Failed to get entities", e2);
169 for (Article e: articles) {
172 } catch (UnsupportedEncodingException e1) {
173 LOG.log(Level.SEVERE, "Failed to convert article to HTML", e1);
181 buf.append("</body>\n");
182 buf.append("</html>\n");
184 return buf.toString();