/// <summary> /// Initializes a new instance of the <see cref="QualityErrorRepositoryBase"/> class. /// </summary> /// <param name="verificationContext">The model context.</param> /// <param name="testsByQualityCondition">The dictionary of tests by quality condition. /// It can be empty in case the <see cref="AddError"/> method is never used and the /// <see cref="VerifiedQualityConditions"/> property is set.</param> /// <param name="datasetResolver">The dataset resolver.</param> /// <param name="qualityConditionRepository">The quality condition repository.</param> protected QualityErrorRepositoryBase( [NotNull] IVerificationContext verificationContext, [NotNull] Dictionary <QualityCondition, IList <ITest> > testsByQualityCondition, [NotNull] IQualityConditionObjectDatasetResolver datasetResolver, [NotNull] IQualityConditionRepository qualityConditionRepository) { Assert.ArgumentNotNull(verificationContext, nameof(verificationContext)); Assert.ArgumentNotNull(testsByQualityCondition, nameof(testsByQualityCondition)); Assert.ArgumentNotNull(datasetResolver, nameof(datasetResolver)); Assert.ArgumentNotNull(qualityConditionRepository, nameof(qualityConditionRepository)); _verificationContext = verificationContext; _testsByQualityCondition = testsByQualityCondition; IssueDatasets = new QualityErrorRepositoryDatasets(_verificationContext); VerifiedQualityConditions = testsByQualityCondition.Keys; _userName = EnvironmentUtils.UserDisplayName; _datasetResolver = datasetResolver; _qualityConditionRepository = qualityConditionRepository; int gdbMajorRelease = ((IGeodatabaseRelease) verificationContext.PrimaryWorkspaceContext.Workspace).MajorVersion + 7; _isPre10Geodatabase = gdbMajorRelease < 10; }
public BackgroundVerificationResult( [CanBeNull] IClientIssueMessageCollector resultIssueCollector, [NotNull] IDomainTransactionManager domainTransactions, [NotNull] IQualityVerificationRepository qualityVerificationRepository, [NotNull] IQualityConditionRepository qualityConditionRepository) { _resultIssueCollector = resultIssueCollector; _domainTransactions = domainTransactions; _qualityVerificationRepository = qualityVerificationRepository; _qualityConditionRepository = qualityConditionRepository; }
public static IEnumerable <IRow> GetInvolvedRows( [NotNull] IErrorObject errorObject, [NotNull] IModelContext modelContext, [NotNull] IQualityConditionRepository qualityConditionRepository) { Assert.ArgumentNotNull(errorObject, nameof(errorObject)); Assert.ArgumentNotNull(modelContext, nameof(modelContext)); var datasetResolver = new QualityConditionObjectDatasetResolver(modelContext); return(GetInvolvedRows(errorObject, modelContext, qualityConditionRepository, datasetResolver)); }
public BackgroundVerificationRun( [NotNull] VerificationRequest verificationRequest, [NotNull] IDomainTransactionManager domainTransactions, [NotNull] IQualityVerificationRepository qualityVerificationRepository, [NotNull] IQualityConditionRepository qualityConditionRepository, CancellationTokenSource cancellationTokenSource) { VerificationRequest = verificationRequest; _domainTransactions = domainTransactions; _qualityVerificationRepository = qualityVerificationRepository; _qualityConditionRepository = qualityConditionRepository; _cancellationTokenSource = cancellationTokenSource; Progress = new QualityVerificationProgressTracker { CancellationTokenSource = cancellationTokenSource }; }
public static IList <IFeature> GetInvolvedOrRelatedFeatures( [NotNull] IObject errorObject, [NotNull] IDatasetLookup datasetLookup, [NotNull] IModelContext modelContext, [NotNull] IQualityConditionRepository qualityConditionRepository) { Assert.ArgumentNotNull(errorObject, nameof(errorObject)); Assert.ArgumentNotNull(datasetLookup, nameof(datasetLookup)); Assert.ArgumentNotNull(modelContext, nameof(modelContext)); var list = new List <IFeature>(); IErrorDataset errorTable = GetErrorDataset(errorObject, datasetLookup); IErrorObject errorRow = CreateErrorObject(errorObject, errorTable, null); foreach ( IRow involvedRow in GetInvolvedRows(errorRow, modelContext, qualityConditionRepository)) { var feature = involvedRow as IFeature; if (feature != null) { list.Add(feature); } else { list.AddRange(GetDerivedTableGeometryFeatures((IObject)involvedRow, datasetLookup, modelContext)); } } return(list); }
private static IEnumerable <IRow> GetInvolvedRows( [NotNull] IErrorObject errorObject, [NotNull] IDatasetContext datasetContext, [NotNull] IQualityConditionRepository qualityConditionRepository, [NotNull] IQualityConditionObjectDatasetResolver datasetResolver) { IList <InvolvedRow> involved = RowParser.Parse(errorObject.RawInvolvedObjects); QualityCondition qualityCondition = GetQualityCondition(errorObject, qualityConditionRepository); if (qualityCondition == null) { yield break; } foreach (KeyValuePair <string, IList <int> > pair in GetInvolvedObjectIDsByTableName(involved)) { string tableName = pair.Key; IList <int> objectIDs = pair.Value; IObjectDataset dataset = datasetResolver.GetDatasetByInvolvedRowTableName(tableName, qualityCondition); if (dataset == null) { continue; } ITable table; try { table = datasetContext.OpenTable(dataset); } catch (Exception e) { _msg.WarnFormat("Error getting involved rows for table {0}: {1}", tableName, e.Message); continue; } if (table == null) { continue; } IEnumerable <IRow> rows = TryGetRows(table, objectIDs); if (rows == null) { // error already logged in TryGetRows() continue; } foreach (IRow row in rows) { if (GdbObjectUtils.IsDeleted(row)) { // don't return deleted rows continue; } yield return(row); } } }
private static IEnumerable <QualityCondition> GetActiveQualityConditions( [NotNull] IQualityConditionRepository repository, bool requireReferenceFromQualitySpecification) { Assert.ArgumentNotNull(repository, nameof(repository)); Stopwatch watch = _msg.DebugStartTiming("Getting active quality conditions"); var count = 0; IDictionary <int, int> referenceCounts; if (requireReferenceFromQualitySpecification) { _msg.DebugFormat( "Getting number of referencing quality specifications per quality condition"); referenceCounts = repository.GetReferencingQualitySpecificationCount(); } else { referenceCounts = null; } _msg.DebugFormat("Reading all quality conditions (with parameter values)"); const bool fetchParameterValues = true; foreach ( QualityCondition qualityCondition in repository.GetAll(fetchParameterValues)) { if (UsesDeletedDatasets(qualityCondition)) { _msg.DebugFormat("Quality condition {0} {1} references deleted datasets", qualityCondition.Name, qualityCondition.Id); // don't include the quality condition since it uses at least one deleted datasets continue; } if (requireReferenceFromQualitySpecification) { Assert.NotNull(referenceCounts, "referenceCounts"); int referenceCount; bool isReferenced = referenceCounts.TryGetValue(qualityCondition.Id, out referenceCount) && referenceCount > 0; if (!isReferenced) { _msg.DebugFormat( "Quality condition {0} {1} is not referenced by any quality specification", qualityCondition.Name, qualityCondition.Id); // don't include the quality condition since it is not referenced by any quality specification continue; } } // the quality condition is "active" count++; yield return(qualityCondition); } _msg.DebugStopTiming(watch, "Returned {0} active quality conditions", count); }