1 package net.wpitchoune.pnews;
3 import java.io.IOException;
4 import java.io.InputStreamReader;
6 import java.io.UnsupportedEncodingException;
7 import java.time.Instant;
8 import java.time.temporal.ChronoUnit;
9 import java.util.ArrayList;
10 import java.util.HashMap;
11 import java.util.HashSet;
12 import java.util.List;
15 import java.util.logging.Level;
16 import java.util.logging.Logger;
18 import javax.json.Json;
19 import javax.json.JsonArray;
20 import javax.json.JsonObject;
21 import javax.json.JsonString;
22 import javax.json.JsonValue;
26 private Category[] categories;
27 private Language[] languages;
28 private final Set<String> blacklistedEntities = new HashSet<>();
29 private final HashMap<String, String> entityAliases = new HashMap<>();
30 private static final String CLASS_NAME = Config.class.getName();
33 * The key is the language, the value is the default category for this language.
35 private Map<String, Category> defaultCategories = new HashMap<>();
36 private static final Logger LOG = Logger.getLogger(CLASS_NAME);
38 private void loadCategories(JsonArray jcats) {
42 String id, label, title, language;
44 cats = new ArrayList<>(jcats.size());
46 for (JsonValue v: jcats) {
48 id = jcat.getString("id");
49 label = jcat.getString("label");
50 title = jcat.getString("title");
51 language = jcat.getString("language");
52 cat = new Category(id, label, title, language);
54 if (defaultCategories.get(language) == null)
55 defaultCategories.put(language, cat);
58 categories = cats.toArray(new Category[0]);
61 private void loadLanguages(JsonArray jlangs) {
66 langs = new ArrayList<>(jlangs.size());
68 for (JsonValue v: jlangs) {
69 jlang = (JsonObject)v;
70 id = jlang.getString("id");
71 langs.add(new Language(id));
74 languages = langs.toArray(new Language[0]);
77 private Category getCategory(String id) {
78 for (Category c: categories)
79 if (c.getId().equals(id))
84 private void loadEntities(JsonObject jroot) {
85 JsonObject jentities, jaliases;
87 final String METHOD_NAME = "loadEntities";
89 jentities = jroot.getJsonObject("entities");
91 jblacklist = jentities.getJsonArray("blacklist");
92 jblacklist.forEach((jv)-> {
96 blacklistedEntities.add(js.getString());
99 jaliases = jentities.getJsonObject("aliases");
100 jaliases.forEach((k, v)-> {
101 JsonArray jsources = (JsonArray)v;
103 jsources.forEach((jsource)-> {
104 entityAliases.put(((JsonString)jsource).getString(), k);
108 LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " blacklistedEntities=" + blacklistedEntities);
109 LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " entityAliases=" + entityAliases);
112 public String getEntityAlias(String entity) {
115 result = entityAliases.get(entity);
123 public void loadConfig() throws UnsupportedEncodingException {
125 JsonObject jfeeds, jroot;
130 r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
132 jroot = Json.createReader(r).readObject();
135 try { r.close(); } catch (IOException e) { };
138 loadLanguages(jroot.getJsonArray("languages"));
139 loadCategories(jroot.getJsonArray("categories"));
141 jfeeds = jroot.getJsonObject("feeds");
143 feedList = new ArrayList<Feed>(jfeeds.size());
145 jfeeds.forEach((k, v)-> {
149 JsonArray jcategories;
152 jcategories = jf.getJsonArray("categories");
153 str = jcategories.getString(0);
155 cat = getCategory(str);
158 feedList.add(new Feed(k, cat));
160 LOG.severe("Missing category: " + str);
163 feeds = feedList.toArray(new Feed[0]);
168 public boolean isBlacklistedEntity(String e) {
169 final String METHOD_NAME = "isBlacklistedEntity";
172 LOG.entering(CLASS_NAME, METHOD_NAME, e);
174 result = blacklistedEntities.contains(e);
176 LOG.exiting(CLASS_NAME, METHOD_NAME, result);
181 public boolean isObsolete(Instant instant) {
182 Instant olderInstant;
184 olderInstant = Instant.now().minus(60, ChronoUnit.DAYS);
186 if (instant.isAfter(olderInstant))
192 public Feed[] getFeeds() {
196 public Map<Category, List<Feed>> getFeedsByCategory() {
197 Map<Category, List<Feed>> result;
202 result = new HashMap<>();
205 for (Feed f: feeds) {
206 cat = f.getCategory();
208 catFeeds = result.get(cat);
209 if (catFeeds == null) {
210 catFeeds = new ArrayList<Feed>();
211 result.put(cat, catFeeds);
219 public Category[] getCategories() {
223 public Category getDefaultCategory(Language lang) {
224 return defaultCategories.get(lang.getId());
227 public Language[] getLanguages() {
231 public Language getDefaultLanguage() {