@startuml

object Root {
id = -1, -1, -1, -1, -1
parent = -1, -1, -1, -1, -1
model = {}
}

Root o.. Model1
Root o.. Model2

object Model1 {
id = 1, -1, -1, -1, -1
parent = -1, -1, -1, -1, -1
model = {'d': 5}
}

object Model2 {
id = 2, -1, -1, -1, -1
parent = -1, -1, -1, -1, -1
model = {'d': 7}
}

Model1 o.. Scan11
Model1 o.. Scan12
Model2 o.. Scan21

object Scan11 {
id = 1, 1, -1, -1, -1
parent = 1, -1, -1, -1, -1
model = {'d': 5}
}

object Scan12 {
id = 1, 2, -1, -1, -1
parent = 1, -1, -1, -1, -1
model = {'d': 5}
}

object Scan21 {
id = 2, 1, -1, -1, -1
parent = 2, -1, -1, -1, -1
model = {'d': 7}
}

Scan11 o.. Dom111

object Dom111 {
id = 1, 1, 1, -1, -1
parent = 1, 1, -1, -1, -1
model = {'d': 5}
}

Dom111 o.. Emitter1111

object Emitter1111 {
id = 1, 1, 1, 1, -1
parent = 1, 1, 1, -1, -1
model = {'d': 5}
}

Emitter1111 o.. Region11111

object Region11111 {
id = 1, 1, 1, 1, 1
parent = 1, 1, 1, 1, -1
model = {'d': 5}
}


@enduml

@startuml

object "Root: CalculationTask" as Root {
}
note right: all attributes undefined

object "Model: CalculationTask" as Model {
model
}
note right: model is defined\nother attributes undefined

object ModelHandler

object "Scan: CalculationTask" as Scan {
model
scan
}

object ScanHandler

object "Domain: CalculationTask" as Domain {
model
scan
domain
}

object "DomainHandler" as DomainHandler

object "Emitter: CalculationTask" as Emitter {
model
scan
domain
emitter
}

object EmitterHandler

object "Region: CalculationTask" as Region {
model
scan
domain
emitter
region
}
note right: all attributes well-defined

object RegionHandler

Root "1" o.. "1..*" Model
Model "1" o.. "1..*" Scan
Scan "1" o.. "1..*" Domain
Domain "1" o.. "1..*" Emitter
Emitter "1" o.. "1..*" Region

(Root, Model) .. ModelHandler
(Model, Scan) .. ScanHandler
(Scan, Domain) .. DomainHandler
(Domain, Emitter) .. EmitterHandler
(Emitter, Region) .. RegionHandler

@enduml
