Capacity Planning Application JDL Sample

In this JDL sample for a simple Data Model application, all entities and relationships are indicated in one single file, entities.jdl.

application {
                // DOM [java.collectorClass] : [CapacityPlanning]
            }

            entity Country {
                // DOM [primary.keys] : [id]
                id String required,
                name String
            }

            entity Plant {
                // DOM [primary.keys] : [plantId]
                plantId String required,
                lat Double,
                lng Double,

                @Formula("(SELECT SUM(a.duration_in_hours) FROM activity a WHERE a.plant_id = db_gene_internal_id AND a.db_gene_internal_scenario_id = db_gene_internal_scenario_id)")
                durationInHours Double
            }

            entity Parameter {
                // DOM  [single.row] : [true]
                // DOM  [java.collectionName] : [Parameter]
                currentTime Instant
            }

            entity Resource {
                // DOM  [primary.keys] : [id]
                id String required,
                name String
            }

            entity ResourceCapacity {
                quantity Integer min(1)
            }

            entity Activity {
                // DOM  [primary.keys] : [id]
                id String required,
                name String,
                durationInHours Duration,
                dueDate Instant
            }

            entity Precedence {
            }

            entity Requirement {
                @DefaultValue("1")
                quantity Integer min(1)
            }

            entity Schedule {
                start Instant,
                end Instant
            }

            entity SolutionSummary {
                // DOM  [single.row] : [true]
                start Instant,
                end Instant,
                timespan Integer
            }

            entity ResourceUsagePerDay {
                // DOM  [primary.keys] : [day]
                day Integer,
                numberOfHours Integer
            }

            relationship ManyToOne {
                // DOM  [affects.primary.key] : [true]
                Requirement{activity} to Activity{requirements},
                // DOM  [affects.primary.key] : [true]
                Requirement{resource} to Resource{requirements},
                // DOM  [affects.primary.key] : [true]
                Precedence{first} to Activity{successors},
                // DOM  [affects.primary.key] : [true]
                Precedence{second} to Activity{predecessors},
                // DOM  [affects.primary.key] : [true]
                Schedule{resource} to Resource{schedules}
                // DOM  [affects.primary.key] : [true]
                Schedule{activity} to Activity{schedules}
                // DOM  [affects.primary.key] : [true]
                ResourceUsagePerDay{resource} to Resource{usagePerDay}
                // DOM  [affects.primary.key] : [true]
                Plant{country} to Country{plants}
                // DOM  [affects.primary.key] : [true]
                Activity{plant} to Plant{activities}
            }

            relationship OneToOne {
                // DOM  [affects.primary.key] : [true]
                ResourceCapacity{resource} to Resource{capacity}
            }