/// <summary> /// Creates a new object type. /// </summary> private BaseObjectTypeState CreateObjectType(NodeState parent, IDictionary<NodeId, IList<IReference>> externalReferences, string path, string name) { BaseObjectTypeState type = new BaseObjectTypeState(); type.SymbolicName = name; type.SuperTypeId = ObjectTypeIds.BaseObjectType; 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(ObjectTypeIds.BaseObjectType, out references)) { externalReferences[ObjectTypeIds.BaseObjectType] = references = new List<IReference>(); } references.Add(new NodeStateReference(ReferenceTypes.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; }