From 08ed43939f542770afa3c47522ec914cd300feba Mon Sep 17 00:00:00 2001 From: Jean-Philippe Orsini Date: Sun, 29 Oct 2017 22:33:14 +0100 Subject: [PATCH] multi-language support --- war/src/main/java/pnews/Language.java | 4 ++++ war/src/main/java/pnews/servlet/Config.java | 14 +++++++++++--- war/src/main/java/pnews/servlet/Pnews.java | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/war/src/main/java/pnews/Language.java b/war/src/main/java/pnews/Language.java index 30770dc..71bc6aa 100644 --- a/war/src/main/java/pnews/Language.java +++ b/war/src/main/java/pnews/Language.java @@ -14,4 +14,8 @@ public class Language { public String getLabel() { return id; } + + public String getId() { + return id; + } } diff --git a/war/src/main/java/pnews/servlet/Config.java b/war/src/main/java/pnews/servlet/Config.java index 09a5457..bafb606 100644 --- a/war/src/main/java/pnews/servlet/Config.java +++ b/war/src/main/java/pnews/servlet/Config.java @@ -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 defaultCategories = new HashMap<>(); private static final Logger LOG = Logger.getLogger(Config.class.getName()); private void loadCategories(JsonArray jcats) { List 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() { diff --git a/war/src/main/java/pnews/servlet/Pnews.java b/war/src/main/java/pnews/servlet/Pnews.java index 5800d04..4003fed 100644 --- a/war/src/main/java/pnews/servlet/Pnews.java +++ b/war/src/main/java/pnews/servlet/Pnews.java @@ -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); } -- 2.7.4