Sat, 06 Jan 2024 20:32:56 +0100
Added tag v1.2.2 for changeset 238de141d189
1 /*
2 * Copyright 2021 Mike Becker. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 *
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
26 package de.uapcore.lightpit.entities
28 import de.uapcore.lightpit.types.IssueCategory
29 import de.uapcore.lightpit.types.IssueStatus
30 import de.uapcore.lightpit.types.IssueStatusPhase
31 import java.sql.Date
32 import java.sql.Timestamp
33 import java.time.Instant
35 data class Issue(override val id: Int, var project: Project) : Entity {
36 var component: Component? = null
37 var status = IssueStatus.InSpecification
38 var category = IssueCategory.Feature
40 var subject: String = ""
41 var description: String? = null
42 var assignee: User? = null
44 var created: Timestamp = Timestamp.from(Instant.now())
45 var updated: Timestamp = Timestamp.from(Instant.now())
46 var eta: Date? = null
48 var affected: Version? = null
49 var resolved: Version? = null
51 /**
52 * An issue is overdue, if it is not done and the ETA is before the current time.
53 */
54 val overdue get() = status.phase != IssueStatusPhase.Done && eta?.before(Date(System.currentTimeMillis())) ?: false
56 fun hasChanged(reference: Issue) = !(component == reference.component &&
57 status == reference.status &&
58 category == reference.category &&
59 subject == reference.subject &&
60 description == reference.description &&
61 assignee == reference.assignee &&
62 eta == reference.eta &&
63 affected == reference.affected &&
64 resolved == reference.resolved)
66 fun compareEtaTo(date: Date?): Int {
67 val eta = this.eta
68 return if (eta == null && date == null) 0
69 else if (eta == null) 1
70 else if (date == null) -1
71 else eta.compareTo(date)
72 }
73 }