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); }
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); }
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); }