41 |
41 |
42 import static de.uapcore.lightpit.dao.Functions.*; |
42 import static de.uapcore.lightpit.dao.Functions.*; |
43 |
43 |
44 public final class PGIssueDao implements IssueDao { |
44 public final class PGIssueDao implements IssueDao { |
45 |
45 |
46 private final PreparedStatement insert, update, list, find; |
46 private final PreparedStatement insert, update, list, listForVersion, find; |
47 private final PreparedStatement affectedVersions, scheduledVersions, resolvedVersions; |
47 private final PreparedStatement affectedVersions, scheduledVersions, resolvedVersions; |
48 private final PreparedStatement clearAffected, clearScheduled, clearResolved; |
48 private final PreparedStatement clearAffected, clearScheduled, clearResolved; |
49 private final PreparedStatement insertAffected, insertScheduled, insertResolved; |
49 private final PreparedStatement insertAffected, insertScheduled, insertResolved; |
50 |
50 |
51 public PGIssueDao(Connection connection) throws SQLException { |
51 public PGIssueDao(Connection connection) throws SQLException { |
54 "userid, username, givenname, lastname, mail, " + |
54 "userid, username, givenname, lastname, mail, " + |
55 "created, updated, eta " + |
55 "created, updated, eta " + |
56 "from lpit_issue i " + |
56 "from lpit_issue i " + |
57 "left join lpit_project p on project = projectid " + |
57 "left join lpit_project p on project = projectid " + |
58 "left join lpit_user on userid = assignee " + |
58 "left join lpit_user on userid = assignee " + |
59 "where project = ? "); |
59 "where project = ? "+ |
|
60 "order by eta asc, updated desc"); |
|
61 |
|
62 listForVersion = connection.prepareStatement( |
|
63 "with issue_version as ( "+ |
|
64 "select issueid, versionid from lpit_issue_affected_version union "+ |
|
65 "select issueid, versionid from lpit_issue_scheduled_version union "+ |
|
66 "select issueid, versionid from lpit_issue_resolved_version) "+ |
|
67 "select issueid, project, p.name as projectname, status, category, subject, i.description, " + |
|
68 "userid, username, givenname, lastname, mail, " + |
|
69 "created, updated, eta " + |
|
70 "from lpit_issue i " + |
|
71 "join issue_version using (issueid) "+ |
|
72 "left join lpit_project p on project = projectid " + |
|
73 "left join lpit_user on userid = assignee " + |
|
74 "where versionid = ? "+ |
|
75 "order by eta asc, updated desc" |
|
76 ); |
60 |
77 |
61 find = connection.prepareStatement( |
78 find = connection.prepareStatement( |
62 "select issueid, project, p.name as projectname, status, category, subject, i.description, " + |
79 "select issueid, project, p.name as projectname, status, category, subject, i.description, " + |
63 "userid, username, givenname, lastname, mail, " + |
80 "userid, username, givenname, lastname, mail, " + |
64 "created, updated, eta " + |
81 "created, updated, eta " + |
119 } |
136 } |
120 |
137 |
121 private Issue mapColumns(ResultSet result) throws SQLException { |
138 private Issue mapColumns(ResultSet result) throws SQLException { |
122 final var project = new Project(result.getInt("project")); |
139 final var project = new Project(result.getInt("project")); |
123 project.setName(result.getString("projectname")); |
140 project.setName(result.getString("projectname")); |
124 final var issue = new Issue(result.getInt("issueid"), project); |
141 final var issue = new Issue(result.getInt("issueid")); |
|
142 issue.setProject(project); |
125 issue.setStatus(IssueStatus.valueOf(result.getString("status"))); |
143 issue.setStatus(IssueStatus.valueOf(result.getString("status"))); |
126 issue.setCategory(IssueCategory.valueOf(result.getString("category"))); |
144 issue.setCategory(IssueCategory.valueOf(result.getString("category"))); |
127 issue.setSubject(result.getString("subject")); |
145 issue.setSubject(result.getString("subject")); |
128 issue.setDescription(result.getString("description")); |
146 issue.setDescription(result.getString("description")); |
129 issue.setAssignee(obtainAssignee(result)); |
147 issue.setAssignee(obtainAssignee(result)); |
131 issue.setUpdated(result.getTimestamp("updated")); |
149 issue.setUpdated(result.getTimestamp("updated")); |
132 issue.setEta(result.getDate("eta")); |
150 issue.setEta(result.getDate("eta")); |
133 return issue; |
151 return issue; |
134 } |
152 } |
135 |
153 |
136 private Version mapVersion(ResultSet result, Project project) throws SQLException { |
154 private Version mapVersion(ResultSet result) throws SQLException { |
137 final var version = new Version(result.getInt("versionid"), project); |
155 final var version = new Version(result.getInt("versionid")); |
138 version.setName(result.getString("name")); |
156 version.setName(result.getString("name")); |
139 version.setOrdinal(result.getInt("ordinal")); |
157 version.setOrdinal(result.getInt("ordinal")); |
140 version.setStatus(VersionStatus.valueOf(result.getString("status"))); |
158 version.setStatus(VersionStatus.valueOf(result.getString("status"))); |
141 return version; |
159 return version; |
142 } |
160 } |
201 } else { |
219 } else { |
202 return false; |
220 return false; |
203 } |
221 } |
204 } |
222 } |
205 |
223 |
206 @Override |
224 private List<Issue> list(PreparedStatement query, int arg) throws SQLException { |
207 public List<Issue> list(Project project) throws SQLException { |
225 query.setInt(1, arg); |
208 list.setInt(1, project.getId()); |
|
209 List<Issue> issues = new ArrayList<>(); |
226 List<Issue> issues = new ArrayList<>(); |
210 try (var result = list.executeQuery()) { |
227 try (var result = query.executeQuery()) { |
211 while (result.next()) { |
228 while (result.next()) { |
212 issues.add(mapColumns(result)); |
229 issues.add(mapColumns(result)); |
213 } |
230 } |
214 } |
231 } |
215 return issues; |
232 return issues; |
|
233 } |
|
234 |
|
235 @Override |
|
236 public List<Issue> list(Project project) throws SQLException { |
|
237 return list(list, project.getId()); |
|
238 } |
|
239 |
|
240 @Override |
|
241 public List<Issue> list(Version version) throws SQLException { |
|
242 return list(listForVersion, version.getId()); |
216 } |
243 } |
217 |
244 |
218 @Override |
245 @Override |
219 public Issue find(int id) throws SQLException { |
246 public Issue find(int id) throws SQLException { |
220 find.setInt(1, id); |
247 find.setInt(1, id); |
230 private List<Version> listVersions(PreparedStatement stmt, Issue issue) throws SQLException { |
257 private List<Version> listVersions(PreparedStatement stmt, Issue issue) throws SQLException { |
231 stmt.setInt(1, issue.getId()); |
258 stmt.setInt(1, issue.getId()); |
232 List<Version> versions = new ArrayList<>(); |
259 List<Version> versions = new ArrayList<>(); |
233 try (var result = stmt.executeQuery()) { |
260 try (var result = stmt.executeQuery()) { |
234 while (result.next()) { |
261 while (result.next()) { |
235 versions.add(mapVersion(result, issue.getProject())); |
262 versions.add(mapVersion(result)); |
236 } |
263 } |
237 } |
264 } |
238 return versions; |
265 return versions; |
239 } |
266 } |
240 |
267 |