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;
11 import java.util.logging.Logger;
13 import javax.json.Json;
14 import javax.json.JsonArray;
15 import javax.json.JsonObject;
16 import javax.json.JsonValue;
18 import pnews.Category;
20 import pnews.Language;
24 private Category[] categories;
25 private Language[] languages;
27 * The key is the language, the value is the default category for this language.
29 private Map<String, Category> defaultCategories = new HashMap<>();
30 private static final Logger LOG = Logger.getLogger(Config.class.getName());
32 private void loadCategories(JsonArray jcats) {
36 String id, label, title, language;
38 cats = new ArrayList<>(jcats.size());
40 for (JsonValue v: jcats) {
42 id = jcat.getString("id");
43 label = jcat.getString("label");
44 title = jcat.getString("title");
45 language = jcat.getString("language");
46 cat = new Category(id, label, title, language);
48 if (defaultCategories.get(language) == null)
49 defaultCategories.put(language, cat);
52 categories = cats.toArray(new Category[0]);
55 private void loadLanguages(JsonArray jlangs) {
60 langs = new ArrayList<>(jlangs.size());
62 for (JsonValue v: jlangs) {
63 jlang = (JsonObject)v;
64 id = jlang.getString("id");
65 langs.add(new Language(id));
68 languages = langs.toArray(new Language[0]);
71 private Category getCategory(String id) {
72 for (Category c: categories)
73 if (c.getId().equals(id))
78 public void loadConfig() throws UnsupportedEncodingException {
80 JsonObject jfeeds, jroot;
85 r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
87 jroot = Json.createReader(r).readObject();
90 try { r.close(); } catch (IOException e) { };
93 loadLanguages(jroot.getJsonArray("languages"));
94 loadCategories(jroot.getJsonArray("categories"));
96 jfeeds = jroot.getJsonObject("feeds");
98 feedList = new ArrayList<Feed>(jfeeds.size());
100 jfeeds.forEach((k, v)-> {
104 JsonArray jcategories;
107 jcategories = jf.getJsonArray("categories");
108 str = jcategories.getString(0);
110 cat = getCategory(str);
113 feedList.add(new Feed(k, cat));
115 LOG.severe("Missing category: " + str);
118 feeds = feedList.toArray(new Feed[0]);
121 public Feed[] getFeeds() {
125 public Map<Category, List<Feed>> getFeedsByCategory() {
126 Map<Category, List<Feed>> result;
131 result = new HashMap<>();
134 for (Feed f: feeds) {
135 cat = f.getCategory();
137 catFeeds = result.get(cat);
138 if (catFeeds == null) {
139 catFeeds = new ArrayList<Feed>();
140 result.put(cat, catFeeds);
148 public Category[] getCategories() {
152 public Category getDefaultCategory(Language lang) {
153 return defaultCategories.get(lang.getId());
156 public Language[] getLanguages() {
160 public Language getDefaultLanguage() {
164 public static void main(String[] args) throws UnsupportedEncodingException {
172 cats = cfg.getCategories();
173 for (Category cat: cats)
174 System.out.println(cat);
176 feeds = cfg.getFeeds();
178 System.out.println("Number of feeds: " + feeds.length);
180 System.out.println(f);