src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt

changeset 193
1e4044d29b1c
parent 191
193ee4828767
child 198
94f174d591ab
equal deleted inserted replaced
192:997e2c97ba34 193:1e4044d29b1c
33 import de.uapcore.lightpit.types.IssueStatus 33 import de.uapcore.lightpit.types.IssueStatus
34 import de.uapcore.lightpit.types.VersionStatus 34 import de.uapcore.lightpit.types.VersionStatus
35 import de.uapcore.lightpit.types.WebColor 35 import de.uapcore.lightpit.types.WebColor
36 import de.uapcore.lightpit.util.AllFilter 36 import de.uapcore.lightpit.util.AllFilter
37 import de.uapcore.lightpit.util.IssueFilter 37 import de.uapcore.lightpit.util.IssueFilter
38 import de.uapcore.lightpit.util.IssueSorter.Companion.DEFAULT_ISSUE_SORTER
38 import de.uapcore.lightpit.util.SpecificFilter 39 import de.uapcore.lightpit.util.SpecificFilter
39 import de.uapcore.lightpit.viewmodel.* 40 import de.uapcore.lightpit.viewmodel.*
40 import java.sql.Date 41 import java.sql.Date
41 import javax.servlet.annotation.WebServlet 42 import javax.servlet.annotation.WebServlet
42 43
66 post("/%project/issues/%version/%component/%issue/comment", this::issueComment) 67 post("/%project/issues/%version/%component/%issue/comment", this::issueComment)
67 get("/%project/issues/%version/%component/-/create", this::issueForm) 68 get("/%project/issues/%version/%component/-/create", this::issueForm)
68 post("/%project/issues/%version/%component/-/commit", this::issueCommit) 69 post("/%project/issues/%version/%component/-/commit", this::issueCommit)
69 } 70 }
70 71
71 fun projects(http: HttpRequest, dao: DataAccessObject) { 72 private fun projects(http: HttpRequest, dao: DataAccessObject) {
72 val projects = dao.listProjects() 73 val projects = dao.listProjects()
73 val projectInfos = projects.map { 74 val projectInfos = projects.map {
74 ProjectInfo( 75 ProjectInfo(
75 project = it, 76 project = it,
76 versions = dao.listVersions(it), 77 versions = dao.listVersions(it),
179 } 180 }
180 181
181 return PathInfos(projectInfo, version, component) 182 return PathInfos(projectInfo, version, component)
182 } 183 }
183 184
184 fun project(http: HttpRequest, dao: DataAccessObject) { 185 private fun project(http: HttpRequest, dao: DataAccessObject) {
185 withPathInfo(http, dao)?.run { 186 withPathInfo(http, dao)?.run {
187
186 val issues = dao.listIssues(IssueFilter( 188 val issues = dao.listIssues(IssueFilter(
187 project = SpecificFilter(projectInfo.project), 189 project = SpecificFilter(projectInfo.project),
188 version = version?.let { SpecificFilter(it) } ?: AllFilter(), 190 version = version?.let { SpecificFilter(it) } ?: AllFilter(),
189 component = component?.let { SpecificFilter(it) } ?: AllFilter() 191 component = component?.let { SpecificFilter(it) } ?: AllFilter()
190 )) 192 )).sortedWith(DEFAULT_ISSUE_SORTER)
191 193
192 with(http) { 194 with(http) {
193 view = ProjectDetails(projectInfo, issues, version, component) 195 view = ProjectDetails(projectInfo, issues, version, component)
194 navigationMenu = activeProjectNavMenu( 196 navigationMenu = activeProjectNavMenu(
195 dao.listProjects(), 197 dao.listProjects(),
201 render("project-details") 203 render("project-details")
202 } 204 }
203 } 205 }
204 } 206 }
205 207
206 fun projectForm(http: HttpRequest, dao: DataAccessObject) { 208 private fun projectForm(http: HttpRequest, dao: DataAccessObject) {
207 val projectInfo = obtainProjectInfo(http, dao) 209 val projectInfo = obtainProjectInfo(http, dao)
208 if (projectInfo == null) { 210 if (projectInfo == null) {
209 http.response.sendError(404) 211 http.response.sendError(404)
210 return 212 return
211 } 213 }
219 styleSheets = listOf("projects") 221 styleSheets = listOf("projects")
220 render("project-form") 222 render("project-form")
221 } 223 }
222 } 224 }
223 225
224 fun projectCommit(http: HttpRequest, dao: DataAccessObject) { 226 private fun projectCommit(http: HttpRequest, dao: DataAccessObject) {
225 // TODO: replace defaults with throwing validator exceptions 227 // TODO: replace defaults with throwing validator exceptions
226 val project = Project(http.param("id")?.toIntOrNull() ?: -1).apply { 228 val project = Project(http.param("id")?.toIntOrNull() ?: -1).apply {
227 name = http.param("name") ?: "" 229 name = http.param("name") ?: ""
228 node = http.param("node") ?: "" 230 node = http.param("node") ?: ""
229 description = http.param("description") ?: "" 231 description = http.param("description") ?: ""
245 } 247 }
246 248
247 http.renderCommit("projects/${project.node}") 249 http.renderCommit("projects/${project.node}")
248 } 250 }
249 251
250 fun versions(http: HttpRequest, dao: DataAccessObject) { 252 private fun versions(http: HttpRequest, dao: DataAccessObject) {
251 val projectInfo = obtainProjectInfo(http, dao) 253 val projectInfo = obtainProjectInfo(http, dao)
252 if (projectInfo == null) { 254 if (projectInfo == null) {
253 http.response.sendError(404) 255 http.response.sendError(404)
254 return 256 return
255 } 257 }
266 styleSheets = listOf("projects") 268 styleSheets = listOf("projects")
267 render("versions") 269 render("versions")
268 } 270 }
269 } 271 }
270 272
271 fun versionForm(http: HttpRequest, dao: DataAccessObject) { 273 private fun versionForm(http: HttpRequest, dao: DataAccessObject) {
272 val projectInfo = obtainProjectInfo(http, dao) 274 val projectInfo = obtainProjectInfo(http, dao)
273 if (projectInfo == null) { 275 if (projectInfo == null) {
274 http.response.sendError(404) 276 http.response.sendError(404)
275 return 277 return
276 } 278 }
296 styleSheets = listOf("projects") 298 styleSheets = listOf("projects")
297 render("version-form") 299 render("version-form")
298 } 300 }
299 } 301 }
300 302
301 fun versionCommit(http: HttpRequest, dao: DataAccessObject) { 303 private fun versionCommit(http: HttpRequest, dao: DataAccessObject) {
302 val id = http.param("id")?.toIntOrNull() 304 val id = http.param("id")?.toIntOrNull()
303 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 305 val projectid = http.param("projectid")?.toIntOrNull() ?: -1
304 val project = dao.findProject(projectid) 306 val project = dao.findProject(projectid)
305 if (id == null || project == null) { 307 if (id == null || project == null) {
306 http.response.sendError(400) 308 http.response.sendError(400)
326 } 328 }
327 329
328 http.renderCommit("projects/${project.node}/versions/") 330 http.renderCommit("projects/${project.node}/versions/")
329 } 331 }
330 332
331 fun components(http: HttpRequest, dao: DataAccessObject) { 333 private fun components(http: HttpRequest, dao: DataAccessObject) {
332 val projectInfo = obtainProjectInfo(http, dao) 334 val projectInfo = obtainProjectInfo(http, dao)
333 if (projectInfo == null) { 335 if (projectInfo == null) {
334 http.response.sendError(404) 336 http.response.sendError(404)
335 return 337 return
336 } 338 }
347 styleSheets = listOf("projects") 349 styleSheets = listOf("projects")
348 render("components") 350 render("components")
349 } 351 }
350 } 352 }
351 353
352 fun componentForm(http: HttpRequest, dao: DataAccessObject) { 354 private fun componentForm(http: HttpRequest, dao: DataAccessObject) {
353 val projectInfo = obtainProjectInfo(http, dao) 355 val projectInfo = obtainProjectInfo(http, dao)
354 if (projectInfo == null) { 356 if (projectInfo == null) {
355 http.response.sendError(404) 357 http.response.sendError(404)
356 return 358 return
357 } 359 }
377 styleSheets = listOf("projects") 379 styleSheets = listOf("projects")
378 render("component-form") 380 render("component-form")
379 } 381 }
380 } 382 }
381 383
382 fun componentCommit(http: HttpRequest, dao: DataAccessObject) { 384 private fun componentCommit(http: HttpRequest, dao: DataAccessObject) {
383 val id = http.param("id")?.toIntOrNull() 385 val id = http.param("id")?.toIntOrNull()
384 val projectid = http.param("projectid")?.toIntOrNull() ?: -1 386 val projectid = http.param("projectid")?.toIntOrNull() ?: -1
385 val project = dao.findProject(projectid) 387 val project = dao.findProject(projectid)
386 if (id == null || project == null) { 388 if (id == null || project == null) {
387 http.response.sendError(400) 389 http.response.sendError(400)
411 } 413 }
412 414
413 http.renderCommit("projects/${project.node}/components/") 415 http.renderCommit("projects/${project.node}/components/")
414 } 416 }
415 417
416 fun issue(http: HttpRequest, dao: DataAccessObject) { 418 private fun issue(http: HttpRequest, dao: DataAccessObject) {
417 withPathInfo(http, dao)?.run { 419 withPathInfo(http, dao)?.run {
418 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) 420 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1)
419 if (issue == null) { 421 if (issue == null) {
420 http.response.sendError(404) 422 http.response.sendError(404)
421 return 423 return
435 render("issue-view") 437 render("issue-view")
436 } 438 }
437 } 439 }
438 } 440 }
439 441
440 fun issueForm(http: HttpRequest, dao: DataAccessObject) { 442 private fun issueForm(http: HttpRequest, dao: DataAccessObject) {
441 withPathInfo(http, dao)?.run { 443 withPathInfo(http, dao)?.run {
442 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) ?: Issue( 444 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) ?: Issue(
443 -1, 445 -1,
444 projectInfo.project, 446 projectInfo.project,
445 ) 447 )
476 render("issue-form") 478 render("issue-form")
477 } 479 }
478 } 480 }
479 } 481 }
480 482
481 fun issueComment(http: HttpRequest, dao: DataAccessObject) { 483 private fun issueComment(http: HttpRequest, dao: DataAccessObject) {
482 withPathInfo(http, dao)?.run { 484 withPathInfo(http, dao)?.run {
483 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1) 485 val issue = dao.findIssue(http.pathParams["issue"]?.toIntOrNull() ?: -1)
484 if (issue == null) { 486 if (issue == null) {
485 http.response.sendError(404) 487 http.response.sendError(404)
486 return 488 return
496 498
497 http.renderCommit("${issuesHref}${issue.id}") 499 http.renderCommit("${issuesHref}${issue.id}")
498 } 500 }
499 } 501 }
500 502
501 fun issueCommit(http: HttpRequest, dao: DataAccessObject) { 503 private fun issueCommit(http: HttpRequest, dao: DataAccessObject) {
502 withPathInfo(http, dao)?.run { 504 withPathInfo(http, dao)?.run {
503 // TODO: throw validator exception instead of using defaults 505 // TODO: throw validator exception instead of using defaults
504 val issue = Issue( 506 val issue = Issue(
505 http.param("id")?.toIntOrNull() ?: -1, 507 http.param("id")?.toIntOrNull() ?: -1,
506 projectInfo.project 508 projectInfo.project

mercurial