Exemple #1
0
        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);
            }
        }