load languages from configuration file
authorJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 29 Oct 2017 21:07:16 +0000 (22:07 +0100)
committerJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 29 Oct 2017 21:07:16 +0000 (22:07 +0100)
war/src/main/java/pnews/Language.java
war/src/main/java/pnews/servlet/Config.java
war/src/main/java/pnews/servlet/Pnews.java
war/src/main/resources/feeds.json

index dad66d2..30770dc 100644 (file)
@@ -1,7 +1,17 @@
 package pnews;
 
 public class Language {
-        public static String toURL(String l) {
-                return "/" + l + "/";
+        private final String id;
+        
+        public Language(String id) {
+                this.id = id;
+        }
+        
+        public String toURL() {
+                return "/" + id;
+        }
+        
+        public String getLabel() {
+                return id;
         }
 }
index e4c5fed..09a5457 100644 (file)
@@ -17,11 +17,12 @@ import javax.json.JsonValue;
 
 import pnews.Category;
 import pnews.Feed;
+import pnews.Language;
 
 public class Config {
         private Feed[] feeds;
         private Category[] categories;
-        private final String[] languages = { "fr", "en" };
+        private Language[] languages;
         private static final Logger LOG = Logger.getLogger(Config.class.getName());
                 
         private void loadCategories(JsonArray jcats) {
@@ -42,6 +43,22 @@ public class Config {
                 
                 categories = cats.toArray(new Category[0]);
         }
+
+        private void loadLanguages(JsonArray jlangs) {
+                List<Language> langs;
+                JsonObject jlang;
+                String id;
+                
+                langs = new ArrayList<>(jlangs.size());
+                
+                for (JsonValue v: jlangs) {
+                        jlang = (JsonObject)v;
+                        id = jlang.getString("id");
+                        langs.add(new Language(id));
+                }
+                
+                languages = langs.toArray(new Language[0]);
+        }
         
         private Category getCategory(String id) {
                 for (Category c: categories)
@@ -65,7 +82,7 @@ public class Config {
                                 try { r.close(); } catch (IOException e) { };
                 }
                 
-                
+                loadLanguages(jroot.getJsonArray("languages"));
                 loadCategories(jroot.getJsonArray("categories"));
                 
                 jfeeds = jroot.getJsonObject("feeds");
@@ -128,11 +145,11 @@ public class Config {
                 return categories[0];
         }
         
-        public String[] getLanguages() {
+        public Language[] getLanguages() {
                 return languages;
         }
         
-        public String getDefaultLanguage() {
+        public Language getDefaultLanguage() {
                 return languages[0];
         }
         
index 94475f9..5800d04 100644 (file)
@@ -174,7 +174,7 @@ public class Pnews extends HttpServlet {
                 }
 
                 if (path.equals("/")) {
-                        doTemporaryRedirect(Language.toURL(config.getDefaultLanguage()), resp);
+                        doTemporaryRedirect(config.getDefaultLanguage().toURL(), resp);
                         return ;
                 }
 
@@ -191,8 +191,8 @@ public class Pnews extends HttpServlet {
                                 }
                         }
                         
-                        for (String l: config.getLanguages()) {
-                                if (path.equals("/" + l) || path.equals("/" + l + "/")) {
+                        for (Language l: config.getLanguages()) {
+                                if (path.equals(l.toURL())) {
                                         doTemporaryRedirect(config.getDefaultCategory().getURL(), resp);
                                         return ;
                                 }
index 34631f2..8e71c0c 100644 (file)
@@ -1,4 +1,8 @@
 {
+        "languages": [
+                        {"id": "fr"},
+                        {"id": "en"}
+        ],
         "categories": [
                 {
                         "id": "actualite",