simplify listIssues() interface

Sat, 04 Jun 2022 18:02:25 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 04 Jun 2022 18:02:25 +0200
changeset 248
90dc13c78b5d
parent 247
e71ae69c68c0
child 249
6bded7090719

simplify listIssues() interface

src/main/kotlin/de/uapcore/lightpit/dao/DataAccessObject.kt file | annotate | diff | comparison | revisions
src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt file | annotate | diff | comparison | revisions
src/main/kotlin/de/uapcore/lightpit/servlet/ProjectServlet.kt file | annotate | diff | comparison | revisions
src/main/kotlin/de/uapcore/lightpit/util/Filter.kt file | annotate | diff | comparison | revisions
src/main/kotlin/de/uapcore/lightpit/util/Issues.kt file | annotate | diff | comparison | revisions
     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

mercurial