src/main/kotlin/de/uapcore/lightpit/dao/postgres/PGIssueDao.kt

Thu, 19 Nov 2020 13:58:54 +0100

author
mike@uapl01.localdomain
date
Thu, 19 Nov 2020 13:58:54 +0100
changeset 159
86b5d8a1662f
child 164
003b08bb3f25
permissions
-rw-r--r--

migrates DAO classes

159
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
1 /*
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
2 * Copyright 2020 Mike Becker. All rights reserved.
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
3 *
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
4 * Redistribution and use in source and binary forms, with or without
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
5 * modification, are permitted provided that the following conditions are met:
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
6 *
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
7 * 1. Redistributions of source code must retain the above copyright
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
8 * notice, this list of conditions and the following disclaimer.
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
9 *
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
10 * 2. Redistributions in binary form must reproduce the above copyright
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
11 * notice, this list of conditions and the following disclaimer in the
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
12 * documentation and/or other materials provided with the distribution.
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
13 *
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
14 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
17 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
20 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
21 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
22 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
24 *
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
25 */
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
26
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
27 package de.uapcore.lightpit.dao.postgres
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
28
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
29 import de.uapcore.lightpit.dao.AbstractIssueDao
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
30 import de.uapcore.lightpit.dao.Functions
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
31 import de.uapcore.lightpit.entities.*
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
32 import java.sql.Connection
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
33 import java.sql.PreparedStatement
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
34 import java.sql.ResultSet
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
35 import java.sql.Types
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
36
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
37 class PGIssueDao(connection: Connection) : AbstractIssueDao() {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
38
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
39 private val query = "select issueid, i.project, p.name as projectname, p.node as projectnode, " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
40 "component, c.name as componentname, c.node as componentnode, " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
41 "status, category, subject, i.description, " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
42 "userid, username, givenname, lastname, mail, " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
43 "created, updated, eta " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
44 "from lpit_issue i " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
45 "join lpit_project p on i.project = projectid " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
46 "left join lpit_component c on component = c.id " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
47 "left join lpit_user on userid = assignee "
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
48 private val list = connection.prepareStatement(query +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
49 "where i.project = ? and coalesce(component, -1) = coalesce(?, component, -1)")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
50 private val listForVersion = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
51 "with issue_version as ( " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
52 "select issueid, versionid from lpit_issue_affected_version union " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
53 "select issueid, versionid from lpit_issue_resolved_version) " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
54 query +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
55 "left join issue_version using (issueid) " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
56 "where i.project = ? " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
57 "and coalesce(versionid,-1) = ? and coalesce(component, -1) = coalesce(?, component, -1)"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
58 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
59 private val find = connection.prepareStatement(query + "where issueid = ? ")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
60 private val insert = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
61 "insert into lpit_issue (project, component, status, category, subject, description, assignee, eta) " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
62 "values (?, ?, ?::issue_status, ?::issue_category, ?, ?, ?, ?) returning issueid"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
63 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
64 private val update = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
65 "update lpit_issue set " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
66 "updated = now(), component = ?, status = ?::issue_status, category = ?::issue_category, " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
67 "subject = ?, description = ?, assignee = ?, eta = ? where issueid = ?"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
68 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
69 private val affectedVersions = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
70 "select versionid, name, status, ordinal, node " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
71 "from lpit_version join lpit_issue_affected_version using (versionid) " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
72 "where issueid = ? " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
73 "order by ordinal, name"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
74 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
75 private val clearAffected = connection.prepareStatement("delete from lpit_issue_affected_version where issueid = ?")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
76 private val insertAffected = connection.prepareStatement("insert into lpit_issue_affected_version (issueid, versionid) values (?,?)")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
77
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
78 private val resolvedVersions = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
79 "select versionid, name, status, ordinal, node " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
80 "from lpit_version v join lpit_issue_resolved_version using (versionid) " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
81 "where issueid = ? " +
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
82 "order by ordinal, name"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
83 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
84 private val clearResolved = connection.prepareStatement("delete from lpit_issue_resolved_version where issueid = ?")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
85 private val insertResolved = connection.prepareStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
86 private val insertComment = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
87 "insert into lpit_issue_comment (issueid, comment, userid) values (?, ? ,?)"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
88 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
89 private val updateComment = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
90 "update lpit_issue_comment set comment = ?, updated = now(), updatecount = updatecount+1 where commentid = ?"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
91 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
92 private val listComments = connection.prepareStatement(
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
93 "select * from lpit_issue_comment left join lpit_user using (userid) where issueid = ? order by created"
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
94 )
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
95
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
96 override fun mapResult(rs: ResultSet): Issue {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
97 val project = Project(rs.getInt("project"))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
98 project.name = rs.getString("projectname")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
99 project.node = rs.getString("projectnode")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
100 val issue = Issue(rs.getInt("issueid"))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
101 issue.project = project
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
102 issue.component = rs.getInt("component").let { id ->
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
103 if (rs.wasNull()) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
104 null
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
105 } else {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
106 val component = Component(id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
107 component.name = rs.getString("componentname")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
108 component.node = rs.getString("componentnode")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
109 component
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
110 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
111 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
112 issue.status = IssueStatus.valueOf(rs.getString("status"))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
113 issue.category = IssueCategory.valueOf(rs.getString("category"))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
114 issue.subject = rs.getString("subject")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
115 issue.description = rs.getString("description")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
116 issue.assignee = PGUserDao.mapResult(rs).takeUnless { rs.wasNull() }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
117 issue.created = rs.getTimestamp("created")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
118 issue.updated = rs.getTimestamp("updated")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
119 issue.eta = rs.getDate("eta")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
120 return issue
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
121 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
122
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
123 private fun updateVersionLists(instance: Issue) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
124 clearAffected.setInt(1, instance.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
125 clearResolved.setInt(1, instance.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
126 insertAffected.setInt(1, instance.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
127 insertResolved.setInt(1, instance.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
128 clearAffected.executeUpdate()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
129 clearResolved.executeUpdate()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
130 for (v: Version in instance.affectedVersions) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
131 insertAffected.setInt(2, v.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
132 insertAffected.executeUpdate()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
133 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
134 for (v: Version in instance.resolvedVersions) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
135 insertResolved.setInt(2, v.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
136 insertResolved.executeUpdate()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
137 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
138 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
139
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
140 private fun setData(stmt: PreparedStatement, column: Int, instance: Issue): Int {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
141 var col = column
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
142 setForeignKeyOrNull(stmt, ++col, instance.component, Component::id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
143 stmt.setString(++col, instance.status.name)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
144 stmt.setString(++col, instance.category.name)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
145 stmt.setString(++col, instance.subject)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
146 Functions.setStringOrNull(stmt, ++col, instance.description)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
147 setForeignKeyOrNull(stmt, ++col, instance.assignee, User::id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
148 Functions.setDateOrNull(stmt, ++col, instance.eta)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
149 return col
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
150 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
151
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
152 override fun save(instance: Issue, parent: Project) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
153 instance.project = parent
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
154 var column = 0
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
155 insert.setInt(++column, parent.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
156 setData(insert, column, instance)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
157 // insert and retrieve the ID
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
158 val rs = insert.executeQuery()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
159 rs.next()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
160 instance.id = rs.getInt(1)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
161 updateVersionLists(instance)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
162 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
163
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
164 override fun update(instance: Issue): Boolean {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
165 var column = setData(update, 0, instance)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
166 update.setInt(++column, instance.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
167 return if (update.executeUpdate() > 0) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
168 updateVersionLists(instance)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
169 true
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
170 } else {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
171 false
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
172 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
173 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
174
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
175 override fun list(parent: Project): List<Issue> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
176 list.setInt(1, parent.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
177 list.setNull(2, Types.INTEGER)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
178 return super.list(list)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
179 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
180
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
181 override fun list(project: Project, component: Component?, version: Version?): List<Issue> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
182 listForVersion.setInt(1, project.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
183 listForVersion.setInt(2, version?.id ?: -1)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
184 listForVersion.setInt(3, component?.id ?: -1)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
185 return super.list(listForVersion)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
186 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
187
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
188 override fun list(project: Project, version: Version?): List<Issue> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
189 listForVersion.setInt(1, project.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
190 listForVersion.setInt(2, version?.id ?: -1)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
191 listForVersion.setNull(3, Types.INTEGER)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
192 return super.list(listForVersion)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
193 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
194
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
195 override fun list(project: Project, component: Component?): List<Issue> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
196 list.setInt(1, project.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
197 list.setInt(2, component?.id ?: -1)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
198 return super.list(list)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
199 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
200
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
201 override fun find(id: Int): Issue? {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
202 find.setInt(1, id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
203 return super.find(find)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
204 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
205
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
206 private fun listVersions(stmt: PreparedStatement, issue: Issue): List<Version> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
207 stmt.setInt(1, issue.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
208 return sequence {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
209 stmt.executeQuery().use { result ->
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
210 while (result.next()) yield(PGVersionDao.mapResult(result))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
211 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
212 }.toList()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
213 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
214
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
215 override fun joinVersionInformation(issue: Issue) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
216 issue.affectedVersions = listVersions(affectedVersions, issue)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
217 issue.resolvedVersions = listVersions(resolvedVersions, issue)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
218 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
219
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
220 override fun listComments(issue: Issue): List<IssueComment> {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
221 listComments.setInt(1, issue.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
222 return sequence {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
223 listComments.executeQuery().use { rs ->
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
224 while (rs.next()) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
225 val comment = IssueComment(rs.getInt("commentid"))
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
226 comment.created = rs.getTimestamp("created")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
227 comment.updated = rs.getTimestamp("updated")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
228 comment.updateCount = rs.getInt("updatecount")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
229 comment.comment = rs.getString("comment")
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
230 comment.author = PGUserDao.mapResult(rs).takeUnless { rs.wasNull() }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
231 yield(comment)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
232 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
233 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
234 }.toList()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
235 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
236
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
237 override fun saveComment(issue: Issue, comment: IssueComment) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
238 if (comment.id >= 0) {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
239 updateComment.setString(1, comment.comment)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
240 updateComment.setInt(2, comment.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
241 updateComment.execute()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
242 } else {
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
243 insertComment.setInt(1, issue.id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
244 insertComment.setString(2, comment.comment)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
245 setForeignKeyOrNull(insertComment, 3, comment.author, User::id)
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
246 insertComment.execute()
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
247 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
248 }
86b5d8a1662f migrates DAO classes
mike@uapl01.localdomain
parents:
diff changeset
249 }

mercurial