@startuml
'https://plantuml.com/class-diagram
!include ServiceControl/ServiceControl.puml
!include ./activeElement/ActiveElement.puml
!include ./DiagnosticElement/diagnosticElement.puml
!include ./IndicatorElement/indicatorElement.puml
!include ./InputElement/inputElement.puml
!include ./OperationElement/operationElement.puml
!include ../connection/OpcUaConnection.puml
!include ../connection/DataItem.puml



class DataAssemblyController{
    + //readonly// name: string
    + //readonly// metaModelRef: string
    + //readonly// communication!: string
    + //readonly// connection: OpcUaConnection
    + //readonly// tagName: string;
    + //readonly// tagDescription: string;

    + subscriptionActive: boolean
    + parsingErrors: string[] = []
    + options: DataAssemblyOptions
    + defaultReadDataItem: DataItem<any> | undefined
    + defaultReadDataItemType: any;
    + defaultWriteDataItem: DataItem<any> | undefined;
    + defaultWriteDataItemType: any;

    + DataAssemblyController(options: DataAssemblyOptions, connection: OpcUaConnection)
	+ async subscribe(): Promise<DataAssemblyController>
	+ unsubscribe(): void
	+ createDataItem(name: string | string[], access: 'read' | 'write', type?: 'number' | 'string' | 'boolean', silent = false): OpcUaDataItem<any>
	+ getDefaultReadValue(): any | undefined
	+ getLastDefaultReadValueUpdate(): Date | undefined
	+ getDefaultWriteValue(): any | undefined
	+ getLastDefaultWriteValueUpdate(): Date | undefined
	+ logParsingErrors(): void
	+ toJson(): ParameterInterface
}

DataAssemblyController <|-- ActiveElement
DataAssemblyController <|-- BasicDefinition
DataAssemblyController <|-- DiagnosticElement
DataAssemblyController <|-- IndicatorElement
DataAssemblyController <|-- InputElement
DataAssemblyController <|-- OperationElement
DataAssemblyController <|-- ServiceControl
DataAssemblyController *-- "1" OpcUaConnection
DataAssemblyController *-- "0..2" DataItem



@enduml
