multi-language support
authorJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 29 Oct 2017 21:33:14 +0000 (22:33 +0100)
committerJean-Philippe Orsini <orsinije@fr.ibm.com>
Sun, 29 Oct 2017 21:33:14 +0000 (22:33 +0100)
war/src/main/java/pnews/Language.java
war/src/main/java/pnews/servlet/Config.java
war/src/main/java/pnews/servlet/Pnews.java

index 30770dc..71bc6aa 100644 (file)
@@ -14,4 +14,8 @@ public class Language {
         public String getLabel() {
                 return id;
         }
+        
+        public String getId() {
+                return id;
+        }
 }
index 09a5457..bafb606 100644 (file)
@@ -23,11 +23,16 @@ public class Config {
         private Feed[] feeds;
         private Category[] categories;
         private Language[] languages;
+        /**
+         * The key is the language, the value is the default category for this language.
+         */
+        private Map<String, Category> defaultCategories = new HashMap<>();
         private static final Logger LOG = Logger.getLogger(Config.class.getName());
                 
         private void loadCategories(JsonArray jcats) {
                 List<Category> cats;
                 JsonObject jcat;
+                Category cat;
                 String id, label, title, language;
                 
                 cats = new ArrayList<>(jcats.size());
@@ -38,7 +43,10 @@ public class Config {
                         label = jcat.getString("label");
                         title = jcat.getString("title");
                         language = jcat.getString("language");
-                        cats.add(new Category(id, label, title, language));
+                        cat = new Category(id, label, title, language);
+                        cats.add(cat);
+                        if (defaultCategories.get(language) == null)
+                                defaultCategories.put(language, cat);
                 }
                 
                 categories = cats.toArray(new Category[0]);
@@ -141,8 +149,8 @@ public class Config {
                 return categories;
         }
         
-        public Category getDefaultCategory() {
-                return categories[0];
+        public Category getDefaultCategory(Language lang) {
+                return defaultCategories.get(lang.getId());
         }
         
         public Language[] getLanguages() {
index 5800d04..4003fed 100644 (file)
@@ -193,14 +193,14 @@ public class Pnews extends HttpServlet {
                         
                         for (Language l: config.getLanguages()) {
                                 if (path.equals(l.toURL())) {
-                                        doTemporaryRedirect(config.getDefaultCategory().getURL(), resp);
+                                        doTemporaryRedirect(config.getDefaultCategory(l).getURL(), resp);
                                         return ;
                                 }
                         }
                 
                         resp.getWriter().write("Not found " + req.getPathInfo());
                         resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
-                } catch (IOException e) {
+                } catch (IOException | RuntimeException e) {
                         LOG.log(Level.SEVERE, "doGet failure", e);
                         resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
                 }