internal void UpdateFromItem(DataItem item, HashSet <DataItem> removedItems) { var items = new List <DataNode> (); foreach (var d in item.ItemData) { var current = ItemData[d.Name]; if (current != null) { if (d.IsDefaultValue || d is DataDeletedNode) { if (current is DataItem) { removedItems.Add((DataItem)current); } ItemData.Remove(current); } else if (current.GetType() != d.GetType() || current is DataValue) { var i = ItemData.IndexOf(current); ItemData [i] = d; if (current is DataItem) { removedItems.Add((DataItem)current); } } else if (current is DataItem) { ((DataItem)current).UpdateFromItem((DataItem)d, removedItems); } ItemData.Remove(current); items.Add(current); } else if (!d.IsDefaultValue && !(d is DataDeletedNode)) { var dataItem = d as DataItem; if (dataItem != null) { var newDataItem = new DataItem() { Name = d.Name, UniqueNames = dataItem.UniqueNames }; newDataItem.UpdateFromItem(dataItem, removedItems); items.Add(newDataItem); } else { items.Add(d); } } } foreach (var val in items) { this.ItemData.Add(val); } }
internal void UpdateFromItem(DataItem item, HashSet <DataItem> removedItems) { var counter = new Dictionary <string, int> (); foreach (var d in item.ItemData) { DataNode current = null; DataCollection col; if (!counter.ContainsKey(d.Name)) { counter [d.Name] = 0; } var index = ItemData.FindData(d.Name, out col, false, counter[d.Name]); counter [d.Name]++; if (index != -1) { current = col [index]; } if (current != null) { if (d.IsDefaultValue || d is DataDeletedNode) { if (current is DataItem) { removedItems.Add((DataItem)current); } ItemData.Remove(current); } else if (current.GetType() != d.GetType() || current is DataValue) { var i = ItemData.IndexOf(current); ItemData [i] = d; if (current is DataItem) { removedItems.Add((DataItem)current); } } else if (current is DataItem) { ((DataItem)current).UpdateFromItem((DataItem)d, removedItems); } } else if (!d.IsDefaultValue && !(d is DataDeletedNode)) { var dataItem = d as DataItem; if (dataItem != null) { var newDataItem = new DataItem() { Name = d.Name, UniqueNames = dataItem.UniqueNames }; newDataItem.UpdateFromItem(dataItem, removedItems); ItemData.Add(newDataItem); } else { ItemData.Add(d); } } } }
internal void UpdateFromItem (DataItem item, HashSet<DataItem> removedItems) { var counter = new Dictionary<string, int> (); foreach (var d in item.ItemData) { DataNode current = null; DataCollection col; if (!counter.ContainsKey (d.Name)) counter [d.Name] = 0; var index = ItemData.FindData (d.Name, out col, false, counter[d.Name]); counter [d.Name]++; if (index != -1) { current = col [index]; } if (current != null) { if (d.IsDefaultValue || d is DataDeletedNode) { if (current is DataItem) removedItems.Add ((DataItem)current); ItemData.Remove (current); } else if (current.GetType () != d.GetType () || current is DataValue) { var i = ItemData.IndexOf (current); ItemData [i] = d; if (current is DataItem) removedItems.Add ((DataItem)current); } else if (current is DataItem) { ((DataItem)current).UpdateFromItem ((DataItem)d, removedItems); } } else if (!d.IsDefaultValue && !(d is DataDeletedNode)) { var dataItem = d as DataItem; if (dataItem != null) { var newDataItem = new DataItem () { Name = d.Name, UniqueNames = dataItem.UniqueNames }; newDataItem.UpdateFromItem (dataItem, removedItems); ItemData.Add (newDataItem); } else { ItemData.Add (d); } } } }