public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem) { var oldValues = oldItem.QueryManyValues(field.XPath); var newValues = newItem.QueryManyValues(field.XPath); var diffResult = oldValues.Diff(newValues); var itemCount = diffResult.Added.Length + diffResult.Removed.Length; if (itemCount == 0) { return(null); } var children = new List <AddedOrRemovedItemBase>(); foreach (var added in diffResult.Added) { children.Add(new AddedItem(added, added)); } foreach (var removed in diffResult.Removed) { children.Add(new RemovedItem(removed, removed)); } if (children.Count == 1) { var collectionField = (SimpleCollectionDataField)field; children[0].ItemName.AddModifier(new TypeModifier(collectionField.ItemName)); return(children.ToArray()); } else { var collection = new Collection(name, false, oldItem); foreach (var added in diffResult.Added) { collection.Children.Add(new AddedItem(added, added)); } foreach (var removed in diffResult.Removed) { collection.Children.Add(new RemovedItem(removed, removed)); } return(new[] { collection }); } }
public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem) { var oldValue = oldItem.QueryValue(field.XPath); var newValue = newItem.QueryValue(field.XPath); var valueField = (ValueDataField)field; if (string.Equals(oldValue, newValue)) { return(null); } var oldValueString = this.FormatValue(oldValue, valueField); var newValueString = this.FormatValue(newValue, valueField); if (valueField.CompareStrategy == CompareStrategy.NotComparable) { return(new[] { new ChangedItem(field.Name, ChangeVerb.Changed, oldValueString, newValueString, oldValue) }); } else { double oldDoubleValue, newDoubleValue; if (!double.TryParse(oldValue, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out oldDoubleValue) || !double.TryParse(newValue, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out newDoubleValue)) { this.LogError("uncomparable field detected: field.Name = '{0}', oldValue = '{1}', newValue = '{2}'", field.Name, oldValue, newValue); return(new[] { new ChangedItem(field.Name, ChangeVerb.Changed, oldValueString, newValueString, oldValue) }); } ChangeVerb verb; if (oldDoubleValue > newDoubleValue) { if (valueField.CompareStrategy == CompareStrategy.Plain) { verb = ChangeVerb.Decreased; } else if (valueField.CompareStrategy == CompareStrategy.HigherBetter) { verb = ChangeVerb.Nerfed; } else { verb = ChangeVerb.Buffed; } } else { if (valueField.CompareStrategy == CompareStrategy.Plain) { verb = ChangeVerb.Increased; } else if (valueField.CompareStrategy == CompareStrategy.HigherBetter) { verb = ChangeVerb.Buffed; } else { verb = ChangeVerb.Nerfed; } } return(new[] { new ChangedItem(field.Name, verb, oldValueString, newValueString, oldValue) }); } }
public abstract PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem);
public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem) { var oldItems = oldItem.QueryMany(field.XPath); var newItems = newItem.QueryMany(field.XPath); var diffResult = oldItems.Diff(newItems, KeyEqualityComparer <IXQueryable> .Instance); var children = new List <PatchnoteReportItem>(); foreach (var addedItem in diffResult.Added) { children.Add(new AddedItem(addedItem["userString"], addedItem)); } foreach (var removedItem in diffResult.Removed) { children.Add(new RemovedItem(removedItem["userString"], removedItem)); } var isSingleParent = oldItems.Count() == 1; foreach (var sharedItem in diffResult.Shared) { var reportItem = TankDataItemHandler.Instance.CreateReportItem(sharedItem.Source["userString"], sharedItem.Source, sharedItem.Target, true, isSingleParent); children.AddIfNotNull(reportItem); } if (children.Count == 0) { return(null); } var collectionField = (ComplexCollectionDataField)field; foreach (var singleItemChild in children.OfType <DataItem>()) { if (singleItemChild.ItemName.Modifiers.LastOrDefault() as TypeModifier == null) { this.AddTypeModifier(singleItemChild.ItemName, collectionField.ItemName, isSingleParent); } } if (children.Count == 1) { var changedChild = children[0] as ChangedItem; if (changedChild != null) { return new[] { changedChild } } ; var addedOrRemovedChild = children[0] as AddedOrRemovedItemBase; if (addedOrRemovedChild != null) { return new[] { addedOrRemovedChild } } ; var collectionChild = children[0] as Collection; if (collectionField.OmitSingleHeader && collectionChild.Children.All(c => c is Collection)) { return(collectionChild.Children.ToArray()); } } return(children.ToArray()); }