Sat, 16 May 2020 15:45:06 +0200
fixes bug where displaying an error page for missing data source would also require that data source (error pages don't try to get database connections now)
also improves error pages in general
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 | 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 | 31 | import de.uapcore.lightpit.*; |
32 | import org.slf4j.Logger; | |
33 | import org.slf4j.LoggerFactory; | |
34 | ||
35 | 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
|
36 | import javax.servlet.annotation.WebServlet; |
11
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
37 | import javax.servlet.http.HttpServletRequest; |
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
38 | import javax.servlet.http.HttpServletResponse; |
31 | 39 | 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
|
40 | |
598670d5b0b8
core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
41 | |
598670d5b0b8
core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
42 | @LightPITModule( |
29
27a0fdd7bca7
converts to maven project
Mike Becker <universe@uap-core.de>
parents:
24
diff
changeset
|
43 | bundleBaseName = "localization.language", |
31 | 44 | modulePath = "language", |
45 | defaultPriority = 20000 | |
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 | ) |
598670d5b0b8
core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | @WebServlet( |
11
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
48 | name = "LanguageModule", |
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
49 | 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
|
50 | ) |
11
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
51 | 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
|
52 | |
13
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
53 | 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
|
54 | |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
55 | 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
|
56 | |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
57 | @Override |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
58 | 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
|
59 | super.init(); |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
60 | |
13
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
61 | 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
|
62 | 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
|
63 | 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
|
64 | try { |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
65 | 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
|
66 | 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
|
67 | 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
|
68 | } |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
69 | 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
|
70 | } catch (IllformedLocaleException ex) { |
39
e722861558bb
fixes minor issues that were reported by default inspection
Mike Becker <universe@uap-core.de>
parents:
34
diff
changeset
|
71 | 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
|
72 | } |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
73 | } |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
74 | |
13
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
75 | } else { |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
76 | 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
|
77 | 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
|
78 | } |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
79 | } |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
80 | |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
81 | @Override |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
82 | public void destroy() { |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
83 | super.destroy(); |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
84 | languages.clear(); |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
85 | } |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
86 | |
11
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
87 | @RequestMapping(method = HttpMethod.GET) |
42
f962ff9dd44e
makes every parameter in a handler method optional
Mike Becker <universe@uap-core.de>
parents:
40
diff
changeset
|
88 | public ResponseType handle(HttpServletRequest req) { |
13
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
89 | |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
90 | req.setAttribute("languages", languages); |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
91 | req.setAttribute("browserLanguage", req.getLocale()); |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
92 | |
13
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
93 | setStylesheet(req, "language"); |
f4608ad6c947
adds dynamic fragments to LightPIT request handling framework + basic language recognition code
Mike Becker <universe@uap-core.de>
parents:
12
diff
changeset
|
94 | setDynamicFragment(req, "language"); |
43
9abf0bf44c7b
renames some crappy constants
Mike Becker <universe@uap-core.de>
parents:
42
diff
changeset
|
95 | return ResponseType.HTML; |
11
737ab27e37b3
implements simple request mapper
Mike Becker <universe@uap-core.de>
parents:
10
diff
changeset
|
96 | } |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
97 | |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
98 | @RequestMapping(method = HttpMethod.POST) |
42
f962ff9dd44e
makes every parameter in a handler method optional
Mike Becker <universe@uap-core.de>
parents:
40
diff
changeset
|
99 | public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp) { |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
100 | |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
101 | Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language")) |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
102 | .map(Locale::forLanguageTag) |
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
103 | .filter((l) -> !l.getLanguage().isEmpty()); |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
104 | |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
105 | 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
|
106 | chosenLanguage.ifPresent(resp::setLocale); |
34
824d4042c857
cleanup and simplification of database access layer
Mike Becker <universe@uap-core.de>
parents:
31
diff
changeset
|
107 | |
42
f962ff9dd44e
makes every parameter in a handler method optional
Mike Becker <universe@uap-core.de>
parents:
40
diff
changeset
|
108 | return handle(req); |
15
bb594abac796
language selector completed
Mike Becker <universe@uap-core.de>
parents:
14
diff
changeset
|
109 | } |
7
598670d5b0b8
core functionality should also use the modules system, changed the code structure accordingly
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | } |