3 import java.io.IOException;
4 import java.io.InputStreamReader;
6 import java.io.UnsupportedEncodingException;
7 import java.util.ArrayList;
8 import java.util.HashMap;
9 import java.util.HashSet;
10 import java.util.List;
13 import java.util.logging.Level;
14 import java.util.logging.Logger;
16 import javax.json.Json;
17 import javax.json.JsonArray;
18 import javax.json.JsonObject;
19 import javax.json.JsonString;
20 import javax.json.JsonValue;
22 import pnews.Category;
24 import pnews.Language;
28 private Category[] categories;
29 private Language[] languages;
30 private final Set<String> blacklistedEntities = new HashSet<>();
31 private final HashMap<String, String> entityAliases = new HashMap<>();
32 private static final String CLASS_NAME = Config.class.getName();
35 * The key is the language, the value is the default category for this language.
37 private Map<String, Category> defaultCategories = new HashMap<>();
38 private static final Logger LOG = Logger.getLogger(CLASS_NAME);
40 private void loadCategories(JsonArray jcats) {
44 String id, label, title, language;
46 cats = new ArrayList<>(jcats.size());
48 for (JsonValue v: jcats) {
50 id = jcat.getString("id");
51 label = jcat.getString("label");
52 title = jcat.getString("title");
53 language = jcat.getString("language");
54 cat = new Category(id, label, title, language);
56 if (defaultCategories.get(language) == null)
57 defaultCategories.put(language, cat);
60 categories = cats.toArray(new Category[0]);
63 private void loadLanguages(JsonArray jlangs) {
68 langs = new ArrayList<>(jlangs.size());
70 for (JsonValue v: jlangs) {
71 jlang = (JsonObject)v;
72 id = jlang.getString("id");
73 langs.add(new Language(id));
76 languages = langs.toArray(new Language[0]);
79 private Category getCategory(String id) {
80 for (Category c: categories)
81 if (c.getId().equals(id))
86 private void loadEntities(JsonObject jroot) {
87 JsonObject jentities, jaliases;
89 final String METHOD_NAME = "loadEntities";
91 jentities = jroot.getJsonObject("entities");
93 jblacklist = jentities.getJsonArray("blacklist");
94 jblacklist.forEach((jv)-> {
98 blacklistedEntities.add(js.getString());
101 jaliases = jentities.getJsonObject("aliases");
102 jaliases.forEach((k, v)-> {
103 JsonArray jsources = (JsonArray)v;
105 jsources.forEach((jsource)-> {
106 entityAliases.put(((JsonString)jsource).getString(), k);
110 LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " blacklistedEntities=" + blacklistedEntities);
111 LOG.logp(Level.FINEST, CLASS_NAME, METHOD_NAME, " entityAliases=" + entityAliases);
114 public String getEntityAlias(String entity) {
117 result = entityAliases.get(entity);
125 public void loadConfig() throws UnsupportedEncodingException {
127 JsonObject jfeeds, jroot;
132 r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
134 jroot = Json.createReader(r).readObject();
137 try { r.close(); } catch (IOException e) { };
140 loadLanguages(jroot.getJsonArray("languages"));
141 loadCategories(jroot.getJsonArray("categories"));
143 jfeeds = jroot.getJsonObject("feeds");
145 feedList = new ArrayList<Feed>(jfeeds.size());
147 jfeeds.forEach((k, v)-> {
151 JsonArray jcategories;
154 jcategories = jf.getJsonArray("categories");
155 str = jcategories.getString(0);
157 cat = getCategory(str);
160 feedList.add(new Feed(k, cat));
162 LOG.severe("Missing category: " + str);
165 feeds = feedList.toArray(new Feed[0]);
170 public boolean isBlacklistedEntity(String e) {
171 final String METHOD_NAME = "isBlacklistedEntity";
174 LOG.entering(CLASS_NAME, METHOD_NAME, e);
176 result = blacklistedEntities.contains(e);
178 LOG.exiting(CLASS_NAME, METHOD_NAME, result);
183 public Feed[] getFeeds() {
187 public Map<Category, List<Feed>> getFeedsByCategory() {
188 Map<Category, List<Feed>> result;
193 result = new HashMap<>();
196 for (Feed f: feeds) {
197 cat = f.getCategory();
199 catFeeds = result.get(cat);
200 if (catFeeds == null) {
201 catFeeds = new ArrayList<Feed>();
202 result.put(cat, catFeeds);
210 public Category[] getCategories() {
214 public Category getDefaultCategory(Language lang) {
215 return defaultCategories.get(lang.getId());
218 public Language[] getLanguages() {
222 public Language getDefaultLanguage() {
226 public static void main(String[] args) throws UnsupportedEncodingException {
234 cats = cfg.getCategories();
235 for (Category cat: cats)
236 System.out.println(cat);
238 feeds = cfg.getFeeds();
240 System.out.println("Number of feeds: " + feeds.length);
242 System.out.println(f);