src/main/kotlin/de/uapcore/lightpit/RequestMapping.kt

Tue, 06 Jan 2026 20:08:54 +0100

author
Mike Becker <universe@uap-core.de>
date
Tue, 06 Jan 2026 20:08:54 +0100
changeset 409
109850e92e95
parent 407
fa8274466c70
permissions
-rw-r--r--

add Markdown preview - resolves #774

179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * Copyright 2021 Mike Becker. All rights reserved.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Redistribution and use in source and binary forms, with or without
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * modification, are permitted provided that the following conditions are met:
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * 1. Redistributions of source code must retain the above copyright
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * notice, this list of conditions and the following disclaimer.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 */
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 package de.uapcore.lightpit
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
28 import de.uapcore.lightpit.dao.DataAccessObject
292
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
29 import de.uapcore.lightpit.entities.HasNode
367
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
30 import de.uapcore.lightpit.entities.User
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
31 import de.uapcore.lightpit.viewmodel.NavMenu
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
32 import de.uapcore.lightpit.viewmodel.View
254
55ca6cafc3dd #233 migrate to Jakarta EE and update dependencies
Mike Becker <universe@uap-core.de>
parents: 227
diff changeset
33 import jakarta.servlet.http.HttpServletRequest
55ca6cafc3dd #233 migrate to Jakarta EE and update dependencies
Mike Becker <universe@uap-core.de>
parents: 227
diff changeset
34 import jakarta.servlet.http.HttpServletResponse
55ca6cafc3dd #233 migrate to Jakarta EE and update dependencies
Mike Becker <universe@uap-core.de>
parents: 227
diff changeset
35 import jakarta.servlet.http.HttpSession
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
36 import java.util.*
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 import kotlin.math.min
225
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
38 import java.sql.Date as SqlDate
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
40 typealias MappingMethod = (HttpRequest, DataAccessObject) -> Unit
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
41 typealias PathParameters = Map<String, String>
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
42
292
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
43 sealed class OptionalPathInfo<in T : HasNode>(info: T) {
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
44 class Specific<T: HasNode>(val elem: T) : OptionalPathInfo<T>(elem)
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
45 data object All : OptionalPathInfo<HasNode>(object : HasNode { override val node = "-"})
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
46 data object None : OptionalPathInfo<HasNode>(object : HasNode { override val node = "~"})
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
47 data object NotFound : OptionalPathInfo<HasNode>(object : HasNode { override val node = ""})
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
48 val node = info.node
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
49 }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
50
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
51 sealed interface ValidationResult<T>
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
52 class ValidationError<T>(val message: String): ValidationResult<T>
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
53 class ValidatedValue<T>(val result: T): ValidationResult<T>
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
54
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
55 class HttpRequest(
367
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
56 val user: User?,
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
57 val request: HttpServletRequest,
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
58 val response: HttpServletResponse,
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
59 val pathParams: PathParameters = emptyMap()
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
60 ) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
61 val session: HttpSession = request.session
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
62
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
63 /**
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
64 * The name of the content page.
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
65 *
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
66 * @see Constants#REQ_ATTR_CONTENT_PAGE
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
67 */
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
68 var contentPage = ""
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
69 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
70 field = value
374
34abadbdd0e3 fix "what's new" not shown after redirects + do not show it when accessed via RSS
Mike Becker <universe@uap-core.de>
parents: 367
diff changeset
71 request.setAttribute(Constants.REQ_ATTR_CONTENT_PAGE,
34abadbdd0e3 fix "what's new" not shown after redirects + do not show it when accessed via RSS
Mike Becker <universe@uap-core.de>
parents: 367
diff changeset
72 Constants.JSP_PATH_PREFIX + value + ".jsp")
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
73 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
74
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
75 /**
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
76 * The name of the content page.
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
77 *
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
78 * @see Constants#REQ_ATTR_PAGE_TITLE
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
79 */
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
80 var pageTitle = ""
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
81 set(value) {
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
82 field = value
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
83 request.setAttribute(Constants.REQ_ATTR_PAGE_TITLE, value)
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
84 }
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
85
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
86 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
87 * A list of additional style sheets.
311
bf67e0ff7131 add new global issues page - fixes #404
Mike Becker <universe@uap-core.de>
parents: 292
diff changeset
88 * TODO: remove this unnecessary attribute and merge all style sheets into one global
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
89 * @see Constants#REQ_ATTR_STYLESHEET
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
90 */
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
91 var styleSheets = emptyList<String>()
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
92 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
93 field = value
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
94 request.setAttribute(Constants.REQ_ATTR_STYLESHEET,
374
34abadbdd0e3 fix "what's new" not shown after redirects + do not show it when accessed via RSS
Mike Becker <universe@uap-core.de>
parents: 367
diff changeset
95 value.map { "$it.css" }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
96 )
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
97 }
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 /**
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
100 * A list of additional style sheets.
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
101 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
102 * @see Constants#REQ_ATTR_JAVASCRIPT
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
103 */
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
104 var javascript = ""
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
105 set(value) {
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
106 field = value
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
107 request.setAttribute(Constants.REQ_ATTR_JAVASCRIPT,
374
34abadbdd0e3 fix "what's new" not shown after redirects + do not show it when accessed via RSS
Mike Becker <universe@uap-core.de>
parents: 367
diff changeset
108 "$value.js"
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
109 )
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
110 }
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
111
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
112 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
113 * The name of the navigation menu JSP.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 *
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
115 * @see Constants#REQ_ATTR_NAVIGATION
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 */
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
117 var navigationMenu: NavMenu? = null
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
118 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
119 field = value
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
120 request.setAttribute(Constants.REQ_ATTR_NAVIGATION, navigationMenu)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
121 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
122
199
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
123 var redirectLocation: String? = null
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
124 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
125 field = value
199
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
126 if (value == null) {
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
127 request.removeAttribute(Constants.REQ_ATTR_REDIRECT_LOCATION)
392
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
128 } else if (value.startsWith(baseHref)) {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
129 request.setAttribute(Constants.REQ_ATTR_REDIRECT_LOCATION, value)
199
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
130 } else {
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
131 request.setAttribute(Constants.REQ_ATTR_REDIRECT_LOCATION, baseHref + value)
59393c8cc557 #109 adds RSS feed button to project header and changes feed output slightly
Mike Becker <universe@uap-core.de>
parents: 198
diff changeset
132 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
133 }
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
134
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
135 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
136 * The view object.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
137 *
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
138 * @see Constants#REQ_ATTR_VIEWMODEL
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
139 */
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
140 var view: View? = null
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
141 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
142 field = value
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
143 request.setAttribute(Constants.REQ_ATTR_VIEWMODEL, value)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
144 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
145
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
146 /**
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
147 * Additional port info, if necessary.
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
148 */
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
149 private val portInfo =
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
150 if ((request.scheme == "http" && request.serverPort == 80)
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
151 || (request.scheme == "https" && request.serverPort == 443)
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
152 ) "" else ":${request.serverPort}"
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
153
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
154 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
155 * The base path of this application.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 */
407
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
157 val baseHref = "${request.scheme}://${request.serverName}$portInfo${request.contextPath}/"
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
158
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
159 /**
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
160 * The sanitized referer link, if any.
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
161 */
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
162 val referer: String? = this.sanitizeReferer(request.getAttribute(Constants.REQ_ATTR_REFERER) as String?)
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
163
367
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
164 init {
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
165 request.setAttribute(Constants.REQ_ATTR_BASE_HREF, baseHref)
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
166 }
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
167
351
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
168 fun paramIndexed(prefix: String): Map<Int, String> = buildMap {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
169 for (name in request.parameterNames) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
170 if (name.startsWith(prefix)) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
171 val key = name.substring(prefix.length).toIntOrNull()
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
172 if (key != null) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
173 put(key, request.getParameter(name))
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
174 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
175 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
176 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
177 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
178 fun param(name: String): String? = request.getParameter(name)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
179 fun paramArray(name: String): Array<String> = request.getParameterValues(name) ?: emptyArray()
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
180
210
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
181 fun <T> param(name: String, validator: (String?) -> (ValidationResult<T>),
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
182 defaultValue: T, errorMessages: MutableList<String>): T {
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
183 return when (val result = validator(param(name))) {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
184 is ValidationError -> {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
185 errorMessages.add(i18n(result.message))
210
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
186 defaultValue
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
187 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
188 is ValidatedValue -> {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
189 result.result
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
190 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
191 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
192 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
193
292
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
194
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
195 fun <T : HasNode> lookupPathParam(paramName: String, list: List<T>): OptionalPathInfo<T> {
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
196 return when (val node = this.pathParams[paramName]) {
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
197 null -> OptionalPathInfo.All
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
198 "-" -> OptionalPathInfo.All
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
199 "~" -> OptionalPathInfo.None
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
200 else -> list.find { it.node == node }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
201 ?.let { OptionalPathInfo.Specific(it) }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
202 ?: OptionalPathInfo.NotFound
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
203 }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
204 }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
205
284
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
206 val body: String by lazy {
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
207 request.reader.lineSequence().joinToString("\n")
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
208 }
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
209
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
210 private fun forward(jsp: String) {
374
34abadbdd0e3 fix "what's new" not shown after redirects + do not show it when accessed via RSS
Mike Becker <universe@uap-core.de>
parents: 367
diff changeset
211 request.setAttribute(Constants.REQ_ATTR_JSP, jsp)
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
212 }
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
213
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
214 fun renderFeed(page: String? = null) {
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
215 page?.let { contentPage = it }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
216 forward("feed")
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
217 }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
218
358
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
219 fun renderJson(json: String) {
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
220 response.contentType = "application/json; charset=utf-8"
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
221 response.writer.write(json)
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
222 }
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
223
409
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
224 fun renderText(text: String, type: String = "plain") {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
225 response.contentType = "text/${type}; charset=utf-8"
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
226 response.writer.write(text)
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
227 }
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
228
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
229 fun render(page: String? = null) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
230 page?.let { contentPage = it }
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
231 forward("site")
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
232 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
233
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
234 fun renderCommit(location: String? = null) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
235 location?.let { redirectLocation = it }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
236 contentPage = Constants.JSP_COMMIT_SUCCESSFUL
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
237 render()
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
238 }
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
239
260
fb2ae2d63a56 some minor style fixes
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
240 fun i18n(key: String): String = ResourceBundle.getBundle("localization/strings", response.locale).getString(key)
392
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
241
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
242 fun sanitizeReferer(referer: String?): String? {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
243 if (referer == null) return null
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
244 // if someone really explicitly specifies the default port, we must support that, but we will remove it
404
c7f4a5e81202 add referer attribute to HttpRequest class and fix missing colon in baseHrefWithPort
Mike Becker <universe@uap-core.de>
parents: 392
diff changeset
245 val baseHrefWithPort = "${request.scheme}://${request.serverName}:${request.serverPort}${request.contextPath}/"
392
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
246 return if (referer.startsWith(baseHref)) {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
247 referer
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
248 } else if (referer.startsWith(baseHrefWithPort)) {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
249 referer.replaceFirst(baseHrefWithPort, baseHref)
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
250 } else {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
251 null
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
252 }
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
253 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
254 }
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
255
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
256 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
257 * A path pattern optionally containing placeholders.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
258 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
259 * The special directories . and .. are disallowed in the pattern.
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
260 * Placeholders start with a % sign.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
261 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
262 * @param pattern the pattern
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
263 */
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
264 class PathPattern(pattern: String) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
265 private val nodePatterns: List<String>
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 private val collection: Boolean
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
268 private fun parse(pattern: String): List<String> {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
269 val nodes = pattern.split("/").filter { it.isNotBlank() }.toList()
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 require(nodes.none { it == "." || it == ".." }) { "Path must not contain '.' or '..' nodes." }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
271 return nodes
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
272 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
273
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
274 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
275 * Matches a path against this pattern.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
276 * The path must be canonical in the sense that no . or .. parts occur.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
277 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
278 * @param path the path to match
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
279 * @return true if the path matches the pattern, false otherwise
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
280 */
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
281 fun matches(path: String): Boolean {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
282 if (collection xor path.endsWith("/")) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
283 val nodes = parse(path)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
284 if (nodePatterns.size != nodes.size) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
285 for (i in nodePatterns.indices) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
286 val pattern = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
287 val node = nodes[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
288 if (pattern.startsWith("%")) continue
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
289 if (pattern != node) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
290 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
291 return true
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
292 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
293
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
294 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
295 * Returns the path parameters found in the specified path using this pattern.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
296 * The return value of this method is undefined, if the patter does not match.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
297 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
298 * @param path the path
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
299 * @return the path parameters, if any, or an empty map
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
300 * @see .matches
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
301 */
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
302 fun obtainPathParameters(path: String): PathParameters {
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
303 val params = mutableMapOf<String, String>()
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
304 val nodes = parse(path)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
305 for (i in 0 until min(nodes.size, nodePatterns.size)) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
306 val pattern = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 val node = nodes[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
308 if (pattern.startsWith("%")) {
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
309 params[pattern.substring(1)] = node
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
310 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
311 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
312 return params
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
313 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
314
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
315 override fun hashCode(): Int {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
316 val str = StringBuilder()
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
317 for (node in nodePatterns) {
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
318 if (node.startsWith("%")) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
319 str.append("/%")
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
320 } else {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
321 str.append('/')
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
322 str.append(node)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
323 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
324 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
325 if (collection) str.append('/')
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
326 return str.toString().hashCode()
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
327 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
328
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 override fun equals(other: Any?): Boolean {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
330 if (other is PathPattern) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
331 if (collection xor other.collection || nodePatterns.size != other.nodePatterns.size) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
332 for (i in nodePatterns.indices) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333 val left = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
334 val right = other.nodePatterns[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
335 if (left.startsWith("%") && right.startsWith("%")) continue
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
336 if (left != right) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
337 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
338 return true
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
339 } else {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
340 return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
341 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
342 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
343
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
344 init {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
345 nodePatterns = parse(pattern)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
346 collection = pattern.endsWith("/")
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
347 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
348 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
349
225
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
350 // <editor-fold desc="Validators">
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
351
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
352 fun dateOptValidator(input: String?): ValidationResult<SqlDate?> {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
353 return if (input.isNullOrBlank()) {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
354 ValidatedValue(null)
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
355 } else {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
356 try {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
357 ValidatedValue(SqlDate.valueOf(input))
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
358 } catch (ignored: IllegalArgumentException) {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
359 ValidationError("validation.date.format")
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
360 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
361 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
362 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
363
227
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
364 fun boolValidator(input: String?): ValidationResult<Boolean> {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
365 return if (input.isNullOrBlank()) {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
366 ValidatedValue(false)
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
367 } else {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
368 ValidatedValue(!(input.equals("false", true) || input == "0"))
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
369 }
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
370 }
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
371
225
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
372 // </editor-fold>

mercurial