Thu, 19 Aug 2021 14:51:04 +0200
#163 removes multi selection for versions
/* * Copyright 2021 Mike Becker. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package de.uapcore.lightpit.util import de.uapcore.lightpit.entities.Component import de.uapcore.lightpit.entities.Issue import de.uapcore.lightpit.entities.Project import de.uapcore.lightpit.entities.Version import de.uapcore.lightpit.types.IssueStatusPhase data class IssueFilter( val project: Filter<Project> = AllFilter(), val version: Filter<Version> = AllFilter(), val component: Filter<Component> = AllFilter() ) data class IssueSorter(val criteria: List<Criteria>) : Comparator<Issue> { enum class Field { DONE, ETA, UPDATED } data class Criteria(val field: Field, val asc: Boolean = true) companion object { val DEFAULT_ISSUE_SORTER = IssueSorter(listOf( Criteria(Field.DONE), Criteria(Field.ETA), Criteria(Field.UPDATED, false) )) } override fun compare(left: Issue, right: Issue): Int { if (left == right) { return 0; } for (c in criteria) { val result = when (c.field) { Field.DONE -> (left.status.phase == IssueStatusPhase.Done).compareTo(right.status.phase == IssueStatusPhase.Done) Field.ETA -> { val l = left.eta val r = right.eta if (l == null && r == null) 0 else if (l == null) 1 else if (r == null) -1 else l.compareTo(r) } Field.UPDATED -> left.updated.compareTo(right.updated) } if (result != 0) { return if (c.asc) result else -result } } return 0 } }