#23 watering task refactor

This commit is contained in:
Gian-Andrea Hutter
2022-11-28 13:53:47 +01:00
parent cae6f950ad
commit eccb519bfb
14 changed files with 307 additions and 137 deletions
@@ -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);
@@ -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)));
}
}
@@ -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)));
}
}
}
@@ -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;
@@ -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<TaskTemplate> taskTemplates) {
@@ -18,6 +18,7 @@ public record Plant(
int light,
String soil,
List<Pest> pests,
WateringCycle wateringCycle,
List<GrowthPhase> lifecycle) {
/**
@@ -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",