示例#1
0
        /// <summary>
        /// Creates a new data type.
        /// </summary>
        private DataTypeState CreateDataType(NodeState parent, IDictionary <NodeId, IList <IReference> > externalReferences, string path, string name)
        {
            DataTypeState type = new DataTypeState();

            type.SymbolicName  = name;
            type.SuperTypeId   = DataTypeIds.Structure;
            type.NodeId        = new NodeId(path, NamespaceIndex);
            type.BrowseName    = new QualifiedName(name, NamespaceIndex);
            type.DisplayName   = type.BrowseName.Name;
            type.WriteMask     = AttributeWriteMask.None;
            type.UserWriteMask = AttributeWriteMask.None;
            type.IsAbstract    = false;

            IList <IReference> references = null;

            if (!externalReferences.TryGetValue(DataTypeIds.Structure, out references))
            {
                externalReferences[DataTypeIds.Structure] = references = new List <IReference>();
            }

            references.Add(new NodeStateReference(ReferenceTypeIds.HasSubtype, false, type.NodeId));

            if (parent != null)
            {
                parent.AddReference(ReferenceTypes.Organizes, false, type.NodeId);
                type.AddReference(ReferenceTypes.Organizes, true, parent.NodeId);
            }

            AddPredefinedNode(SystemContext, type);
            return(type);
        }