private IEnumerable <Change> Find(ref BLModel.Alternate.Long.Airing airing) { var groupedAirings = GetAiringsToDiffOn(new[] { airing }); var changes = new List <BLModel.Alternate.Change.Change>(); foreach (var groupedAiring in groupedAirings) { try { if (AiringIsNew(groupedAiring)) { var builder = new ChangeBuilder(); changes.Add(builder.BuildNewChange(groupedAiring.First())); } else if (ComparingTwoAirings(groupedAiring)) { var currentAsset = groupedAiring.FirstOrDefault(); var originalAsset = groupedAiring.LastOrDefault(); changes.AddRange(Find(currentAsset, originalAsset)); } else if (ComparingThreeAirings(groupedAiring)) { var currentAsset = groupedAiring.FirstOrDefault(); var previousAsset = groupedAiring.Skip(1).FirstOrDefault(); var originalAsset = groupedAiring.LastOrDefault(); changes.AddRange(Find(currentAsset, previousAsset, originalAsset)); } else if (AiringIsBeingDeleted(groupedAiring.Key)) { var builder = new ChangeBuilder(); changes.Add(builder.BuildDeletion(groupedAiring.First())); } } catch (Exception ex) { var current = groupedAiring.FirstOrDefault(); if (null != current) { var toThrow = new Exception(String.Format("Exception occurred while detecting change for Airing Id '{0}'. ", current.AiringId), ex); throw toThrow; } throw ex; } } return(changes); }
private IEnumerable <FieldChange> Find(BLModel.Alternate.Long.Airing currentAsset, BLModel.Alternate.Long.Airing originalAiring) { var changeBuilder = new ChangeBuilder(); var currentJson = JsonConvert.SerializeObject(currentAsset); var originalJson = JsonConvert.SerializeObject(originalAiring); var currentAssetAsJson = JObject.Parse(currentJson); var originalAssetAsJson = JObject.Parse(originalJson); var differ = new JsonDiffer(); var results = differ.FindDifferences(currentAssetAsJson, originalAssetAsJson); foreach (var change in results) { changeBuilder.SetCommonValues(change, currentAsset, originalAiring); } return(results); }