private void ResolveReferences(GraphElement element) { foreach (var entry in element.InRefernceIdentifiers) { // Type is the _Ref xml element minus the _Ref. (e.g. <Mother_Ref> => Mother) // var referenceType = entry.Key.Substring(0, entry.Key.Length - (StrLits.Ref.Length + 1)); foreach (var referenceId in entry.Value) { GraphElement referencedElement = null; if (_elementsByIdCollection.TryGetValue(referenceId, out referencedElement)) { referencedElement.AddOutReference(referenceType, element); element.AddInReference(referenceType, referencedElement); } } } foreach (var entry in element.OutRefernceIdentifiers) { // Type is the _Ref xml element minus the _Ref. (e.g. <Mother_Ref> => Mother) var referenceType = entry.Key.Substring(0, entry.Key.Length - (StrLits.Ref.Length + 1)); foreach (var referenceId in entry.Value) { GraphElement referencedElement = null; if (_elementsByIdCollection.TryGetValue(referenceId, out referencedElement)) { referencedElement.AddInReference(referenceType, element); element.AddOutReference(referenceType, referencedElement); } } } }
public void RemoveOutReference(string referenceType, GraphElement element) { List <GraphElement> list; if (!_outgoingElements.TryGetValue(referenceType, out list)) { return; } list.Remove(element); }
public void AddOutReference(string referenceType, GraphElement element) { List <GraphElement> list; if (!_outgoingElements.TryGetValue(referenceType, out list)) { list = new List <GraphElement>(); _outgoingElements.GetOrAdd(referenceType, list); } list.Add(element); }
private void ResolveChildren(GraphElement element) { if (!String.IsNullOrWhiteSpace(element.ParentId)) { GraphElement parent = null; if (_elementsByIdCollection.TryGetValue(element.ParentId, out parent)) { element.Parent = parent; } } foreach (var childId in element.ChildrenIdenifiers) { GraphElement child = null; if (_elementsByIdCollection.TryGetValue(element.ParentId, out child)) { element.Children.GetOrAdd(childId, child); } } }
private void Resolve(GraphElement element) { ResolveChildren(element); ResolveReferences(element); }