/// <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); }