Merge pull request #65 from schrom01/refactor_task-id-semantics_M3

refactor: Made Task::id nullable/Optional for semantic reasons
This commit is contained in:
gulerdav 2022-11-21 12:43:04 +01:00 committed by GitHub Enterprise
commit 8c20dcaadb
5 changed files with 32 additions and 33 deletions

View File

@ -103,10 +103,9 @@ public class JsonTaskList implements TaskList {
if(taskMap.isEmpty()) { if(taskMap.isEmpty()) {
loadTaskListFromFile(); loadTaskListFromFile();
} }
if(task.getId() == 0) { long id = task.getId().orElse(idProvider.incrementAndGet());
task.withId(idProvider.incrementAndGet());
} taskMap.put(id, task.withId(id));
taskMap.put(task.getId(), task);
writeTaskListToFile(); writeTaskListToFile();
} }
@ -122,8 +121,9 @@ public class JsonTaskList implements TaskList {
if(taskMap.isEmpty()) { if(taskMap.isEmpty()) {
loadTaskListFromFile(); loadTaskListFromFile();
} }
if(taskMap.containsKey(task.getId())){ Long taskId = task.getId().orElseThrow(IOException::new);
taskMap.remove(task.getId()); if(taskMap.containsKey(taskId)){
taskMap.remove(taskId);
writeTaskListToFile(); writeTaskListToFile();
} }
} }
@ -163,7 +163,7 @@ public class JsonTaskList implements TaskList {
taskMap = result.stream() taskMap = result.stream()
.collect(HashMap::new, .collect(HashMap::new,
(res, task) -> res.put(task.getId(), task), (res, task) -> res.put(task.getId().orElse(0L), task),
(existing, replacement) -> {}); (existing, replacement) -> {});
} }

View File

@ -9,7 +9,7 @@ import java.util.Optional;
* May be created using the builder pattern. * May be created using the builder pattern.
*/ */
public class Task { public class Task {
private long id; private Long id;
private final String name; private final String name;
private final String description; private final String description;
private final LocalDate startDate; private final LocalDate startDate;
@ -62,7 +62,7 @@ public class Task {
} }
// Getters // Getters
public long getId() { return id; } public Optional<Long> getId() { return Optional.ofNullable(id); }
public String getName() { return name; } public String getName() { return name; }
public String getDescription() { return description; } public String getDescription() { return description; }
public LocalDate getStartDate() { return startDate; } public LocalDate getStartDate() { return startDate; }

View File

@ -34,6 +34,7 @@ public class TaskTemplate {
public void setRelativeEndDate(Integer relativeEndDate) { public void setRelativeEndDate(Integer relativeEndDate) {
this.relativeEndDate = relativeEndDate; this.relativeEndDate = relativeEndDate;
} }
public void setInterval(Integer interval) { public void setInterval(Integer interval) {
this.interval = interval; this.interval = interval;
} }
@ -45,13 +46,10 @@ public class TaskTemplate {
} }
public Task generateTask(LocalDate realStartDate, long cropId) { public Task generateTask(LocalDate realStartDate, long cropId) {
Task task = new Task(name, description, realStartDate.plusDays(relativeStartDate), cropId); LocalDate endDate = relativeEndDate != null ? realStartDate.plusDays(relativeEndDate) : null;
if (relativeEndDate != null) {
task.withEndDate(realStartDate.plusDays(relativeEndDate)); return new Task(name, description, realStartDate.plusDays(relativeStartDate), cropId)
} .withInterval(interval)
if (interval != null) { .withEndDate(endDate);
task.withInterval(interval);
}
return task;
} }
} }

View File

@ -72,7 +72,8 @@ public class JsonTaskListTest {
@Test @Test
@DisplayName("Remove task.") @DisplayName("Remove task.")
void removeTask() { void removeTask() {
Task task = new Task("Dummy", "Dummy", LocalDate.parse("2022-05-31", formatter), 1).withId(2); Task task = new Task("Dummy", "Dummy", LocalDate.parse("2022-05-31", formatter), 1)
.withId(2);
try { try {
testDatabase.removeTask(task); testDatabase.removeTask(task);
List<Task> taskList; List<Task> taskList;

View File

@ -55,8 +55,8 @@ public class GardenPlanModelTest {
new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()),
new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))); new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())));
exampleCropOnion = new Crop(examplePlantOnion.id(), LocalDate.of(2023,3,1)); exampleCropOnion = new Crop(examplePlantOnion.id(), LocalDate.of(2023, 3, 1))
exampleCropOnion.withId(3); .withId(3);
examplePlantCarrot = new Plant( examplePlantCarrot = new Plant(
1, 1,
"Early Carrot", "Early Carrot",
@ -67,18 +67,18 @@ public class GardenPlanModelTest {
"sandy to loamy, loose soil, free of stones", "sandy to loamy, loose soil, free of stones",
new ArrayList<>(), new ArrayList<>(),
List.of(new GrowthPhase(MonthDay.of(4, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))); List.of(new GrowthPhase(MonthDay.of(4, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>())));
exampleCropCarrot = new Crop(examplePlantCarrot.id(), LocalDate.now()); exampleCropCarrot = new Crop(examplePlantCarrot.id(), LocalDate.now())
exampleCropCarrot.withId(5); .withId(5);
exampleCrop1 = new Crop(1, LocalDate.of(2023,2,25)); exampleCrop1 = new Crop(1, LocalDate.of(2023, 2, 25))
exampleCrop1.withId(0); .withId(0)
exampleCrop1.withArea(0.5); .withArea(0.5);
exampleCrop2 = new Crop(1,LocalDate.of(2023,3,1)); exampleCrop2 = new Crop(1, LocalDate.of(2023, 3, 1))
exampleCrop2.withId(1); .withId(1)
exampleCrop2.withArea(0.5); .withArea(0.5);
exampleCrop3 = new Crop(0,LocalDate.of(2023,3,1)); exampleCrop3 = new Crop(0, LocalDate.of(2023, 3, 1))
exampleCrop3.withId(2); .withId(2)
exampleCrop3.withArea(1.0); .withArea(1.0);
exampleCrops = new ArrayList<>(); exampleCrops = new ArrayList<>();
exampleCrops.add(exampleCrop1); exampleCrops.add(exampleCrop1);