src/main/java/de/uapcore/lightpit/modules/LanguageModule.java

changeset 34
824d4042c857
parent 31
58f78f0142e8
child 39
e722861558bb
equal deleted inserted replaced
33:fd8c40ff78c3 34:824d4042c857
1 /* 1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 * 3 *
4 * Copyright 2018 Mike Becker. All rights reserved. 4 * Copyright 2018 Mike Becker. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met: 7 * modification, are permitted provided that the following conditions are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE. 26 * POSSIBILITY OF SUCH DAMAGE.
27 * 27 *
28 */ 28 */
29 package de.uapcore.lightpit.modules; 29 package de.uapcore.lightpit.modules;
30 30
31 import de.uapcore.lightpit.*; 31 import de.uapcore.lightpit.*;
32 import org.slf4j.Logger; 32 import org.slf4j.Logger;
47 @WebServlet( 47 @WebServlet(
48 name = "LanguageModule", 48 name = "LanguageModule",
49 urlPatterns = "/language/*" 49 urlPatterns = "/language/*"
50 ) 50 )
51 public final class LanguageModule extends AbstractLightPITServlet { 51 public final class LanguageModule extends AbstractLightPITServlet {
52 52
53 private static final Logger LOG = LoggerFactory.getLogger(LanguageModule.class); 53 private static final Logger LOG = LoggerFactory.getLogger(LanguageModule.class);
54 54
55 private final List<Locale> languages = new ArrayList<>(); 55 private final List<Locale> languages = new ArrayList<>();
56 56
57 @Override 57 @Override
58 public void init() throws ServletException { 58 public void init() throws ServletException {
59 super.init(); 59 super.init();
60 60
61 Optional<String[]> langs = Functions.availableLanguages(getServletContext()); 61 Optional<String[]> langs = Functions.availableLanguages(getServletContext());
62 if (langs.isPresent()) { 62 if (langs.isPresent()) {
63 for (String lang : langs.get()) { 63 for (String lang : langs.get()) {
64 try { 64 try {
65 Locale locale = Locale.forLanguageTag(lang); 65 Locale locale = Locale.forLanguageTag(lang);
69 languages.add(locale); 69 languages.add(locale);
70 } catch (IllformedLocaleException ex) { 70 } catch (IllformedLocaleException ex) {
71 LOG.warn("Specified lanaguge {} in context parameter cannot be mapped to an existing locale - skipping.", lang); 71 LOG.warn("Specified lanaguge {} in context parameter cannot be mapped to an existing locale - skipping.", lang);
72 } 72 }
73 } 73 }
74 74
75 } else { 75 } else {
76 languages.add(Locale.ENGLISH); 76 languages.add(Locale.ENGLISH);
77 LOG.warn("Context parameter 'available-languges' not found. Only english will be available."); 77 LOG.warn("Context parameter 'available-languges' not found. Only english will be available.");
78 } 78 }
79 } 79 }
81 @Override 81 @Override
82 public void destroy() { 82 public void destroy() {
83 super.destroy(); 83 super.destroy();
84 languages.clear(); 84 languages.clear();
85 } 85 }
86 86
87 @RequestMapping(method = HttpMethod.GET) 87 @RequestMapping(method = HttpMethod.GET)
88 public ResponseType handle(HttpServletRequest req, HttpServletResponse resp) { 88 public ResponseType handle(HttpServletRequest req, HttpServletResponse resp) {
89 89
90 req.setAttribute("languages", languages); 90 req.setAttribute("languages", languages);
91 req.setAttribute("browserLanguage", req.getLocale()); 91 req.setAttribute("browserLanguage", req.getLocale());
92 92
93 setStylesheet(req, "language"); 93 setStylesheet(req, "language");
94 setDynamicFragment(req, "language"); 94 setDynamicFragment(req, "language");
95 return ResponseType.HTML_FULL; 95 return ResponseType.HTML_FULL;
96 } 96 }
97 97
98 @RequestMapping(method = HttpMethod.POST) 98 @RequestMapping(method = HttpMethod.POST)
99 public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp) { 99 public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp) {
100 100
101 Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language")) 101 Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language"))
102 .map(Locale::forLanguageTag) 102 .map(Locale::forLanguageTag)
103 .filter((l) -> !l.getLanguage().isEmpty()); 103 .filter((l) -> !l.getLanguage().isEmpty());
104 104
105 chosenLanguage.ifPresent((l) -> req.getSession().setAttribute(Constants.SESSION_ATTR_LANGUAGE, l)); 105 chosenLanguage.ifPresent((l) -> req.getSession().setAttribute(Constants.SESSION_ATTR_LANGUAGE, l));
106 chosenLanguage.ifPresent(resp::setLocale); 106 chosenLanguage.ifPresent(resp::setLocale);
107 107
108 return handle(req, resp); 108 return handle(req, resp);
109 } 109 }
110 } 110 }

mercurial