Пример #1
0
        /// <summary>
        /// Reads the object types from the geodatabase.
        /// </summary>
        public static void HarvestObjectTypes([NotNull] ObjectDataset objectDataset)
        {
            IWorkspaceContext workspaceContext =
                ModelElementUtils.GetMasterDatabaseWorkspaceContext(objectDataset);

            Assert.NotNull(workspaceContext, "The master database is not accessible");

            IObjectClass objectClass = workspaceContext.OpenObjectClass(objectDataset);

            Assert.NotNull(objectClass, "Unable to open object class {0}", objectDataset.Name);

            HarvestObjectTypes(objectDataset, objectClass);
        }
Пример #2
0
        public static void HarvestAttributes(
            [NotNull] ObjectDataset objectDataset,
            [CanBeNull] IWorkspaceContext workspaceContext  = null,
            [CanBeNull] IAttributeConfigurator configurator = null)
        {
            if (workspaceContext == null)
            {
                workspaceContext =
                    ModelElementUtils.GetMasterDatabaseWorkspaceContext(objectDataset);
            }

            Assert.NotNull(workspaceContext, "The master database is not accessible");

            IObjectClass objectClass = workspaceContext.OpenObjectClass(objectDataset);

            Assert.NotNull(objectClass, "Unable to open object class {0}", objectDataset.Name);

            HarvestAttributes(objectDataset, configurator, objectClass);
        }
Пример #3
0
        public static IObjectClass OpenFromDefaultDatabase(
            [NotNull] IObjectDataset objectDataset)
        {
            Assert.ArgumentNotNull(objectDataset, nameof(objectDataset));

            IWorkspaceContext masterDbContext =
                ModelElementUtils.GetMasterDatabaseWorkspaceContext(objectDataset);

            Assert.NotNull(masterDbContext,
                           "The model master database for dataset {0} is not accessible",
                           objectDataset.Name);

            IObjectClass result = masterDbContext.OpenObjectClass(objectDataset);

            Assert.NotNull(result, "Object class {0} not found in master database",
                           objectDataset.Name);

            return(result);
        }
Пример #4
0
        public void CanTranslateSql()
        {
            IFeatureClass      fc;
            ITable             table;
            IRelationshipClass rc;

            CreateTestWorkspace(
                "CanTranslateSql_master", "fc", "table", "rc",
                out fc, out table, out rc);

            IFeatureClass      fc_child;
            ITable             table_child;
            IRelationshipClass rc_child;
            IFeatureWorkspace  childWorkspace = CreateTestWorkspace(
                "CanTranslateSql_child", "fc_child", "table_child", "rc_child",
                out fc_child, out table_child, out rc_child);

            IRow t = table_child.CreateRow();

            t.Value[table_child.FindField("TEXT")] = "table";             // same as table name
            int pk = t.OID;

            t.Store();

            IFeature f = fc_child.CreateFeature();

            f.Value[fc_child.FindField("FKEY")] = pk;
            f.Shape = GeometryFactory.CreatePoint(100, 200);
            f.Store();

            var model = new SimpleModel("model", fc);

            ModelVectorDataset vectorDataset = model.AddDataset(
                new ModelVectorDataset(DatasetUtils.GetName(fc)));
            ModelTableDataset tableDataset = model.AddDataset(
                new ModelTableDataset(DatasetUtils.GetName(table)));

            AttributeHarvestingUtils.HarvestAttributes(
                vectorDataset, ModelElementUtils.GetMasterDatabaseWorkspaceContext(vectorDataset));
            AttributeHarvestingUtils.HarvestAttributes(
                tableDataset, ModelElementUtils.GetMasterDatabaseWorkspaceContext(tableDataset));

            ObjectAttribute fkAttribute = vectorDataset.GetAttribute("FKEY");
            ObjectAttribute pkAttribute = tableDataset.GetAttribute(table.OIDFieldName);

            Assert.NotNull(fkAttribute);
            Assert.NotNull(pkAttribute);

            Association association =
                model.AddAssociation(new ForeignKeyAssociation(DatasetUtils.GetName(rc),
                                                               AssociationCardinality.OneToMany,
                                                               fkAttribute, pkAttribute));

            var childWorkspaceContext = new SimpleWorkspaceContext(
                model, childWorkspace,
                new[]
            {
                new WorkspaceDataset("fc_child", null, vectorDataset),
                new WorkspaceDataset("table_child", null, tableDataset),
            },
                new[]
            {
                new WorkspaceAssociation("rc_child", null, association)
            });

            var clsDesc = new ClassDescriptor(typeof(QaRelConstraint));
            var tstDesc = new TestDescriptor("RelConstraint", clsDesc);
            QualityCondition condition = new QualityCondition("fc_table_constraints", tstDesc);

            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", vectorDataset);
            QualityConditionParameterUtils.AddParameterValue(condition, "relationTables", tableDataset);
            QualityConditionParameterUtils.AddParameterValue(condition, "relation", "rc");
            QualityConditionParameterUtils.AddParameterValue(condition, "join", JoinType.InnerJoin);
            QualityConditionParameterUtils.AddParameterValue(condition, "constraint",
                                                             "(fc.OBJECTID = 1 AND table.OBJECTID = 1) AND (table.TEXT = 'table')");

            var factory = new QaRelConstraint {
                Condition = condition
            };
            ITest test = factory.CreateTests(new SimpleDatasetOpener(childWorkspaceContext))[0];

            var runner = new QaContainerTestRunner(1000, test);

            runner.Execute(GeometryFactory.CreateEnvelope(0, 0, 1000, 1000));

            AssertUtils.NoError(runner);
        }