public static ObjectClassMsg ToObjectClassMsg([NotNull] ITable table, int classHandle, bool includeFields = false, string aliasName = null) { esriGeometryType geometryType = esriGeometryType.esriGeometryNull; ISpatialReference spatialRef = null; if (table is IFeatureClass fc) { geometryType = fc.ShapeType; spatialRef = DatasetUtils.GetSpatialReference(fc); } IWorkspace workspace = ((IDataset)table).Workspace; ObjectClassMsg result = new ObjectClassMsg() { Name = DatasetUtils.GetName(table), ClassHandle = classHandle, SpatialReference = ProtobufGeometryUtils.ToSpatialReferenceMsg( spatialRef, SpatialReferenceMsg.FormatOneofCase.SpatialReferenceEsriXml), GeometryType = (int)geometryType, WorkspaceHandle = workspace?.GetHashCode() ?? -1 }; CallbackUtils.DoWithNonNull(aliasName, s => result.Alias = s); if (includeFields) { List <FieldMsg> fieldMessages = new List <FieldMsg>(); for (int i = 0; i < table.Fields.FieldCount; i++) { IField field = table.Fields.Field[i]; fieldMessages.Add(ToFieldMsg(field)); } result.Fields.AddRange(fieldMessages); } return(result); }
private static IssueMsg CreateIssueProto( [NotNull] IssueFoundEventArgs args, [NotNull] IBackgroundVerificationInputs backgroundVerificationInputs) { QualityCondition qualityCondition = args.QualitySpecificationElement.QualityCondition; IssueMsg issueProto = new IssueMsg(); issueProto.ConditionId = qualityCondition.Id; issueProto.Allowable = args.IsAllowable; issueProto.StopCondition = args.Issue.StopCondition; CallbackUtils.DoWithNonNull( args.Issue.Description, s => issueProto.Description = s); IssueCode issueCode = args.Issue.IssueCode; if (issueCode != null) { CallbackUtils.DoWithNonNull( issueCode.ID, s => issueProto.IssueCodeId = s); CallbackUtils.DoWithNonNull( issueCode.Description, s => issueProto.IssueCodeDescription = s); } CallbackUtils.DoWithNonNull( args.Issue.AffectedComponent, (value) => issueProto.AffectedComponent = value); issueProto.InvolvedTables.AddRange(GetInvolvedTableMessages(args.Issue.InvolvedTables)); CallbackUtils.DoWithNonNull( args.LegacyInvolvedObjectsString, (value) => issueProto.LegacyInvolvedRows = value); IVerificationContext verificationContext = Assert.NotNull(backgroundVerificationInputs.VerificationContext); var supportedGeometryTypes = GetSupportedErrorRepoGeometryTypes(verificationContext).ToList(); // create valid Error geometry (geometry type, min dimensions) if possible IGeometry geometry = ErrorRepositoryUtils.GetGeometryToStore( args.ErrorGeometry, verificationContext.SpatialReferenceDescriptor.SpatialReference, supportedGeometryTypes); issueProto.IssueGeometry = ProtobufGeometryUtils.ToShapeMsg(geometry); // NOTE: Multipatches are not restored from byte arrays in EsriShape (10.6.1) ShapeMsg.FormatOneofCase format = geometry?.GeometryType == esriGeometryType.esriGeometryMultiPatch ? ShapeMsg.FormatOneofCase.Wkb : ShapeMsg.FormatOneofCase.EsriShape; issueProto.IssueGeometry = ProtobufGeometryUtils.ToShapeMsg(geometry, format); issueProto.CreationDateTimeTicks = DateTime.Now.Ticks; //issueProto.IsInvalidException = args.us; //if (args.IsAllowed) //{ // issueProto.ExceptedObjRef = new GdbObjRefMsg() // { // ClassHandle = args.AllowedErrorRef.ClassId, // ObjectId = args.AllowedErrorRef.ObjectId // }; //} return(issueProto); }
private static bool UpdateContainerProgress(VerificationProgressMsg currentProgress, VerificationProgressEventArgs e) { VerificationProgressStep newProgressStep = ToVerificationStep(e.ProgressStep); switch (newProgressStep) { case VerificationProgressStep.TileProcessing: // New tile: SetOverallStep(currentProgress, e); ResetDetailStep(currentProgress); currentProgress.CurrentBox = ProtobufGeometryUtils.ToEnvelopeMsg(e.CurrentBox); break; case VerificationProgressStep.DataLoading: //SetOverallStep(currentProgress, e); SetDetailStep(currentProgress, e); currentProgress.ProcessingStepMessage = "Loading data"; currentProgress.Message = ((IDataset)e.Tag).Name; break; case VerificationProgressStep.Testing: if (currentProgress.ProgressStep != (int)newProgressStep) { // First time ResetDetailStep(currentProgress); currentProgress.ProcessingStepMessage = "Testing rows"; } double relativeProgress = ((double)e.Current - currentProgress.DetailedProgressCurrentStep) / e.Total; if (relativeProgress > 0.05) { SetDetailStep(currentProgress, e); var testRow = e.Tag as TestRow; currentProgress.Message = testRow?.DataReference.DatasetName; } else { return(false); } break; case VerificationProgressStep.TileCompleting: SetDetailStep(currentProgress, e); currentProgress.ProcessingStepMessage = "Completing tile"; currentProgress.Message = ((QualityCondition)e.Tag).Name; break; } currentProgress.ProgressStep = (int)newProgressStep; string message = e.Tag as string; CallbackUtils.DoWithNonNull(message, s => currentProgress.Message = s); return(true); }
private static void PackVerification([CanBeNull] QualityVerification verification, [NotNull] VerificationResponse response) { if (verification == null) { return; } QualityVerificationMsg result = new QualityVerificationMsg(); result.SavedVerificationId = verification.Id; result.SpecificationId = verification.SpecificationId; CallbackUtils.DoWithNonNull( verification.SpecificationName, s => result.SpecificationName = s); CallbackUtils.DoWithNonNull( verification.SpecificationDescription, s => result.SpecificationDescription = s); CallbackUtils.DoWithNonNull(verification.Operator, s => result.UserName = s); result.StartTimeTicks = verification.StartDate.Ticks; result.EndTimeTicks = verification.EndDate.Ticks; result.Fulfilled = verification.Fulfilled; result.Cancelled = verification.Cancelled; result.ProcessorTimeSeconds = verification.ProcessorTimeSeconds; CallbackUtils.DoWithNonNull(verification.ContextType, (s) => result.ContextType = s); CallbackUtils.DoWithNonNull(verification.ContextName, (s) => result.ContextName = s); result.RowsWithStopConditions = verification.RowsWithStopConditions; foreach (var conditionVerification in verification.ConditionVerifications) { var conditionVerificationMsg = new QualityConditionVerificationMsg { QualityConditionId = Assert.NotNull(conditionVerification.QualityCondition).Id, StopConditionId = conditionVerification.StopCondition?.Id ?? -1, Fulfilled = conditionVerification.Fulfilled, ErrorCount = conditionVerification.ErrorCount, ExecuteTime = conditionVerification.ExecuteTime, RowExecuteTime = conditionVerification.RowExecuteTime, TileExecuteTime = conditionVerification.TileExecuteTime }; result.ConditionVerifications.Add(conditionVerificationMsg); } foreach (var verificationDataset in verification.VerificationDatasets) { var verificationDatasetMsg = new QualityVerificationDatasetMsg { DatasetId = verificationDataset.Dataset.Id, LoadTime = verificationDataset.LoadTime }; result.VerificationDatasets.Add(verificationDatasetMsg); } response.QualityVerification = result; }