Sat, 04 Jun 2022 18:02:25 +0200
simplify listIssues() interface
1.1 --- a/src/main/kotlin/de/uapcore/lightpit/dao/DataAccessObject.kt Wed Dec 15 19:56:05 2021 +0100 1.2 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/DataAccessObject.kt Sat Jun 04 18:02:25 2022 +0200 1.3 @@ -26,12 +26,12 @@ 1.4 package de.uapcore.lightpit.dao 1.5 1.6 import de.uapcore.lightpit.entities.* 1.7 -import de.uapcore.lightpit.util.IssueFilter 1.8 import de.uapcore.lightpit.viewmodel.ComponentSummary 1.9 import de.uapcore.lightpit.viewmodel.IssueSummary 1.10 import de.uapcore.lightpit.viewmodel.VersionSummary 1.11 1.12 interface DataAccessObject { 1.13 + 1.14 fun listUsers(): List<User> 1.15 fun findUser(id: Int): User? 1.16 fun findUserByName(username: String): User? 1.17 @@ -69,7 +69,7 @@ 1.18 1.19 fun collectIssueSummary(project: Project): IssueSummary 1.20 1.21 - fun listIssues(filter: IssueFilter): List<Issue> 1.22 + fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> 1.23 fun findIssue(id: Int): Issue? 1.24 fun insertIssue(issue: Issue): Int 1.25 fun updateIssue(issue: Issue)
2.1 --- a/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Wed Dec 15 19:56:05 2021 +0100 2.2 +++ b/src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt Sat Jun 04 18:02:25 2022 +0200 2.3 @@ -28,7 +28,6 @@ 2.4 import de.uapcore.lightpit.entities.* 2.5 import de.uapcore.lightpit.types.IssueHistoryType 2.6 import de.uapcore.lightpit.types.WebColor 2.7 -import de.uapcore.lightpit.util.* 2.8 import de.uapcore.lightpit.viewmodel.ComponentSummary 2.9 import de.uapcore.lightpit.viewmodel.IssueSummary 2.10 import de.uapcore.lightpit.viewmodel.VersionSummary 2.11 @@ -509,7 +508,7 @@ 2.12 return i 2.13 } 2.14 2.15 - override fun listIssues(filter: IssueFilter): List<Issue> = 2.16 + override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> = 2.17 withStatement( 2.18 """$issueQuery where 2.19 (not ? or i.project = ?) and 2.20 @@ -517,41 +516,21 @@ 2.21 (not ? or component = ?) and (not ? or component is null) 2.22 """.trimIndent() 2.23 ) { 2.24 - fun <T : Entity> applyFilter(filter: Filter<T>, fflag: Int, nflag: Int, idcol: Int) { 2.25 - when (filter) { 2.26 - is AllFilter -> { 2.27 - setBoolean(fflag, false) 2.28 - setBoolean(nflag, false) 2.29 - setInt(idcol, 0) 2.30 - } 2.31 - is NoneFilter -> { 2.32 - setBoolean(fflag, false) 2.33 - setBoolean(nflag, true) 2.34 - setInt(idcol, 0) 2.35 - } 2.36 - is SpecificFilter -> { 2.37 - setBoolean(fflag, true) 2.38 - setBoolean(nflag, false) 2.39 - setInt(idcol, filter.obj.id) 2.40 - } 2.41 - else -> { 2.42 - TODO("Implement range filter.") 2.43 - } 2.44 + fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) { 2.45 + if (search == null) { 2.46 + setBoolean(fflag, false) 2.47 + setBoolean(nflag, false) 2.48 + setInt(idcol, 0) 2.49 + } else { 2.50 + setBoolean(fflag, true) 2.51 + setBoolean(nflag, false) 2.52 + setInt(idcol, search.id) 2.53 } 2.54 } 2.55 - when (filter.project) { 2.56 - is AllFilter -> { 2.57 - setBoolean(1, false) 2.58 - setInt(2, 0) 2.59 - } 2.60 - is SpecificFilter -> { 2.61 - setBoolean(1, true) 2.62 - setInt(2, filter.project.obj.id) 2.63 - } 2.64 - else -> throw IllegalArgumentException() 2.65 - } 2.66 - applyFilter(filter.version, 3, 5, 4) 2.67 - applyFilter(filter.component, 6, 8, 7) 2.68 + setBoolean(1, true) 2.69 + setInt(2, project.id) 2.70 + applyFilter(version, 3, 5, 4) 2.71 + applyFilter(component, 6, 8, 7) 2.72 2.73 queryAll { it.extractIssue() } 2.74 }
3.1 --- a/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Wed Dec 15 19:56:05 2021 +0100 3.2 +++ b/src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt Sat Jun 04 18:02:25 2022 +0200 3.3 @@ -35,10 +35,7 @@ 3.4 import de.uapcore.lightpit.types.IssueStatus 3.5 import de.uapcore.lightpit.types.VersionStatus 3.6 import de.uapcore.lightpit.types.WebColor 3.7 -import de.uapcore.lightpit.util.AllFilter 3.8 -import de.uapcore.lightpit.util.IssueFilter 3.9 import de.uapcore.lightpit.util.IssueSorter.Companion.DEFAULT_ISSUE_SORTER 3.10 -import de.uapcore.lightpit.util.SpecificFilter 3.11 import de.uapcore.lightpit.viewmodel.* 3.12 import java.sql.Date 3.13 import javax.servlet.annotation.WebServlet 3.14 @@ -189,11 +186,8 @@ 3.15 private fun project(http: HttpRequest, dao: DataAccessObject) { 3.16 withPathInfo(http, dao)?.run { 3.17 3.18 - val issues = dao.listIssues(IssueFilter( 3.19 - project = SpecificFilter(project), 3.20 - version = version?.let { SpecificFilter(it) } ?: AllFilter(), 3.21 - component = component?.let { SpecificFilter(it) } ?: AllFilter() 3.22 - )).sortedWith(DEFAULT_ISSUE_SORTER) 3.23 + val issues = dao.listIssues(project, version, component) 3.24 + .sortedWith(DEFAULT_ISSUE_SORTER) 3.25 3.26 with(http) { 3.27 pageTitle = project.name
4.1 --- a/src/main/kotlin/de/uapcore/lightpit/util/Filter.kt Wed Dec 15 19:56:05 2021 +0100 4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 4.3 @@ -1,32 +0,0 @@ 4.4 -/* 4.5 - * Copyright 2021 Mike Becker. All rights reserved. 4.6 - * 4.7 - * Redistribution and use in source and binary forms, with or without 4.8 - * modification, are permitted provided that the following conditions are met: 4.9 - * 4.10 - * 1. Redistributions of source code must retain the above copyright 4.11 - * notice, this list of conditions and the following disclaimer. 4.12 - * 4.13 - * 2. Redistributions in binary form must reproduce the above copyright 4.14 - * notice, this list of conditions and the following disclaimer in the 4.15 - * documentation and/or other materials provided with the distribution. 4.16 - * 4.17 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 4.18 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4.19 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 4.20 - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 4.21 - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4.22 - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 4.23 - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 4.24 - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 4.25 - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 4.26 - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 4.27 - */ 4.28 - 4.29 -package de.uapcore.lightpit.util 4.30 - 4.31 -sealed class Filter<T> 4.32 -class AllFilter<T> : Filter<T>() 4.33 -class NoneFilter<T> : Filter<T>() 4.34 -data class SpecificFilter<T>(val obj: T) : Filter<T>() 4.35 -data class RangeFilter<T>(val lower: T, val upper: T) : Filter<T>() where T : Comparable<T>
5.1 --- a/src/main/kotlin/de/uapcore/lightpit/util/Issues.kt Wed Dec 15 19:56:05 2021 +0100 5.2 +++ b/src/main/kotlin/de/uapcore/lightpit/util/Issues.kt Sat Jun 04 18:02:25 2022 +0200 5.3 @@ -25,18 +25,9 @@ 5.4 5.5 package de.uapcore.lightpit.util 5.6 5.7 -import de.uapcore.lightpit.entities.Component 5.8 import de.uapcore.lightpit.entities.Issue 5.9 -import de.uapcore.lightpit.entities.Project 5.10 -import de.uapcore.lightpit.entities.Version 5.11 import de.uapcore.lightpit.types.IssueStatusPhase 5.12 5.13 -data class IssueFilter( 5.14 - val project: Filter<Project> = AllFilter(), 5.15 - val version: Filter<Version> = AllFilter(), 5.16 - val component: Filter<Component> = AllFilter() 5.17 -) 5.18 - 5.19 data class IssueSorter(val criteria: List<Criteria>) : Comparator<Issue> { 5.20 enum class Field { 5.21 DONE, ETA, UPDATED