-package pnews.servlet;
-
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.UnsupportedEncodingException;
-import java.time.Instant;
-import java.time.temporal.ChronoUnit;
-import java.time.temporal.TemporalUnit;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-
-import pnews.Article;
-import pnews.Category;
-import pnews.Feed;
-import pnews.Language;
-
-public class Config {
- private Feed[] feeds;
- private Category[] categories;
- private Language[] languages;
- private final Set<String> blacklistedEntities = new HashSet<>();
- private final HashMap<String, String> entityAliases = new HashMap<>();
- private static final String CLASS_NAME = Config.class.getName();
-
- /**
- * The key is the language, the value is the default category for this language.
- */
- private Map<String, Category> defaultCategories = new HashMap<>();
- private static final Logger LOG = Logger.getLogger(CLASS_NAME);
-
- private void loadCategories(JsonArray jcats) {
- List<Category> cats;
- JsonObject jcat;
- Category cat;
- String id, label, title, language;
-
- cats = new ArrayList<>(jcats.size());
-
- for (JsonValue v: jcats) {
- jcat = (JsonObject)v;
- id = jcat.getString("id");
- label = jcat.getString("label");
- title = jcat.getString("title");
- language = jcat.getString("language");
- cat = new Category(id, label, title, language);
- cats.add(cat);
- if (defaultCategories.get(language) == null)
- defaultCategories.put(language, cat);
- }
-
- categories = cats.toArray(new Category[0]);
- }
-
- private void loadLanguages(JsonArray jlangs) {
- List<Language> langs;
- JsonObject jlang;
- String id;
-
- langs = new ArrayList<>(jlangs.size());
-
- for (JsonValue v: jlangs) {
- jlang = (JsonObject)v;
- id = jlang.getString("id");
- langs.add(new Language(id));
- }
-
- languages = langs.toArray(new Language[0]);
- }
-
- private Category getCategory(String id) {
- for (Category c: categories)
- if (c.getId().equals(id))
- return c;
- return null;
- }
-
- private void loadEntities(JsonObject jroot) {
- JsonObject jentities, jaliases;
- JsonArray jblacklist;
- final String METHOD_NAME = "loadEntities";
-
- jentities = jroot.getJsonObject("entities");
-
- jblacklist = jentities.getJsonArray("blacklist");
- jblacklist.forEach((jv)-> {
- JsonString js;
-
- js = (JsonString)jv;
- blacklistedEntities.add(js.getString());
- });
-
- jaliases = jentities.getJsonObject("aliases");
- jaliases.forEach((k, v)-> {
- JsonArray jsources = (JsonArray)v;
-
- jsources.forEach((jsource)-> {
- entityAliases.put(((JsonString)jsource).getString(), k);
- });
- });
-
- LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " blacklistedEntities=" + blacklistedEntities);
- LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " entityAliases=" + entityAliases);
- }
-
- public String getEntityAlias(String entity) {
- String result;
-
- result = entityAliases.get(entity);
-
- if (result == null)
- return entity;
- else
- return result;
- }
-
- public void loadConfig() throws UnsupportedEncodingException {
- Reader r;
- JsonObject jfeeds, jroot;
- List<Feed> feedList;
-
- r = null;
- try {
- r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
- "UTF-8");
- jroot = Json.createReader(r).readObject();
- } finally {
- if (r != null)
- try { r.close(); } catch (IOException e) { };
- }
-
- loadLanguages(jroot.getJsonArray("languages"));
- loadCategories(jroot.getJsonArray("categories"));
-
- jfeeds = jroot.getJsonObject("feeds");
-
- feedList = new ArrayList<Feed>(jfeeds.size());
-
- jfeeds.forEach((k, v)-> {
- JsonObject jf;
- String str;
- Category cat;
- JsonArray jcategories;
-
- jf = (JsonObject)v;
- jcategories = jf.getJsonArray("categories");
- str = jcategories.getString(0);
-
- cat = getCategory(str);
-
- if (cat != null)
- feedList.add(new Feed(k, cat));
- else
- LOG.severe("Missing category: " + str);
- });
-
- feeds = feedList.toArray(new Feed[0]);
-
- loadEntities(jroot);
- }
-
- public boolean isBlacklistedEntity(String e) {
- final String METHOD_NAME = "isBlacklistedEntity";
- boolean result;
-
- LOG.entering(CLASS_NAME, METHOD_NAME, e);
-
- result = blacklistedEntities.contains(e);
-
- LOG.exiting(CLASS_NAME, METHOD_NAME, result);
-
- return result;
- }
-
- public boolean isObsolete(Instant instant) {
- Instant olderInstant;
-
- olderInstant = Instant.now().minus(60, ChronoUnit.DAYS);
-
- if (instant.isAfter(olderInstant))
- return false;
- else
- return true;
- }
-
- public Feed[] getFeeds() {
- return feeds;
- }
-
- public Map<Category, List<Feed>> getFeedsByCategory() {
- Map<Category, List<Feed>> result;
- Feed[] feeds;
- List<Feed> catFeeds;
- Category cat;
-
- result = new HashMap<>();
-
- feeds = getFeeds();
- for (Feed f: feeds) {
- cat = f.getCategory();
-
- catFeeds = result.get(cat);
- if (catFeeds == null) {
- catFeeds = new ArrayList<Feed>();
- result.put(cat, catFeeds);
- }
- catFeeds.add(f);
- }
-
- return result;
- }
-
- public Category[] getCategories() {
- return categories;
- }
-
- public Category getDefaultCategory(Language lang) {
- return defaultCategories.get(lang.getId());
- }
-
- public Language[] getLanguages() {
- return languages;
- }
-
- public Language getDefaultLanguage() {
- return languages[0];
- }
-
- public static void main(String[] args) throws UnsupportedEncodingException {
- Config cfg;
- Feed[] feeds;
- Category[] cats;
-
- cfg = new Config();
- cfg.loadConfig();
-
- cats = cfg.getCategories();
- for (Category cat: cats)
- System.out.println(cat);
-
- feeds = cfg.getFeeds();
-
- System.out.println("Number of feeds: " + feeds.length);
- for (Feed f: feeds)
- System.out.println(f);
- }
-}