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:
commit
8c20dcaadb
|
@ -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) -> {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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; }
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
@ -107,7 +107,7 @@ public class GardenPlanModelTest {
|
||||||
@Test
|
@Test
|
||||||
void plantAsCrop() throws HardinessZoneNotSetException, IOException, PlantNotFoundException {
|
void plantAsCrop() throws HardinessZoneNotSetException, IOException, PlantNotFoundException {
|
||||||
|
|
||||||
model.plantAsCrop(examplePlantOnion, LocalDate.of(2023,3,1));
|
model.plantAsCrop(examplePlantOnion, LocalDate.of(2023, 3, 1));
|
||||||
Optional<Crop> exampleCrop = model.getCrop(2L);
|
Optional<Crop> exampleCrop = model.getCrop(2L);
|
||||||
assertTrue(exampleCrop.isPresent());
|
assertTrue(exampleCrop.isPresent());
|
||||||
assertEquals(model.getCrops().get(2), exampleCrop.get());
|
assertEquals(model.getCrops().get(2), exampleCrop.get());
|
||||||
|
@ -119,6 +119,6 @@ public class GardenPlanModelTest {
|
||||||
exampleCrop1.withId(2);
|
exampleCrop1.withId(2);
|
||||||
exampleCrop1.withArea(1.5);
|
exampleCrop1.withArea(1.5);
|
||||||
model.removeCrop(exampleCrop1);
|
model.removeCrop(exampleCrop1);
|
||||||
assertEquals(2,model.getCrops().size());
|
assertEquals(2, model.getCrops().size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue