public AllowedError CreateAllowedError( [NotNull] IssueDatasetWriter issueWriter, [NotNull] IRow errorRow) { Assert.ArgumentNotNull(issueWriter, nameof(issueWriter)); Assert.ArgumentNotNull(errorRow, nameof(errorRow)); int?qualityConditionId = issueWriter.Get <int>( errorRow, AttributeRole.ErrorConditionId); if (qualityConditionId == null) { _msg.WarnFormat( "Error object <oid> {0} in {1} has no quality condition id", errorRow.OID, issueWriter.DatasetName); return(null); } QualityCondition qualityCondition; if (!_qualityConditionsById.TryGetValue((int)qualityConditionId, out qualityCondition)) { return(null); } IGeometry geometry = null; var errorFeature = errorRow as IFeature; if (errorFeature != null) { geometry = errorFeature.Shape.Envelope; geometry.SnapToSpatialReference(); } string involvedObjectsString = issueWriter.GetString( errorRow, AttributeRole.ErrorObjects); IList <InvolvedRow> involvedRows = RowParser.Parse(involvedObjectsString); string description = issueWriter.GetString(errorRow, AttributeRole.ErrorDescription); // explicit storage of ConditionVersion for later comparison (context change determination) // because condition.Version is read-only (VersionedEntity) int?conditionVersion = null; if (issueWriter.HasAttribute(AttributeRole.ErrorQualityConditionVersion)) { conditionVersion = issueWriter.Get <int>(errorRow, AttributeRole.ErrorQualityConditionVersion); } // Date of creation attribute is expected DateTime?dateOfCreation = issueWriter.Get <DateTime>( errorRow, AttributeRole.DateOfCreation); if (dateOfCreation == null) { _msg.WarnFormat( "Date of creation field is null for allowed error row <oid> {0} in {1}. It will be disregarded.", errorRow.OID, issueWriter.DatasetName); return(null); } return(new AllowedError(qualityCondition, conditionVersion, geometry, description, involvedRows, issueWriter.Table, errorRow.OID, (DateTime)dateOfCreation, _datasetResolver)); }
public static IEnumerable <AllowedError> GetAllowedErrors( [NotNull] IssueDatasetWriter issueWriter, [CanBeNull] IGeometry areaOfInterest, [NotNull] ISpatialFilter spatialFilter, [NotNull] AllowedErrorFactory allowedErrorFactory) { Assert.ArgumentNotNull(issueWriter, nameof(issueWriter)); Assert.ArgumentNotNull(spatialFilter, nameof(spatialFilter)); Assert.ArgumentNotNull(allowedErrorFactory, nameof(allowedErrorFactory)); Stopwatch watch = _msg.DebugStartTiming(); ITable errorTable = issueWriter.Table; IQueryFilter filter; var errorFeatureClass = errorTable as IFeatureClass; if (errorFeatureClass != null) { if (areaOfInterest != null) { spatialFilter.Geometry = areaOfInterest; spatialFilter.GeometryField = errorFeatureClass.ShapeFieldName; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; } filter = spatialFilter; } else { filter = new QueryFilterClass { WhereClause = spatialFilter.WhereClause, SubFields = spatialFilter.SubFields }; } var addedAllowedErrorsCount = 0; var readRowCount = 0; const bool recycling = true; foreach (IRow row in GdbQueryUtils.GetRows(errorTable, filter, recycling)) { readRowCount++; AllowedError allowedError = allowedErrorFactory.CreateAllowedError(issueWriter, row); if (allowedError == null) { continue; } addedAllowedErrorsCount++; yield return(allowedError); } _msg.DebugStopTiming(watch, "Collected {0} allowed error(s) based on {1} row(s) read from {2}", addedAllowedErrorsCount, readRowCount, issueWriter.DatasetName); }