#27 gardenplanmodel fully implemented

This commit is contained in:
Gian-Andrea Hutter 2022-11-01 10:33:07 +01:00
parent 0987b42086
commit 9e14920fbb
1 changed files with 64 additions and 80 deletions

View File

@ -2,105 +2,89 @@ package ch.zhaw.gartenverwaltung.gardenplan;
import ch.zhaw.gartenverwaltung.io.GardenPlan; import ch.zhaw.gartenverwaltung.io.GardenPlan;
import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException; import ch.zhaw.gartenverwaltung.io.HardinessZoneNotSetException;
import ch.zhaw.gartenverwaltung.io.JsonGardenPlan;
import ch.zhaw.gartenverwaltung.io.TaskDatabase; import ch.zhaw.gartenverwaltung.io.TaskDatabase;
import ch.zhaw.gartenverwaltung.io.PlantDatabase; import ch.zhaw.gartenverwaltung.taskList.PlantNotFoundException;
import ch.zhaw.gartenverwaltung.types.*; import ch.zhaw.gartenverwaltung.taskList.TaskListModel;
import ch.zhaw.gartenverwaltung.types.Crop;
import ch.zhaw.gartenverwaltung.types.Plant;
import ch.zhaw.gartenverwaltung.types.Task;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.time.LocalDate;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
/**
* The Gardenplan model manages the crops in the gardenplan.
*/
public class Gardenplanmodel { public class Gardenplanmodel {
private GardenPlan gardenplan; private GardenPlan gardenPlan;
private TaskDatabase taskDatabase; private List<Crop> cropList;
private PlantDatabase plantDatabase; private TaskListModel taskListModel;
// private TaskListmodel;
private List<Crop> cropList = Collections.emptyList();
public Gardenplanmodel() { /**
try { * Constructor of Gardenplan model
cropList = gardenplan.getCrops(); *
} catch (IOException ioException){ * @param taskListModel holds a reference to the task list object.
System.err.println("The task can not be created!"); */
public Gardenplanmodel(TaskListModel taskListModel) throws IOException {
this.taskListModel = taskListModel;
gardenPlan = new JsonGardenPlan();
cropList = gardenPlan.getCrops();
} }
} /**
* Creates a Crop with a {@link Plant} and the planting date of the plant. Then let the Tasklistmodel create the
* gardening {@link Task} for the crop. Store the crop in the gardenplan file and the cache.
*
* @param plant The plant which is wnated to be planted
* @param plantingDate The date, when the plant is planted
* @throws IOException If the database cannot be accessed
* @throws HardinessZoneNotSetException If the hardinesszone could not be added
* @throws PlantNotFoundException If the plant is not found in the database.
*/
public void plantAsCrop(Plant plant, LocalDate plantingDate) throws IOException, HardinessZoneNotSetException, PlantNotFoundException {
Crop crop = new Crop(plant.id(),plantingDate);
//TODO Add Area to Plant
crop.withArea(0);
public void plantCrop(Crop crop){
cropList.add(crop); cropList.add(crop);
gardenPlan.saveCrop(crop);
try { taskListModel.planTasksForCrop(crop);
gardenplan.saveCrop(crop);
createGardeningTasks(crop);
} catch (IOException ioException){
System.err.println("The task can not be created!");
} }
} /**
* Removes a {@link Crop} from the file and the cache
*
* @param crop The plant which is wnated to be planted
* @throws IOException If the database cannot be accessed
*/
public void removeCrop(Crop crop) throws IOException {
public void removeCrop(Crop crop){
cropList.remove(crop); cropList.remove(crop);
try { gardenPlan.removeCrop(crop);
gardenplan.removeCrop(crop); taskListModel.removeTasksForCrop(crop);
//TaskListModel.removeTasksForCrop(crop)
} catch (IOException ioException){
System.err.println("The task can not be created!");
} }
/**
} * Returns a list of {@link Crop}s which are currently in the gardenplan.
*
public List<Crop> getCrops(){ * @throws IOException If the database cannot be accessed
*/
public List<Crop> getCrops() throws IOException {
if(cropList.isEmpty()){ if(cropList.isEmpty()){
try { cropList = gardenPlan.getCrops();
cropList = gardenplan.getCrops();
} catch (IOException ioException){
System.err.println("Crops could not be loaded");
}
} }
return cropList; return cropList;
} }
public Optional<Crop> getCrop(Long id){ /**
try { * Returns an Optional of {@link Crop} if the crop is the gardenplan
return gardenplan.getCropById(id); *
* @param cropId The date, when the plant is planted
} catch (IOException ioException){ * @throws IOException If the database cannot be accessed
System.err.println("The task can not be created!"); */
} public Optional<Crop> getCrop(Long cropId) throws IOException {
return null; return gardenPlan.getCropById(cropId);
}
private void createGardeningTasks(Crop crop) throws IOException, HardinessZoneNotSetException {
//TaskListModel.generateTasksForCrop(crop)
long plantId = crop.getPlantId();
Optional plant;
Task task;
Plant plantL = plant;
plant = plantDatabase.getPlantById(HardinessZone.ZONE_8A, plantId);
if(plant.isPresent()){
List<GrowthPhase> growthPhases = plantL.lifecycleForGroup(0);
GrowthPhase growthPhase = growthPhases.get(0);
List<TaskTemplate> taskTemplatesForLyfecycle= growthPhase.taskTemplates();
task = taskTemplatesForLyfecycle.get(0).generateTask(crop.getStartDate());
taskDatabase.saveTask(task);
} else {
}
//TODO need to get the plants templates, or through the Growphase
// plant.getPlantTemplates
// CreateTaskWithTasktemplate
} }
} }