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

Thu, 05 Nov 2020 13:37:48 +0100

author
Mike Becker <universe@uap-core.de>
date
Thu, 05 Nov 2020 13:37:48 +0100
changeset 157
1e6f16fad3a5
parent 86
0a658e53177c
child 158
4f912cd42876
permissions
-rw-r--r--

removes ResponseType enum

7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
3 *
24
8137ec335416 updates copyright header
Mike Becker <universe@uap-core.de>
parents: 15
diff changeset
4 * Copyright 2018 Mike Becker. All rights reserved.
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
5 *
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
27 *
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 package de.uapcore.lightpit.modules;
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
31
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
31 import de.uapcore.lightpit.*;
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
32 import de.uapcore.lightpit.viewmodel.LanguageView;
31
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
33 import org.slf4j.Logger;
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
34 import org.slf4j.LoggerFactory;
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
35
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
36 import javax.servlet.ServletException;
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 import javax.servlet.annotation.WebServlet;
11
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
38 import javax.servlet.http.HttpServletRequest;
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
39 import javax.servlet.http.HttpServletResponse;
157
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
40 import java.io.IOException;
31
58f78f0142e8 adds module priorities
Mike Becker <universe@uap-core.de>
parents: 29
diff changeset
41 import java.util.*;
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 @WebServlet(
11
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
44 name = "LanguageModule",
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
45 urlPatterns = "/language/*"
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 )
11
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
47 public final class LanguageModule extends AbstractLightPITServlet {
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
48
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
49 private static final Logger LOG = LoggerFactory.getLogger(LanguageModule.class);
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
50
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
51 private final List<Locale> languages = new ArrayList<>();
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
52
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
53 @Override
78
bb4c52bf3439 bloat removal 2/3 - moduleInfo
Mike Becker <universe@uap-core.de>
parents: 74
diff changeset
54 protected String getResourceBundleName() {
bb4c52bf3439 bloat removal 2/3 - moduleInfo
Mike Becker <universe@uap-core.de>
parents: 74
diff changeset
55 return "localization.language";
bb4c52bf3439 bloat removal 2/3 - moduleInfo
Mike Becker <universe@uap-core.de>
parents: 74
diff changeset
56 }
bb4c52bf3439 bloat removal 2/3 - moduleInfo
Mike Becker <universe@uap-core.de>
parents: 74
diff changeset
57
bb4c52bf3439 bloat removal 2/3 - moduleInfo
Mike Becker <universe@uap-core.de>
parents: 74
diff changeset
58 @Override
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
59 public void init() throws ServletException {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
60 super.init();
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
61
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
62 Optional<String[]> langs = Functions.availableLanguages(getServletContext());
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
63 if (langs.isPresent()) {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
64 for (String lang : langs.get()) {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
65 try {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
66 Locale locale = Locale.forLanguageTag(lang);
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
67 if (locale.getLanguage().isEmpty()) {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
68 throw new IllformedLocaleException();
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
69 }
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
70 languages.add(locale);
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
71 } catch (IllformedLocaleException ex) {
39
e722861558bb fixes minor issues that were reported by default inspection
Mike Becker <universe@uap-core.de>
parents: 34
diff changeset
72 LOG.warn("Specified language {} in context parameter cannot be mapped to an existing locale - skipping.", lang);
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
73 }
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
74 }
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
75
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
76 } else {
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
77 languages.add(Locale.ENGLISH);
39
e722861558bb fixes minor issues that were reported by default inspection
Mike Becker <universe@uap-core.de>
parents: 34
diff changeset
78 LOG.warn("Context parameter 'available-languages' not found. Only english will be available.");
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
79 }
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
80 }
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
81
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
82 @Override
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
83 public void destroy() {
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
84 super.destroy();
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
85 languages.clear();
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
86 }
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
87
11
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
88 @RequestMapping(method = HttpMethod.GET)
157
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
89 public void handle(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
90
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
91 final var viewModel = new LanguageView();
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
92 viewModel.setLanguages(languages);
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
93 viewModel.setBrowserLanguage(req.getLocale());
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
94 viewModel.setCurrentLanguage((Locale)req.getSession().getAttribute(Constants.SESSION_ATTR_LANGUAGE));
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
95
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
96 setViewModel(req, viewModel);
13
f4608ad6c947 adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents: 12
diff changeset
97 setStylesheet(req, "language");
74
91d1fc2a3a14 removes that dynamic_fragment bullshit
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
98 setContentPage(req, "language");
157
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
99
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
100 renderSite(req, resp);
11
737ab27e37b3 implements simple request mapper
Mike Becker <universe@uap-core.de>
parents: 10
diff changeset
101 }
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
102
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
103 @RequestMapping(method = HttpMethod.POST)
157
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
104 public void switchLanguage(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
105
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
106 Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language"))
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
107 .map(Locale::forLanguageTag)
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
108 .filter((l) -> !l.getLanguage().isEmpty());
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
109
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
110 chosenLanguage.ifPresent((l) -> req.getSession().setAttribute(Constants.SESSION_ATTR_LANGUAGE, l));
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
111 chosenLanguage.ifPresent(resp::setLocale);
34
824d4042c857 cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents: 31
diff changeset
112
157
1e6f16fad3a5 removes ResponseType enum
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
113 handle(req, resp);
15
bb594abac796 language selector completed
Mike Becker <universe@uap-core.de>
parents: 14
diff changeset
114 }
7
598670d5b0b8 core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115 }

mercurial