a77eb88f1c6d38fe38a23e60fb606a08f232a143
[pnews.git] / war / src / main / java / pnews / servlet / Config.java
1 package pnews.servlet;
2
3 import java.io.IOException;
4 import java.io.InputStreamReader;
5 import java.io.Reader;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.Map;
10
11 import javax.json.Json;
12 import javax.json.JsonArray;
13 import javax.json.JsonObject;
14
15 import pnews.Category;
16 import pnews.Feed;
17
18 public class Config {
19         private Feed[] feeds;
20         private Category[] categories;
21                 
22         public void loadConfig() {
23                 Reader r;
24                 JsonObject jfeeds, jroot;
25                 List<Feed> feedList;
26                 Map<String, Category> cats;
27                 
28                 r = null;
29                 try {
30                         r = new InputStreamReader(Config.class.getClassLoader().getResourceAsStream("feeds.json"));
31                         jroot = Json.createReader(r).readObject();
32                 } finally {
33                         if (r != null)
34                                 try { r.close(); } catch (IOException e) { };
35                 }
36                 
37                 jfeeds = jroot.getJsonObject("feeds");
38                 
39                 feedList = new ArrayList<Feed>(jfeeds.size());
40                 cats = new HashMap<>();
41
42                 jfeeds.forEach((k, v)-> {
43                         JsonObject jf;
44                         String str;
45                         Category cat;
46                         JsonArray jcategories;
47                         
48                         jf = (JsonObject)v;
49                         jcategories = jf.getJsonArray("categories");
50                         str = jcategories.getString(0);
51                         
52                         cat = cats.get(str);
53                         if (cat == null) {
54                                 cat = new Category(str);
55                                 cats.put(str, cat);
56                         }
57                         
58                         feedList.add(new Feed(k, cat));                                           
59                 });
60                 
61                 feeds = feedList.toArray(new Feed[0]);
62                 categories = cats.values().toArray(new Category[0]);
63         }
64         
65         public Feed[] getFeeds() {
66                 return feeds;
67         }
68         
69         public Map<Category, List<Feed>> getFeedsByCategory() {
70                 Map<Category, List<Feed>> result;
71                 Feed[] feeds;
72                 List<Feed> catFeeds;
73                 Category cat;
74                 
75                 result = new HashMap<>();
76                 
77                 feeds = getFeeds();
78                 for (Feed f: feeds) {
79                         cat = f.getCategory();
80                 
81                         catFeeds = result.get(cat);
82                         if (catFeeds == null) {
83                                 catFeeds = new ArrayList<Feed>();
84                                 result.put(cat, catFeeds);
85                         }
86                         catFeeds.add(f);
87                 }
88                 
89                 return result;
90         }
91
92         public Category[] getCategories() {
93                 return categories;
94         }
95         
96         public Category getDefaultCategory() {
97                 return categories[0];
98         }
99         
100         public static void main(String[] args) {
101                 Config cfg;
102                 Feed[] feeds;           
103                 Category[] cats;
104
105                 cfg = new Config();
106                 cfg.loadConfig();
107                 
108                 cats = cfg.getCategories();
109                 for (Category cat: cats)
110                         System.out.println(cat);
111                 
112                 feeds = cfg.getFeeds();
113                 
114                 System.out.println("Number of feeds: " + feeds.length);
115                 for (Feed f: feeds)
116                         System.out.println(f);
117         }
118 }