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

Tue, 23 Jun 2026 14:30:10 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 23 Jun 2026 14:30:10 +0200
changeset 436
a07662e829c0
parent 427
4124102c2f37
permissions
-rw-r--r--

add the possibility to hide projects from the left menu - resolves #818

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
436
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
51 sealed interface ValidationResult<T> {
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
52 fun getOrNull(): T? = when (this) {
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
53 is ValidatedValue -> result
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
54 else -> null
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
55 }
a07662e829c0 add the possibility to hide projects from the left menu - resolves #818
Mike Becker <universe@uap-core.de>
parents: 427
diff changeset
56 }
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
57 class ValidationError<T>(val message: String): ValidationResult<T>
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
58 class ValidatedValue<T>(val result: T): ValidationResult<T>
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
59
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
60 class HttpRequest(
367
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
61 val user: User?,
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
62 val request: HttpServletRequest,
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
63 val response: HttpServletResponse,
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
64 val pathParams: PathParameters = emptyMap()
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 val session: HttpSession = request.session
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 /**
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
69 * The name of the content page.
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
70 *
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
71 * @see Constants#REQ_ATTR_CONTENT_PAGE
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
72 */
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
73 var contentPage = ""
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
74 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
75 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
76 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
77 Constants.JSP_PATH_PREFIX + value + ".jsp")
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
78 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
79
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
80 /**
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
81 * The name of the content page.
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
82 *
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
83 * @see Constants#REQ_ATTR_PAGE_TITLE
205
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 var pageTitle = ""
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
86 set(value) {
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
87 field = value
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
88 request.setAttribute(Constants.REQ_ATTR_PAGE_TITLE, value)
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
89 }
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
90
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
91 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
92 * A list of additional style sheets.
207
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
93 *
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
94 * @see Constants#REQ_ATTR_JAVASCRIPT
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
95 */
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
96 var javascript = ""
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
97 set(value) {
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
98 field = value
479dd7993ef9 #22 adds possibility to edit own comments
Mike Becker <universe@uap-core.de>
parents: 205
diff changeset
99 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
100 "$value.js"
207
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 }
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 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
105 * 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
106 *
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
107 * @see Constants#REQ_ATTR_NAVIGATION
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
108 */
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
109 var navigationMenu: NavMenu? = null
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
110 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
111 field = value
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
112 request.setAttribute(Constants.REQ_ATTR_NAVIGATION, navigationMenu)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
113 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
114
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
115 var redirectLocation: String? = null
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
116 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
117 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
118 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
119 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
120 } 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
121 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
122 } 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
123 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
124 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
125 }
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
126
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
127 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
128 * The view object.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
129 *
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
130 * @see Constants#REQ_ATTR_VIEWMODEL
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
131 */
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
132 var view: View? = null
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
133 set(value) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
134 field = value
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
135 request.setAttribute(Constants.REQ_ATTR_VIEWMODEL, value)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
136 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
137
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
138 /**
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
139 * 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
140 */
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
141 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
142 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
143 || (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
144 ) "" 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
145
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
146 /**
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
147 * The base path of this application.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
148 */
407
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
149 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
150
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
151 /**
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
152 * The sanitized referer link, if any.
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
153 */
fa8274466c70 fix incorrect field initialization order
Mike Becker <universe@uap-core.de>
parents: 404
diff changeset
154 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
155
367
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
156 init {
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
157 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
158 }
0a9065936aac add "what's new" popup - resolves #670
Mike Becker <universe@uap-core.de>
parents: 358
diff changeset
159
351
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
160 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
161 for (name in request.parameterNames) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
162 if (name.startsWith(prefix)) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
163 val key = name.substring(prefix.length).toIntOrNull()
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
164 if (key != null) {
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
165 put(key, request.getParameter(name))
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
166 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
167 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
168 }
3720c7375146 implement changing and saving variant status
Mike Becker <universe@uap-core.de>
parents: 311
diff changeset
169 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
170 fun param(name: String): String? = request.getParameter(name)
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
171 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
172
210
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
173 fun <T> param(name: String, validator: (String?) -> (ValidationResult<T>),
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
174 defaultValue: T, errorMessages: MutableList<String>): T {
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
175 return when (val result = validator(param(name))) {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
176 is ValidationError -> {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
177 errorMessages.add(i18n(result.message))
210
37fbdcb422b7 minor code changes
Mike Becker <universe@uap-core.de>
parents: 209
diff changeset
178 defaultValue
209
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
179 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
180 is ValidatedValue -> {
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
181 result.result
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
182 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
183 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
184 }
c9c6abf167c7 #21 adds input validation mechanism
Mike Becker <universe@uap-core.de>
parents: 207
diff changeset
185
292
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
186
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
187 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
188 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
189 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
190 "-" -> 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
191 "~" -> 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
192 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
193 ?.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
194 ?: 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
195 }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
196 }
703591e739f4 add possibility to show issues w/o version or component - fixes #335
Mike Becker <universe@uap-core.de>
parents: 284
diff changeset
197
284
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
198 val body: String by lazy {
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
199 request.reader.lineSequence().joinToString("\n")
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
200 }
671c1c8fbf1c add full support for commit references - fixes #276
Mike Becker <universe@uap-core.de>
parents: 260
diff changeset
201
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
202 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
203 request.setAttribute(Constants.REQ_ATTR_JSP, jsp)
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
204 }
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
205
198
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
206 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
207 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
208 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
209 }
94f174d591ab fixes wrong handling of feeds - only one channel per feed is allowed
Mike Becker <universe@uap-core.de>
parents: 195
diff changeset
210
358
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
211 fun renderJson(json: String) {
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
212 response.contentType = "application/json; charset=utf-8"
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
213 response.writer.write(json)
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
214 }
e46bef1bdddd add issue search box
Mike Becker <universe@uap-core.de>
parents: 351
diff changeset
215
409
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
216 fun renderText(text: String, type: String = "plain") {
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
217 response.contentType = "text/${type}; charset=utf-8"
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
218 response.writer.write(text)
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
219 }
109850e92e95 add Markdown preview - resolves #774
Mike Becker <universe@uap-core.de>
parents: 407
diff changeset
220
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
221 fun render(page: String? = null) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
222 page?.let { contentPage = it }
195
9c7aff3cbb14 #109 - add RSS feed
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
223 forward("site")
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
224 }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
225
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
226 fun renderCommit(location: String? = null) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
227 location?.let { redirectLocation = it }
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
228 contentPage = Constants.JSP_COMMIT_SUCCESSFUL
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
229 render()
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
230 }
205
7725a79416f3 #115 adds custom page titles
Mike Becker <universe@uap-core.de>
parents: 199
diff changeset
231
260
fb2ae2d63a56 some minor style fixes
Mike Becker <universe@uap-core.de>
parents: 254
diff changeset
232 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
233
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
234 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
235 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
236 // 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
237 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
238 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
239 referer
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
240 } 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
241 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
242 } else {
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
243 null
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
244 }
c0c7b4ca2946 add convenience buttons for editing version, component, variant - resolves #733
Mike Becker <universe@uap-core.de>
parents: 374
diff changeset
245 }
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
246 }
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
247
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
248 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
249 * A path pattern optionally containing placeholders.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
250 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
251 * The special directories . and .. are disallowed in the pattern.
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
252 * Placeholders start with a % sign.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
253 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
254 * @param pattern the pattern
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 class PathPattern(pattern: String) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
257 private val nodePatterns: List<String>
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
258 private val collection: Boolean
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
259
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
260 private fun parse(pattern: String): List<String> {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
261 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
262 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
263 return nodes
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
264 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
265
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
266 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
267 * Matches a path against this pattern.
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
268 * 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
269 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
270 * @param path the path to match
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
271 * @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
272 */
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
273 fun matches(path: String): Boolean {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
274 if (collection xor path.endsWith("/")) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
275 val nodes = parse(path)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
276 if (nodePatterns.size != nodes.size) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
277 for (i in nodePatterns.indices) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
278 val pattern = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
279 val node = nodes[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
280 if (pattern.startsWith("%")) continue
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
281 if (pattern != node) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
282 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
283 return true
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
284 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
285
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
286 /**
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
287 * Returns the path parameters found in the specified path using this pattern.
427
4124102c2f37 fix typo in docstring for obtainPathParameters()
Mike Becker <universe@uap-core.de>
parents: 414
diff changeset
288 * The return value of this method is undefined if the pattern does not match.
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
289 *
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
290 * @param path the path
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
291 * @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
292 * @see .matches
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 fun obtainPathParameters(path: String): PathParameters {
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
295 val params = mutableMapOf<String, String>()
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
296 val nodes = parse(path)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
297 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
298 val pattern = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
299 val node = nodes[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
300 if (pattern.startsWith("%")) {
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
301 params[pattern.substring(1)] = node
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
302 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
303 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
304 return params
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
305 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
306
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
307 override fun hashCode(): Int {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
308 val str = StringBuilder()
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
309 for (node in nodePatterns) {
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
310 if (node.startsWith("%")) {
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
311 str.append("/%")
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
312 } else {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
313 str.append('/')
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
314 str.append(node)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
315 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
316 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
317 if (collection) str.append('/')
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
318 return str.toString().hashCode()
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
319 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
320
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
321 override fun equals(other: Any?): Boolean {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
322 if (other is PathPattern) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
323 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
324 for (i in nodePatterns.indices) {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
325 val left = nodePatterns[i]
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
326 val right = other.nodePatterns[i]
184
e8eecee6aadf completes kotlin migration
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
327 if (left.startsWith("%") && right.startsWith("%")) continue
179
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
328 if (left != right) return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
329 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
330 return true
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
331 } else {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
332 return false
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
333 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
334 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
335
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
336 init {
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
337 nodePatterns = parse(pattern)
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
338 collection = pattern.endsWith("/")
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
339 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
340 }
623c340058f3 migrates the utility classes for the AbstractServlet
Mike Becker <universe@uap-core.de>
parents:
diff changeset
341
225
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
342 // <editor-fold desc="Validators">
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
343
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
344 fun dateOptValidator(input: String?): ValidationResult<SqlDate?> {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
345 return if (input.isNullOrBlank()) {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
346 ValidatedValue(null)
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
347 } else {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
348 try {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
349 ValidatedValue(SqlDate.valueOf(input))
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
350 } catch (ignored: IllegalArgumentException) {
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
351 ValidationError("validation.date.format")
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
352 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
353 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
354 }
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
355
227
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
356 fun boolValidator(input: String?): ValidationResult<Boolean> {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
357 return if (input.isNullOrBlank()) {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
358 ValidatedValue(false)
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
359 } else {
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
360 ValidatedValue(!(input.equals("false", true) || input == "0"))
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
361 }
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
362 }
f0ede8046b59 #162 adds active flag to component
Mike Becker <universe@uap-core.de>
parents: 225
diff changeset
363
225
87328572e36f #159 adds release and eol dates
Mike Becker <universe@uap-core.de>
parents: 210
diff changeset
364 // </editor-fold>

mercurial