示例#1
0
        public void ApplyDiff(object status, ObjectDiff diff)
        {
            if (diff.PropertyChanges != null)
            {
                ApplyPropertyChanges(diff.PropertyChanges, currentStatusAdaptor, status);
            }

            if (diff.SignalChanges != null)
            {
                ApplySignalChanges(diff.SignalChanges, currentStatusAdaptor, status);
            }

            if (diff.ChildChanges != null)
            {
                foreach (ChildDiff cdiff in diff.ChildChanges)
                {
                    if (cdiff.Operation == DiffOperation.Update)
                    {
                        object statusChild = currentStatusAdaptor.FindChild(status, cdiff.Id);
                        ApplyChildDiff(statusChild, cdiff.Diff);
                    }
                    else if (cdiff.Operation == DiffOperation.Remove)
                    {
                        // Remove the child
                        currentStatusAdaptor.RemoveChild(status, cdiff.Id);
                    }
                    else
                    {
                        // Add the child at the correct position
                        currentStatusAdaptor.AddChild(status, cdiff.AddContent, cdiff.InsertAfter);
                    }
                }
            }
        }