src/main/kotlin/de/uapcore/lightpit/dao/PostgresDataAccessObject.kt

changeset 248
90dc13c78b5d
parent 245
97b4d0605318
child 257
c1be672af7ff
equal deleted inserted replaced
247:e71ae69c68c0 248:90dc13c78b5d
26 package de.uapcore.lightpit.dao 26 package de.uapcore.lightpit.dao
27 27
28 import de.uapcore.lightpit.entities.* 28 import de.uapcore.lightpit.entities.*
29 import de.uapcore.lightpit.types.IssueHistoryType 29 import de.uapcore.lightpit.types.IssueHistoryType
30 import de.uapcore.lightpit.types.WebColor 30 import de.uapcore.lightpit.types.WebColor
31 import de.uapcore.lightpit.util.*
32 import de.uapcore.lightpit.viewmodel.ComponentSummary 31 import de.uapcore.lightpit.viewmodel.ComponentSummary
33 import de.uapcore.lightpit.viewmodel.IssueSummary 32 import de.uapcore.lightpit.viewmodel.IssueSummary
34 import de.uapcore.lightpit.viewmodel.VersionSummary 33 import de.uapcore.lightpit.viewmodel.VersionSummary
35 import org.intellij.lang.annotations.Language 34 import org.intellij.lang.annotations.Language
36 import java.sql.Connection 35 import java.sql.Connection
507 setIntOrNull(i++, resolved?.id) 506 setIntOrNull(i++, resolved?.id)
508 } 507 }
509 return i 508 return i
510 } 509 }
511 510
512 override fun listIssues(filter: IssueFilter): List<Issue> = 511 override fun listIssues(project: Project, version: Version?, component: Component?): List<Issue> =
513 withStatement( 512 withStatement(
514 """$issueQuery where 513 """$issueQuery where
515 (not ? or i.project = ?) and 514 (not ? or i.project = ?) and
516 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and 515 (not ? or ? in (resolved, affected)) and (not ? or (resolved is null and affected is null)) and
517 (not ? or component = ?) and (not ? or component is null) 516 (not ? or component = ?) and (not ? or component is null)
518 """.trimIndent() 517 """.trimIndent()
519 ) { 518 ) {
520 fun <T : Entity> applyFilter(filter: Filter<T>, fflag: Int, nflag: Int, idcol: Int) { 519 fun <T : Entity> applyFilter(search: T?, fflag: Int, nflag: Int, idcol: Int) {
521 when (filter) { 520 if (search == null) {
522 is AllFilter -> { 521 setBoolean(fflag, false)
523 setBoolean(fflag, false) 522 setBoolean(nflag, false)
524 setBoolean(nflag, false) 523 setInt(idcol, 0)
525 setInt(idcol, 0) 524 } else {
526 } 525 setBoolean(fflag, true)
527 is NoneFilter -> { 526 setBoolean(nflag, false)
528 setBoolean(fflag, false) 527 setInt(idcol, search.id)
529 setBoolean(nflag, true) 528 }
530 setInt(idcol, 0) 529 }
531 } 530 setBoolean(1, true)
532 is SpecificFilter -> { 531 setInt(2, project.id)
533 setBoolean(fflag, true) 532 applyFilter(version, 3, 5, 4)
534 setBoolean(nflag, false) 533 applyFilter(component, 6, 8, 7)
535 setInt(idcol, filter.obj.id)
536 }
537 else -> {
538 TODO("Implement range filter.")
539 }
540 }
541 }
542 when (filter.project) {
543 is AllFilter -> {
544 setBoolean(1, false)
545 setInt(2, 0)
546 }
547 is SpecificFilter -> {
548 setBoolean(1, true)
549 setInt(2, filter.project.obj.id)
550 }
551 else -> throw IllegalArgumentException()
552 }
553 applyFilter(filter.version, 3, 5, 4)
554 applyFilter(filter.component, 6, 8, 7)
555 534
556 queryAll { it.extractIssue() } 535 queryAll { it.extractIssue() }
557 } 536 }
558 537
559 override fun findIssue(id: Int): Issue? = 538 override fun findIssue(id: Int): Issue? =

mercurial