X-Git-Url: http://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=war%2Fsrc%2Fmain%2Fjava%2Fpnews%2Fservlet%2FArticleProvider.java;h=ec741238956c04311e404d1f77bc92bc25b401c8;hb=6d94fd5a39e6f78a68201230bd57b9ceb95e125d;hp=05ddeddcff753d120eb655318a49136588f96945;hpb=56c07f5de3319eb61182b7100855801644538e6f;p=pnews.git diff --git a/war/src/main/java/pnews/servlet/ArticleProvider.java b/war/src/main/java/pnews/servlet/ArticleProvider.java index 05ddedd..ec74123 100644 --- a/war/src/main/java/pnews/servlet/ArticleProvider.java +++ b/war/src/main/java/pnews/servlet/ArticleProvider.java @@ -35,7 +35,7 @@ public class ArticleProvider { private static final String CLASS_NAME = ArticleProvider.class.getName(); private static final Logger LOG = Logger.getLogger(CLASS_NAME); private final Map> articlesByCategory = new HashMap<>(); - private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2); + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors()); private final Config config; public ArticleProvider(Config config) { @@ -74,10 +74,10 @@ public class ArticleProvider { return false; } - private static Article toArticle(String link, SyndEntry entry, SyndFeed feed, String lang) { + private Article toArticle(String link, SyndEntry entry, SyndFeed feed, String lang) { String desc, title, thumbnail, feedTitle, str; Date date; - String[] entities; + List entities; feedTitle = feed.getTitle(); if (feedTitle != null) { @@ -90,11 +90,7 @@ public class ArticleProvider { thumbnail = e.getUrl(); break; } - - if (thumbnail == null && feed.getImage() != null) - thumbnail = feed.getImage().getUrl(); - - + title = entry.getTitle().trim(); if (entry.getDescription() != null) { @@ -112,15 +108,16 @@ public class ArticleProvider { LOG.severe("The article " + feedTitle + " - " + title + " does not have a date"); - entities = null; + entities = new ArrayList<>(); if (desc != null && lang.equals("en")) try { - entities = NER.classify(desc); + NER.classify(title, entities, config); + NER.classify(desc, entities, config); } catch (ClassCastException | ClassNotFoundException | IOException e1) { LOG.log(Level.SEVERE, "Cannot classify " + feedTitle, e1); } - return new Article(link, title, desc, thumbnail, date, feedTitle, entities); + return new Article(link, title, desc, thumbnail, date, feedTitle, entities.toArray(new String[0])); } private void addArticles(Category cat, SyndFeed feed) { @@ -184,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; } } @@ -206,11 +211,11 @@ public class ArticleProvider { LOG.entering(CLASS_NAME, FUNCTION_NAME, cat); - articles = getArticles(cat); + articles = getArticles(cat, null); entities = new HashMap<>(); for (Article a: articles) - if (a.getEntities() != null) + if (a.getEntities() != null) { for (String e: a.getEntities()) { s = entities.get(e); if (s == null) { @@ -219,6 +224,7 @@ public class ArticleProvider { } s.increment(); } + } stats = new ArrayList<>(entities.values()); stats.sort(new Comparator() {