This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/sis.git
commit 9a6f339273ceaf48ae1c6431e7c1eaa4b9219fd2 Merge: 01f8dc22a9 a1f4b15161 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Fri Sep 29 17:29:50 2023 +0200 Merge branch 'geoapi-3.1' .../sis/buildtools/coding/ReorganizeImports.java | 105 ++++++++++++- .../apache/sis/buildtools/gradle/Assembler.java | 2 +- .../apache/sis/buildtools/gradle/Conventions.java | 17 ++- .../apache/sis/buildtools/gradle/JavaMaker.java | 3 +- .../sis/buildtools/gradle/ModularCompilation.java | 26 +--- .../apache/sis/buildtools/gradle/ModularJAR.java | 4 +- .../org/apache/sis/buildtools/gradle/UnoPkg.java | 4 +- endorsed/build.gradle.kts | 8 +- .../main/org/apache/sis/feature/README.md | 77 ++++++++++ .../main/org/apache/sis/feature/benchmarks.html | 114 -------------- .../test}/FeatureComparator.java | 2 +- .../feature => feature/test}/package-info.java | 2 +- .../main/org/apache/sis/xml/README.md | 78 ++++++++++ .../sis/xml/bind/gco/ObjectIdentification.html | 59 -------- .../sis/xml/bind/gco/ObjectIdentification.md | 31 ++++ .../main/org/apache/sis/xml/readme.html | 98 ------------ .../test/org/apache/sis/metadata/Assertions.java | 2 +- .../sis/metadata/PropertyConsistencyCheck.java | 2 +- .../sis/metadata/internal/AxisDirectionsTest.md | 3 + .../sis/metadata/internal/AxisDirectionsTest.txt | 3 - .../sis/metadata/iso/CustomMetadataTest.java | 2 +- .../sis/metadata/iso/DefaultIdentifierTest.java | 2 +- .../sis/metadata/iso/DefaultMetadataTest.java | 2 +- .../metadata/iso/citation/DefaultContactTest.java | 2 +- .../iso/citation/DefaultResponsibilityTest.java | 2 +- .../constraint/DefaultLegalConstraintsTest.java | 2 +- .../sis/metadata/iso/content/DefaultBandTest.java | 2 +- .../identification/DefaultBrowseGraphicTest.java | 2 +- .../DefaultRepresentativeFractionTest.java | 2 +- .../iso/identification/DefaultResolutionTest.java | 2 +- .../metadata/iso/lineage/DefaultLineageTest.java | 2 +- .../sis/metadata/iso/quality/ScopeCodeTest.java | 2 +- .../sis/metadata/sql/IdentifierGeneratorTest.java | 2 +- .../sis/metadata/sql/MetadataFallbackVerifier.java | 1 - .../sis/metadata/sql/MetadataSourceTest.java | 1 - .../sis/metadata/sql/MetadataWriterTest.java | 1 - .../sis/{test => metadata}/sql/TestDatabase.java | 2 +- .../sis/metadata/sql/util/ScriptRunnerTest.java | 2 +- .../org/apache/sis/metadata/xml/TestUsingFile.java | 2 +- .../org/apache/sis/test/mock/package-info.java | 2 +- .../test/org/apache/sis/test/sql/package-info.java | 29 ---- .../apache/sis/util/iso/NameMarshallingTest.java | 2 +- .../sis/xml/CharSequenceSubstitutionTest.java | 2 +- .../apache/sis/xml/NilReasonMarshallingTest.java | 2 +- .../org/apache/sis/xml/ReferenceResolverMock.java | 2 +- .../org/apache/sis/xml/UUIDMarshallingTest.java | 2 +- .../org/apache/sis/xml/XLinkMarshallingTest.java | 2 +- .../sis/xml/bind/cat/CodeListMarshallingTest.java | 2 +- .../sis/xml/bind/cat/EnumMarshallingTest.java | 2 +- .../apache/sis/xml/bind/gco/PropertyTypeTest.java | 2 +- .../apache/sis/xml/bind/gml/TimePeriodTest.java | 2 +- .../sis/xml/bind/lan/FreeTextMarshallingTest.java | 2 +- .../apache/sis/xml/bind/lan/LanguageCodeTest.java | 2 +- .../metadata/replace/QualityParameterTest.java | 2 +- .../metadata/replace/ServiceParameterTest.java | 2 +- .../test}/AnnotationConsistencyCheck.java | 2 +- .../{test/xml => xml/test}/DocumentComparator.java | 2 +- .../sis/{test/xml => xml/test}/InfiniteSet.java | 2 +- .../sis/{test/xml => xml/test}/TestCase.java | 2 +- .../sis/{test/xml => xml/test}/package-info.java | 7 +- .../sis/xml/util/DocumentComparatorTest.java | 2 +- .../org/apache/sis/xml/util/XmlUtilitiesTest.java | 2 +- .../src/org.apache.sis.openoffice/bundle/README.md | 100 ++++++++++++ .../bundle/build-instruction.html | 119 --------------- .../sis/xml/bind/fra/DataIdentificationTest.java | 2 +- .../xml/bind/fra/DirectReferenceSystemTest.java | 2 +- .../apache/sis/parameter/AbstractParameterValue.md | 5 + .../sis/parameter/AbstractParameterValue.txt | 5 - .../sis/referencing/factory/sql/EPSG_README.md | 7 + .../sis/referencing/factory/sql/EPSG_README.txt | 7 - .../sis/referencing/operation/builder/README.md | 33 ++++ .../sis/referencing/operation/builder/readme.html | 50 ------ ...c3DtoVertical.txt => Geographic3DtoVertical.md} | 6 +- .../transform/SpecializableTransform1D.md | 3 + .../transform/SpecializableTransform1D.txt | 3 - .../sis/xml/bind/referencing/SC_GeographicCRS.md | 4 + .../sis/xml/bind/referencing/SC_GeographicCRS.txt | 4 - .../sis/parameter/ParameterMarshallingTest.java | 2 +- .../sis/referencing/ImmutableIdentifierTest.java | 2 +- .../referencing/crs/DefaultCompoundCRSTest.java | 2 +- .../sis/referencing/crs/DefaultDerivedCRSTest.java | 2 +- .../referencing/crs/DefaultEngineeringCRSTest.java | 2 +- .../referencing/crs/DefaultGeodeticCRSTest.java | 2 +- .../sis/referencing/crs/DefaultImageCRSTest.java | 2 +- .../referencing/crs/DefaultProjectedCRSTest.java | 2 +- .../sis/referencing/cs/DefaultCartesianCSTest.java | 2 +- .../referencing/cs/DefaultEllipsoidalCSTest.java | 2 +- .../referencing/datum/DefaultEllipsoidTest.java | 2 +- .../datum/DefaultGeodeticDatumTest.java | 2 +- .../datum/DefaultPrimeMeridianTest.java | 2 +- .../datum/DefaultTemporalDatumTest.java | 2 +- .../datum/DefaultVerticalDatumTest.java | 2 +- .../sis/referencing/factory/TestFactorySource.java | 4 +- .../referencing/factory/sql/EPSGInstallerTest.java | 2 +- .../factory/sql/epsg/DataScriptFormatter.java | 2 +- .../sis/referencing/factory/sql/epsg/README.md | 133 ++++++++++++++++ .../sis/referencing/factory/sql/epsg/package.html | 168 --------------------- .../DefaultConcatenatedOperationTest.java | 2 +- .../operation/DefaultPassThroughOperationTest.java | 2 +- .../operation/SingleOperationMarshallingTest.java | 2 +- .../apache/sis/test/integration/MetadataTest.java | 4 +- .../sis/test/integration/MetadataVerticalTest.java | 2 +- .../CC_GeneralOperationParameterTest.java | 2 +- .../CC_OperationParameterGroupTest.java | 2 +- .../referencing/SecondDefiningParameterTest.java | 2 +- .../sis/storage/geotiff/SelfConsistencyTest.java | 2 +- .../sis/storage/netcdf/SelfConsistencyTest.java | 2 +- .../org/apache/sis/storage/sql/SQLStoreTest.java | 2 +- .../apache/sis/storage/sql/TestOnAllDatabases.java | 2 +- .../sql/feature/SelectionClauseWriterTest.java | 2 +- .../sql/feature/TemporalValueGetterTest.java | 2 +- .../sis/storage/sql/postgis/PostgresTest.java | 2 +- .../main/org/apache/sis/storage/FeatureQuery.java | 34 +++-- .../org/apache/sis/storage/FeatureQueryTest.java | 56 ++++++- .../sis/storage/esri/BILConsistencyTest.java | 2 +- .../sis/storage/esri/BIPConsistencyTest.java | 2 +- .../sis/storage/esri/BSQConsistencyTest.java | 2 +- .../sis/storage/image/SelfConsistencyTest.java | 2 +- .../test}/CoverageReadConsistency.java | 2 +- .../storage => storage/test}/SubsampledImage.java | 2 +- .../storage => storage/test}/package-info.java | 4 +- .../sis/util/collection/TableColumnTest.java | 4 +- .../test}/SerializableTableColumn.java | 2 +- .../foreigner => util/test}/package-info.java | 2 +- .../shapefile/jdbc/{readme.txt => README.md} | 2 + netbeans-project/nbproject/project.properties | 7 +- 126 files changed, 778 insertions(+), 819 deletions(-) diff --cc endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyConsistencyCheck.java index 0e8c17ff36,f144dbf6e4..f5ea5de365 --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyConsistencyCheck.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/metadata/PropertyConsistencyCheck.java @@@ -33,8 -33,11 +33,8 @@@ import org.apache.sis.metadata.internal import org.junit.Test; import org.apache.sis.test.TestUtilities; import org.apache.sis.test.DependsOn; - import org.apache.sis.test.xml.AnnotationConsistencyCheck; + import org.apache.sis.xml.test.AnnotationConsistencyCheck; -// Specific to the geoapi-3.1 and geoapi-4.0 branches: -import org.opengis.util.ControlledVocabulary; - /** * Base class for tests done on metadata objects using reflection. This base class tests JAXB annotations diff --cc endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/package-info.java index 83ba867519,93de16db6d..25878b5a1b --- a/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/package-info.java +++ b/endorsed/src/org.apache.sis.metadata/test/org/apache/sis/xml/test/package-info.java @@@ -17,9 -17,9 +17,8 @@@ /** * Utility methods for testing XML files or JAXB annotations. - * {@link org.apache.sis.test.xml.AnnotationConsistencyCheck} and - * {@code SchemaCompliance} verifies JAXB annotations. - * {@link org.apache.sis.test.xml.DocumentComparator} compares an actual XML document with the expected one. + * {@link org.apache.sis.xml.test.AnnotationConsistencyCheck} and - * {@link org.apache.sis.xml.test.SchemaCompliance} verifies JAXB annotations. + * {@link org.apache.sis.xml.test.DocumentComparator} compares an actual XML document with the expected one. * * <p>Objects defined in this package are only for SIS testing purpose any many change * in any future version without notice.</p> diff --cc endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java index 3280f24bc2,172b87705a..4b48c05264 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/FeatureQuery.java @@@ -740,9 -738,9 +740,9 @@@ public class FeatureQuery extends Quer final NamedExpression item = projection[column]; /* * For each property, get the expected type (mandatory) and its name (optional). - * A default name will be computed if no alias were explicitly given by user. + * A default name will be computed if no alias was explicitly given by the user. */ - final Expression<? super Feature,?> expression = item.expression; + final Expression<? super AbstractFeature,?> expression = item.expression; final FeatureExpression<?,?> fex = FeatureExpression.castOrCopy(expression); final PropertyTypeBuilder resultType; if (fex == null || (resultType = fex.expectedType(valueType, ftb)) == null) { diff --cc endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/FeatureQueryTest.java index 4e4c1c51f2,a165f2bc7d..302150ac64 --- a/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/FeatureQueryTest.java +++ b/endorsed/src/org.apache.sis.storage/test/org/apache/sis/storage/FeatureQueryTest.java @@@ -55,7 -63,7 +57,7 @@@ public final class FeatureQueryTest ext /** * An arbitrary number of features, all of the same type. */ - private final AbstractFeature[] features; - private Feature[] features; ++ private AbstractFeature[] features; /** * The {@link #features} array wrapped in a in-memory feature set. @@@ -68,9 -76,31 +70,31 @@@ private final FeatureQuery query; /** - * Creates a new test with a feature type composed of two attributes and one association. + * Creates a new test case. */ public FeatureQueryTest() { + query = new FeatureQuery(); + } + + /** + * Creates a simple feature with a property flagged as an identifier. + */ + private void createFeatureWithIdentifier() { + final FeatureTypeBuilder ftb = new FeatureTypeBuilder().setName("Test"); + ftb.addAttribute(String.class).setName("id").addRole(AttributeRole.IDENTIFIER_COMPONENT); - final FeatureType type = ftb.build(); - features = new Feature[] { ++ final DefaultFeatureType type = ftb.build(); ++ features = new AbstractFeature[] { + type.newInstance() + }; + features[0].setPropertyValue("id", "id-0"); + featureSet = new MemoryFeatureSet(null, type, Arrays.asList(features)); + } + + /** + * Creates a set of features common to most tests. + * The feature type is composed of two attributes and one association. + */ + private void createFeaturesWithAssociation() { FeatureTypeBuilder ftb; // A dependency of the test feature type. @@@ -172,9 -217,10 +197,10 @@@ */ @Test public void testSelection() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setSelection(ff.equal(ff.property("value1", Integer.class), - ff.literal(2), true, MatchAction.ALL)); + ff.literal(2))); verifyQueryResult(1, 2); } @@@ -186,7 -232,8 +212,8 @@@ */ @Test public void testSelectionThroughAssociation() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setSelection(ff.equal(ff.property("dependency/value3"), ff.literal(18))); verifyQueryResult(3); } @@@ -198,7 -245,8 +225,8 @@@ */ @Test public void testProjection() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setProjection(new FeatureQuery.NamedExpression(ff.property("value1", Integer.class), (String) null), new FeatureQuery.NamedExpression(ff.property("value1", Integer.class), "renamed1"), new FeatureQuery.NamedExpression(ff.literal("a literal"), "computed")); @@@ -231,9 -279,10 +259,10 @@@ */ @Test public void testProjectionByNames() throws DataStoreException { + createFeaturesWithAssociation(); query.setProjection("value2"); - final Feature instance = executeAndGetFirst(); - final PropertyType p = TestUtilities.getSingleton(instance.getType().getProperties(true)); + final AbstractFeature instance = executeAndGetFirst(); + final AbstractIdentifiedType p = TestUtilities.getSingleton(instance.getType().getProperties(true)); assertEquals("value2", p.getName().toString()); } @@@ -245,7 -294,8 +274,8 @@@ */ @Test public void testDefaultColumnName() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setLimit(1); query.setProjection( ff.add(ff.property("value1", Number.class), ff.literal(1)), @@@ -270,7 -320,8 +300,8 @@@ */ @Test public void testProjectionOfAbstractType() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setProjection(new FeatureQuery.NamedExpression(ff.property("value1"), (String) null), new FeatureQuery.NamedExpression(ff.property("/*/unknown"), "unexpected")); @@@ -299,7 -350,8 +330,8 @@@ */ @Test public void testProjectionThroughAssociation() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setProjection(new FeatureQuery.NamedExpression(ff.property("value1"), (String) null), new FeatureQuery.NamedExpression(ff.property("dependency/value3"), "value3")); query.setOffset(2); @@@ -308,6 -360,20 +340,20 @@@ assertEquals("value3", 25, instance.getPropertyValue("value3")); } + /** + * Tests {@link FeatureQuery#setProjection(FeatureQuery.NamedExpression...)} on a field + * which is a link, ensuring that the link name is preserved. + * + * @throws DataStoreException if an error occurred while executing the query. + */ + @Test + public void testProjectionOfLink() throws DataStoreException { + createFeatureWithIdentifier(); + query.setProjection(AttributeConvention.IDENTIFIER); - final Feature instance = executeAndGetFirst(); ++ final AbstractFeature instance = executeAndGetFirst(); + assertEquals("id-0", instance.getPropertyValue(AttributeConvention.IDENTIFIER)); + } + /** * Shortcut for creating expression for a projection computed on-the-fly. */ @@@ -322,7 -388,8 +368,8 @@@ */ @Test public void testVirtualProjection() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setProjection( new FeatureQuery.NamedExpression(ff.property("value1", Integer.class), (String) null), virtualProjection(ff.property("value1", Integer.class), "renamed1"), @@@ -365,7 -432,8 +412,8 @@@ */ @Test public void testIncorrectVirtualProjection() throws DataStoreException { + createFeaturesWithAssociation(); - final FilterFactory<Feature,?,?> ff = DefaultFilterFactory.forFeatures(); + final DefaultFilterFactory<AbstractFeature,?,?> ff = DefaultFilterFactory.forFeatures(); query.setProjection(new FeatureQuery.NamedExpression(ff.property("value1", Integer.class), (String) null), virtualProjection(ff.property("valueMissing", Integer.class), "renamed1"));