private ChangesToCascade Apply(NodeTrackingObject trackingObject) { var changesToChildren = new List <Tuple <NodeTrackingObject, ChangesToCascade> >(); foreach (var child in trackingObject.Children) { var changesToCascade = Apply(child); changesToChildren.Add(Tuple.Create(child, changesToCascade)); } return(nodeChangesApplier.Apply(trackingObject, changesToChildren.ToArray())); }
public void TrackObject(ObjectPath objectPath, ObjectTypes objectType, ObjectStates objectState) { var trackingObject = new NodeTrackingObject(objectPath, objectType, objectState); if (!objectPath.HasParent) { rootTrackingObjects.Add(objectPath, trackingObject); } else { GetTrackingObject(objectPath.ParentObjectPath).AddChild(trackingObject); } }
private NodeTrackingObject GetTrackingObject(ObjectPath objectPath, NodeTrackingObject currentTrackingObject, int depth) { if (depth == objectPath.Ids.Length) { return(currentTrackingObject); } for (var i = 0; i < currentTrackingObject.Children.Length; i++) { if (currentTrackingObject.Children[i].Path.LocalNodeId.Equals(objectPath.Ids[depth])) { return(GetTrackingObject(objectPath, currentTrackingObject.Children[i], depth + 1)); } } throw new Exception("Could not find tracking object"); }
public ChangesToCascade Apply(NodeTrackingObject trackingObject, Tuple <NodeTrackingObject, ChangesToCascade>[] changesToChildren) { throw new NotImplementedException(); }