protected int ReportError([NotNull] string description, [NotNull] ITable table, [CanBeNull] IssueCode issueCode, [CanBeNull] string affectedComponent, [CanBeNull] IEnumerable <object> values = null) { var involvedRows = new List <InvolvedRow> { CreateInvolvedRowForTable(table) }; const IGeometry geometry = null; var qaError = new QaError(this, description, involvedRows, geometry, issueCode, affectedComponent, values: values); var args = new QaErrorEventArgs(qaError); PostProcessError?.Invoke(this, args); if (args.Cancel) { return(0); } OnQaError(args); return(1); }
public bool IsDuplicate(QaError qaError) { if (!_process || _sortedQaErrors.ContainsKey(qaError)) { qaError.Duplicate = true; return(true); } return(false); }
/// <summary> /// Checks if two errors describe the same error /// </summary> /// <param name="error0"></param> /// <param name="error1"></param> /// <returns></returns> public int Compare([NotNull] QaError error0, [NotNull] QaError error1) { if (!(error0.Test == this && error1.Test == this)) { throw new InvalidOperationException( "Only errors created by this test can be compared"); } return(TestUtils.CompareQaErrors(error0, error1, compareIndividualInvolvedRows: true)); }
/// <summary> /// Add error to error list, if no identical exists /// </summary> /// <param name="qaError"></param> /// <param name="isKnonwnNotDuplicate"></param> /// <returns>true if added, otherwise false</returns> public bool Add([NotNull] QaError qaError, bool isKnonwnNotDuplicate = false) { if (!isKnonwnNotDuplicate) { if (IsDuplicate(qaError)) { return(false); } } _sortedQaErrors.Add(qaError, null); return(true); }
public static int CompareQaErrors([NotNull] QaError error0, [NotNull] QaError error1, bool compareIndividualInvolvedRows) { Assert.ArgumentNotNull(error0, nameof(error0)); Assert.ArgumentNotNull(error1, nameof(error1)); Assert.ArgumentCondition(error0.Test == error1.Test, "Only errors created by the same test can be compared"); // TODO: if the error has a derived geometry, then don't use the geometry for comparison. // (as it may be different depending on the current verification context (verified datasets) or // after irrelevant geometry changes to related features) // https://issuetracker02.eggits.net/browse/PSM-162 int involvedRowsCount = error0.InvolvedRows.Count; if (involvedRowsCount != error1.InvolvedRows.Count) { // different number of involved rows return(involvedRowsCount - error1.InvolvedRows.Count); } // check if geometry box is the same int envelopeDifference = error0.CompareEnvelope(error1); if (envelopeDifference != 0) { return(envelopeDifference); } // TODO compare error code / error attributes instead int descriptionDifference = Comparer <string> .Default.Compare( error0.Description, error1.Description); if (descriptionDifference != 0) { return(descriptionDifference); } if (involvedRowsCount > 0 && compareIndividualInvolvedRows) { // check if involved rows are equal var list0 = new List <InvolvedRow>(error0.InvolvedRows); var list1 = new List <InvolvedRow>(error1.InvolvedRows); // TODO reuse instance? var rowCompare = new InvolvedRowComparer(); list0.Sort(rowCompare); list1.Sort(rowCompare); for (var involvedRowIndex = 0; involvedRowIndex < involvedRowsCount; involvedRowIndex++) { int involvedRowDifference = rowCompare.Compare( list0[involvedRowIndex], list1[involvedRowIndex]); if (involvedRowDifference != 0) { return(involvedRowDifference); } } } // no difference detected return(0); }
public void Remove(QaError args) { _sortedQaErrors.Remove(args); }
public bool Exists(QaError args) { return(_sortedQaErrors.ContainsKey(args)); }
private void OnQaError([NotNull] QaErrorEventArgs args) { QaError?.Invoke(this, args); }
public int CompareEnvelope(QaError other) { return(_errorGeometry.CompareEnvelope(other._errorGeometry)); }
/// <summary> /// Initializes a new instance of the <see cref="QaErrorEventArgs"/> class. /// </summary> /// <param name="qaError">The error description.</param> public QaErrorEventArgs([NotNull] QaError qaError) { Assert.ArgumentNotNull(qaError, nameof(qaError)); QaError = qaError; }