From eccb519bfbde8824bbabc06988cb36b2b7bf54e0 Mon Sep 17 00:00:00 2001 From: Gian-Andrea Hutter Date: Mon, 28 Nov 2022 13:53:47 +0100 Subject: [PATCH] #23 watering task refactor --- .../gartenverwaltung/bootstrap/AppLoader.java | 1 - .../io/WeatherGradenTaskPlanner.java | 7 +- .../models/GardenSchedule.java | 11 +- .../ch/zhaw/gartenverwaltung/types/Crop.java | 3 + .../gartenverwaltung/types/GrowthPhase.java | 1 - .../ch/zhaw/gartenverwaltung/types/Plant.java | 1 + .../ch/zhaw/gartenverwaltung/io/plantdb.json | 68 ++---- .../models/GardenPlanModelTest.java | 14 +- .../models/GardenScheduleTest.java | 26 ++- .../models/PlantListModelTest.java | 19 +- .../ch/zhaw/gartenverwaltung/io/plantdb.json | 215 ++++++++++++++++++ .../gartenverwaltung/io/test-plantdb.json | 74 ++---- .../models/template-taskdb.json | 2 + .../gartenverwaltung/models/test-taskdb.json | 2 + 14 files changed, 307 insertions(+), 137 deletions(-) create mode 100644 src/test/resources/ch/zhaw/gartenverwaltung/io/plantdb.json create mode 100644 src/test/resources/ch/zhaw/gartenverwaltung/models/template-taskdb.json create mode 100644 src/test/resources/ch/zhaw/gartenverwaltung/models/test-taskdb.json diff --git a/src/main/java/ch/zhaw/gartenverwaltung/bootstrap/AppLoader.java b/src/main/java/ch/zhaw/gartenverwaltung/bootstrap/AppLoader.java index 218ffda..44cea0d 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/bootstrap/AppLoader.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/bootstrap/AppLoader.java @@ -32,7 +32,6 @@ public class AppLoader { private final TaskList taskList = new JsonTaskList(); private final GardenSchedule gardenSchedule = new GardenSchedule(taskList, plantList); - private final WeatherGradenTaskPlanner weatherGradenTaskPlanner = new WeatherGradenTaskPlanner(taskList,plantList,cropList); private final Garden garden = new Garden(gardenSchedule, cropList); diff --git a/src/main/java/ch/zhaw/gartenverwaltung/io/WeatherGradenTaskPlanner.java b/src/main/java/ch/zhaw/gartenverwaltung/io/WeatherGradenTaskPlanner.java index 9e14a03..adf33fb 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/io/WeatherGradenTaskPlanner.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/io/WeatherGradenTaskPlanner.java @@ -74,11 +74,8 @@ public class WeatherGradenTaskPlanner { Plant plant = plantList.getPlantById(HardinessZone.ZONE_8A,crop.getPlantId()).orElseThrow(PlantNotFoundException::new); // nur für aktuelle growthphase - for (GrowthPhase growthphase : plant.lifecycle()) { - - if(growthphase.wateringCycle().litersPerSqM() < rainAmount){ - adjustNextExecutionOfWateringTask(taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(7))); - } + if(plant.wateringCycle().litersPerSqM() < rainAmount){ + adjustNextExecutionOfWateringTask(taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(7))); } } diff --git a/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java b/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java index 9502674..babcc01 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/models/GardenSchedule.java @@ -49,16 +49,13 @@ public class GardenSchedule { public void planTasksForCrop(Crop crop) throws PlantNotFoundException, HardinessZoneNotSetException, IOException { Plant plant = plantList.getPlantById(Settings.getInstance().getCurrentHardinessZone(), crop.getPlantId()).orElseThrow(PlantNotFoundException::new); int growPhaseGroup = plant.getGrowphaseGroupForDate(crop.getStartDate()); + addTask(new Task("watering Task", "pour water over the plant circa : "+ plant.wateringCycle().litersPerSqM() +" per square meter", + crop.getStartDate(), crop.getStartDate().plusDays(plant.timeToHarvest(0)), + plant.wateringCycle().interval(), crop.getCropId().orElse(0L))); + for (GrowthPhase growthPhase : plant.lifecycleForGroup(growPhaseGroup)) { for (TaskTemplate taskTemplate : growthPhase.taskTemplates()) { addTask(taskTemplate.generateTask(crop.getStartDate(), crop.getCropId().orElse(0L))); - - } - //TODO add wateringtask - if(growthPhase.wateringCycle() != null){ - addTask(new Task("watering Task", "pour water over the plant circa : "+ growthPhase.wateringCycle().litersPerSqM() +" per square meter", - growthPhase.startDate().atYear(LocalDate.now().getYear()), growthPhase.endDate().atYear(LocalDate.now().getYear()), - growthPhase.wateringCycle().interval(), crop.getCropId().orElse(0L))); } } } diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java index e8f539f..58cd453 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Crop.java @@ -1,5 +1,8 @@ package ch.zhaw.gartenverwaltung.types; +import ch.zhaw.gartenverwaltung.io.JsonPlantList; +import ch.zhaw.gartenverwaltung.io.PlantList; + import java.time.LocalDate; import java.util.Objects; import java.util.Optional; diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/GrowthPhase.java b/src/main/java/ch/zhaw/gartenverwaltung/types/GrowthPhase.java index 9348f2b..6efcc44 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/GrowthPhase.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/GrowthPhase.java @@ -12,7 +12,6 @@ public record GrowthPhase( MonthDay startDate, MonthDay endDate, int group, - WateringCycle wateringCycle, @JsonDeserialize(using = GrowthPhaseTypeDeserializer.class) GrowthPhaseType type, @JsonDeserialize(using = HardinessZoneDeserializer.class) HardinessZone zone, List taskTemplates) { diff --git a/src/main/java/ch/zhaw/gartenverwaltung/types/Plant.java b/src/main/java/ch/zhaw/gartenverwaltung/types/Plant.java index b77540c..4cf269f 100644 --- a/src/main/java/ch/zhaw/gartenverwaltung/types/Plant.java +++ b/src/main/java/ch/zhaw/gartenverwaltung/types/Plant.java @@ -18,6 +18,7 @@ public record Plant( int light, String soil, List pests, + WateringCycle wateringCycle, List lifecycle) { /** diff --git a/src/main/resources/ch/zhaw/gartenverwaltung/io/plantdb.json b/src/main/resources/ch/zhaw/gartenverwaltung/io/plantdb.json index fac9a5b..abd61ef 100644 --- a/src/main/resources/ch/zhaw/gartenverwaltung/io/plantdb.json +++ b/src/main/resources/ch/zhaw/gartenverwaltung/io/plantdb.json @@ -14,6 +14,11 @@ "measures": "Less water." } ], + "wateringCycle": { + "litersPerSqM": 25, + "interval": null, + "notes": [] + }, "lifecycle": [ { "startDate": "03-10", @@ -21,11 +26,6 @@ "type": "SOW", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Germinate", @@ -42,11 +42,6 @@ "type": "PLANT", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 7, - "notes": [] - }, "taskTemplates": [ { "name": "hilling", @@ -63,11 +58,6 @@ "type": "HARVEST", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Harvest", @@ -85,6 +75,11 @@ "name": "Early Carrot", "description": "Carrot, (Daucus carota), herbaceous, generally biennial plant of the Apiaceae family that produces an edible taproot. Among common varieties root shapes range from globular to long, with lower ends blunt to pointed. Besides the orange-coloured roots, white-, yellow-, and purple-fleshed varieties are known.", "image": "carrot.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 3, + "notes": [] + }, "lifecycle": [ { "startDate": "02-20", @@ -92,11 +87,7 @@ "zone": "ZONE_8A", "type": "SOW", "group": 0, - "wateringCycle": { - "litersPerSqM": 15, - "interval": 3, - "notes": [] - }, + "taskTemplates": [ { "name": "hilling", @@ -113,13 +104,6 @@ "zone": "ZONE_8A", "type": "PLANT", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 3, - "notes": [ - "Be careful not to pour water over the leaves, as this will lead to sunburn." - ] - }, "taskTemplates": [ { "name": "hilling", @@ -136,11 +120,6 @@ "zone": "ZONE_8A", "type": "HARVEST", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Harvesting", @@ -167,6 +146,12 @@ "name": "Summertime Onion", "description": "Onion, (Allium cepa), herbaceous biennial plant in the amaryllis family (Amaryllidaceae) grown for its edible bulb. The onion is likely native to southwestern Asia but is now grown throughout the world, chiefly in the temperate zones. Onions are low in nutrients but are valued for their flavour and are used widely in cooking. They add flavour to such dishes as stews, roasts, soups, and salads and are also served as a cooked vegetable.", "image": "onion.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 4, + "notes": [ + ] + }, "lifecycle": [ { "startDate": "03-15", @@ -174,12 +159,6 @@ "type": "SOW", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 15, - "interval": 4, - "notes": [ - ] - }, "taskTemplates": [ { "name": "Plant Sets", @@ -196,13 +175,6 @@ "type": "PLANT", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 3, - "notes": [ - "" - ] - }, "taskTemplates": [ { "name": "hilling", @@ -219,12 +191,6 @@ "type": "HARVEST", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [ - ] - }, "taskTemplates": [ { "name": "Harvesting", diff --git a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java index e39a525..c87f916 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenPlanModelTest.java @@ -49,11 +49,12 @@ public class GardenPlanModelTest { 0, "sandy to loamy, loose soil, free of stones", new ArrayList<>(), - List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), - new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), - new GrowthPhase(MonthDay.of(8, 5), 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 WateringCycle(15, 0, null), + List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(8, 5), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))); exampleCropOnion = new Crop(examplePlantOnion.id(), LocalDate.of(2023, 3, 1)) .withId(3); @@ -66,7 +67,8 @@ public class GardenPlanModelTest { 0, "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<>()))); + new WateringCycle(25, 0, null), + List.of(new GrowthPhase(MonthDay.of(4, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))); exampleCropCarrot = new Crop(examplePlantCarrot.id(), LocalDate.now()) .withId(5); diff --git a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java index 5e32687..8711aee 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/models/GardenScheduleTest.java @@ -7,8 +7,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; import java.time.LocalDate; import java.time.MonthDay; +import java.time.format.DateTimeFormatter; import java.util.*; import static org.junit.jupiter.api.Assertions.*; @@ -88,12 +94,13 @@ class GardenScheduleTest { 0, "sandy to loamy, loose soil, free of stones", new ArrayList<>(), + new WateringCycle(15, 0, null), List.of( - new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, List.of( + new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, List.of( exampleTaskTemplateList.get(0), exampleTaskTemplateList.get(1) )), - new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, List.of( + new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, List.of( exampleTaskTemplateList.get(2), exampleTaskTemplateList.get(3) )) @@ -187,7 +194,7 @@ class GardenScheduleTest { } @Test - void planTasksForCrop() throws HardinessZoneNotSetException, PlantNotFoundException, IOException { + void planTasksForCrop() throws HardinessZoneNotSetException, PlantNotFoundException, IOException, URISyntaxException { model.planTasksForCrop(new Crop(20, exampleStartDate).withId(30)); verify(exampleTaskTemplateList.get(0), times(1)).generateTask(exampleStartDate, 30); verify(exampleTaskTemplateList.get(1), times(1)).generateTask(exampleStartDate, 30); @@ -197,5 +204,18 @@ class GardenScheduleTest { verify(taskList, times(1)).saveTask(exampleTaskList.get(1)); verify(taskList, times(1)).saveTask(exampleTaskList.get(2)); verify(taskList, times(1)).saveTask(exampleTaskList.get(3)); + + final URL dbDataSource = this.getClass().getResource("test-taskdb.json"); + final URL testFile = this.getClass().getResource("template-taskdb.json"); + + Files.copy(Path.of(testFile.toURI()), Path.of(dbDataSource.toURI()), StandardCopyOption.REPLACE_EXISTING); + JsonTaskList testTaskList = new JsonTaskList(dbDataSource); + + model = spy(new GardenSchedule(testTaskList,plantList)); + model.planTasksForCrop(new Crop(20, exampleStartDate).withId(30)); + assertEquals(5,testTaskList.getTaskList(LocalDate.MIN,LocalDate.MAX).size()); + testTaskList.getTaskList(LocalDate.MIN,LocalDate.MAX).get(0); } + + } \ No newline at end of file diff --git a/src/test/java/ch/zhaw/gartenverwaltung/models/PlantListModelTest.java b/src/test/java/ch/zhaw/gartenverwaltung/models/PlantListModelTest.java index 0033299..5f71e1f 100644 --- a/src/test/java/ch/zhaw/gartenverwaltung/models/PlantListModelTest.java +++ b/src/test/java/ch/zhaw/gartenverwaltung/models/PlantListModelTest.java @@ -49,11 +49,12 @@ class PlantListModelTest { 0, "sandy to loamy, loose soil, free of stones", new ArrayList<>(), - List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), - new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), - new GrowthPhase(MonthDay.of(8, 5), 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 WateringCycle(25, 0, null), + List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(4, 3), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(8, 5), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(2, 8), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(10, 2), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))) ); examplePlantList.add(new Plant( 0, @@ -64,8 +65,9 @@ class PlantListModelTest { 6, "sandy", new ArrayList<>(), - List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), - new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, new WateringCycle(0, 0, null), GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))) + new WateringCycle(0, 0, null), + List.of(new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.HARVEST, HardinessZone.ZONE_8A, new ArrayList<>()), + new GrowthPhase(MonthDay.of(6, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))) ); examplePlantList.add(new Plant( 1, @@ -76,7 +78,8 @@ class PlantListModelTest { 0, "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<>()))) + new WateringCycle(25, 0, null), + List.of(new GrowthPhase(MonthDay.of(4, 4), MonthDay.of(12, 4), 0, GrowthPhaseType.PLANT, HardinessZone.ZONE_8A, new ArrayList<>()))) ); } diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/io/plantdb.json b/src/test/resources/ch/zhaw/gartenverwaltung/io/plantdb.json new file mode 100644 index 0000000..abd61ef --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/io/plantdb.json @@ -0,0 +1,215 @@ +[ + { + "id": 0, + "name": "Potato", + "description": "The potato is a tuber, round or oval, with small white roots called 'eyes', that are growth buds. The size varies depending on the variety; the colour of the skin can be white, yellow or even purple.", + "light": 6, + "spacing": "35", + "soil": "sandy", + "image": "potato.jpg", + "pests": [ + { + "name": "Rot", + "description": "Rot, any of several plant diseases, caused by any of hundreds of species of soil-borne bacteria, fungi, and funguslike organisms (Oomycota). Rot diseases are characterized by plant decomposition and putrefaction. The decay may be hard, dry, spongy, watery, mushy, or slimy and may affect any plant part.", + "measures": "Less water." + } + ], + "wateringCycle": { + "litersPerSqM": 25, + "interval": null, + "notes": [] + }, + "lifecycle": [ + { + "startDate": "03-10", + "endDate": "04-10", + "type": "SOW", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "Germinate", + "relativeStartDate": -14, + "relativeEndDate": null, + "description": "Take an egg carton and fill it with soil. Put the seedling deep enough so its half covered with soil. Keep it in 10-15 * Celsius with lots of light.", + "interval": null + } + ] + }, + { + "startDate": "04-10", + "endDate": "07-10", + "type": "PLANT", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "hilling", + "relativeStartDate": 0, + "relativeEndDate": null, + "description": "When the plants are 20 cm tall, begin hilling the potatoes by gently mounding the soil from the center of your rows around the stems of the plant. Mound up the soil around the plant until just the top few leaves show above the soil. Two weeks later, hill up the soil again when the plants grow another 20 cm.", + "interval": 21 + } + ] + }, + { + "startDate": "06-10", + "endDate": "08-10", + "type": "HARVEST", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "Harvest", + "relativeStartDate": 0, + "relativeEndDate": null, + "description": "Once the foliage has wilted and dried completely, harvest on a dry day. Store in a dark and cool location.", + "interval": null + } + ] + } + ] + }, + { + "id": 1, + "name": "Early Carrot", + "description": "Carrot, (Daucus carota), herbaceous, generally biennial plant of the Apiaceae family that produces an edible taproot. Among common varieties root shapes range from globular to long, with lower ends blunt to pointed. Besides the orange-coloured roots, white-, yellow-, and purple-fleshed varieties are known.", + "image": "carrot.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 3, + "notes": [] + }, + "lifecycle": [ + { + "startDate": "02-20", + "endDate": "03-10", + "zone": "ZONE_8A", + "type": "SOW", + "group": 0, + + "taskTemplates": [ + { + "name": "hilling", + "relativeStartDate": 0, + "relativeEndDate": 0, + "description": "Mound up the soil around the plant until just the top few leaves show above the soil. ", + "interval": null + } + ] + }, + { + "startDate": "03-10", + "endDate": "05-10", + "zone": "ZONE_8A", + "type": "PLANT", + "group": 0, + "taskTemplates": [ + { + "name": "hilling", + "relativeStartDate": 0, + "relativeEndDate": null, + "description": "Mound up the soil around the plant until just the top few leaves show above the soil. ", + "interval": 15 + } + ] + }, + { + "startDate": "05-10", + "endDate": "05-20", + "zone": "ZONE_8A", + "type": "HARVEST", + "group": 0, + "taskTemplates": [ + { + "name": "Harvesting", + "relativeStartDate": 0, + "relativeEndDate": 14, + "description": "When the leaves turn to a yellowish brown. Do not harvest earlier. The plant will show when it's ready.", + "interval": null + } + ] + } + ], + "soil": "sandy to loamy, loose soil, free of stones", + "spacing": "5,35,2.5", + "pests": [ + { + "name": "Rot", + "description": "rot, any of several plant diseases, caused by any of hundreds of species of soil-borne bacteria, fungi, and funguslike organisms (Oomycota). Rot diseases are characterized by plant decomposition and putrefaction. The decay may be hard, dry, spongy, watery, mushy, or slimy and may affect any plant part.", + "measures": "less water" + } + ] + }, + { + "id": 2, + "name": "Summertime Onion", + "description": "Onion, (Allium cepa), herbaceous biennial plant in the amaryllis family (Amaryllidaceae) grown for its edible bulb. The onion is likely native to southwestern Asia but is now grown throughout the world, chiefly in the temperate zones. Onions are low in nutrients but are valued for their flavour and are used widely in cooking. They add flavour to such dishes as stews, roasts, soups, and salads and are also served as a cooked vegetable.", + "image": "onion.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 4, + "notes": [ + ] + }, + "lifecycle": [ + { + "startDate": "03-15", + "endDate": "04-10", + "type": "SOW", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "Plant Sets", + "relativeStartDate": 0, + "relativeEndDate": 0, + "description": "Plant the sets about 5cm deep into the soil.", + "interval": null + } + ] + }, + { + "startDate": "04-10", + "endDate": "07-10", + "type": "PLANT", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "hilling", + "relativeStartDate": 0, + "relativeEndDate": null, + "description": "Mound up the soil around the plant until just the top few leaves show above the soil. ", + "interval": 15 + } + ] + }, + { + "startDate": "07-10", + "endDate": "09-20", + "type": "HARVEST", + "zone": "ZONE_8A", + "group": 0, + "taskTemplates": [ + { + "name": "Harvesting", + "relativeStartDate": 0, + "relativeEndDate": 14, + "description": "When ready for harvest, the leaves on your onion plants will start to flop over. This happens at the \"neck\" of the onion and it signals that the plant has stopped growing and is ready for storage. Onions should be harvested soon thereafter", + "interval": null + } + ] + } + ], + "soil": "sandy to loamy, loose soil, free of stones", + "spacing": "15,30,2", + "pests": [ + { + "name": "Rot", + "description": "rot, any of several plant diseases, caused by any of hundreds of species of soil-borne bacteria, fungi, and funguslike organisms (Oomycota). Rot diseases are characterized by plant decomposition and putrefaction. The decay may be hard, dry, spongy, watery, mushy, or slimy and may affect any plant part.", + "measures": "less water" + } + ] + } +] diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/io/test-plantdb.json b/src/test/resources/ch/zhaw/gartenverwaltung/io/test-plantdb.json index 4268df1..abd61ef 100644 --- a/src/test/resources/ch/zhaw/gartenverwaltung/io/test-plantdb.json +++ b/src/test/resources/ch/zhaw/gartenverwaltung/io/test-plantdb.json @@ -14,6 +14,11 @@ "measures": "Less water." } ], + "wateringCycle": { + "litersPerSqM": 25, + "interval": null, + "notes": [] + }, "lifecycle": [ { "startDate": "03-10", @@ -21,11 +26,6 @@ "type": "SOW", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Germinate", @@ -42,11 +42,6 @@ "type": "PLANT", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 7, - "notes": [] - }, "taskTemplates": [ { "name": "hilling", @@ -63,11 +58,6 @@ "type": "HARVEST", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Harvest", @@ -85,6 +75,11 @@ "name": "Early Carrot", "description": "Carrot, (Daucus carota), herbaceous, generally biennial plant of the Apiaceae family that produces an edible taproot. Among common varieties root shapes range from globular to long, with lower ends blunt to pointed. Besides the orange-coloured roots, white-, yellow-, and purple-fleshed varieties are known.", "image": "carrot.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 3, + "notes": [] + }, "lifecycle": [ { "startDate": "02-20", @@ -92,11 +87,7 @@ "zone": "ZONE_8A", "type": "SOW", "group": 0, - "wateringCycle": { - "litersPerSqM": 15, - "interval": 3, - "notes": [] - }, + "taskTemplates": [ { "name": "hilling", @@ -113,13 +104,6 @@ "zone": "ZONE_8A", "type": "PLANT", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 3, - "notes": [ - "Be careful not to pour water over the leaves, as this will lead to sunburn." - ] - }, "taskTemplates": [ { "name": "hilling", @@ -136,11 +120,6 @@ "zone": "ZONE_8A", "type": "HARVEST", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [] - }, "taskTemplates": [ { "name": "Harvesting", @@ -167,6 +146,12 @@ "name": "Summertime Onion", "description": "Onion, (Allium cepa), herbaceous biennial plant in the amaryllis family (Amaryllidaceae) grown for its edible bulb. The onion is likely native to southwestern Asia but is now grown throughout the world, chiefly in the temperate zones. Onions are low in nutrients but are valued for their flavour and are used widely in cooking. They add flavour to such dishes as stews, roasts, soups, and salads and are also served as a cooked vegetable.", "image": "onion.jpg", + "wateringCycle": { + "litersPerSqM": 15, + "interval": 4, + "notes": [ + ] + }, "lifecycle": [ { "startDate": "03-15", @@ -174,19 +159,12 @@ "type": "SOW", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 15, - "interval": 4, - "notes": [ - - ] - }, "taskTemplates": [ { - "name": "hilling", + "name": "Plant Sets", "relativeStartDate": 0, "relativeEndDate": 0, - "description": "Mound up the soil around the plant until just the top few leaves show above the soil. ", + "description": "Plant the sets about 5cm deep into the soil.", "interval": null } ] @@ -197,13 +175,6 @@ "type": "PLANT", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 25, - "interval": 3, - "notes": [ - "" - ] - }, "taskTemplates": [ { "name": "hilling", @@ -220,13 +191,6 @@ "type": "HARVEST", "zone": "ZONE_8A", "group": 0, - "wateringCycle": { - "litersPerSqM": 0, - "interval": null, - "notes": [ - - ] - }, "taskTemplates": [ { "name": "Harvesting", diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/models/template-taskdb.json b/src/test/resources/ch/zhaw/gartenverwaltung/models/template-taskdb.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/models/template-taskdb.json @@ -0,0 +1,2 @@ +[ +] \ No newline at end of file diff --git a/src/test/resources/ch/zhaw/gartenverwaltung/models/test-taskdb.json b/src/test/resources/ch/zhaw/gartenverwaltung/models/test-taskdb.json new file mode 100644 index 0000000..32960f8 --- /dev/null +++ b/src/test/resources/ch/zhaw/gartenverwaltung/models/test-taskdb.json @@ -0,0 +1,2 @@ +[ +] \ No newline at end of file