From 95b0f7e13d338e035635d0f6bee898ae94d7124f Mon Sep 17 00:00:00 2001 From: David Guler Date: Mon, 21 Nov 2022 09:45:58 +0100 Subject: [PATCH] refactor: Made Task::id nullable/Optional for semantic reasons better use of builder semantics in task and crop creation --- .../gartenverwaltung/io/JsonTaskList.java | 14 ++++----- .../ch/zhaw/gartenverwaltung/types/Task.java | 4 +-- .../gartenverwaltung/types/TaskTemplate.java | 14 ++++----- .../gartenverwaltung/io/JsonTaskListTest.java | 3 +- .../models/GardenPlanModelTest.java | 30 +++++++++---------- 5 files changed, 32 insertions(+), 33 deletions(-) diff --git a/src/main/java/ch/zhaw/gartenverwaltung/io/JsonTaskList.java b/src/main/java/ch/zhaw/gartenverwaltung/io/JsonTaskList.java index 0920c34..6b18f72 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/io/JsonTaskList.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/io/JsonTaskList.java @@ -103,10 +103,9 @@ public class JsonTaskList implements TaskList { if(taskMap.isEmpty()) { loadTaskListFromFile(); } - if(task.getId() == 0) { - task.withId(idProvider.incrementAndGet()); - } - taskMap.put(task.getId(), task); + long id = task.getId().orElse(idProvider.incrementAndGet()); + + taskMap.put(id, task.withId(id)); writeTaskListToFile(); } @@ -122,8 +121,9 @@ public class JsonTaskList implements TaskList { if(taskMap.isEmpty()) { loadTaskListFromFile(); } - if(taskMap.containsKey(task.getId())){ - taskMap.remove(task.getId()); + Long taskId = task.getId().orElseThrow(IOException::new); + if(taskMap.containsKey(taskId)){ + taskMap.remove(taskId); writeTaskListToFile(); } } @@ -163,7 +163,7 @@ public class JsonTaskList implements TaskList { taskMap = result.stream() .collect(HashMap::new, - (res, task) -> res.put(task.getId(), task), + (res, task) -> res.put(task.getId().orElse(0L), task), (existing, replacement) -> {}); } diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java index 16de6c3..df15fc4 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Task.java @@ -9,7 +9,7 @@ import java.util.Optional; * May be created using the builder pattern. */ public class Task { - private long id; + private Long id; private final String name; private final String description; private final LocalDate startDate; @@ -62,7 +62,7 @@ public class Task { } // Getters - public long getId() { return id; } + public Optional getId() { return Optional.ofNullable(id); } public String getName() { return name; } public String getDescription() { return description; } public LocalDate getStartDate() { return startDate; } diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/TaskTemplate.java b/src/main/java/ch/zhaw/gartenverwaltung/types/TaskTemplate.java index 8ae7862..2e471cb 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/TaskTemplate.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/TaskTemplate.java @@ -34,6 +34,7 @@ public class TaskTemplate { public void setRelativeEndDate(Integer relativeEndDate) { this.relativeEndDate = relativeEndDate; } + public void setInterval(Integer interval) { this.interval = interval; } @@ -45,13 +46,10 @@ public class TaskTemplate { } public Task generateTask(LocalDate realStartDate, long cropId) { - Task task = new Task(name, description, realStartDate.plusDays(relativeStartDate), cropId); - if (relativeEndDate != null) { - task.withEndDate(realStartDate.plusDays(relativeEndDate)); - } - if (interval != null) { - task.withInterval(interval); - } - return task; + LocalDate endDate = relativeEndDate != null ? realStartDate.plusDays(relativeEndDate) : null; + + return new Task(name, description, realStartDate.plusDays(relativeStartDate), cropId) + .withInterval(interval) + .withEndDate(endDate); } } diff --git a/src/test/java/ch/zhaw/gartenverwaltung/io/JsonTaskListTest.java b/src/test/java/ch/zhaw/gartenverwaltung/io/JsonTaskListTest.java index cd77b01..bc11d99 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/io/JsonTaskListTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/io/JsonTaskListTest.java @@ -72,7 +72,8 @@ public class JsonTaskListTest { @Test @DisplayName("Remove task.") 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 { testDatabase.removeTask(task); List taskList; diff --git a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java index 7c5bad6..e39a525 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java @@ -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(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.withId(3); + exampleCropOnion = new Crop(examplePlantOnion.id(), LocalDate.of(2023, 3, 1)) + .withId(3); examplePlantCarrot = new Plant( 1, "Early Carrot", @@ -67,18 +67,18 @@ public class GardenPlanModelTest { "sandy to loamy, loose soil, free of stones", 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.withId(5); + exampleCropCarrot = new Crop(examplePlantCarrot.id(), LocalDate.now()) + .withId(5); - exampleCrop1 = new Crop(1, LocalDate.of(2023,2,25)); - exampleCrop1.withId(0); - exampleCrop1.withArea(0.5); - exampleCrop2 = new Crop(1,LocalDate.of(2023,3,1)); - exampleCrop2.withId(1); - exampleCrop2.withArea(0.5); - exampleCrop3 = new Crop(0,LocalDate.of(2023,3,1)); - exampleCrop3.withId(2); - exampleCrop3.withArea(1.0); + exampleCrop1 = new Crop(1, LocalDate.of(2023, 2, 25)) + .withId(0) + .withArea(0.5); + exampleCrop2 = new Crop(1, LocalDate.of(2023, 3, 1)) + .withId(1) + .withArea(0.5); + exampleCrop3 = new Crop(0, LocalDate.of(2023, 3, 1)) + .withId(2) + .withArea(1.0); exampleCrops = new ArrayList<>(); exampleCrops.add(exampleCrop1); @@ -107,7 +107,7 @@ public class GardenPlanModelTest { @Test void plantAsCrop() throws HardinessZoneNotSetException, IOException, PlantNotFoundException { - model.plantAsCrop(examplePlantOnion, LocalDate.of(2023,3,1)); + model.plantAsCrop(examplePlantOnion, LocalDate.of(2023, 3, 1)); Optional exampleCrop = model.getCrop(2L); assertTrue(exampleCrop.isPresent()); assertEquals(model.getCrops().get(2), exampleCrop.get()); @@ -119,6 +119,6 @@ public class GardenPlanModelTest { exampleCrop1.withId(2); exampleCrop1.withArea(1.5); model.removeCrop(exampleCrop1); - assertEquals(2,model.getCrops().size()); + assertEquals(2, model.getCrops().size()); } }