public static IIssueRepository GetIssueRepository(
            [NotNull] string directoryFullPath,
            [NotNull] string gdbName,
            [CanBeNull] ISpatialReference spatialReference,
            IssueRepositoryType issueRepositoryType,
            double gridSize1        = 0d,
            double gridSize2        = 0d,
            double gridSize3        = 0d,
            bool addExceptionFields = false)
        {
            IFeatureWorkspace workspace =
                CreateDatabase(directoryFullPath, gdbName, issueRepositoryType);

            if (workspace == null)
            {
                return(null);
            }

            IIssueTableFieldManagement fields = GetFields(issueRepositoryType,
                                                          addExceptionFields);

            Assert.NotNull(fields, "No field definition for repository type {0}",
                           issueRepositoryType);

            var issueGdbCreator = new IssueGeodatabaseCreator(workspace,
                                                              fields,
                                                              spatialReference,
                                                              gridSize1,
                                                              gridSize2,
                                                              gridSize3);

            return(issueGdbCreator.GetIssueRepository());
        }
Exemple #2
0
        private static IIssueTableFields GetTargetFields(
            [NotNull] ICollection <IObjectClass> targetExceptionClasses,
            bool ensureRequiredFields = true)
        {
            IWorkspace workspace =
                Assert.NotNull(DatasetUtils.GetUniqueWorkspace(targetExceptionClasses));

            IIssueTableFieldManagement fields =
                IssueTableFieldsFactory.GetIssueTableFields(
                    addExceptionFields: true,
                    useDbfFieldNames: WorkspaceUtils.IsShapefileWorkspace(workspace),
                    addManagedExceptionFields: true);

            if (ensureRequiredFields)
            {
                using (_msg.IncrementIndentation("Ensuring required target fields"))
                {
                    int addedFields = EnsureTargetFields(targetExceptionClasses, fields);

                    if (addedFields == 0)
                    {
                        _msg.Info("All required fields exist in target datasets");
                    }
                }
            }

            return(fields);
        }
Exemple #3
0
 private static ITable CreateTable(
     [NotNull] string name,
     [NotNull] IFeatureWorkspace workspace,
     [NotNull] IIssueTableFieldManagement fields)
 {
     return(DatasetUtils.CreateTable(workspace, name, null,
                                     FieldUtils.CreateFields(
                                         CreateAttributeFields(fields))));
 }
Exemple #4
0
        public IssueGeodatabaseCreator([NotNull] IFeatureWorkspace featureWorkspace,
                                       [NotNull] IIssueTableFieldManagement fields,
                                       [CanBeNull] ISpatialReference spatialReference,
                                       double gridSize1 = 0d,
                                       double gridSize2 = 0d,
                                       double gridSize3 = 0d)
        {
            Assert.ArgumentNotNull(featureWorkspace, nameof(featureWorkspace));
            Assert.ArgumentNotNull(fields, nameof(fields));

            _featureWorkspace = featureWorkspace;
            _fields           = fields;

            _rowWriter = CreateRowWriter(IssueDatasetUtils.RowClassName, featureWorkspace,
                                         fields, LocalizableStrings.IssuesStandaloneTableName);

            if (spatialReference != null)
            {
                var spatialReferenceCopy =
                    (ISpatialReference)((IClone)spatialReference).Clone();
                if (!spatialReferenceCopy.HasZPrecision())
                {
                    SpatialReferenceUtils.SetZDomain(spatialReferenceCopy,
                                                     -10000, 100000,
                                                     0.0001, 0.001);
                }

                _featureWriters.Add(
                    CreateFeatureWriter(
                        IssueDatasetUtils.PolygonClassName, featureWorkspace, fields,
                        esriGeometryType.esriGeometryPolygon,
                        spatialReferenceCopy, gridSize1, gridSize2, gridSize3,
                        LocalizableStrings.RawIssuesLayerName_Polygon));

                _featureWriters.Add(
                    CreateFeatureWriter(
                        IssueDatasetUtils.PolylineClassName, featureWorkspace, fields,
                        esriGeometryType.esriGeometryPolyline,
                        spatialReferenceCopy, gridSize1, gridSize2, gridSize3,
                        LocalizableStrings.RawIssuesLayerName_Polyline));

                _featureWriters.Add(
                    CreateFeatureWriter(
                        IssueDatasetUtils.MultipointClassName, featureWorkspace, fields,
                        esriGeometryType.esriGeometryMultipoint,
                        spatialReferenceCopy, gridSize1, gridSize2, gridSize3,
                        LocalizableStrings.RawIssuesLayerName_Multipoint));

                _featureWriters.Add(
                    CreateFeatureWriter(
                        IssueDatasetUtils.MultiPatchClassName, featureWorkspace, fields,
                        esriGeometryType.esriGeometryMultiPatch,
                        spatialReferenceCopy, gridSize1, gridSize2, gridSize3,
                        LocalizableStrings.RawIssuesLayerName_MultiPatch));
            }
        }
Exemple #5
0
        private static IEnumerable <IField> CreateAttributeFields(
            [NotNull] IIssueTableFieldManagement fields)
        {
            yield return(FieldUtils.CreateOIDField());

            foreach (IField field in fields.CreateFields())
            {
                yield return(field);
            }
        }
Exemple #6
0
        private static IssueRowWriter CreateRowWriter(
            [NotNull] string className,
            [NotNull] IFeatureWorkspace featureWorkspace,
            [NotNull] IIssueTableFieldManagement fields,
            [CanBeNull] string aliasName = null)
        {
            ITable table = CreateTable(className, featureWorkspace, fields);

            if (StringUtils.IsNotEmpty(aliasName))
            {
                DatasetUtils.TrySetAliasName(table, aliasName);
            }

            var attributeWriter = new IssueAttributeWriter(table, fields);

            return(new IssueRowWriter((IObjectClass)table, attributeWriter));
        }
        public static ExceptionObjectRepository PrepareExceptionRepository(
            [NotNull] QualitySpecification qualitySpecification,
            [NotNull] IDatasetContext datasetContext,
            [NotNull] IQualityConditionObjectDatasetResolver datasetResolver,
            [CanBeNull] AreaOfInterest areaOfInterest,
            [CanBeNull] XmlVerificationOptions verificationOptions)
        {
            if (verificationOptions == null)
            {
                return(null);
            }

            IWorkspace workspace = VerificationOptionUtils.GetExceptionWorkspace(
                verificationOptions);

            if (workspace == null)
            {
                return(null);
            }

            bool useDbfFieldNames = WorkspaceUtils.IsShapefileWorkspace(workspace);

            IIssueTableFieldManagement issueTableFields =
                IssueTableFieldsFactory.GetIssueTableFields(true, useDbfFieldNames);

            var result = new ExceptionObjectRepository(workspace, issueTableFields,
                                                       datasetContext, datasetResolver,
                                                       areaOfInterest?.Geometry);

            List <QualityCondition> qualityConditions =
                qualitySpecification.Elements.Select(element => element.QualityCondition)
                .ToList();

            InvolvedObjectsMatchCriteria involvedObjectsMatchCriteria =
                VerificationOptionUtils.GetInvolvedObjectMatchCriteria(verificationOptions);

            result.ReadExceptions(qualityConditions,
                                  VerificationOptionUtils.GetDefaultShapeMatchCriterion(
                                      verificationOptions),
                                  VerificationOptionUtils.GetDefaultExceptionObjectStatus(
                                      verificationOptions),
                                  involvedObjectsMatchCriteria);
            return(result);
        }
Exemple #8
0
        private static IssueFeatureWriter CreateFeatureWriter(
            [NotNull] string className,
            [NotNull] IFeatureWorkspace featureWorkspace,
            [NotNull] IIssueTableFieldManagement fields,
            esriGeometryType geometryType,
            [NotNull] ISpatialReference spatialReference,
            double gridSize1, double gridSize2, double gridSize3,
            [NotNull] string aliasName)
        {
            IFeatureClass featureClass = CreateFeatureClass(className, featureWorkspace,
                                                            fields, geometryType,
                                                            spatialReference,
                                                            gridSize1, gridSize2, gridSize3);

            DatasetUtils.TrySetAliasName(featureClass, aliasName);

            var attributeWriter = new IssueAttributeWriter((ITable)featureClass, fields);

            return(new IssueFeatureWriter(featureClass, attributeWriter));
        }
Exemple #9
0
        private static int EnsureTargetFields(
            [NotNull] IEnumerable <IObjectClass> targetExceptionClasses,
            [NotNull] IIssueTableFieldManagement targetFields)
        {
            var addedFields = 0;

            var attributes = new[]
            {
                // fields specific to managed exceptions
                IssueAttribute.ManagedExceptionOrigin,
                IssueAttribute.ManagedExceptionLineageUuid,
                IssueAttribute.ManagedExceptionVersionBeginDate,
                IssueAttribute.ManagedExceptionVersionEndDate,
                IssueAttribute.ManagedExceptionVersionUuid,
                IssueAttribute.ManagedExceptionVersionOrigin,
                IssueAttribute.ManagedExceptionVersionImportStatus,

                // issue fields added after initial version
                IssueAttribute.IssueAssignment
            };

            foreach (IObjectClass targetObjectClass in targetExceptionClasses)
            {
                foreach (IssueAttribute attribute in attributes)
                {
                    if (targetFields.GetIndex(attribute, (ITable)targetObjectClass,
                                              optional: true) >= 0)
                    {
                        // field already exists
                        continue;
                    }

                    Add(targetObjectClass, targetFields.CreateField(attribute));
                    addedFields++;
                }
            }

            return(addedFields);
        }
Exemple #10
0
        private static IFeatureClass CreateFeatureClass(
            [NotNull] string name,
            [NotNull] IFeatureWorkspace workspace,
            [NotNull] IIssueTableFieldManagement fields,
            esriGeometryType geometryType,
            [NotNull] ISpatialReference spatialReference,
            double gridSize1, double gridSize2, double gridSize3)
        {
            const bool zAware = true;

            var list = new List <IField>
            {
                FieldUtils.CreateShapeField(
                    geometryType, spatialReference,
                    gridSize1, gridSize2, gridSize3,
                    zAware)
            };

            list.AddRange(CreateAttributeFields(fields));

            return(DatasetUtils.CreateSimpleFeatureClass(workspace, name,
                                                         FieldUtils.CreateFields(list)));
        }