10UMLClass48236010030MainUMLClass1082380370100<<Interface>>
PlantDatabase
--
+ getPlantList(zone: HardinessZone): List<Plant>
+ getPlantById(zone: HardinessZone id: long): Optional<Plant>UMLClass67271022040TaskListControllerUMLClass1132110300180<<Record>>
Plant
--
+ id: long
+ name: String
+ description: String
+ spacing: int
+ lifecycle: List<GrowthPhase>
--
+ calculateStartDate(harvestDate: Date): Date
+ generateTasks()
UMLClass942710210120TaskListModel
--
- tasks: ListProperty<Task>
- taskDb: TaskDatabase
--
+ getTask(id: long): Optional<Task>
+ saveTask(task: Task)
+ removeTask(task: Task)UMLClass322690250120GardenPlanModel
--
- tasks: ListProperty<Crop>
- gardenPlan: GardenPlan
--
+ plantAsCrop(planting: UserPlanting)
+ removePlanting(planting: UserPlanting)UMLClass7268018080GardenPlanControllerUMLClass1362830490240Task
--
+ id: long
+ name: String {readOnly}
+ description: String {readOnly}
+ startDate: Date {readOnly}
+ isOptional: boolean {readOnly}
- interval: int
- endDate: Date
--
+ Task(name: String, description: String, startDate: String, isReadOnly: boolean): Task
+ withInterval(interval: int): Task
+ withEndDate(endDate: Date): Task
+ withId(id: long): Task
--
+ getInterval(): Optional<int>
+ getEndDate(): Optional<Date>UMLClass902930280140<<Interface>>
TaskDatabase
--
+ getTaskList(start: Date, end: Date): List<Task>
+ saveTask(Task task) throws ??Exception
+ removeTask(Task task) throws ??ExceptionUMLClass44244017080MainWindowControllerUMLClass962131021070NotificationService
--
- taskDb: TaskDatabase
--
+ tick()UMLClass1412131024090<<Interface>>
WeatherProvider
--
+ getWeatherForecast: WeatherForecastUMLClass13921150400100WeatherService
--
- weatherPovider: WeatherProvider
- taskDb: TaskDatabase
--
+ WeatherService(provider: WeatherProvider, taskDb: TaskDatabase)
- updateTasks()UMLClass1502110260150<<Record>>
GrowthPhase
--
+ startDate: MonthDay
+ endDate: MonthDay
+ type: GrowthPhaseType
Relation142218010040lt=<->>>>>
m1=*
m2=180;10;10;10Text15213019070Note:
--
{final, readOnly} omitted on public data fields in <<Record>> Entities for clarity
style=wordwrapRelation117297021050lt=<.
m1=*
m2=1
returns >190;20;10;20Relation1032820140130lt=<-
m1=1 external database
m2=1 internal list
accesses10;110;10;10UMLClass3221120240150Crop
--
- cropId: Long
+ plantId: long {final, readOnly}
+ startDate: LocalDate {final, readOnly}
+ area: Double
--
+ withId(long): Crop
+ withArea(double): Crop
--
+ getCropId(): Optional<Long>Relation126228070120lt=<.
m1=*
m2=1
returns10;10;10;100UMLClass1632290130100<<Enumeration>>
GrowthPhaseType
--
SOW
PLANT
HARVESTRelation158225070120lt=<->>>>
m1=1
m2=*50;90;10;90;10;10Relation8827208030lt=<->>>>60;10;10;10Relation4321020110120lt=<.
m1=*
m2=1
returns / saves10;100;10;10Relation24271010030lt=<->>>>80;10;10;10UMLClass302890280140<<Interface>>
GardenPlan
--
+ getPlantings(): List<UserPlanting>
+ addPlanting(plantId: long, startDate)
+ savePlanting(planting: UserPlanting)
Relation42280080110lt=<.
m1=1
m2=1
accesses10;90;10;10Relation152212403090lt=<.10;70;10;10Relation1062106080270lt=<-
m1=1
m2=1
accesses10;10;10;250Relation11421060270170lt=<-
m1=1
m2=1
adds Tasks10;10;10;140;250;140UMLClass822114020050JsonTaskDatabaseRelation912106030100lt=<<-10;10;10;80UMLClass156243020050JsonPlantDatabaseRelation144244014030lt=<<-10;10;120;10UMLClass3293020050JsonGardenPlanRelation22294010030lt=<<-80;10;10;10Relation582510220220lt=<.200;200;10;10Relation172510340190lt=<.10;170;320;10UMLClass58225016060PlantListControllerRelation5223803080lt=<.10;60;10;10Relation60230080210lt=<.60;10;10;190UMLClass73239016060PlantListModelRelation73228090130lt=<.70;110;10;10Relation88240022070lt=<-
m1=1\nexternal\ndatabase
m2=1\ninternal\nlist
accesses >200;20;10;20Relation582019050lt=-
m1=0..n
m2=0..1
teaches to >10;20;170;20UMLClass1412530420200TaskTemplate
--
+ name: String {readOnly}
+ description: String {readOnly}
+ relativeStartDate: int {readOnly}
- interval: Integer
- relativeEndDate: Integer
- isOptional: boolean
--
+ Task(name: String, description: String, startDate: String): TaskTemplate
+ setRelativeEndDate(relativeEndDate: int)
+ setInterval(interval: Integer)
+ generateTask(realStartDate: LocalDate): Task
Relation1752180130490lt=<->>>>>
m1=*
m2=180;460;110;460;110;10;10;10Relation160272090130lt=<.
m1=*
m2=1
generates10;110;10;10Relation56277040040lt=<-
delegates generating Tasks380;20;10;20