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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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;
        }