@startuml class concerto.metamodel.TypeIdentifier { + String name + String fullyQualifiedName } concerto.metamodel.TypeIdentifier --|> concerto.Concept class concerto.metamodel.DecoratorLiteral { } concerto.metamodel.DecoratorLiteral --|> concerto.Concept class concerto.metamodel.DecoratorString { + String value } concerto.metamodel.DecoratorString --|> concerto.metamodel.DecoratorLiteral class concerto.metamodel.DecoratorNumber { + Double value } concerto.metamodel.DecoratorNumber --|> concerto.metamodel.DecoratorLiteral class concerto.metamodel.DecoratorBoolean { + Boolean value } concerto.metamodel.DecoratorBoolean --|> concerto.metamodel.DecoratorLiteral class concerto.metamodel.DecoratorTypeReference { + TypeIdentifier type + Boolean isArray } concerto.metamodel.DecoratorTypeReference --|> concerto.metamodel.DecoratorLiteral class concerto.metamodel.Decorator { + String name + DecoratorLiteral[] arguments } concerto.metamodel.Decorator --|> concerto.Concept class concerto.metamodel.Identified { } concerto.metamodel.Identified --|> concerto.Concept class concerto.metamodel.IdentifiedBy { + String name } concerto.metamodel.IdentifiedBy --|> concerto.metamodel.Identified class concerto.metamodel.EnumDeclaration { + String name + EnumFieldDeclaration[] fields } concerto.metamodel.EnumDeclaration --|> concerto.Concept class concerto.metamodel.EnumFieldDeclaration { + String name + Decorator[] decorators } concerto.metamodel.EnumFieldDeclaration --|> concerto.Concept class concerto.metamodel.ClassDeclaration { + String name + Decorator[] decorators + Boolean isAbstract + Identified identified + TypeIdentifier superType + FieldDeclaration[] fields } concerto.metamodel.ClassDeclaration --|> concerto.Concept class concerto.metamodel.AssetDeclaration { } concerto.metamodel.AssetDeclaration --|> concerto.metamodel.ClassDeclaration class concerto.metamodel.ParticipantDeclaration { } concerto.metamodel.ParticipantDeclaration --|> concerto.metamodel.ClassDeclaration class concerto.metamodel.TransactionDeclaration { } concerto.metamodel.TransactionDeclaration --|> concerto.metamodel.ClassDeclaration class concerto.metamodel.EventDeclaration { } concerto.metamodel.EventDeclaration --|> concerto.metamodel.ClassDeclaration class concerto.metamodel.ConceptDeclaration { } concerto.metamodel.ConceptDeclaration --|> concerto.metamodel.ClassDeclaration class concerto.metamodel.FieldDeclaration { + String name + Boolean isArray + Boolean isOptional + Decorator[] decorators } concerto.metamodel.FieldDeclaration --|> concerto.Concept class concerto.metamodel.RelationshipDeclaration { + TypeIdentifier type } concerto.metamodel.RelationshipDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.ObjectFieldDeclaration { + String defaultValue + TypeIdentifier type } concerto.metamodel.ObjectFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.BooleanFieldDeclaration { + Boolean defaultValue } concerto.metamodel.BooleanFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.DateTimeFieldDeclaration { } concerto.metamodel.DateTimeFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.StringFieldDeclaration { + String defaultValue + StringRegexValidator validator } concerto.metamodel.StringFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.StringRegexValidator { + String regex } concerto.metamodel.StringRegexValidator --|> concerto.Concept class concerto.metamodel.DoubleFieldDeclaration { + Double defaultValue + DoubleDomainValidator validator } concerto.metamodel.DoubleFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.DoubleDomainValidator { + Double lower + Double upper } concerto.metamodel.DoubleDomainValidator --|> concerto.Concept class concerto.metamodel.IntegerFieldDeclaration { + Integer defaultValue + IntegerDomainValidator validator } concerto.metamodel.IntegerFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.IntegerDomainValidator { + Integer lower + Integer upper } concerto.metamodel.IntegerDomainValidator --|> concerto.Concept class concerto.metamodel.LongFieldDeclaration { + Long defaultValue + LongDomainValidator validator } concerto.metamodel.LongFieldDeclaration --|> concerto.metamodel.FieldDeclaration class concerto.metamodel.LongDomainValidator { + Long lower + Long upper } concerto.metamodel.LongDomainValidator --|> concerto.Concept class concerto.metamodel.Import { + String namespace + String uri } concerto.metamodel.Import --|> concerto.Concept class concerto.metamodel.ImportAll { } concerto.metamodel.ImportAll --|> concerto.metamodel.Import class concerto.metamodel.ImportType { + String name } concerto.metamodel.ImportType --|> concerto.metamodel.Import class concerto.metamodel.ModelFile { + String namespace + Import[] imports + EnumDeclaration[] enumDeclarations + ClassDeclaration[] classDeclarations } concerto.metamodel.ModelFile --|> concerto.Concept @enduml