Skip to content

Commit 310bffc

Browse files
committed
#165: fix test. use string to transfer color instead of double rgba values.
1 parent 820e5f6 commit 310bffc

File tree

9 files changed

+62
-151
lines changed

9 files changed

+62
-151
lines changed

src/main/java/de/doubleslash/keeptime/REST_API/DTO/ColorDTO.java

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/main/java/de/doubleslash/keeptime/REST_API/DTO/ProjectColorDTO.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@ public class ProjectColorDTO {
2020
private long id;
2121
private String name;
2222
private String description;
23-
private ColorDTO color;
23+
/**
24+
* Color in format of 0xRRGGBBAA (R=Red, G=Green, B=Blue, A=Alpha). E.g. 0xff0000ff is fully opaque red.
25+
*/
26+
private String color;
2427
private boolean isWork;
2528
private boolean isDefault;
2629
private boolean isEnabled;
2730
private int index;
2831

2932

30-
public ProjectColorDTO( long id, String name, String description, ColorDTO color, boolean isWork, int index, boolean isDefault) {
33+
public ProjectColorDTO( long id, String name, String description, String color, boolean isWork, int index, boolean isDefault) {
3134
this.id= id;
3235
this.name = name;
3336
this.description = description;
@@ -62,11 +65,11 @@ public void setDescription(String description) {
6265
this.description = description;
6366
}
6467

65-
public ColorDTO getColor() {
68+
public String getColor() {
6669
return color;
6770
}
6871

69-
public void setColor(ColorDTO color) {
72+
public void setColor(String color) {
7073
this.color = color;
7174
}
7275

src/main/java/de/doubleslash/keeptime/REST_API/controller/ProjectController.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,21 @@
4040
@RestController
4141
@RequestMapping("/projects")
4242
public class ProjectController {
43-
private ProjectRepository projectRepository;
44-
private WorkRepository workRepository;
45-
private Controller controller;
46-
private Model model;
43+
private final ProjectRepository projectRepository;
44+
private final WorkRepository workRepository;
45+
private final Controller controller;
46+
private final Model model;
47+
private final WorkMapper workMapper;
48+
private final ProjectMapper projectMapper;
4749

4850
public ProjectController(final ProjectRepository projectRepository, final WorkRepository workRepository,
49-
final Controller controller, Model model) {
51+
final Controller controller, Model model, WorkMapper workMapper, ProjectMapper projectMapper) {
5052
this.projectRepository = projectRepository;
5153
this.workRepository = workRepository;
5254
this.controller = controller;
5355
this.model = model;
56+
this.workMapper = workMapper;
57+
this.projectMapper = projectMapper;
5458
}
5559

5660
@GetMapping("")
@@ -64,7 +68,7 @@ public ResponseEntity<List<ProjectColorDTO>> getProjectColorDTOsByName(
6468
projects = projectRepository.findAll();
6569
}
6670
List<ProjectColorDTO> projectColorDTOs = projects.stream()
67-
.map(ProjectMapper.INSTANCE::projectToProjectDTO)
71+
.map(projectMapper::projectToProjectDTO)
6872
.collect(Collectors.toList());
6973
return ResponseEntity.ok(projectColorDTOs);
7074
}
@@ -76,15 +80,15 @@ public ResponseEntity<List<ProjectColorDTO>> getProjectColorDTOsByName(
7680
if (project.isEmpty()) {
7781
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Project with id '" + id + "' not found");
7882
}
79-
return ProjectMapper.INSTANCE.projectToProjectDTO(project.get());
83+
return projectMapper.projectToProjectDTO(project.get());
8084
}
8185

8286
@GetMapping("/{id}/works")
8387
public List<WorkDTO> getWorksFromProject(@PathVariable final long id) {
8488
return workRepository.findAll().stream().filter(work -> {
8589
Project project = work.getProject();
8690
return project != null && project.getId() == id;
87-
}).map(work -> WorkMapper.INSTANCE.workToWorkDTO(work)).collect(Collectors.toList());
91+
}).map(workMapper::workToWorkDTO).collect(Collectors.toList());
8892
}
8993

9094
@GetMapping("/{projectId}/works/{workId}")
@@ -96,7 +100,7 @@ public WorkDTO getWorkByIdFromProject(@PathVariable final long projectId, @PathV
96100
return project != null && project.getId() == projectId && work.getId() == workId;
97101
})
98102
.findFirst()
99-
.map(WorkMapper.INSTANCE::workToWorkDTO)
103+
.map(workMapper::workToWorkDTO)
100104
.orElseThrow(() -> new ResourceNotFoundException(
101105
"Work with id '" + workId + "' related to project with id '" + projectId
102106
+ "' not found"));
@@ -105,13 +109,13 @@ public WorkDTO getWorkByIdFromProject(@PathVariable final long projectId, @PathV
105109
@PostMapping("")
106110
public ResponseEntity<ProjectColorDTO> createProject(@Valid @RequestBody final ProjectColorDTO newProjectDTO) {
107111
try {
108-
Project newProject = ProjectMapper.INSTANCE.projectDTOToProject(newProjectDTO);
112+
Project newProject = projectMapper.projectDTOToProject(newProjectDTO);
109113

110114
controller.addNewProject(newProject);
111115

112116
model.getProjectRepository().save(newProject);
113117

114-
ProjectColorDTO projectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(newProject);
118+
ProjectColorDTO projectDTO = projectMapper.projectToProjectDTO(newProject);
115119

116120
return ResponseEntity.status(HttpStatus.CREATED).body(projectDTO);
117121
} catch (Exception e) {
@@ -130,7 +134,7 @@ public ResponseEntity<ProjectColorDTO> updateProjectColorDTO(@PathVariable final
130134
}
131135

132136
Project existingProject = optionalProject.get();
133-
Project newValuedProject = ProjectMapper.INSTANCE.projectDTOToProject(newValuedProjectDTO);
137+
Project newValuedProject = projectMapper.projectDTOToProject(newValuedProjectDTO);
134138

135139
existingProject.setName(newValuedProject.getName());
136140
existingProject.setDescription(newValuedProject.getDescription());
@@ -142,7 +146,7 @@ public ResponseEntity<ProjectColorDTO> updateProjectColorDTO(@PathVariable final
142146

143147
projectRepository.save(existingProject);
144148

145-
ProjectColorDTO updatedProjectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(existingProject);
149+
ProjectColorDTO updatedProjectDTO = projectMapper.projectToProjectDTO(existingProject);
146150

147151
return ResponseEntity.ok(updatedProjectDTO);
148152
} catch (DataAccessException e) {
@@ -160,7 +164,7 @@ public ResponseEntity<WorkDTO> createWorkInProject(@PathVariable final long id,
160164
work.setProject(project);
161165
workRepository.save(work);
162166

163-
WorkDTO workDTO = WorkMapper.INSTANCE.workToWorkDTO(work);
167+
WorkDTO workDTO = workMapper.workToWorkDTO(work);
164168

165169
return ResponseEntity.status(HttpStatus.CREATED).body(workDTO);
166170
} else {
@@ -172,7 +176,7 @@ public ResponseEntity<WorkDTO> createWorkInProject(@PathVariable final long id,
172176
public ResponseEntity<String> deleteProject(@PathVariable final long id) {
173177
Optional<Project> projectOptional = projectRepository.findById(id);
174178

175-
if (!projectOptional.isPresent()) {
179+
if (projectOptional.isEmpty()) {
176180
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Project with the ID '" + id + "' not found");
177181
}
178182

@@ -190,14 +194,14 @@ public ResponseEntity<String> deleteProject(@PathVariable final long id) {
190194
@GetMapping("/current")
191195
public ProjectColorDTO getWorkProjects() {
192196
Project project = model.activeWorkItem.get().getProject();
193-
return ProjectMapper.INSTANCE.projectToProjectDTO(project);
197+
return projectMapper.projectToProjectDTO(project);
194198
}
195199

196200
@PutMapping("/current")
197201
public ResponseEntity<ProjectColorDTO> changeProject(@Valid @RequestBody Project newProject) {
198202
try {
199203
controller.changeProject(newProject);
200-
ProjectColorDTO projectDTO = ProjectMapper.INSTANCE.projectToProjectDTO(newProject);
204+
ProjectColorDTO projectDTO = projectMapper.projectToProjectDTO(newProject);
201205
return ResponseEntity.ok(projectDTO);
202206
} catch (Exception e) {
203207
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);

src/main/java/de/doubleslash/keeptime/REST_API/controller/WorksController.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,14 @@
4444

4545
public class WorksController {
4646

47-
private WorkRepository workRepository;
48-
private Model model;
47+
private final WorkRepository workRepository;
48+
private final Model model;
49+
private final WorkMapper workMapper;
4950

50-
public WorksController(final WorkRepository workRepository, final Controller controller, Model model) {
51+
public WorksController(final WorkRepository workRepository, Model model, WorkMapper workMapper) {
5152
this.workRepository = workRepository;
5253
this.model = model;
54+
this.workMapper = workMapper;
5355
}
5456

5557
@GetMapping("")
@@ -61,12 +63,12 @@ public List<WorkDTO> getWorks(@RequestParam(name = "name", required = false) fin
6163
if (projectName != null) {
6264
workStream = workStream.filter(work -> work.getProject().getName().equals(projectName));
6365
}
64-
return workStream.map(WorkMapper.INSTANCE::workToWorkDTO).collect(Collectors.toList());
66+
return workStream.map(workMapper::workToWorkDTO).collect(Collectors.toList());
6567
}
6668

6769
@PutMapping("/{id}")
6870
public ResponseEntity<WorkDTO> editWork(@PathVariable("id") Long workId, @RequestBody WorkDTO newValuedWorkDTO) {
69-
Work newValuedWork = WorkMapper.INSTANCE.workDTOToWork(newValuedWorkDTO);
71+
Work newValuedWork = workMapper.workDTOToWork(newValuedWorkDTO);
7072
Optional<Work> optionalWork = workRepository.findById(workId);
7173

7274
if (optionalWork.isPresent()) {
@@ -79,7 +81,7 @@ public ResponseEntity<WorkDTO> editWork(@PathVariable("id") Long workId, @Reques
7981

8082
Work editedWork = workRepository.save(workToBeEdited);
8183

82-
return ResponseEntity.ok(WorkMapper.INSTANCE.workToWorkDTO(editedWork));
84+
return ResponseEntity.ok(workMapper.workToWorkDTO(editedWork));
8385
} else {
8486
return ResponseEntity.notFound().build();
8587
}
@@ -103,7 +105,7 @@ public ResponseEntity<WorkDTO> getCurrentWork() {
103105
Work workProjects = model.activeWorkItem.get();
104106

105107
if (workProjects != null) {
106-
return ResponseEntity.ok(WorkMapper.INSTANCE.workToWorkDTO(workProjects));
108+
return ResponseEntity.ok(workMapper.workToWorkDTO(workProjects));
107109
} else {
108110
return ResponseEntity.notFound().build();
109111
}

src/main/java/de/doubleslash/keeptime/REST_API/mapper/ColorMapper.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,27 @@
1616

1717
package de.doubleslash.keeptime.REST_API.mapper;
1818

19-
import de.doubleslash.keeptime.REST_API.DTO.ColorDTO;
19+
import de.doubleslash.keeptime.model.persistenceconverter.ColorConverter;
2020
import javafx.scene.paint.Color;
2121
import org.mapstruct.Mapper;
2222

23-
@Mapper
23+
@Mapper(componentModel = "spring")
2424
public interface ColorMapper {
25-
default ColorDTO colorToColorDTO(Color color) {
25+
26+
ColorConverter colorConverter = new ColorConverter();
27+
28+
default String colorToColorDTO(Color color) {
2629
if (color == null) {
2730
return null;
2831
}
29-
30-
ColorDTO colorDTO = new ColorDTO();
31-
colorDTO.setRed(Color.RED.getRed());
32-
colorDTO.setGreen(color.getGreen());
33-
colorDTO.setBlue(color.getBlue());
34-
colorDTO.setOpacity(color.getOpacity());
35-
36-
return colorDTO;
32+
return colorConverter.convertToDatabaseColumn(color);
3733
}
3834

39-
default Color colorDTOToColor(ColorDTO colorDTO) {
35+
default Color colorDTOToColor(String colorDTO) {
4036
if (colorDTO == null) {
4137
return null;
4238
}
4339

44-
return new Color(colorDTO.getRed(), colorDTO.getGreen(), colorDTO.getBlue(), colorDTO.getOpacity());
40+
return colorConverter.convertToEntityAttribute(colorDTO);
4541
}
4642
}

src/main/java/de/doubleslash/keeptime/REST_API/mapper/ProjectMapper.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@
2121
import org.mapstruct.Mapper;
2222
import org.mapstruct.factory.Mappers;
2323

24-
@Mapper(uses = ColorMapper.class)
24+
@Mapper(uses = ColorMapper.class, componentModel = "spring")
2525
public interface ProjectMapper {
2626

27-
ProjectMapper INSTANCE = Mappers.getMapper(ProjectMapper.class);
28-
2927
ProjectColorDTO projectToProjectDTO(Project project);
3028

3129
Project projectDTOToProject(ProjectColorDTO projectColorDTO);

src/main/java/de/doubleslash/keeptime/REST_API/mapper/WorkMapper.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@
2121
import org.mapstruct.Mapper;
2222
import org.mapstruct.factory.Mappers;
2323

24-
@Mapper
24+
@Mapper(componentModel = "spring")
2525
public interface WorkMapper {
26-
WorkMapper INSTANCE = Mappers.getMapper(WorkMapper.class);
2726

2827
WorkDTO workToWorkDTO(Work work);
2928

src/test/java/de/doubleslash/keeptime/REST_API/controller/ProjectMapperTest.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717

1818
package de.doubleslash.keeptime.REST_API.controller;
1919

20-
import de.doubleslash.keeptime.REST_API.DTO.ColorDTO;
2120
import de.doubleslash.keeptime.REST_API.DTO.ProjectColorDTO;
2221
import de.doubleslash.keeptime.REST_API.mapper.ProjectMapper;
22+
import de.doubleslash.keeptime.REST_API.mapper.ProjectMapperImpl;
2323
import de.doubleslash.keeptime.model.Project;
2424
import javafx.scene.paint.Color;
2525
import org.junit.jupiter.api.Test;
2626

2727
import static org.junit.jupiter.api.Assertions.*;
2828

2929
class ProjectMapperTest {
30-
ProjectMapper projectMapper = ProjectMapper.INSTANCE;
30+
ProjectMapper projectMapper = new ProjectMapperImpl();
3131

3232
@Test
3333
void projectToProjectDTO() {
@@ -44,25 +44,20 @@ void projectToProjectDTO() {
4444
//ACT
4545
final ProjectColorDTO projectColorDTO = projectMapper.projectToProjectDTO(project);
4646
//Assert
47-
assertEquals(Color.BLUE.getBlue(), projectColorDTO.getColor().getBlue());
47+
assertEquals("0x0000ffff", projectColorDTO.getColor());
4848

4949
}
5050

5151
@Test
5252
void projectDTOToProject() {
5353
// ARRANGE
54-
ColorDTO colorDTO = new ColorDTO();
55-
colorDTO.setRed(1.0);
56-
colorDTO.setGreen(0.0);
57-
colorDTO.setBlue(0.0);
58-
59-
ProjectColorDTO project = new ProjectColorDTO(1, "ProjectName", "ProjectDescription", colorDTO, false, 0, true);
54+
ProjectColorDTO project = new ProjectColorDTO(1, "ProjectName", "ProjectDescription", "0xff0000ff", false, 0, true);
6055

6156
// ACT
6257
final Project project1 = projectMapper.projectDTOToProject(project);
6358

6459
// ASSERT
65-
assertEquals(colorDTO.getBlue(), project1.getColor().getBlue());
60+
assertEquals(Color.RED, project1.getColor());
6661
assertEquals("ProjectName", project1.getName());
6762
assertEquals("ProjectDescription", project1.getDescription());
6863
}

0 commit comments

Comments
 (0)