/// <summary> /// Returns a string based on the nature of mismatches in finding /// </summary> /// <param name="finding">the assessed state of the Fact</param> /// <returns></returns> public string ResolveMismatchMessage(FactValidationFindings finding) { if (finding.linksListExceptions.Count == 1) { var linkText = finding.fact.GetTextFromHyperlink(finding.linksListExceptions.FirstOrDefault()); var factNr = finding.fact.ID + 1; return(string.Format(Language.Resources.MismatchMessage1, linkText, factNr.ToString()) + "\r\n"); } else if (finding.linksListExceptions.Count > 1) { var hyperLinkStrings = new List <string>(); foreach (var link in finding.linksListExceptions) { var linkText = finding.fact.GetTextFromHyperlink(link); hyperLinkStrings.Add(linkText); } var sb = new StringBuilder(); for (int i = 0; i < hyperLinkStrings.Count - 1; i++) { sb.AppendLine(i.ToString() + ", "); } return(string.Format(Language.Resources.MismatchMessage2, sb) + "\r\n"); } else { throw new ArgumentOutOfRangeException("linksListExceptions cannot be empty."); } }
/// <summary> /// Validates the data inside the fact and returns these findings. /// </summary> /// <returns></returns> public FactValidationFindings Validate() { var findings = new FactValidationFindings(this); var linksList = FindHyperlinks(FactDocument).ToList(); if (linksList.Count != linksList.Distinct().Count()) { var hash = new HashSet <Hyperlink>(); foreach (var link in linksList) { if (!hash.Add(link)) { findings.duplicates.Add(link); findings.areThereDuplicates = true; } } } else { if (linksList.Count == TotalFactMembers.Keys.Count) { IEnumerable <Hyperlink> matches = linksList.Intersect(TotalFactMembers.Keys); if (matches.Count() == linksList.Count()) { findings.allGreen = true; } else { findings.mismatch = true; findings.linksListExceptions = linksList.Except(TotalFactMembers.Keys).ToList(); findings.dictExceptions = TotalFactMembers.Keys.Except(linksList).ToList(); } } else { var greater = Math.Max(linksList.Count, TotalFactMembers.Keys.Count); if (greater == linksList.Count) { findings.linkListHasMore = true; findings.differenceCount = greater - TotalFactMembers.Keys.Count; findings.linksListExceptions = linksList.Except(TotalFactMembers.Keys).ToList(); } else if (greater == TotalFactMembers.Keys.Count) { findings.dictKeysHasMore = true; findings.differenceCount = greater - linksList.Count; findings.dictExceptions = TotalFactMembers.Keys.Except(linksList).ToList(); } } } return(findings); }
/// <summary> /// Returns a string based on the nature of duplications in finding /// </summary> /// <param name="finding">the assessed state of the Fact</param> /// <returns></returns> public string ResolveDuplicatesMessage(FactValidationFindings finding) { var hyperLinkStrings = new List <string>(); foreach (var duplicate in finding.duplicates) { var linkText = finding.fact.GetTextFromHyperlink(duplicate); hyperLinkStrings.Add(linkText); } var sb = new StringBuilder(); for (int i = 0; i < hyperLinkStrings.Count; i++) { sb.AppendLine(i.ToString() + ", "); } return(string.Format(Language.Resources.DuplicatesMessage, sb + "\r\n")); }