src/main/java/de/uapcore/lightpit/dao/postgres/PGIssueDao.java

changeset 86
0a658e53177c
parent 83
24a3596b8f98
child 88
1438e5a22c55
equal deleted inserted replaced
85:3d16ad54b3dc 86:0a658e53177c
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

mercurial