private IOrderedEnumerable<IGrouping<string, IGrouping<XElement, ContentPair>>> BuildRemoteOnlyViewModel(Recipe localRecipe, Recipe remoteRecipe) { var contentTypeComparer = new ContentTypeContentComparer(); var identifierComparer = new IdentifierContentComparer(); var layerNameComparer = new LayerNameComparer(); var comparison = new RecipeComparer().Compare(localRecipe, remoteRecipe, (left, right) => contentTypeComparer.IsMatch(left, right) && (identifierComparer.IsMatch(left, right) || layerNameComparer.IsMatch(left, right))); var localonly = comparison.Unmatched .Where(pair => pair.Left == null) .OrderBy(pair => pair.Right.DisplayLabel()) .OrderBy(pair => pair.Right.PartType()) .GroupBy(pair => pair.Right) .GroupBy(layer => layer.Key.LayerName()) .OrderBy(layer => layer.Key); return localonly; }
private IOrderedEnumerable<IGrouping<string, IGrouping<XElement, ContentPair>>> BuildMismatchesViewModel(Recipe localRecipe, Recipe remoteRecipe) { var contentTypeComparer = new ContentTypeContentComparer(); var identityComparer = new IdentifierContentComparer(); var layerComparer = new LayerNameComparer(); var mismatched = new RecipeComparer() .Compare(localRecipe, remoteRecipe, (left, right) => contentTypeComparer.IsMatch(left, right) /*&& layerComparer.IsMatch(left,right)*/ && (!localRecipe.RecipeSteps.SingleOrDefault(step=>step.Name=="Data").Step.Elements() .Any(element=>element.Attribute("Id").Value.Equals(right.Attribute("Id").Value, StringComparison.InvariantCulture)) || !remoteRecipe.RecipeSteps.SingleOrDefault(step=>step.Name=="Data").Step.Elements() .Any(element=>element.Attribute("Id").Value.Equals(left.Attribute("Id").Value, StringComparison.InvariantCulture))) && (_softComparers.Where(comparer => comparer.IsMatch(left, right)).Count() > 1)) .Matching // all items of same type and title, body or layer name match .Where(pair => !identityComparer.IsMatch(pair.Left, pair.Right)); // where the identifier is different var groupedMismatches = mismatched .GroupBy(pair => pair.Left) .GroupBy(set => set.Key.LayerName()) .OrderBy(layer => layer.Key); return groupedMismatches; }