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"));
  

Reply via email to