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;
26 private static final Logger LOG = Logger.getLogger(Config.class.getName());
28 private void loadCategories(JsonArray jcats) {
31 String id, label, title, language;
33 cats = new ArrayList<>(jcats.size());
35 for (JsonValue v: jcats) {
37 id = jcat.getString("id");
38 label = jcat.getString("label");
39 title = jcat.getString("title");
40 language = jcat.getString("language");
41 cats.add(new Category(id, label, title, language));
44 categories = cats.toArray(new Category[0]);
47 private void loadLanguages(JsonArray jlangs) {
52 langs = new ArrayList<>(jlangs.size());
54 for (JsonValue v: jlangs) {
55 jlang = (JsonObject)v;
56 id = jlang.getString("id");
57 langs.add(new Language(id));
60 languages = langs.toArray(new Language[0]);
63 private Category getCategory(String id) {
64 for (Category c: categories)
65 if (c.getId().equals(id))
70 public void loadConfig() throws UnsupportedEncodingException {
72 JsonObject jfeeds, jroot;
77 r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"),
79 jroot = Json.createReader(r).readObject();
82 try { r.close(); } catch (IOException e) { };
85 loadLanguages(jroot.getJsonArray("languages"));
86 loadCategories(jroot.getJsonArray("categories"));
88 jfeeds = jroot.getJsonObject("feeds");
90 feedList = new ArrayList<Feed>(jfeeds.size());
92 jfeeds.forEach((k, v)-> {
96 JsonArray jcategories;
99 jcategories = jf.getJsonArray("categories");
100 str = jcategories.getString(0);
102 cat = getCategory(str);
105 feedList.add(new Feed(k, cat));
107 LOG.severe("Missing category: " + str);
110 feeds = feedList.toArray(new Feed[0]);
113 public Feed[] getFeeds() {
117 public Map<Category, List<Feed>> getFeedsByCategory() {
118 Map<Category, List<Feed>> result;
123 result = new HashMap<>();
126 for (Feed f: feeds) {
127 cat = f.getCategory();
129 catFeeds = result.get(cat);
130 if (catFeeds == null) {
131 catFeeds = new ArrayList<Feed>();
132 result.put(cat, catFeeds);
140 public Category[] getCategories() {
144 public Category getDefaultCategory() {
145 return categories[0];
148 public Language[] getLanguages() {
152 public Language getDefaultLanguage() {
156 public static void main(String[] args) throws UnsupportedEncodingException {
164 cats = cfg.getCategories();
165 for (Category cat: cats)
166 System.out.println(cat);
168 feeds = cfg.getFeeds();
170 System.out.println("Number of feeds: " + feeds.length);
172 System.out.println(f);