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

Thu, 08 Oct 2020 20:38:43 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 08 Oct 2020 20:38:43 +0200
changeset 110
9d0be0b1580f
parent 105
250c5cbb8276
child 121
428dca747d6b
permissions
-rw-r--r--

adds indicators for version status

replaces table column "Status" with version tag
fixes New Version form button not overriding the session version ID

38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2018 Mike Becker. All rights reserved.
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 *
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29 package de.uapcore.lightpit.dao.postgres;
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
31 import de.uapcore.lightpit.dao.IssueDao;
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
32 import de.uapcore.lightpit.entities.*;
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 import java.sql.Connection;
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 import java.sql.PreparedStatement;
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 import java.sql.ResultSet;
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 import java.sql.SQLException;
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
38 import java.util.ArrayList;
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
39 import java.util.List;
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 import java.util.Objects;
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
42 import static de.uapcore.lightpit.dao.Functions.*;
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
43
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
44 public final class PGIssueDao implements IssueDao {
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
45
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
46 private final PreparedStatement insert, update, list, listForVersion, find;
88
1438e5a22c55 simplifies version overviews by removing "scheduled issues"
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
47 private final PreparedStatement affectedVersions, resolvedVersions;
1438e5a22c55 simplifies version overviews by removing "scheduled issues"
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
48 private final PreparedStatement clearAffected, clearResolved;
1438e5a22c55 simplifies version overviews by removing "scheduled issues"
Mike Becker <universe@uap-core.de>
parents: 86
diff changeset
49 private final PreparedStatement insertAffected, insertResolved;
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
51 public PGIssueDao(Connection connection) throws SQLException {
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
52 list = connection.prepareStatement(
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
53 "select issueid, project, p.name as projectname, status, category, subject, i.description, " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
54 "userid, username, givenname, lastname, mail, " +
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
55 "created, updated, eta " +
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
56 "from lpit_issue i " +
105
250c5cbb8276 simplifies issues per version view and re-adds edit version button
Mike Becker <universe@uap-core.de>
parents: 88
diff changeset
57 "join lpit_project p on project = projectid " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
58 "left join lpit_user on userid = assignee " +
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
59 "where project = ? "+
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
60 "order by eta asc, updated desc");
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
61
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
62 listForVersion = connection.prepareStatement(
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
63 "with issue_version as ( "+
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
64 "select issueid, versionid from lpit_issue_affected_version union "+
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
65 "select issueid, versionid from lpit_issue_resolved_version) "+
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
66 "select issueid, project, p.name as projectname, status, category, subject, i.description, " +
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
67 "userid, username, givenname, lastname, mail, " +
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
68 "created, updated, eta " +
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
69 "from lpit_issue i " +
105
250c5cbb8276 simplifies issues per version view and re-adds edit version button
Mike Becker <universe@uap-core.de>
parents: 88
diff changeset
70 "join lpit_project p on project = projectid " +
250c5cbb8276 simplifies issues per version view and re-adds edit version button
Mike Becker <universe@uap-core.de>
parents: 88
diff changeset
71 "left join issue_version using (issueid) "+
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
72 "left join lpit_user on userid = assignee " +
105
250c5cbb8276 simplifies issues per version view and re-adds edit version button
Mike Becker <universe@uap-core.de>
parents: 88
diff changeset
73 "where coalesce(versionid,-1) = ? "+
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
74 "order by eta asc, updated desc"
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
75 );
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
77 find = connection.prepareStatement(
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
78 "select issueid, project, p.name as projectname, status, category, subject, i.description, " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
79 "userid, username, givenname, lastname, mail, " +
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
80 "created, updated, eta " +
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
81 "from lpit_issue i " +
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
82 "left join lpit_project p on project = projectid " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
83 "left join lpit_user on userid = assignee " +
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
84 "where issueid = ? ");
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 insert = connection.prepareStatement(
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
87 "insert into lpit_issue (project, status, category, subject, description, assignee, eta) " +
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
88 "values (?, ?::issue_status, ?::issue_category, ?, ?, ?, ?) returning issueid"
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 );
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 update = connection.prepareStatement(
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
91 "update lpit_issue set updated = now(), status = ?::issue_status, category = ?::issue_category, " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
92 "subject = ?, description = ?, assignee = ?, eta = ? where issueid = ?"
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
93 );
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
94
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
95 affectedVersions = connection.prepareStatement(
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
96 "select versionid, name, status, ordinal " +
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
97 "from lpit_version join lpit_issue_affected_version using (versionid) " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
98 "where issueid = ? " +
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
99 "order by ordinal, name"
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
100 );
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
101 clearAffected = connection.prepareStatement("delete from lpit_issue_affected_version where issueid = ?");
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
102 insertAffected = connection.prepareStatement("insert into lpit_issue_affected_version (issueid, versionid) values (?,?)");
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
103
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
104 resolvedVersions = connection.prepareStatement(
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
105 "select versionid, name, status, ordinal " +
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
106 "from lpit_version v join lpit_issue_resolved_version using (versionid) " +
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
107 "where issueid = ? " +
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
108 "order by ordinal, name"
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 );
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
110 clearResolved = connection.prepareStatement("delete from lpit_issue_resolved_version where issueid = ?");
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
111 insertResolved = connection.prepareStatement("insert into lpit_issue_resolved_version (issueid, versionid) values (?,?)");
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 }
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
114 private User obtainAssignee(ResultSet result) throws SQLException {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
115 final int id = result.getInt("userid");
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
116 if (id != 0) {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
117 final var user = new User(id);
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
118 user.setUsername(result.getString("username"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
119 user.setGivenname(result.getString("givenname"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
120 user.setLastname(result.getString("lastname"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
121 user.setMail(result.getString("mail"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
122 return user;
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
123 } else {
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
124 return null;
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
125 }
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
126 }
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
127
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
128 private Issue mapColumns(ResultSet result) throws SQLException {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
129 final var project = new Project(result.getInt("project"));
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
130 project.setName(result.getString("projectname"));
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
131 final var issue = new Issue(result.getInt("issueid"));
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
132 issue.setProject(project);
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
133 issue.setStatus(IssueStatus.valueOf(result.getString("status")));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
134 issue.setCategory(IssueCategory.valueOf(result.getString("category")));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
135 issue.setSubject(result.getString("subject"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
136 issue.setDescription(result.getString("description"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
137 issue.setAssignee(obtainAssignee(result));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
138 issue.setCreated(result.getTimestamp("created"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
139 issue.setUpdated(result.getTimestamp("updated"));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
140 issue.setEta(result.getDate("eta"));
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
141 return issue;
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
142 }
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
143
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
144 private Version mapVersion(ResultSet result) throws SQLException {
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
145 final var version = new Version(result.getInt("versionid"));
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
146 version.setName(result.getString("name"));
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
147 version.setOrdinal(result.getInt("ordinal"));
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
148 version.setStatus(VersionStatus.valueOf(result.getString("status")));
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
149 return version;
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
150 }
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
151
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
152 private void updateVersionLists(Issue instance) throws SQLException {
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
153 clearAffected.setInt(1, instance.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
154 clearResolved.setInt(1, instance.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
155 insertAffected.setInt(1, instance.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
156 insertResolved.setInt(1, instance.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
157 clearAffected.executeUpdate();
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
158 clearResolved.executeUpdate();
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
159 for (Version v : instance.getAffectedVersions()) {
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
160 insertAffected.setInt(2, v.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
161 insertAffected.executeUpdate();
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
162 }
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
163 for (Version v : instance.getResolvedVersions()) {
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
164 insertResolved.setInt(2, v.getId());
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
165 insertResolved.executeUpdate();
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
166 }
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
167 }
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
168
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
169 @Override
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
170 public void save(Issue instance) throws SQLException {
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
171 Objects.requireNonNull(instance.getSubject());
59
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
172 Objects.requireNonNull(instance.getProject());
c759c60507a2 adds version management
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
173 insert.setInt(1, instance.getProject().getId());
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
174 insert.setString(2, instance.getStatus().name());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
175 insert.setString(3, instance.getCategory().name());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
176 insert.setString(4, instance.getSubject());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
177 setStringOrNull(insert, 5, instance.getDescription());
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
178 setForeignKeyOrNull(insert, 6, instance.getAssignee(), User::getId);
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
179 setDateOrNull(insert, 7, instance.getEta());
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
180 // insert and retrieve the ID
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
181 final var rs = insert.executeQuery();
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
182 rs.next();
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
183 instance.setId(rs.getInt(1));
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
184 updateVersionLists(instance);
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
185 }
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
186
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
187 @Override
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
188 public boolean update(Issue instance) throws SQLException {
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
189 if (instance.getId() < 0) return false;
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
190 Objects.requireNonNull(instance.getSubject());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
191 update.setString(1, instance.getStatus().name());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
192 update.setString(2, instance.getCategory().name());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
193 update.setString(3, instance.getSubject());
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
194 setStringOrNull(update, 4, instance.getDescription());
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
195 setForeignKeyOrNull(update, 5, instance.getAssignee(), User::getId);
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
196 setDateOrNull(update, 6, instance.getEta());
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
197 update.setInt(7, instance.getId());
83
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
198 boolean success = update.executeUpdate() > 0;
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
199 if (success) {
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
200 updateVersionLists(instance);
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
201 return true;
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
202 } else {
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
203 return false;
24a3596b8f98 adds version selection in issue editor
Mike Becker <universe@uap-core.de>
parents: 75
diff changeset
204 }
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
205 }
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
206
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
207 private List<Issue> list(PreparedStatement query, int arg) throws SQLException {
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
208 query.setInt(1, arg);
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
209 List<Issue> issues = new ArrayList<>();
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
210 try (var result = query.executeQuery()) {
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
211 while (result.next()) {
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
212 issues.add(mapColumns(result));
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
213 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
214 }
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
215 return issues;
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
216 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
217
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
218 @Override
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
219 public List<Issue> list(Project project) throws SQLException {
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
220 return list(list, project.getId());
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
221 }
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
222
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
223 @Override
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
224 public List<Issue> list(Version version) throws SQLException {
105
250c5cbb8276 simplifies issues per version view and re-adds edit version button
Mike Becker <universe@uap-core.de>
parents: 88
diff changeset
225 return list(listForVersion, version == null ? -1 : version.getId());
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
226 }
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
227
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
228 @Override
62
833e0385572a adds data model for issues
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
229 public Issue find(int id) throws SQLException {
47
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
230 find.setInt(1, id);
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
231 try (var result = find.executeQuery()) {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
232 if (result.next()) {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
233 return mapColumns(result);
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
234 } else {
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
235 return null;
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
236 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
237 }
57cfb94ab99f projects can now be added and updated
Mike Becker <universe@uap-core.de>
parents: 38
diff changeset
238 }
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
239
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
240 private List<Version> listVersions(PreparedStatement stmt, Issue issue) throws SQLException {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
241 stmt.setInt(1, issue.getId());
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
242 List<Version> versions = new ArrayList<>();
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
243 try (var result = stmt.executeQuery()) {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
244 while (result.next()) {
86
0a658e53177c improves issue overview and adds progress information
Mike Becker <universe@uap-core.de>
parents: 83
diff changeset
245 versions.add(mapVersion(result));
75
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
246 }
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
247 }
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
248 return versions;
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
249 }
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
250
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
251 @Override
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
252 public void joinVersionInformation(Issue issue) throws SQLException {
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
253 Objects.requireNonNull(issue.getProject());
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
254 issue.setAffectedVersions(listVersions(affectedVersions, issue));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
255 issue.setResolvedVersions(listVersions(resolvedVersions, issue));
33b6843fdf8a adds the ability to create and edit issues
Mike Becker <universe@uap-core.de>
parents: 72
diff changeset
256 }
38
cf85ef18f231 adds DAO for Project entity and save/update methods
Mike Becker <universe@uap-core.de>
parents:
diff changeset
257 }

mercurial