10UMLClass57017510030MainUMLClass920365300140<<Interface>> PlantDatabase -- + getPlantList(zone: HardinessZone): List<Plant>UMLClass76064522050TaskListControllerUMLClass97085210130<<Record>> Plant -- + id: long + name: String + description: String + spacing: ? + lifecycle: Lifecycle UMLClass102064516050TaskListModelUMLClass45062518070PlantListModelUMLClass23062518080PlantListControllerUMLClass1300825380230Task -- + id: long + name: String {readOnly} + description: String {readOnly} + startDate: Date {readOnly} - interval: int - endDate: Date -- + Task(name: String, description: String, startDate: String): Task + withInterval(interval: int): Task + withEndDate(endDate: Date): Task + withId(id: long): Task -- + getInterval(): Optional<int> + getEndDate(): Optional<Date>UMLClass960825280140<<Interface>> TaskDatabase -- + getTaskList(start: Date, end: Date): List<Task> + saveTask(Task task): void + removeTask(Task task): booleanUMLClass500265100100MainWindowUMLClass630285180130MainWindowControllerUMLClass54047521070NotificationServiceUMLClass1690565240140<<Interface>> WeatherService -- + getWeatherForecast: WeatherForecastUMLClass1410445230100WeatherForecast -- - updateTasksUMLClass138045260240Lifecycle -- - sowStart: Date {final} - sowEnd: Date {final} - plantStart: Date {final} - plantEnd: Date {final} - harvestStart: Date {final} - harvestEnd: Date {final} -- + Lifecylcle(sowStart: Date, sowEnd: Date, plantStart: Date, plantEnd: Date, harvestStart: ) + getSowStart(): Optional<Date> + getSowEnd(): Optional<Date> + getPlantStart(): Optional<Date> + getPlantEnd(): Optional<Date> + getHarvestStart(): Optional<Date> + getHarvestEnd(): Optional<Date> Relation117011523060lt=<->>>>>210;10;10;40Text2306519070Note: -- {final, readOnly} omitted on public data fields in <<Record>> Entities for clarity style=wordwrapRelation12308859030lt=<.70;10;10;10Relation109068530160lt=<.10;140;10;10UMLClass410785210120<<Record>> UserPlanting -- + plantId: long + isSown: boolean + startDate: Date + area: int