Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }