From 511fe72ae8bad61a60f738c01819af58510ae9d3 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Thu, 2 Nov 2017 23:41:22 +0100 Subject: [PATCH] navigation with hot topics --- war/src/main/java/pnews/Article.java | 8 ++++++++ .../main/java/pnews/servlet/ArticleProvider.java | 18 +++++++++++++----- war/src/main/java/pnews/servlet/HTML.java | 21 ++++++++++++++++----- war/src/main/java/pnews/servlet/JSON.java | 2 +- war/src/main/java/pnews/servlet/Pnews.java | 10 +++++----- war/src/main/resources/feeds.json | 6 +++++- 6 files changed, 48 insertions(+), 17 deletions(-) diff --git a/war/src/main/java/pnews/Article.java b/war/src/main/java/pnews/Article.java index f38f792..97e8b76 100644 --- a/war/src/main/java/pnews/Article.java +++ b/war/src/main/java/pnews/Article.java @@ -27,6 +27,14 @@ public class Article { return entities; } + public boolean hasEntity(String entity) { + for (String e: entities) + if (e.equals(entity)) + return true; + + return false; + } + public Date getPublicationDate() { return publicationDate; } diff --git a/war/src/main/java/pnews/servlet/ArticleProvider.java b/war/src/main/java/pnews/servlet/ArticleProvider.java index 4e85e83..c2d8f59 100644 --- a/war/src/main/java/pnews/servlet/ArticleProvider.java +++ b/war/src/main/java/pnews/servlet/ArticleProvider.java @@ -181,16 +181,24 @@ public class ArticleProvider { /** * Returns a copy. */ - public List
getArticles(Category cat) + public List
getArticles(Category cat, String entity) throws IllegalArgumentException, MalformedURLException, FeedException, IOException { - List
articles; + List
articles, result; synchronized (articlesByCategory) { articles = getArticlesForUpdate(cat); } - synchronized (articles) { - return new ArrayList<>(articles); + synchronized (articles) { + if (entity == null) + return new ArrayList<>(articles); + + result = new ArrayList<>(articles.size()); + for (Article a: articles) + if (a.hasEntity(entity)) + result.add(a); + + return result; } } @@ -203,7 +211,7 @@ public class ArticleProvider { LOG.entering(CLASS_NAME, FUNCTION_NAME, cat); - articles = getArticles(cat); + articles = getArticles(cat, null); entities = new HashMap<>(); for (Article a: articles) diff --git a/war/src/main/java/pnews/servlet/HTML.java b/war/src/main/java/pnews/servlet/HTML.java index 42564e8..72f0b4b 100644 --- a/war/src/main/java/pnews/servlet/HTML.java +++ b/war/src/main/java/pnews/servlet/HTML.java @@ -105,11 +105,20 @@ public class HTML { buf.append("\n"); } - public static String toHTML(List
articles, Category catActive, Config cfg, ArticleProvider provider) { + 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
articles, Category catActive, String entityActive, Config cfg, ArticleProvider provider) { StringBuffer buf; int i; - Category[] cats; List entities; + String cl; buf = new StringBuffer(); buf.append("\n"); @@ -123,8 +132,6 @@ public class HTML { buf.append("\n"); buf.append("\n"); - cats = cfg.getCategories(); - appendMenu(buf, catActive, cfg); try { @@ -136,7 +143,11 @@ public class HTML { i = 0; for (EntityStat s: entities) { buf.append("
  • "); - buf.append(s.getEntity()); + if (entityActive != null && s.getEntity().equals(entityActive)) + cl = "active"; + else + cl = null; + appendA(buf, s.getEntity(), toURL(catActive, s.getEntity()), cl); buf.append("
  • \n"); i++; if (i > 10) diff --git a/war/src/main/java/pnews/servlet/JSON.java b/war/src/main/java/pnews/servlet/JSON.java index 13509ed..bf6dcae 100644 --- a/war/src/main/java/pnews/servlet/JSON.java +++ b/war/src/main/java/pnews/servlet/JSON.java @@ -38,7 +38,7 @@ public class JSON { for (Category cat: config.getCategories()) try { - articles = provider.getArticles(cat); + articles = provider.getArticles(cat, null); jcategories.addProperty(cat.getLabel(), articles.size()); } catch (IllegalArgumentException | FeedException | IOException e) { diff --git a/war/src/main/java/pnews/servlet/Pnews.java b/war/src/main/java/pnews/servlet/Pnews.java index 777f7fd..69ad1bc 100644 --- a/war/src/main/java/pnews/servlet/Pnews.java +++ b/war/src/main/java/pnews/servlet/Pnews.java @@ -105,20 +105,20 @@ public class Pnews extends HttpServlet { } - private void writeArticles(Category cat, HttpServletResponse rp) { + private void writeArticles(Category cat, String entity, HttpServletResponse rp) { String html; List
    articles; try { - articles = provider.getArticles(cat); + articles = provider.getArticles(cat, entity); if (articles != null) { - html = HTML.toHTML(articles, cat, config, provider); + html = HTML.toHTML(articles, cat, entity, config, provider); rp.setContentType("text/html;charset=utf-8"); rp.getWriter().write(html); rp.setCharacterEncoding("utf-8"); } else { LOG.severe("writeArticles cannot retrieve any articles"); - html = HTML.toHTML(new ArrayList
    (), cat, config, provider); + html = HTML.toHTML(new ArrayList
    (), cat, entity, config, provider); rp.setContentType("text/html"); rp.getWriter().write(html); } @@ -186,7 +186,7 @@ public class Pnews extends HttpServlet { for (Category cat: config.getCategories()) { if (path.equals(cat.getURL())) { - writeArticles(cat, resp); + writeArticles(cat, getQueryParameter(req, "entity"), resp); return ; } } diff --git a/war/src/main/resources/feeds.json b/war/src/main/resources/feeds.json index aae327a..91e2a1e 100644 --- a/war/src/main/resources/feeds.json +++ b/war/src/main/resources/feeds.json @@ -93,6 +93,9 @@ "http://www.futura-sciences.com/rss/actualites.xml": { "categories": ["technologie"] }, "https://www-03.ibm.com/press/fr/fr/rssfeed.wss?keyword=null&maxFeed=&feedType=RSS&topic=all": { "categories": ["technologie"] }, "https://korben.info/feed": { "categories": ["technologie"]}, + "https://www.techhive.com/index.rss": { "categories": ["en_technologie"]}, + "https://www.gnome.org/feed/": { "categories": ["en_technologie"]}, + "http://www.markshuttleworth.com/feed": { "categories": ["en_technologie"]}, "https://insights.ubuntu.com/feed/": { "categories": ["en_technologie"]}, "https://www-03.ibm.com/press/us/en/rssfeed.wss?keyword=null&maxFeed=&feedType=RSS&topic=all": { "categories": ["en_technologie"]}, "https://www.cnet.com/rss/news/": { "categories": ["en_technologie"]}, @@ -106,6 +109,7 @@ "https://www.androidheadlines.com/feed": { "categories": ["en_technologie"]}, "https://www.nasa.gov/rss/dyn/breaking_news.rss": { "categories": ["en_technologie"]}, "http://www.computerweekly.com/rss/RSS-Feed.xml": { "categories": ["en_technologie"]}, - "https://www.debian.org/News/news": { "categories": ["en_technologie"]} + "https://www.debian.org/News/news": { "categories": ["en_technologie"]}, + "https://www.theverge.com/rss/index.xml": { "categories": ["en_technologie"]} } } -- 2.7.4