Ejemplo n.º 1
0
        private static void WriteToDebug(InterimChangeSet <Itinerary> list)
        {
            try
            {
                var leg = list.All.First().OutboundLeg;
            }
            catch (Exception e)
            {
                throw new InvalidDataException("The interim result contains legs that are NULL - this should not happen", e);
            }

            Debug.WriteLine($"Interim results recieved ! {list.All.Count()} "
                            + $"total itineraries, {list.Additions.Count()} new "
                            + $"and {list.Updates.Count()} updates. IsLast? " + list.IsLastChangeSet);
        }
Ejemplo n.º 2
0
        public InterimChangeSet <TResponseEntity> Calculate(TResponse response)
        {
            var newTopLevelElements = response.TopLevelElements;

            InterimChangeSet <TResponseEntity> result;

            if (_lastResponse == null)
            {
                // In case the lastresponse == null, in other words, this
                // is the first time Handle is called - the full response is returned
                result = new InterimChangeSet <TResponseEntity>(newTopLevelElements, null, null, response.Succeeded);
                Debug.WriteLine($"Diff called for first time - with {newTopLevelElements.Count} top level elements");
            }
            else
            {
                var previousTopLevelElements = _lastResponse.TopLevelElements;

                var unchanged = newTopLevelElements
                                .Select(element => new InterimPair <TResponseEntity>
                {
                    New      = element,
                    Original = previousTopLevelElements.FirstOrDefault(element.DeepEquals)
                })
                                .Where(pair => pair.Original != null)
                                .ToList();

                var unchangedNewItems = unchanged.Select(element => element.New).ToList();

                var additions = newTopLevelElements
                                .Except(unchangedNewItems)
                                .Where(element => !previousTopLevelElements
                                       .Contains(element, new ShallowEqualityComparer <TResponseEntity>()))
                                .ToList();

                var updates = newTopLevelElements
                              .Except(unchangedNewItems)
                              .Except(additions)
                              .Select(element => new InterimPair <TResponseEntity>
                {
                    New      = element,
                    Original = previousTopLevelElements.FirstOrDefault(element.ShallowEquals)
                })
                              .Where(pair => pair.Original != null)
                              .ToList();

                Debug.WriteLine(
                    $"Diff found {additions.Count} new and {updates.Count} updated top level elements - "
                    + $"now at {newTopLevelElements.Count} top level elements");

                var mergedTopLevelElements = newTopLevelElements
                                             .Except(unchangedNewItems)
                                             .ToList();

                mergedTopLevelElements.AddRange(unchanged.Select(element => element.Original));

                result = new InterimChangeSet <TResponseEntity>(mergedTopLevelElements, additions, updates, response.Succeeded);
            }

            _lastResponse = response;
            return(result);
        }
Ejemplo n.º 3
0
 private static void WriteToDebug(InterimChangeSet<Itinerary> list)
 {
     try
     {
         var leg = list.All.First().OutboundLeg;                                
     }
     catch(Exception e)
     {
         throw new InvalidDataException("The interim result contains legs that are NULL - this should not happen");
     }
     
     Debug.WriteLine($"Interim results recieved ! {list.All.Count()} "
                                + $"total itineraries, {list.Additions.Count()} new "
                                + $"and {list.Updates.Count()} updates. IsLast? " + list.IsLastChangeSet);
 }