public NodeState CreateAddElements(NodeState parent, CreateMode mode, AdminShellPackageEnv package = null, AdminShell.File file = null) { // access if (parent == null) { return(null); } // for sake of complexity, differentiate early if (mode == CreateMode.Type) { var o = this.entityBuilder.CreateAddObject( parent, mode, "File", ReferenceTypeIds.HasComponent, ObjectTypeIds.FileType); return(o); } else { if (package == null || file == null) { return(null); } var instData = new InstanceData(); instData.packHandler = new AasUaPackageFileHandler(package, file); // containing element var o = this.entityBuilder.CreateAddObject( parent, mode, "File", ReferenceTypeIds.HasComponent, ObjectTypeIds.FileType); // this first information is to provide a "off-the-shelf" size information; a Open() will re-new this var fileLen = Convert.ToUInt64(package.GetStreamSizeFromPackage(file.value)); // populate attributes from the spec this.entityBuilder.CreateAddPropertyState <string>(o, mode, "MimeType", DataTypeIds.String, file.mimeType, ReferenceTypeIds.HasProperty, VariableTypeIds.PropertyType); instData.nodeOpenCount = this.entityBuilder.CreateAddPropertyState <UInt16>(o, mode, "OpenCount", DataTypeIds.UInt16, 0, ReferenceTypeIds.HasProperty, VariableTypeIds.PropertyType); instData.nodeSize = this.entityBuilder.CreateAddPropertyState <UInt64>(o, mode, "Size", DataTypeIds.UInt64, fileLen, ReferenceTypeIds.HasProperty, VariableTypeIds.PropertyType, valueRank: -1); this.entityBuilder.CreateAddPropertyState <bool>(o, mode, "UserWritable", DataTypeIds.Boolean, true, ReferenceTypeIds.HasProperty, VariableTypeIds.PropertyType); this.entityBuilder.CreateAddPropertyState <bool>(o, mode, "Writable", DataTypeIds.Boolean, true, ReferenceTypeIds.HasProperty, VariableTypeIds.PropertyType); // Open instData.mOpen = this.entityBuilder.CreateAddMethodState(o, mode, "Open", inputArgs: new[] { new Argument("Mode", DataTypeIds.Byte, -1, "") }, outputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, "") }, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_Open, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mOpen, instData); // Close instData.mClose = this.entityBuilder.CreateAddMethodState(o, mode, "Close", inputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, "") }, outputArgs: null, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_Close, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mClose, instData); // Read instData.mRead = this.entityBuilder.CreateAddMethodState(o, mode, "Read", inputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, ""), new Argument("Length", DataTypeIds.Int32, -1, "") }, outputArgs: new[] { new Argument("Data", DataTypeIds.ByteString, -1, "") }, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_Read, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mRead, instData); // Write instData.mWrite = this.entityBuilder.CreateAddMethodState(o, mode, "Write", inputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, ""), new Argument("Data", DataTypeIds.ByteString, -1, "") }, outputArgs: null, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_Write, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mWrite, instData); // GetPosition instData.mGetPosition = this.entityBuilder.CreateAddMethodState(o, mode, "GetPosition", inputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, ""), }, outputArgs: new[] { new Argument("Position", DataTypeIds.UInt64, -1, "") }, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_GetPosition, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mGetPosition, instData); // SetPosition instData.mSetPosition = this.entityBuilder.CreateAddMethodState(o, mode, "SetPosition", inputArgs: new[] { new Argument("FileHandle", DataTypeIds.UInt32, -1, ""), new Argument("Position", DataTypeIds.UInt64, -1, "") }, outputArgs: null, referenceTypeFromParentId: ReferenceTypeIds.HasComponent, methodDeclarationId: MethodIds.FileType_SetPosition, onCalled: this.OnMethodCalled); this.entityBuilder.AddNodeStateAnnotation(instData.mSetPosition, instData); // result return(o); } }