ComparisonUnit.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // Copyright (c) Microsoft. All rights reserved.
  2. // Licensed under the MIT license. See LICENSE file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. namespace OpenXmlPowerTools
  8. {
  9. public abstract class ComparisonUnit
  10. {
  11. private int? _descendantContentAtomsCount;
  12. public CorrelationStatus CorrelationStatus { get; set; }
  13. public List<ComparisonUnit> Contents { get; protected set; }
  14. public string SHA1Hash { get; protected set; }
  15. public int DescendantContentAtomsCount
  16. {
  17. get
  18. {
  19. if (_descendantContentAtomsCount != null) return (int) _descendantContentAtomsCount;
  20. _descendantContentAtomsCount = DescendantContentAtoms().Count();
  21. return (int) _descendantContentAtomsCount;
  22. }
  23. }
  24. private IEnumerable<ComparisonUnit> Descendants()
  25. {
  26. var comparisonUnitList = new List<ComparisonUnit>();
  27. DescendantsInternal(this, comparisonUnitList);
  28. return comparisonUnitList;
  29. }
  30. public IEnumerable<ComparisonUnitAtom> DescendantContentAtoms()
  31. {
  32. return Descendants().OfType<ComparisonUnitAtom>();
  33. }
  34. private static void DescendantsInternal(
  35. ComparisonUnit comparisonUnit,
  36. List<ComparisonUnit> comparisonUnitList)
  37. {
  38. foreach (ComparisonUnit cu in comparisonUnit.Contents)
  39. {
  40. comparisonUnitList.Add(cu);
  41. if (cu.Contents != null && cu.Contents.Any())
  42. DescendantsInternal(cu, comparisonUnitList);
  43. }
  44. }
  45. public abstract string ToString(int indent);
  46. internal static string ComparisonUnitListToString(ComparisonUnit[] cul)
  47. {
  48. var sb = new StringBuilder();
  49. sb.Append("Dump Comparision Unit List To String" + Environment.NewLine);
  50. foreach (ComparisonUnit item in cul) sb.Append(item.ToString(2) + Environment.NewLine);
  51. return sb.ToString();
  52. }
  53. }
  54. }