Skip to content

Commit 2c401bd

Browse files
Save Work
1 parent bb4b526 commit 2c401bd

File tree

9 files changed

+323
-4
lines changed

9 files changed

+323
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
## 0.3.5 (unreleased)
44

5+
Features:
6+
- Milestone View: Add functionality that displays the latest results of the tests from the test runs -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/11)
7+
- List of predefined Resolutions -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/26)
8+
59
Bugfixes:
610
- Add ALLOW_UNQUOTED_CONTROL_CHARS for mapper -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/45)
7-
- Milestone View: Add functionality that displays the latest results of the tests from the test runs -> [View Issue](https://github.com/aquality-automation/aquality-tracking/issues/11)
811

912
## 0.3.4 (2019-12-10)
1013

src/main/java/main/controllers/ControllerFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,7 @@ public StepResultController getHandler(StepResultDto entity) {
7070
public StepTypeController getHandler(StepTypeDto entity) {
7171
return new StepTypeController(user);
7272
}
73+
public PredefinedResolutionController getHandler(PredefinedResolutionDto entity) {
74+
return new PredefinedResolutionController(user);
75+
}
7376
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package main.controllers.Project;
2+
3+
import main.controllers.BaseController;
4+
import main.exceptions.AqualityException;
5+
import main.exceptions.AqualityPermissionsException;
6+
import main.model.db.dao.project.PredefinedResolutionDao;
7+
import main.model.dto.*;
8+
9+
import java.util.List;
10+
11+
public class PredefinedResolutionController extends BaseController<PredefinedResolutionDto> {
12+
private PredefinedResolutionDao predefinedResolutionDao;
13+
private ProjectUserController projectUserController;
14+
private ResultResolutionController resultResolutionController;
15+
16+
public PredefinedResolutionController(UserDto user) {
17+
super(user);
18+
predefinedResolutionDao = new PredefinedResolutionDao();
19+
projectUserController = new ProjectUserController(user);
20+
resultResolutionController = new ResultResolutionController(user);
21+
}
22+
23+
@Override
24+
public List<PredefinedResolutionDto> get(PredefinedResolutionDto entity) throws AqualityException {
25+
if (baseUser.isManager() || baseUser.getProjectUser(entity.getProject_id()).isEditor()) {
26+
return fillPredefinedResolutions(predefinedResolutionDao.searchAll(entity));
27+
} else {
28+
throw new AqualityPermissionsException("Account is not allowed to get Predefined Resolutions", baseUser);
29+
}
30+
}
31+
32+
@Override
33+
public PredefinedResolutionDto create(PredefinedResolutionDto entity) throws AqualityException {
34+
if (baseUser.isManager() || baseUser.getProjectUser(entity.getProject_id()).isEditor()) {
35+
return predefinedResolutionDao.create(entity);
36+
} else {
37+
throw new AqualityPermissionsException("Account is not allowed to create Predefined Resolutions", baseUser);
38+
}
39+
}
40+
41+
@Override
42+
public boolean delete(PredefinedResolutionDto entity) throws AqualityException {
43+
if (baseUser.isManager() || baseUser.getProjectUser(entity.getProject_id()).isEditor()) {
44+
return predefinedResolutionDao.delete(entity);
45+
} else {
46+
throw new AqualityPermissionsException("Account is not allowed to delete Predefined Resolutions", baseUser);
47+
}
48+
}
49+
50+
private List<PredefinedResolutionDto> fillPredefinedResolutions(List<PredefinedResolutionDto> p_resolutions) throws AqualityException {
51+
if (p_resolutions.size() > 0) {
52+
List<ResultResolutionDto> resolutions = resultResolutionController.get(new ResultResolutionDto());
53+
54+
ProjectUserDto projectUserDto = new ProjectUserDto();
55+
projectUserDto.setProject_id(p_resolutions.get(0).getProject_id());
56+
List<ProjectUserDto> projectUsers = projectUserController.get(projectUserDto);
57+
58+
for (PredefinedResolutionDto p_resolution : p_resolutions) {
59+
fillPredefinedResolution(p_resolution, resolutions, projectUsers);
60+
}
61+
}
62+
63+
return p_resolutions;
64+
}
65+
66+
private void fillPredefinedResolution(PredefinedResolutionDto p_resolution, List<ResultResolutionDto> resolutions, List<ProjectUserDto> users) {
67+
resolutions.stream().filter(x -> x.getId().equals(p_resolution.getResolution_id())).findFirst().ifPresent(p_resolution::setResolution);
68+
if (p_resolution.getAssignee() != null) {
69+
users.stream().filter(user -> user.getUser_id().equals(p_resolution.getAssignee())).findFirst()
70+
.ifPresent(projectUser -> p_resolution.setAssigned_user(projectUser.getUser()));
71+
}
72+
}
73+
}

src/main/java/main/controllers/Project/ProjectUserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ProjectUserDto create(ProjectUserDto template) throws AqualityException {
3131

3232
@Override
3333
public List<ProjectUserDto> get(ProjectUserDto template) throws AqualityException {
34-
if(baseUser.isFromGlobalManagement() || baseUser.getProjectUser(template.getProject_id()).isViewer()){
34+
if(baseUser.isFromGlobalManagement() || baseUser.getProjectUser(template.getProject_id()).isViewer() || template.getUser_id() != null){
3535
return fillProjectUsers(projectUserDao.searchAll(template));
3636
}else{
3737
throw new AqualityPermissionsException("Account is not allowed to view Project Users", baseUser);
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package main.model.db.dao.project;
2+
3+
import main.model.db.dao.DAO;
4+
import main.model.dto.PredefinedResolutionDto;
5+
6+
public class PredefinedResolutionDao extends DAO<PredefinedResolutionDto> {
7+
public PredefinedResolutionDao() {
8+
super(PredefinedResolutionDto.class);
9+
select = "{call SELECT_PREDEFINED_RESOLUTION(?,?)}";
10+
insert = "{call INSERT_PREDEFINED_RESOLUTION(?,?,?,?,?,?)}";
11+
remove = "{call REMOVE_PREDEFINED_RESOLUTION(?)}";
12+
}
13+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package main.model.dto;
2+
3+
import lombok.Data;
4+
import lombok.EqualsAndHashCode;
5+
import main.annotations.DataBaseID;
6+
import main.annotations.DataBaseInsert;
7+
import main.annotations.DataBaseName;
8+
import main.annotations.DataBaseSearchable;
9+
10+
@Data @EqualsAndHashCode(callSuper = true)
11+
public class PredefinedResolutionDto extends BaseDto {
12+
@DataBaseID
13+
@DataBaseSearchable
14+
@DataBaseInsert
15+
@DataBaseName(name="request_id")
16+
private Integer id;
17+
@DataBaseSearchable
18+
@DataBaseInsert
19+
@DataBaseName(name="request_project_id")
20+
private Integer project_id;
21+
@DataBaseInsert
22+
@DataBaseName(name="request_resolution_id")
23+
private Integer resolution_id;
24+
@DataBaseInsert
25+
@DataBaseName(name="request_comment")
26+
private String comment;
27+
@DataBaseInsert
28+
@DataBaseName(name="request_assignee")
29+
private Integer assignee;
30+
@DataBaseInsert
31+
@DataBaseName(name="request_expression")
32+
private String expression;
33+
private ResultResolutionDto resolution;
34+
private UserDto assigned_user;
35+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package main.view.Project;
2+
3+
import main.Session;
4+
import main.model.dto.PredefinedResolutionDto;
5+
import main.view.BaseServlet;
6+
import main.view.IDelete;
7+
import main.view.IGet;
8+
import main.view.IPost;
9+
10+
import javax.servlet.annotation.WebServlet;
11+
import javax.servlet.http.HttpServletRequest;
12+
import javax.servlet.http.HttpServletResponse;
13+
import java.util.List;
14+
15+
16+
@WebServlet("/project/predefined-resolution")
17+
public class PredefinedResolutionServlet extends BaseServlet implements IGet, IPost, IDelete {
18+
@Override
19+
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
20+
setGetResponseHeaders(resp);
21+
22+
try {
23+
Session session = createSession(req);
24+
PredefinedResolutionDto template = new PredefinedResolutionDto();
25+
template.getSearchTemplateFromRequestParameters(req);
26+
27+
List<PredefinedResolutionDto> predefinedResolutions = session.controllerFactory.getHandler(template).get(template);
28+
setJSONContentType(resp);
29+
resp.getWriter().write(mapper.serialize(predefinedResolutions));
30+
}catch (Exception e) {
31+
handleException(resp, e);
32+
}
33+
}
34+
35+
@Override
36+
public void doPost(HttpServletRequest req, HttpServletResponse resp) {
37+
setPostResponseHeaders(resp);
38+
39+
try {
40+
Session session = createSession(req);
41+
PredefinedResolutionDto template = mapper.mapObject(PredefinedResolutionDto.class, getRequestJson(req));
42+
template = session.controllerFactory.getHandler(template).create(template);
43+
setJSONContentType(resp);
44+
resp.getWriter().write(mapper.serialize(template));
45+
}catch (Exception e) {
46+
handleException(resp, e);
47+
}
48+
}
49+
50+
@Override
51+
public void doDelete(HttpServletRequest req, HttpServletResponse resp) {
52+
setDeleteResponseHeaders(resp);
53+
54+
try {
55+
Session session = createSession(req);
56+
PredefinedResolutionDto template = new PredefinedResolutionDto();
57+
template.getSearchTemplateFromRequestParameters(req);
58+
session.controllerFactory.getHandler(template).delete(template);
59+
}catch (Exception e) {
60+
handleException(resp, e);
61+
}
62+
}
63+
64+
@Override
65+
public void doOptions(HttpServletRequest req, HttpServletResponse resp) {
66+
setOptionsResponseHeaders(resp);
67+
}
68+
}

src/main/java/main/view/Project/ProjectUsersServlet.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp) {
2323
try {
2424
Session session = createSession(req);
2525
ProjectUserDto projectUserDto = new ProjectUserDto();
26-
Integer userId = (req.getParameterMap().containsKey("userId")&& !req.getParameter("userId").equals(""))? Integer.parseInt(req.getParameter("projectId")) : null;
27-
Integer projectId = (req.getParameterMap().containsKey("projectId")&& !req.getParameter("projectId").equals(""))? Integer.parseInt(req.getParameter("projectId")) : null;
26+
Integer userId = getIntegerQueryParameter(req, "userId");
27+
Integer projectId = getIntegerQueryParameter(req, "projectId");
2828
projectUserDto.setProject_id(projectId);
2929
projectUserDto.setUser_id(userId);
3030
List<ProjectUserDto> projectUsers = session.controllerFactory.getHandler(projectUserDto).get(projectUserDto);

src/main/resources/db_changelog/db.changelog-0.3.5.xml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,128 @@
3737
</rollback>
3838
</changeSet>
3939

40+
<changeSet id="create Predefined Resolutions Table" author="v.kostyukevich">
41+
<sql endDelimiter="#">
42+
43+
DROP TABLE IF EXISTS `predefined_resolutions`;
44+
45+
#
46+
47+
CREATE TABLE `predefined_resolutions` (
48+
`id` INT NOT NULL AUTO_INCREMENT,
49+
`project_id` INT NOT NULL,
50+
`resolution_id` INT NOT NULL,
51+
`comment` MEDIUMTEXT NULL,
52+
`assignee` INT NULL,
53+
`expression` VARCHAR(500) NULL,
54+
PRIMARY KEY (`id`),
55+
UNIQUE INDEX `id_UNIQUE` (`id` ASC),
56+
INDEX `predefined_to_project_idx` (`project_id` ASC),
57+
INDEX `predefined_to_resolution_idx` (`resolution_id` ASC),
58+
INDEX `predefined_to_user_idx` (`assignee` ASC),
59+
CONSTRAINT `predefined_to_project`
60+
FOREIGN KEY (`project_id`)
61+
REFERENCES `projects` (`id`)
62+
ON DELETE CASCADE
63+
ON UPDATE CASCADE,
64+
CONSTRAINT `predefined_to_resolution`
65+
FOREIGN KEY (`resolution_id`)
66+
REFERENCES `result_resolution` (`id`)
67+
ON DELETE RESTRICT
68+
ON UPDATE CASCADE,
69+
CONSTRAINT `predefined_to_user`
70+
FOREIGN KEY (`assignee`)
71+
REFERENCES `users` (`id`)
72+
ON DELETE SET NULL
73+
ON UPDATE CASCADE);
74+
75+
</sql>
76+
<rollback>
77+
DROP TABLE IF EXISTS `predefined_resolutions`;
78+
</rollback>
79+
</changeSet>
80+
81+
<changeSet id="create SELECT_PREDEFINED_RESOLUTION" author="v.kostyukevich">
82+
<sql endDelimiter="#">
83+
84+
DROP procedure IF EXISTS `SELECT_PREDEFINED_RESOLUTION`;
85+
86+
#
87+
88+
CREATE PROCEDURE `SELECT_PREDEFINED_RESOLUTION` (
89+
IN request_id VARCHAR(10),
90+
IN request_project_id VARCHAR(10)
91+
)
92+
BEGIN
93+
SELECT * FROM predefined_resolutions
94+
WHERE (request_id = '' OR id=request_id)
95+
AND (request_project_id = '' OR project_id=request_project_id);
96+
END
97+
</sql>
98+
<rollback>
99+
DROP procedure IF EXISTS `SELECT_PREDEFINED_RESOLUTION`;
100+
</rollback>
101+
</changeSet>
102+
103+
<changeSet id="create INSERT_PREDEFINED_RESOLUTION" author="v.kostyukevich">
104+
<sql endDelimiter="#">
105+
106+
DROP procedure IF EXISTS `INSERT_PREDEFINED_RESOLUTION`;
107+
108+
#
109+
110+
CREATE PROCEDURE `INSERT_PREDEFINED_RESOLUTION` (
111+
In request_id varchar(11),
112+
In request_project_id varchar(11),
113+
In request_resolution_id varchar(11),
114+
In request_assignee varchar(11),
115+
In request_comment mediumtext,
116+
In request_expression varchar(500)
117+
)
118+
BEGIN
119+
INSERT INTO predefined_resolutions (`id`, `project_id`, `resolution_id`, `comment`, `assignee`, `expression`)
120+
VALUES (
121+
IF(request_id='',null,request_id),
122+
request_project_id,
123+
IF(request_resolution_id='',null,request_resolution_id),
124+
IF(request_comment='',null,request_comment),
125+
IF(request_assignee='',null,request_assignee),
126+
IF(request_expression='',null,request_expression)
127+
)
128+
ON DUPLICATE KEY UPDATE
129+
resolution_id = IF(request_resolution_id='', resolution_id, request_resolution_id),
130+
comment = apply_or_remove_value(request_comment, comment),
131+
assignee = apply_or_remove_value(request_assignee, assignee),
132+
expression = IF(request_expression='', expression, request_expression)
133+
;
134+
135+
SET @entity_id = IF(request_id = '', (SELECT LAST_INSERT_ID()), request_id);
136+
SELECT * from predefined_resolutions where id = @entity_id;
137+
END
138+
</sql>
139+
<rollback>
140+
DROP procedure IF EXISTS `INSERT_PREDEFINED_RESOLUTION`;
141+
</rollback>
142+
</changeSet>
143+
144+
<changeSet id="create REMOVE_PREDEFINED_RESOLUTION" author="v.kostyukevich">
145+
<sql endDelimiter="#">
146+
147+
DROP procedure IF EXISTS `REMOVE_PREDEFINED_RESOLUTION`;
148+
149+
#
150+
151+
CREATE PROCEDURE `REMOVE_PREDEFINED_RESOLUTION` (
152+
In request_id varchar(11)
153+
)
154+
BEGIN
155+
DELETE FROM predefined_resolutions
156+
WHERE id=request_id;
157+
END
158+
</sql>
159+
<rollback>
160+
DROP procedure IF EXISTS `REMOVE_PREDEFINED_RESOLUTION`;
161+
</rollback>
162+
</changeSet>
163+
40164
</databaseChangeLog>

0 commit comments

Comments
 (0)