public DataDictionary FindDataDictionary(NodeId descriptionId)
{
// check if the dictionary has already been loaded.
foreach (DataDictionary dictionary in m_dictionaries.Values)
{
if (dictionary.Contains(descriptionId))
{
return dictionary;
}
}
// find the dictionary for the description.
Browser browser = new Browser(this);
browser.BrowseDirection = BrowseDirection.Inverse;
browser.ReferenceTypeId = ReferenceTypeIds.HasComponent;
browser.IncludeSubtypes = false;
browser.NodeClassMask = 0;
ReferenceDescriptionCollection references = browser.Browse(descriptionId);
if (references.Count == 0)
{
throw ServiceResultException.Create(StatusCodes.BadNodeIdInvalid, "Description does not refer to a valid data dictionary.");
}
// load the dictionary.
NodeId dictionaryId = ExpandedNodeId.ToNodeId(references[0].NodeId, m_namespaceUris);
DataDictionary dictionaryToLoad = new DataDictionary(this);
dictionaryToLoad.Load(references[0]);
m_dictionaries[dictionaryId] = dictionaryToLoad;
return dictionaryToLoad;
}