Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
233ce6b088 | ||
|
|
4072308ae6 | ||
|
|
65b15b6a4c | ||
|
|
9424c8713f | ||
|
|
07569b83e1 | ||
|
|
d2b8fe4ba2 | ||
|
|
670938ef85 |
@@ -1,12 +1,7 @@
|
||||
package ch.zhaw.gartenverwaltung.bootstrap;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.HelloApplication;
|
||||
import ch.zhaw.gartenverwaltung.io.CropList;
|
||||
import ch.zhaw.gartenverwaltung.io.JsonCropList;
|
||||
import ch.zhaw.gartenverwaltung.io.JsonPlantList;
|
||||
import ch.zhaw.gartenverwaltung.io.JsonTaskList;
|
||||
import ch.zhaw.gartenverwaltung.io.PlantList;
|
||||
import ch.zhaw.gartenverwaltung.io.TaskList;
|
||||
import ch.zhaw.gartenverwaltung.io.*;
|
||||
import ch.zhaw.gartenverwaltung.models.Garden;
|
||||
import ch.zhaw.gartenverwaltung.models.GardenSchedule;
|
||||
import ch.zhaw.gartenverwaltung.models.PlantListModel;
|
||||
@@ -37,6 +32,7 @@ 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);
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package ch.zhaw.gartenverwaltung.io;
|
||||
|
||||
public enum SevereWeather {
|
||||
FROST,SNOW,HAIL,NO_SEVERE_WEATHER,RAIN
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package ch.zhaw.gartenverwaltung.io;
|
||||
|
||||
import ch.zhaw.gartenverwaltung.models.PlantNotFoundException;
|
||||
import ch.zhaw.gartenverwaltung.types.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
public class WeatherGradenTaskPlanner {
|
||||
private final TaskList taskList;
|
||||
private final PlantList plantList;
|
||||
private final CropList cropList;
|
||||
WeatherService weatherService;
|
||||
private final LocalDate dateSevereWeather = LocalDate.of(22,12,15);
|
||||
|
||||
public WeatherGradenTaskPlanner(TaskList taskList, PlantList plantList, CropList cropList) {
|
||||
this.taskList = taskList;
|
||||
this.plantList = plantList;
|
||||
this.cropList = cropList;
|
||||
weatherService = new WeatherService();
|
||||
}
|
||||
|
||||
public void refreshTasks() throws IOException, HardinessZoneNotSetException, PlantNotFoundException {
|
||||
getSevereWeatherEvents();
|
||||
getRainAmount();
|
||||
}
|
||||
|
||||
private void getSevereWeatherEvents() throws IOException {
|
||||
SevereWeather actualWeather = weatherService.causeSevereWeather(0);
|
||||
if (SevereWeather.HAIL.equals(actualWeather)) {
|
||||
createPreHail();
|
||||
} else if (SevereWeather.FROST.equals(actualWeather)) {
|
||||
createPreFrost();
|
||||
} else if (SevereWeather.SNOW.equals(actualWeather)) {
|
||||
createPreSnow();
|
||||
}
|
||||
}
|
||||
|
||||
private void getRainAmount() throws IOException, HardinessZoneNotSetException, PlantNotFoundException {
|
||||
int rainAmount = weatherService.causeRainAmount(3);
|
||||
adjustWateringTask(rainAmount);
|
||||
}
|
||||
|
||||
public void createPreHail() throws IOException {
|
||||
|
||||
Task preHailTask = new Task("Hail",
|
||||
"During a summer Thunderstorm it could hail heavily. THe Hail could damage the crops. To prevent damage cover the plants with a strong tarpaulin",
|
||||
dateSevereWeather.minusDays(1L));
|
||||
preHailTask.withId(Long.MAX_VALUE);
|
||||
taskList.saveTask(preHailTask);
|
||||
|
||||
}
|
||||
|
||||
public void createPreFrost() throws IOException {
|
||||
Task preFrostTask = new Task("Frost",
|
||||
"The temperatur falls below zero degrees, cover especially the root with wool",
|
||||
dateSevereWeather.minusDays(1L));
|
||||
preFrostTask.withId(Long.MAX_VALUE);
|
||||
taskList.saveTask(preFrostTask);
|
||||
}
|
||||
|
||||
public void createPreSnow() throws IOException {
|
||||
Task preSnowTask = new Task("Snow",
|
||||
"The weather brings little snowfall. Cover your crops",
|
||||
dateSevereWeather.minusDays(1L));
|
||||
preSnowTask.withId(Long.MAX_VALUE);
|
||||
taskList.saveTask(preSnowTask);
|
||||
}
|
||||
|
||||
public void adjustWateringTask(int rainAmount) throws HardinessZoneNotSetException, IOException, PlantNotFoundException {
|
||||
|
||||
for (Crop crop : cropList.getCrops()) {
|
||||
Plant plant = plantList.getPlantById(HardinessZone.ZONE_8A,crop.getPlantId()).orElseThrow(PlantNotFoundException::new);
|
||||
|
||||
for (GrowthPhase growthphase : plant.lifecycle()) {
|
||||
|
||||
if(growthphase.wateringCycle().litersPerSqM() < rainAmount){
|
||||
adjustNextExecutionOfWateringTask(taskList.getTaskList(LocalDate.now(), LocalDate.now().plusDays(7)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void adjustNextExecutionOfWateringTask(List<Task> cropTaskList){
|
||||
for(Task task : cropTaskList){
|
||||
if(task.getName().equals("watering task")){
|
||||
task.setNextExecution(task.getNextExecution().plusDays(task.getInterval().orElse(1)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package ch.zhaw.gartenverwaltung.io;
|
||||
|
||||
public class WeatherService {
|
||||
private static final int NO_RAIN = 0;
|
||||
private static final int LITTLE_RAIN = 15;
|
||||
private static final int RAIN = 25;
|
||||
private static final int HEAVY_RAIN = 50;
|
||||
|
||||
public SevereWeather causeSevereWeather(int randomWeather) {
|
||||
return switch (randomWeather) {
|
||||
case 1 -> SevereWeather.HAIL;
|
||||
case 2 -> SevereWeather.SNOW;
|
||||
case 3 -> SevereWeather.FROST;
|
||||
default -> null;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public int causeRainAmount(int randomRainAmount) {
|
||||
return switch (randomRainAmount) {
|
||||
case 1 -> NO_RAIN;
|
||||
case 2 -> LITTLE_RAIN;
|
||||
case 3 -> RAIN;
|
||||
case 4 -> HEAVY_RAIN;
|
||||
default -> -1;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,13 @@ public class GardenSchedule {
|
||||
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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,15 @@ public class Task {
|
||||
this.cropId = cropId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor for weather events
|
||||
*/
|
||||
public Task(String name, String description, LocalDate startDate) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
this.startDate = startDate;
|
||||
}
|
||||
|
||||
public Task(String name, String description, LocalDate startDate, LocalDate endDate, int interval, long cropId) {
|
||||
this.name = name;
|
||||
this.description = description;
|
||||
|
||||
Reference in New Issue
Block a user