示例#1
0
 protected VectorObject([NotNull] IFeature feature,
                        [NotNull] VectorDataset dataset,
                        [CanBeNull] IFieldIndexCache fieldIndexCache)
     : base(feature, dataset, fieldIndexCache)
 {
     Feature = feature;
 }
示例#2
0
        public ProcessDatasetName([NotNull] VectorDataset vectorDataset,
                                  [CanBeNull] string whereClause,
                                  [CanBeNull] string representationClassName = null)
        {
            Assert.ArgumentNotNull(vectorDataset, nameof(vectorDataset));

            VectorDataset           = vectorDataset;
            WhereClause             = whereClause ?? string.Empty;
            RepresentationClassName = representationClassName;
        }
        public void CanGetByName()
        {
            const string dsName1 = "ds1";
            const string dsName2 = "ds2";
            DdxModel     m       = CreateModel();

            VectorDataset ds1 = m.AddDataset(CreateVectorDataset(dsName1));
            VectorDataset ds2 = m.AddDataset(CreateVectorDataset(dsName2));

            var             uuidType = new ObjectAttributeType("uuid", AttributeRole.UUID);
            ObjectAttribute pk1      =
                ds1.AddAttribute(new ObjectAttribute("pk1", FieldType.Text, uuidType));
            ObjectAttribute pk2 =
                ds2.AddAttribute(new ObjectAttribute("pk2", FieldType.Text, uuidType));

            const string asoName = "aso1";

            const string fk1Name = "fk1";
            const string fk2Name = "fk2";

            m.AddAssociation(
                new AttributedAssociation(
                    asoName, AssociationCardinality.ManyToMany,
                    fk1Name,
                    FieldType.Text, pk1,
                    fk2Name,
                    FieldType.Text, pk2));

            CreateSchema(uuidType, m);

            UnitOfWork.NewTransaction(
                delegate
            {
                AssertUnitOfWorkHasNoChanges();

                IList <Association> list = Repository.Get(asoName);
                Assert.AreEqual(1, list.Count);
                Association result = list[0] as AttributedAssociation;

                Assert.IsNotNull(result);
                Assert.AreEqual(asoName, result.Name);
                Assert.AreEqual(fk1Name, result.End1.ForeignKey.Name);
                Assert.AreEqual(fk2Name, result.End2.ForeignKey.Name);
                Assert.AreEqual(dsName1, result.End1.ObjectDataset.Name);
                Assert.AreEqual(dsName2, result.End2.ObjectDataset.Name);
            });
        }
示例#4
0
        public static Matrix Convert([NotNull] QualityCondition qualityCondition)
        {
            Assert.ArgumentNotNull(qualityCondition, nameof(qualityCondition));

            IList <TestParameterValue> featureClassParameters =
                qualityCondition.GetParameterValues(QaTopoNotNearPolyFactory.FeatureClassParamName);

            Assert.AreEqual(1, featureClassParameters.Count,
                            $"found {featureClassParameters.Count} featureClass, expected 1");

            IList <TestParameterValue> referenceParameters =
                qualityCondition.GetParameterValues(QaTopoNotNearPolyFactory.ReferenceParamName);

            Assert.AreEqual(1, referenceParameters.Count,
                            $"found {referenceParameters.Count} near, expected 1");

            VectorDataset featureClassDataset = GetVectorDataset(featureClassParameters[0]);
            VectorDataset referenceDataset    = GetVectorDataset(referenceParameters[0]);

            IList <TestParameterValue> referenceSubtypesParameters =
                qualityCondition.GetParameterValues(
                    QaTopoNotNearPolyFactory.ReferenceSubtypesParamName);
            IList <int> referenceSubtypes =
                referenceSubtypesParameters.Select(x => int.Parse(x.StringValue)).ToList();

            IList <TestParameterValue> featuresubtypeRulesParameters =
                qualityCondition.GetParameterValues(
                    QaTopoNotNearPolyFactory.FeaturesubtypeRulesParamName);
            IList <string> featuresubtypeRules =
                featuresubtypeRulesParameters.Select(x => x.StringValue).ToList();

            Matrix matrix = InitMatrix(
                featureClassDataset,
                ((DatasetTestParameterValue)featureClassParameters[0]).FilterExpression,
                referenceDataset,
                ((DatasetTestParameterValue)referenceParameters[0]).FilterExpression,
                referenceSubtypes, featuresubtypeRules);

            return(matrix);
        }
示例#5
0
        public QualityCondition Convert([NotNull] Matrix matrix,
                                        [NotNull] IList <Dataset> datasets)
        {
            Assert.ArgumentNotNull(matrix, nameof(matrix));
            Assert.ArgumentNotNull(datasets, nameof(datasets));

            var classDescriptor = new ClassDescriptor(typeof(QaTopoNotNearPolyFactory));

            var testDescriptor = new TestDescriptor(
                _importedTestDescriptor, classDescriptor);

            var qualityCondition = new QualityCondition(
                _importedQualityCondition, testDescriptor);

            Dictionary <string, TestParameter> parDict = QaTopoNotNearPolyFactory
                                                         .CreateParameterList()
                                                         .ToDictionary(x => x.Name);

            VectorDataset featureClassDs = GetDataset(matrix.FeatureClassName, datasets);

            qualityCondition.AddParameterValue(new DatasetTestParameterValue(
                                                   parDict[
                                                       QaTopoNotNearPolyFactory
                                                       .FeatureClassParamName], featureClassDs)
            {
                FilterExpression = matrix.FeatureClassFilter
            });
            VectorDataset referenceDs = GetDataset(matrix.ReferenceName, datasets);

            qualityCondition.AddParameterValue(new DatasetTestParameterValue(
                                                   parDict[
                                                       QaTopoNotNearPolyFactory.ReferenceParamName],
                                                   referenceDs)
            {
                FilterExpression = matrix.ReferenceFilter
            });

            {
                GetSubtypes(featureClassDs, out string field, out IList <Subtype> subtypes);
                Assert.NotNull(field);
                Assert.NotNull(subtypes);

                foreach (FeatureTypeProps featureTypeProps in matrix.FeatureClassTypes)
                {
                    string  subtypeName = featureTypeProps.SubType.SubtypeName.Trim();
                    Subtype subtype     = subtypes.First(x => x.Name.Equals(subtypeName));

                    StringBuilder rulesBuilder = new StringBuilder();
                    rulesBuilder.Append($"{subtype.Code};");
                    rulesBuilder.Append($"{featureTypeProps.DefaultDistance};");
                    rulesBuilder.Append($"{featureTypeProps.RightSideDistance};");
                    foreach (int canOverlap in featureTypeProps.CanOverlap)
                    {
                        rulesBuilder.Append($"{canOverlap};");
                    }

                    qualityCondition.AddParameterValue(new ScalarTestParameterValue(
                                                           parDict[
                                                               QaTopoNotNearPolyFactory
                                                               .FeaturesubtypeRulesParamName],
                                                           rulesBuilder.ToString()));
                }
            }
            {
                GetSubtypes(referenceDs, out string field, out IList <Subtype> subtypes);
                Assert.NotNull(field);
                Assert.NotNull(subtypes);

                foreach (ConnectionType refType in matrix.ReferenceTypes)
                {
                    string  subtypeName = refType.SubtypeName.Trim();
                    Subtype subtype     = subtypes.First(x => x.Name.Equals(subtypeName));
                    qualityCondition.AddParameterValue(new ScalarTestParameterValue(
                                                           parDict[
                                                               QaTopoNotNearPolyFactory
                                                               .ReferenceSubtypesParamName],
                                                           subtype.Code));
                }
            }

            return(qualityCondition);
        }
示例#6
0
        private static Matrix InitMatrix(
            [NotNull] VectorDataset featureClassDataset,
            [CanBeNull] string featureClassFilter,
            [NotNull] VectorDataset referenceDataset,
            [CanBeNull] string referenceFilter,
            [NotNull] IList <int> referenceSubtypes,
            [NotNull] IList <string> featuresubtypeRules)
        {
            List <ConnectionType> refSubtypes = new List <ConnectionType>();
            {
                GetSubtypes(referenceDataset, out string field, out IList <Subtype> refTypes);
                Assert.NotNull(refTypes);

                string reference = referenceDataset.Name;
                foreach (int referenceSubtype in referenceSubtypes)
                {
                    string subtype = refTypes.First(x => x.Code == referenceSubtype).Name;
                    refSubtypes.Add(
                        new ConnectionType(reference, field, subtype, referenceSubtype)
                    {
                        FeatureClassFilter = referenceFilter
                    });
                }

                if (refSubtypes.Count == 0)
                {
                    foreach (Subtype refType in refTypes)
                    {
                        refSubtypes.Add(
                            new ConnectionType(reference, field, refType.Name, refType.Code)
                        {
                            FeatureClassFilter = referenceFilter
                        });
                    }
                }
            }

            List <FeatureTypeProps> featureClassSubtypes = new List <FeatureTypeProps>();

            {
                GetSubtypes(featureClassDataset, out string field, out IList <Subtype> fcTypes);
                Assert.NotNull(fcTypes);

                string featureclass = featureClassDataset.Name;
                foreach (string rule in featuresubtypeRules)
                {
                    IList <string> ruleParts   = rule.Split(';');
                    int            fcSubtype   = int.Parse(ruleParts[0]);
                    string         subtype     = fcTypes.First(x => x.Code == fcSubtype).Name;
                    List <int>     canOverlaps = new List <int>();
                    foreach (int overlapIndex in EnumOverlapIndices(
                                 ruleParts, rule, referenceSubtypes))
                    {
                        if (!int.TryParse(ruleParts[overlapIndex], out int canOverlap))
                        {
                            throw new InvalidOperationException(
                                      $"Invalid overlap index '{ruleParts[overlapIndex]}' in featureSubtypeRule '{rule}'");
                        }

                        canOverlaps.Add(canOverlap);
                    }

                    ConnectionType conn =
                        new ConnectionType(featureclass, field, subtype, fcSubtype)
                    {
                        FeatureClassFilter = featureClassFilter
                    };
                    FeatureTypeProps props =
                        new FeatureTypeProps
                    {
                        SubType         = conn,
                        DefaultDistance = double.Parse(ruleParts[1]),
                        CanOverlap      = canOverlaps
                    };
                    if (!string.IsNullOrWhiteSpace(ruleParts[2]))
                    {
                        props.RightSideDistance = double.Parse(ruleParts[2]);
                    }

                    featureClassSubtypes.Add(props);
                }

                if (featuresubtypeRules.Count == 0)
                {
                    foreach (Subtype fcType in fcTypes)
                    {
                        ConnectionType conn =
                            new ConnectionType(featureclass, field, fcType.Name, fcType.Code)
                        {
                            FeatureClassFilter = featureClassFilter
                        };
                        featureClassSubtypes.Add(new FeatureTypeProps
                        {
                            SubType    = conn, DefaultDistance = 1,
                            CanOverlap =
                                new List <int>(new int[refSubtypes.Count])
                        });
                    }
                }
            }
            return(new Matrix(featureClassSubtypes, refSubtypes));
        }