@startuml

!define IMPLEMENTED_COLOR cornsilk
!define OUT_OF_SCOPE_COLOR lightsteelblue

skinparam legendBackgroundColor black

!define GROUP_PACKAGE

class Category #OUT_OF_SCOPE_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): String
  +setUid(uid: String): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Grape #IMPLEMENTED_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Taste #IMPLEMENTED_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Quality #IMPLEMENTED_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Vinesite #OUT_OF_SCOPE_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Participant #IMPLEMENTED_COLOR {
  -uid: Int
  -masterRecord: MasterRecord
  +getUid(): Int
  +setUid(uid: Int): void
  +getMasterRecord(): MasterRecord
  +setMasterRecord(masterRecord: MasterRecord): void
}

class WineKind #IMPLEMENTED_COLOR {
  -uid: Int
  -name: String
  -description: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
}

class Wine #IMPLEMENTED_COLOR {
  -uid: Int
  -name: String
  -participant: Participant
  -jahresauswahlprobe Jahresauswahlprobe
  -grapeVariety: Grape
  -vinesite: Vinesite
  -category: Category
  -vintage: int
  -quality: Quality
  -taste: Taste
  -winekinds: List<WineKind>
  -ap_nr: String
  -acidity: float
  -sugar: float
  -alc: float
  -volume: float
  -price: float
  -status: String
  +getUid(): Int
  +setUid(uid: Int): void
  +getName(): String
  +setName(name: String): void
  +getParticipant(): Participant
  +setParticipant(participant: Participant): void
  +getJahresauswahlprobe(): Jahresauswahlprobe
  +setJahresauswahlprobe(participant: Jahresauswahlprobe): void
  +getGrapeVariety(): Grape
  +setGrapeVariety(grapeVariety: Grape): void
  +getVinesite(): Vinesite
  +setVinesite(vinesite: Vinesite): void
  +getCategory(): Category
  +setCategory(category: Category): void
  +getVintage(): int
  +setVintage(vintage: int): void
  +getQuality(): Quality
  +setQuality(quality: Quality): void
  +getTaste(): Taste
  +setTaste(taste: Taste): void
  +getWinekinds(): List<Winekind>
  +setWinekinds(winekinds: List<WineKind>): void
  +getApNr(): String
  +setApNr(ap_nr: String): void
  +getAcidity(): float
  +setAcidity(acidity: float): void
  +getSugar(): float
  +setSugar(sugar: float): void
  +getAlc(): float
  +setAlc(alc: float): void
  +getVolume(): float
  +setVolume(volume: float): void
  +getPrice(): float
  +setPrice(price: float): void
  +getStatus(): String
  +setStatus(status: String): void
}

class Jahresauswahlprobe #IMPLEMENTED_COLOR {
  -uid: Int
  -allowedVinesites: List<Vinesite>
  -allowedCategories: List<Category>
  -allowedGrapes: List<Grape>
  -name: String
  -description: String
  -dateAllowRegistration_start: Date
  -dateAllowRegistration_end: Date
  -dateAllowShow_start: Date
  -dateAllowShow_end: Date
  -date_start: Date
  -date_end: Date
  +getAllowedCategories(): List<Category>
  +setAllowedCategories(allowedCategories: List<Category>): void
  +getName(): String
  +setName(name: String): void
  +getDescription(): String
  +setDescription(description: String): void
  +getDateAllowRegistrationStart(): Date
  +setDateAllowRegistrationStart(dateAllowRegistrationStart: Date): void
  +getDateAllowRegistrationEnd(): Date
  +setDateAllowRegistrationEnd(dateAllowRegistrationEnd: Date): void
  +getDateAllowShowStart(): Date
  +setDateAllowShowStart(dateAllowShowStart: Date): void
  +getDateAllowShowEnd(): Date
  +setDateAllowShowEnd(dateAllowShowEnd: Date): void
  +getDateStart(): Date
  +setDateStart(dateStart: Date): void
  +getDateEnd(): Date
  +setDateEnd(dateEnd: Date): void
  +getUid(): Int
  +setUid(uid: Int): void
}

Category "1" <-- "*" Wine
Grape "1" <-- "*" Wine
Vinesite "1" <-- "*" Wine
Participant "1" <-- "*" Wine
Taste "1" <-- "*" Wine
Quality "1" <-- "*" Wine
WineKind "1" <-- "*" Wine
Jahresauswahlprobe "*" <-- "*" Wine

legend right
  <font color=white>Legend:</font>
  <font color=IMPLEMENTED_COLOR>To implement</font>
  <font color=OUT_OF_SCOPE_COLOR>Part of existing system</font>
end legend

@enduml
