This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-3.1
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 27274f37b12070451a9e5c2d0dba2006e2ff6d89
Merge: bd6a16c7b8 f1393024bc
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Wed Nov 26 10:00:53 2025 +0100

    Merge branch 'geoapi-4.0' into geoapi-3.1. Some changes are:
    
    - Expressions for some mathematical functions such as `isNaN`.
    - A greater effort for translating filters to SQL statements.
    - Refactoring of the geometry module (incubator).
    - Fixes or improvements in filters, JTS wrappers and GeoTIFF reader.
    - Replacement of `Feature.getValueOrFallback` by `FeatureType.hasProperty`.
    - Promotion of some internal classes to public API.

 .../sis/buildtools/coding/ReorganizeImports.java   |   1 +
 .../apache/sis/buildtools/gradle/BuildHelper.java  |   2 +-
 .../apache/sis/buildtools/gradle/Dependency.java   |   2 +-
 .../apache/sis/buildtools/gradle/ZipWriter.java    |   6 +-
 .../apache/sis/cloud/aws/s3/ClientFileSystem.java  |   5 +-
 .../main/org/apache/sis/console/Command.java       |   4 +-
 .../main/org/apache/sis/console/CommandRunner.java |   4 +-
 .../main/org/apache/sis/console/SIS.java           |   4 +-
 .../org/apache/sis/console/TransformCommand.java   |   2 +-
 .../org.apache.sis.filter.FunctionRegister         |   3 +
 .../org.apache.sis.feature/main/module-info.java   |  15 +-
 .../sis/coverage/grid/GridCoverageProcessor.java   |   2 +-
 .../org/apache/sis/coverage/grid/GridGeometry.java |  15 +-
 .../apache/sis/coverage/grid/GridOrientation.java  |  34 +-
 .../org/apache/sis/coverage/grid/package-info.java |   2 +-
 .../apache/sis/feature/AbstractAssociation.java    |   2 +-
 .../org/apache/sis/feature/AbstractFeature.java    |  85 ++--
 .../org/apache/sis/feature/AbstractOperation.java  |   7 +-
 .../apache/sis/feature/DefaultAssociationRole.java |   5 +-
 .../org/apache/sis/feature/DefaultFeatureType.java |  21 +-
 .../main/org/apache/sis/feature/DenseFeature.java  |   5 +-
 .../apache/sis/feature/ExpressionOperation.java    |   6 +-
 .../org/apache/sis/feature/FeatureOperations.java  |  57 ++-
 .../main/org/apache/sis/feature/Features.java      |  15 +-
 .../org/apache/sis/feature/NamedFeatureType.java   |  13 +-
 .../main/org/apache/sis/feature/SparseFeature.java |   5 +-
 .../sis/feature/builder/AttributeTypeBuilder.java  |   4 +-
 .../sis/feature/builder/FeatureTypeBuilder.java    |  10 +-
 .../org/apache/sis/feature/internal/Resources.java |   6 +-
 .../sis/feature/internal/Resources.properties      |   2 +-
 .../sis/feature/internal/Resources_fr.properties   |   2 +-
 .../internal/shared/AttributeConvention.java       |  15 -
 .../feature/internal/shared/FeatureExpression.java |  49 +-
 .../feature/internal/shared/FeatureProjection.java | 300 +++++++++--
 .../internal/shared/FeatureProjectionBuilder.java  | 407 ++++++++-------
 .../sis/feature/internal/shared/FeatureView.java   |   8 +-
 .../sis/feature/internal/shared/OperationView.java | 192 +++++++
 .../main/org/apache/sis/feature/package-info.java  |   2 +-
 .../org/apache/sis/filter/ArithmeticFunction.java  |  46 +-
 .../org/apache/sis/filter/AssociationValue.java    |  17 +-
 .../apache/sis/filter/BinaryGeometryFilter.java    |   5 +-
 .../org/apache/sis/filter/BinarySpatialFilter.java |   2 +
 .../main/org/apache/sis/filter/Capabilities.java   | 299 ++++++++++-
 .../org/apache/sis/filter/ComparisonFilter.java    |   3 +-
 .../apache/sis/filter/DefaultFilterFactory.java    | 142 +-----
 .../main/org/apache/sis/filter/DistanceFilter.java |   1 +
 .../org/apache/sis/filter/FunctionRegister.java    |  16 +-
 .../org/apache/sis/filter/IdentifierFilter.java    |  74 ++-
 .../main/org/apache/sis/filter/LeafExpression.java |  75 ++-
 .../main/org/apache/sis/filter/LikeFilter.java     |   2 +-
 .../main/org/apache/sis/filter/LogicalFilter.java  |   4 +-
 .../main/org/apache/sis/filter/Optimization.java   |  10 +-
 .../main/org/apache/sis/filter/PropertyValue.java  | 130 ++++-
 .../main/org/apache/sis/filter/TemporalFilter.java |  12 +-
 .../sis/filter/{ => base}/BinaryFunction.java      |   7 +-
 .../sis/filter/{ => base}/ConvertFunction.java     |  28 +-
 .../{internal => base}/GeometryConverter.java      |   4 +-
 .../{internal => base}/GeometryFromFeature.java    |   3 +-
 .../apache/sis/filter/{internal => base}/Node.java |  11 +-
 .../sis/filter/{ => base}/UnaryFunction.java       |  16 +-
 .../{internal/shared => base}/WarningEvent.java    |  17 +-
 .../filter/{internal/shared => base}/XPath.java    |   2 +-
 .../org/apache/sis/filter/base/XPathSource.java}   |  25 +-
 .../org/apache/sis/filter/base/package-info.java   |  25 +-
 .../org/apache/sis/filter/math/BinaryOperator.java | 115 +++++
 .../main/org/apache/sis/filter/math/Function.java  | 366 ++++++++++++++
 .../main/org/apache/sis/filter/math/Predicate.java | 109 ++++
 .../main/org/apache/sis/filter/math/Registry.java  | 101 ++++
 .../org/apache/sis/filter/math/UnaryOperator.java  | 109 ++++
 .../filter/{internal => math}/package-info.java    |   6 +-
 .../main/org/apache/sis/filter/package-info.java   |   2 +-
 .../sis/filter/sqlmm/FunctionDescription.java      |  22 +-
 .../apache/sis/filter/sqlmm/FunctionWithSRID.java  |   8 +-
 .../apache/sis/filter/sqlmm/GeometryParser.java    |   2 +-
 .../main/org/apache/sis/filter/sqlmm/Registry.java |  20 +-
 .../main/org/apache/sis/filter/sqlmm/SQLMM.java    |   7 +-
 .../apache/sis/filter/sqlmm/SpatialFunction.java   |  22 +-
 .../org/apache/sis/filter/sqlmm/package-info.java  |   2 +-
 .../{internal/shared => visitor}/CopyVisitor.java  |   2 +-
 .../{internal/shared => visitor}/EditVisitor.java  |   2 +-
 .../sis/filter/visitor/FunctionIdentifier.java     |  56 +++
 .../shared => visitor}/FunctionNames.java          |  19 +-
 .../shared => visitor}/ListingPropertyVisitor.java |   2 +-
 .../{internal/shared => visitor}/Visitor.java      |  54 +-
 .../{internal/shared => visitor}/package-info.java |   4 +-
 .../apache/sis/geometry/wrapper/GeometryType.java  |   3 +-
 .../apache/sis/geometry/wrapper/j2d/Wrapper.java   |   2 +-
 .../wrapper/jts/PackedCoordinateSequence.java      | 150 +++---
 .../jts/PackedCoordinateSequenceFactory.java       |  24 +-
 .../apache/sis/coverage/grid/GridGeometryTest.java |  52 ++
 .../coverage/grid/ResampledGridCoverageTest.java   |   3 +-
 .../apache/sis/feature/AbstractFeatureTest.java    |   8 -
 .../internal/shared/FeatureProjectionTest.java     | 343 +++++++++++++
 .../apache/sis/filter/ArithmeticFunctionTest.java  |   3 +-
 .../apache/sis/filter/ComparisonFilterTest.java    |   5 +-
 .../apache/sis/filter/IdentifierFilterTest.java    |  58 ++-
 .../org/apache/sis/filter/LeafExpressionTest.java  |   3 +-
 .../org/apache/sis/filter/LogicalFilterTest.java   |   5 +-
 .../test/org/apache/sis/filter/XPathTest.java      |   2 +-
 .../org/apache/sis/filter/math/RegistryTest.java}  |  36 +-
 .../apache/sis/filter/sqlmm/RegistryTestCase.java  |   2 +-
 .../org/apache/sis/filter/sqlmm/SQLMMTest.java     |   2 +-
 .../shared => visitor}/CopyVisitorTest.java        |   2 +-
 .../shared => visitor}/FilterFactoryMock.java      |   2 +-
 .../{internal/shared => visitor}/FunctionMock.java |   2 +-
 .../shared => visitor}/FunctionNamesTest.java      |   2 +-
 .../shared => visitor}/ValueReferenceMock.java     |   2 +-
 .../sis/geometry/wrapper/GeometriesTestCase.java   |   8 +-
 .../wrapper/jts/PackedCoordinateSequenceTest.java  | 115 +++++
 .../org.apache.sis.metadata/main/module-info.java  |   2 +-
 .../org/apache/sis/metadata/TreeTableView.java     |   2 +-
 .../apache/sis/metadata/ValueExistencePolicy.java  |   2 +-
 .../org/apache/sis/metadata/sql/Installer.java     |   9 +-
 .../apache/sis/metadata/sql/MetadataSource.java    |   2 +-
 .../metadata/sql/internal/shared/Initializer.java  |   4 +-
 .../sql/internal/shared/LocalDataSource.java       |  51 +-
 .../metadata/sql/internal/shared/Reflection.java   |  22 +
 .../metadata/sql/internal/shared/SQLBuilder.java   |   4 +-
 .../metadata/sql/internal/shared/SQLUtilities.java | 109 +---
 .../metadata/sql/internal/shared/ScriptRunner.java | 122 ++++-
 .../sis/metadata/sql/internal/shared/Syntax.java   |   2 +-
 .../metadata/sql/internal/shared/TypeMapper.java   |  59 +--
 .../org/apache/sis/metadata/sql/package-info.java  |   2 +-
 .../org/apache/sis/temporal/LenientDateFormat.java |   5 +-
 .../main/org/apache/sis/xml/MarshallerPool.java    |   3 +-
 .../main/org/apache/sis/xml/Pooled.java            |   2 +-
 .../main/org/apache/sis/xml/bind/Context.java      |   2 +-
 .../apache/sis/xml/bind/IdentifierMapAdapter.java  |   8 +-
 .../org/apache/sis/xml/bind/ScopedIdentifier.java  |   4 +-
 .../xml/internal/shared/ExternalLinkHandler.java   |   6 +-
 .../apache/sis/xml/internal/shared/URISource.java  |   2 +-
 .../sql/internal/shared/SQLUtilitiesTest.java      |  32 +-
 .../sql/internal/shared/ScriptRunnerTest.java      |   2 +
 .../MultiResolutionCoverageLoaderTest.java         |   2 +-
 .../main/module-info.java                          |   2 +-
 .../sis/parameter/DefaultParameterValue.java       |   9 +-
 .../main/org/apache/sis/parameter/Parameters.java  |   5 +-
 .../apache/sis/referencing/AuthorityFactories.java |   9 +
 .../main/org/apache/sis/referencing/CommonCRS.java |  25 +-
 .../sis/referencing/DefaultObjectDomain.java       |   8 +-
 .../sis/referencing/crs/DefaultCompoundCRS.java    |   6 +-
 .../org/apache/sis/referencing/cs/AbstractCS.java  |   5 +-
 .../factory/IdentifiedObjectFinder.java            |   6 +
 .../factory/MultiAuthoritiesFactory.java           |  17 +-
 .../referencing/factory/sql/AuthorityCodes.java    |  34 +-
 .../referencing/factory/sql/EPSGCodeFinder.java    |  68 +--
 .../referencing/factory/sql/EPSGDataAccess.java    | 155 +++---
 .../sis/referencing/factory/sql/EPSGInstaller.java |  57 +--
 .../sis/referencing/factory/sql/SQLTranslator.java |   8 +-
 .../sis/referencing/factory/sql/package-info.java  |   2 +-
 .../internal/shared/ExtendedPrecisionMatrix.java   |   3 +-
 .../sis/referencing/internal/shared/LazySet.java   |   2 +-
 .../shared/ReferencingFactoryContainer.java        |   5 -
 .../internal/shared/TemporalAccessor.java          |   2 +-
 .../operation/CoordinateOperationRegistry.java     |   7 +-
 .../referencing/operation/gridded/GridFile.java    |   6 +-
 .../referencing/operation/gridded/LoadedGrid.java  |   2 +-
 .../operation/transform/OperationMethodSet.java    |  18 +-
 .../referencing/factory/sql/EPSGFactoryTest.java   |   8 +-
 .../org/apache/sis/storage/landsat/BandGroup.java  |   7 +-
 .../apache/sis/storage/landsat/LandsatStore.java   |   2 +-
 .../sis/storage/landsat/LandsatStoreProvider.java  |   2 +-
 .../sis/storage/landsat/MetadataReaderTest.java    |   2 +-
 .../main/module-info.java                          |   2 +-
 .../apache/sis/storage/geotiff/Compression.java    |   2 +-
 .../apache/sis/storage/geotiff/GeoTiffStore.java   |  49 +-
 .../org/apache/sis/storage/geotiff/IOBase.java     |   6 +-
 .../sis/storage/geotiff/ImageFileDirectory.java    |  95 ++--
 .../sis/storage/geotiff/MultiResolutionImage.java  |  27 +-
 .../org/apache/sis/storage/geotiff/Reader.java     |   2 +-
 .../org/apache/sis/storage/geotiff/Writer.java     |  24 +-
 .../sis/storage/geotiff/base/Compression.java      |   2 +-
 .../org/apache/sis/storage/geotiff/base/Tags.java  |   4 +-
 .../apache/sis/storage/geotiff/base/UnitKey.java   |   4 +-
 .../apache/sis/storage/geotiff/package-info.java   |   2 +-
 .../sis/storage/geotiff/reader/CRSBuilder.java     |   6 +-
 .../geotiff/reader/GridGeometryBuilder.java        | 118 +++--
 .../apache/sis/storage/geotiff/reader/Type.java    |   2 +
 .../sis/storage/geotiff/reader/XMLMetadata.java    |   2 +-
 .../storage/geotiff/writer/CompressionChannel.java |   2 +-
 .../sis/storage/geotiff/writer/GeoEncoder.java     |  82 ++-
 .../geotiff/writer/HorizontalPredictor.java        |   2 +-
 .../sis/storage/geotiff/writer/TileMatrix.java     |   2 +-
 .../org/apache/sis/storage/geotiff/WriterTest.java |   2 +-
 .../sis/storage/netcdf/NetcdfStoreProvider.java    |   2 +-
 .../sis/storage/netcdf/base/RasterResource.java    |   4 +-
 .../apache/sis/storage/netcdf/base/TestCase.java   |   2 +-
 .../main/module-info.java                          |   2 +-
 .../apache/sis/storage/sql/SQLStoreProvider.java   |   2 +-
 .../storage/sql/duckdb/ExtendedClauseWriter.java   |  16 +-
 .../org/apache/sis/storage/sql/feature/Column.java |  15 +-
 .../sis/storage/sql/feature/ComputedColumn.java    |  88 ++++
 .../apache/sis/storage/sql/feature/Database.java   |  55 +-
 .../sis/storage/sql/feature/FeatureAdapter.java    |  26 +-
 .../sis/storage/sql/feature/FeatureIterator.java   |  31 +-
 .../sis/storage/sql/feature/FeatureStream.java     | 107 +++-
 .../sis/storage/sql/feature/InfoStatements.java    |  29 +-
 .../apache/sis/storage/sql/feature/Relation.java   |   2 +-
 .../apache/sis/storage/sql/feature/Resources.java  |   4 +-
 .../sis/storage/sql/feature/Resources.properties   |   2 +-
 .../storage/sql/feature/Resources_fr.properties    |   2 +-
 .../sis/storage/sql/feature/SelectionClause.java   | 108 ++--
 .../storage/sql/feature/SelectionClauseWriter.java | 283 ++++++++---
 .../org/apache/sis/storage/sql/feature/Table.java  |  16 +-
 .../sis/storage/sql/feature/ValueGetter.java       |   2 +-
 .../org/apache/sis/storage/sql/package-info.java   |   2 +-
 .../storage/sql/postgis/ExtendedClauseWriter.java  |  18 +-
 .../apache/sis/storage/sql/postgis/Postgres.java   |   6 +-
 .../org/apache/sis/util/stream/StreamWrapper.java  | 107 ++--
 .../org/apache/sis/storage/sql/SQLStoreTest.java   |  78 ++-
 .../sql/feature/SelectionClauseWriterTest.java     |  10 +-
 .../org/apache/sis/storage/gpx/StoreProvider.java  |   4 +-
 .../sis/storage/xml/stream/StaxStreamIO.java       |   2 +-
 .../org.apache.sis.storage/main/module-info.java   |   2 +-
 .../main/org/apache/sis/io/stream/ChannelData.java |   4 +-
 .../org/apache/sis/io/stream/ChannelDataInput.java |   4 +-
 .../apache/sis/io/stream/ChannelDataOutput.java    |   4 +-
 .../sis/io/stream/ChannelImageOutputStream.java    |   6 +-
 .../apache/sis/io/stream/HyperRectangleWriter.java |  16 +-
 .../main/org/apache/sis/io/stream/Region.java      |   2 +-
 .../org/apache/sis/io/stream/UpdatableWrite.java   |   6 +-
 .../org/apache/sis/storage/AbstractFeatureSet.java |  38 +-
 .../sis/storage/AbstractGridCoverageResource.java  |  11 +-
 .../org/apache/sis/storage/AbstractResource.java   |  41 +-
 .../main/org/apache/sis/storage/FeatureQuery.java  |   6 +-
 .../sis/storage/{base => }/MemoryFeatureSet.java   |  64 ++-
 ...source.java => MemoryGridCoverageResource.java} |  90 ++--
 .../main/org/apache/sis/storage/Resource.java      |  22 +-
 .../storage/aggregate/AggregatedFeatureSet.java    |  12 -
 .../sis/storage/aggregate/AggregatedResource.java  |  11 +
 .../aggregate/BandAggregateGridResource.java       |  35 +-
 .../storage/aggregate/ConcatenatedFeatureSet.java  |   4 +-
 .../aggregate/ConcatenatedGridCoverage.java        |   6 +-
 .../aggregate/ConcatenatedGridResource.java        |  12 +-
 .../sis/storage/aggregate/CoverageAggregator.java  |  18 +-
 .../org/apache/sis/storage/aggregate/Group.java    |   9 +-
 .../sis/storage/aggregate/GroupAggregate.java      |   6 +-
 .../sis/storage/aggregate/JoinFeatureSet.java      |  13 +-
 .../apache/sis/storage/base/MetadataFetcher.java   |  28 +-
 .../org/apache/sis/storage/base/PRJDataStore.java  |   4 +-
 .../apache/sis/storage/base/PseudoResource.java    |  62 +++
 .../apache/sis/storage/base/SimpleAggregate.java   |   2 +-
 .../apache/sis/storage/base}/SortByComparator.java |   2 +-
 .../apache/sis/storage/base/TiledGridResource.java |  14 -
 .../org/apache/sis/storage/base/URIDataStore.java  |  15 +-
 .../apache/sis/storage/base/WarningAdapter.java    |  77 +++
 .../sis/storage/base/WritableAggregateSupport.java |   4 +-
 .../storage/base/WritableGridCoverageSupport.java  |   4 +-
 .../main/org/apache/sis/storage/csv/Store.java     |   2 +-
 .../org/apache/sis/storage/csv/StoreProvider.java  |   2 +-
 .../org/apache/sis/storage/csv/TimeEncoding.java   |   7 +-
 .../sis/storage/esri/AsciiGridStoreProvider.java   |   2 +-
 .../sis/storage/esri/RawRasterStoreProvider.java   |   2 +-
 .../apache/sis/storage/event/StoreListeners.java   |   2 +-
 .../apache/sis/storage/folder/StoreProvider.java   |   2 +-
 .../apache/sis/storage/image/WorldFileStore.java   |  17 +-
 .../sis/storage/image/WorldFileStoreProvider.java  |   2 +-
 .../storage/image/WritableSingleImageStore.java    |   4 +-
 .../apache/sis/storage/image/WritableStore.java    |   2 +-
 .../main/org/apache/sis/storage/package-info.java  |   8 +-
 .../org/apache/sis/storage/wkt/StoreProvider.java  |   2 +-
 .../org/apache/sis/storage/xml/StoreProvider.java  |   2 +-
 .../org/apache/sis/io/stream/ByteArrayChannel.java |   6 +-
 .../apache/sis/io/stream/ChannelDataTestCase.java  |  14 +-
 .../org/apache/sis/storage/CoverageSubsetTest.java |   4 +-
 .../test/org/apache/sis/storage/DataStoreMock.java |   2 +-
 .../org/apache/sis/storage/FeatureQueryTest.java   | 118 ++++-
 .../org/apache/sis/storage/GridResourceMock.java   |  12 +-
 ...st.java => MemoryGridCoverageResourceTest.java} |  21 +-
 .../aggregate/BandAggregateGridResourceTest.java   |  11 +-
 .../aggregate/ConcatenatedFeatureSetTest.java      |   2 +-
 .../sis/storage/aggregate/CoverageMosaicTest.java  |   5 +-
 .../sis/storage/aggregate/JoinFeatureSetTest.java  |  12 +-
 .../sis/storage/aggregate/OpaqueGridResource.java  |   6 +-
 .../src/org.apache.sis.util/main/module-info.java  |   2 +-
 .../main/org/apache/sis/math/Statistics.java       |   2 +-
 .../main/org/apache/sis/measure/UnitDimension.java |   5 +-
 .../main/org/apache/sis/pending/jdk/HexFormat.java |   5 +-
 .../main/org/apache/sis/pending/jdk/JDK17.java     |   2 +-
 .../main/org/apache/sis/util/ObjectConverters.java |  14 +-
 .../org/apache/sis/util/collection/Containers.java |  58 ++-
 .../apache/sis/util/collection}/DerivedList.java   |  28 +-
 .../org/apache/sis/util/collection/DerivedSet.java |  10 +-
 .../shared => collection}/ListOfUnknownSize.java   | 152 ++++--
 .../sis/util/collection/SetOfUnknownSize.java      | 267 ++++++++++
 .../apache/sis/util/collection/package-info.java   |   2 +-
 .../sis/util/internal/shared/AbstractIterator.java |   2 +-
 .../sis/util/internal/shared/AbstractMap.java      |  13 +
 .../sis/util/internal/shared/CheckedHashSet.java   |   2 +-
 .../sis/util/internal/shared/CollectionsExt.java   |  24 +-
 .../sis/util/internal/shared/DoubleDouble.java     |   8 +-
 .../sis/util/internal/shared/SetOfUnknownSize.java | 199 --------
 .../apache/sis/util/logging/MonolineFormatter.java |  17 +-
 .../org/apache/sis/util/resources/Vocabulary.java  |   5 +
 .../sis/util/resources/Vocabulary.properties       |   1 +
 .../sis/util/resources/Vocabulary_fr.properties    |   1 +
 .../ListOfUnknownSizeTest.java                     |   5 +-
 .../sis/util/logging/MonolineFormatterTest.java    |  10 +-
 geoapi/snapshot                                    |   2 +-
 .../org/apache/sis/cql/FilterToCQLVisitor.java     |   4 +-
 .../main/org/apache/sis/geometries/Geometries.java |  70 +--
 .../org/apache/sis/geometries/GeometryFactory.java |  22 +-
 .../org/apache/sis/geometries/PointSequence.java   |   8 +-
 .../geometries/csg/ConstructiveSolidGeometry.java  |  10 +-
 .../internal/shared/AbstractGeometry.java          |   8 +-
 .../geometries/internal/shared/ArraySequence.java  |  38 +-
 .../geometries/internal/shared/DefaultPoint.java   |  10 +-
 ...{AbstractTupleArray.java => AbstractArray.java} |  20 +-
 .../apache/sis/geometries/math/AbstractCursor.java |  16 +-
 .../math/{TupleArray.java => Array.java}           | 153 +++---
 ...rayConcatenated.java => ArrayConcatenated.java} |  44 +-
 .../math/{TupleArrayND.java => ArrayMemory.java}   | 558 +++++++++++----------
 ...ArraySpliterator.java => ArraySpliterator.java} |  20 +-
 ...rayUnmodifiable.java => ArrayUnmodifiable.java} |  34 +-
 .../math/{TupleArrayCursor.java => Cursor.java}    |   6 +-
 ...orUnmodifiable.java => CursorUnmodifiable.java} |  10 +-
 .../org/apache/sis/geometries/math/NDArray.java    | 182 +++++++
 .../math/{TupleArrays.java => NDArrays.java}       | 247 ++++-----
 .../apache/sis/geometries/mesh/MeshPrimitive.java  | 220 ++++----
 .../geometries/mesh/MeshPrimitiveComparator.java   |   6 +-
 .../sis/geometries/mesh/MeshPrimitiveIndexes.java  |  35 +-
 .../sis/geometries/mesh/MeshPrimitiveVisitor.java  |  22 +-
 .../geometries/operation/GeometryOperations.java   |   6 +-
 .../operation/spatialanalysis2d/ISOLine.java       |   6 +-
 .../processor/spatialanalysis2d/Intersection.java  |  26 +-
 .../processor/spatialedition/ComputeAttribute.java |   8 +-
 .../geometries/processor/spatialedition/To3D.java  |  24 +-
 .../processor/spatialedition/ToPrimitive.java      |  12 +-
 .../processor/spatialedition/Transform.java        |  36 +-
 .../processor/spatialrelations2d/Contains.java     |  14 +-
 .../simplify/greedyinsert/TINBuilder.java          |   6 +-
 .../sis/geometries/triangulate/EarClipping.java    |   6 +-
 .../geometries/triangulate/delaunay/Delaunay.java  |  64 +--
 .../triangulate/delaunay/OrientedEdge.java         |   4 +-
 .../triangulate/delaunay/OrientedTriangle.java     |   4 +-
 .../org/apache/sis/geometries/PreparedTINTest.java |  10 +-
 .../org/apache/sis/geometries/TriangleTest.java    |   6 +-
 .../internal/shared/ArraySequenceTest.java         |  24 +-
 ...tTupleArrayTest.java => AbstractArrayTest.java} |  82 +--
 ...tenatedTest.java => ArrayConcatenatedTest.java} |  28 +-
 .../{TupleArrayNuiTest.java => ArrayNbTest.java}   |   6 +-
 .../{TupleArrayNlTest.java => ArrayNdTest.java}    |   6 +-
 .../{TupleArrayNiTest.java => ArrayNfTest.java}    |   6 +-
 .../{TupleArrayNiTest.java => ArrayNiTest.java}    |   6 +-
 .../{TupleArrayNiTest.java => ArrayNlTest.java}    |   6 +-
 .../{TupleArrayNiTest.java => ArrayNsTest.java}    |   6 +-
 .../{TupleArrayNbTest.java => ArrayNubTest.java}   |   6 +-
 .../{TupleArrayNiTest.java => ArrayNuiTest.java}   |   6 +-
 .../{TupleArrayNsTest.java => ArrayNusTest.java}   |   6 +-
 .../{TupleArraysTest.java => NDArraysTest.java}    |  32 +-
 .../sis/geometries/math/TupleArrayNdTest.java      |  36 --
 .../sis/geometries/math/TupleArrayNubTest.java     |  36 --
 .../sis/geometries/math/TupleArrayNusTest.java     |  36 --
 .../sis/geometries/mesh/PrimitiveIndexesTest.java  |  22 +-
 .../apache/sis/geometries/mesh/PrimitiveTest.java  |  48 +-
 .../sis/geometries/mesh/PrimitiveVisitorTest.java  |  38 +-
 .../geometries/operation/SutherlandHogmanTest.java |  10 +-
 .../operation/spatialanalysis2d/IsoBandTest.java   |  10 +-
 .../spatialanalysis2d/IntersectionTest.java        |  24 +-
 .../processor/spatialedition/To3DTest.java         |   4 +-
 .../processor/spatialedition/ToPrimitiveTest.java  |  18 +-
 .../processor/spatialedition/TransformTest.java    |  18 +-
 .../triangulate/delaunay/DelaunayTest.java         |  54 +-
 .../triangulate/delaunay/OrientedEdgeTest.java     |   6 +-
 .../main/org/apache/sis/map/SEPortrayer.java       |   2 +-
 .../test/org/apache/sis/map/SEPortrayerTest.java   |  40 +-
 .../sis/map/service/GraphicsPortrayerTest.java     |   2 +-
 .../coveragejson/CoverageJsonStoreProvider.java    |   2 +-
 .../coveragejson/CoverageJsonStoreTest.java        |   4 +-
 .../org/apache/sis/storage/geopackage/Content.java |   2 +-
 .../sis/storage/geopackage/GpkgStoreProvider.java  |   2 +-
 .../sis/storage/shapefile/ShapefileStore.java      |  21 +-
 netbeans-project/nbproject/project.xml             |   2 +
 .../apache/sis/gui/dataset/ExpandedFeature.java    |   8 -
 .../org/apache/sis/gui/dataset/RootResource.java   |  16 -
 .../sis/resources/embedded/EmbeddedResources.java  |   9 +-
 .../sis/referencing/factory/sql/epsg/Prepare.sql   |   6 +
 .../sis/referencing/factory/sql/epsg/Changes.md    |  46 ++
 .../sis/referencing/factory/sql/epsg/README.md     |  70 +--
 379 files changed, 7363 insertions(+), 3746 deletions(-)

diff --cc 
endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/OperationView.java
index 0000000000,ddbeebe36b..cf777f34bc
mode 000000,100644..100644
--- 
a/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/OperationView.java
+++ 
b/endorsed/src/org.apache.sis.feature/main/org/apache/sis/feature/internal/shared/OperationView.java
@@@ -1,0 -1,192 +1,192 @@@
+ /*
+  * Licensed to the Apache Software Foundation (ASF) under one or more
+  * contributor license agreements.  See the NOTICE file distributed with
+  * this work for additional information regarding copyright ownership.
+  * The ASF licenses this file to You under the Apache License, Version 2.0
+  * (the "License"); you may not use this file except in compliance with
+  * the License.  You may obtain a copy of the License at
+  *
+  *     http://www.apache.org/licenses/LICENSE-2.0
+  *
+  * Unless required by applicable law or agreed to in writing, software
+  * distributed under the License is distributed on an "AS IS" BASIS,
+  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  * See the License for the specific language governing permissions and
+  * limitations under the License.
+  */
+ package org.apache.sis.feature.internal.shared;
+ 
+ import java.util.Optional;
+ import java.io.Serializable;
+ import org.opengis.util.GenericName;
+ import org.opengis.util.InternationalString;
+ import org.opengis.parameter.ParameterValueGroup;
+ import org.opengis.parameter.ParameterDescriptorGroup;
+ import org.apache.sis.feature.AbstractOperation;
+ import org.apache.sis.feature.DefaultFeatureType;
+ import org.apache.sis.feature.internal.Resources;
+ import org.apache.sis.util.Deprecable;
+ 
+ // Specific to the geoapi-3.1 and geoapi-4.0 branches:
+ import org.opengis.feature.Feature;
+ import org.opengis.feature.FeatureOperationException;
+ import org.opengis.feature.IdentifiedType;
+ import org.opengis.feature.Operation;
+ import org.opengis.feature.Property;
+ import org.opengis.feature.PropertyNotFoundException;
+ 
+ 
+ /**
+  * An operation wrapper for hiding its dependencies. Because Apache 
<abbr>SIS</abbr>
+  * fetches operation dependencies only from instances of {@link 
AbstractOperation},
+  * we only need a wrapper that do <em>not</em> extend {@code 
AbstractOperation}.
+  * This class should be used only together with {@link FeatureView}.
+  *
+  * <h2>Purpose</h2>
+  * The {@link DefaultFeatureType} constructor verifies that all dependencies 
of all operations exist.
+  * This verification can block us from constructing the {@link 
FeatureView#source} type if the view
+  * does not include all dependencies needed by an operation. By wrapping the 
operation, we prevent
+  * {@link DefaultFeatureType} from doing this verification.
+  *
+  * @author  Martin Desruisseaux (Geomatys)
+  */
+ final class OperationView implements Operation, Deprecable, Serializable {
+     /**
+      * For cross-version compatibility.
+      */
+     private static final long serialVersionUID = -4679426189917900959L;
+ 
+     /**
+      * The instance doing the actual operation.
+      */
+     private final AbstractOperation source;
+ 
+     /**
+      * The name of feature type expected by the operation.
+      */
+     @SuppressWarnings("serial")     // Most Apache SIS implementations are 
serializable.
+     private final GenericName valueType;
+ 
+     /**
+      * Creates a new operation wrapper.
+      *
+      * @param  valueType  the name of feature type expected by the operation.
+      * @param  source     the operation instance to make opaque.
+      */
+     OperationView(final AbstractOperation source, final GenericName 
valueType) {
+         this.source = source;
+         this.valueType = valueType;
+     }
+ 
+     /**
+      * Returns the name of the wrapped operation.
+      */
+     @Override
+     public GenericName getName() {
+         return source.getName();
+     }
+ 
+     /**
+      * Returns a concise definition of the operation.
+      */
+     @Override
+     public InternationalString getDefinition() {
+         return source.getDefinition();
+     }
+ 
+     /**
+      * Returns a natural language designator for the operation.
+      * This can be used as an alternative to the {@linkplain #getName() name} 
in user interfaces.
+      */
+     @Override
+     public Optional<InternationalString> getDesignation() {
+         return source.getDesignation();
+     }
+ 
+     /**
+      * Returns optional information beyond that required for concise 
definition of the element.
+      * The description may assist in understanding the element scope and 
application.
+      */
+     @Override
+     public Optional<InternationalString> getDescription() {
+         return source.getDescription();
+     }
+ 
+     /**
+      * If this instance is deprecated, the reason or the alternative to use.
+      */
+     @Override
 -    public Optional<InternationalString> getRemarks() {
++    public InternationalString getRemarks() {
+         return source.getRemarks();
+     }
+ 
+     /**
+      * Returns {@code true} if this instance is deprecated.
+      */
+     @Override
+     public boolean isDeprecated() {
+         return source.isDeprecated();
+     }
+ 
+     /**
+      * Returns a description of the input parameters.
+      */
+     @Override
+     public ParameterDescriptorGroup getParameters() {
+         return source.getParameters();
+     }
+ 
+     /**
+      * Returns the expected result type.
+      */
+     @Override
+     public IdentifiedType getResult() {
+         return source.getResult();
+     }
+ 
+     /**
+      * Executes the operation on the specified feature with the specified 
parameters.
+      * This method is not strictly compliant with the contract of the public 
interface,
+      * because it requires that the given feature is an instance of {@link 
#valueType}.
+      * If not the case, this method tries to produce a more helpful exception 
message.
+      *
+      * @param  instance    the feature instance on which to execute the 
operation.
+      *                     Can be {@code null} if the operation does not need 
feature instance.
+      * @param  parameters  the parameters to use for executing the operation.
+      *                     Can be {@code null} if the operation does not take 
any parameters.
+      * @return the operation result.
+      */
+     @Override
+     public Property apply(final Feature instance, final ParameterValueGroup 
parameters) {
+         try {
+             return source.apply(instance, parameters);
+         } catch (PropertyNotFoundException e) {
+             throw new FeatureOperationException(Resources.format(
+                     Resources.Keys.IllegalFeatureType_4, 1, getName(), 
valueType, instance.getType().getName()), e);
+         }
+     }
+ 
+     /**
+      * Returns a string representation of this operation.
+      */
+     @Override
+     public String toString() {
+         return source.toString();
+     }
+ 
+     /**
+      * Returns a hash code value for this operation.
+      */
+     @Override
+     public int hashCode() {
+         return source.hashCode() * 37;
+     }
+ 
+     /**
+      * Compares this operation with the given object for equality.
+      */
+     @Override
+     public boolean equals(final Object obj) {
+         return (obj instanceof OperationView) && 
source.equals(((OperationView) obj).source);
+     }
+ }
diff --cc 
endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
index 3945e2e6c6,43a30133fa..09b1977630
--- 
a/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
+++ 
b/endorsed/src/org.apache.sis.storage.sql/main/org/apache/sis/storage/sql/feature/Database.java
@@@ -908,6 -920,27 +920,27 @@@ public class Database<G> extends Synta
          listeners.warning(record);
      }
  
+     /**
+      * Creates a listener for warnings that occur during the execution of 
filters or expressions.
+      * This method declares {@link FeatureSet#features(boolean)} as the 
public source of the log.
+      *
+      * @return the warning listener.
+      */
+     final Consumer<WarningEvent> createFilterListener() {
+         return (event) -> {
+             final LogRecord record = resources().createLogRecord(
+                     event.recoverable ? Level.FINE : Level.WARNING,
+                     Resources.Keys.IncompatibleFunction_2,
 -                    
event.getOperatorType().flatMap(CodeList::identifier).orElse("?"),
++                    
event.getOperatorType().map(CodeList::identifier).orElse("?"),
+                     
event.getParameter(ValueReference.class).map(ValueReference<?,?>::getXPath).orElse("?"));
+             record.setThrown(event.exception);
+             record.setSourceClassName(FeatureSet.class.getName());
+             record.setSourceMethodName("features");
+             record.setLoggerName(Modules.SQL);
+             listeners.warning(record);
+         };
+     }
+ 
      /**
       * Creates a tree representation of this database for debugging purpose.
       *
diff --cc geoapi/snapshot
index 352a974aca,e8dfb3b92a..ae34c761d1
--- a/geoapi/snapshot
+++ b/geoapi/snapshot
@@@ -1,1 -1,1 +1,1 @@@
- Subproject commit 352a974acadf2cd5471b51c5e98c866f386e0b5b
 -Subproject commit e8dfb3b92a0141221d33991c197b3f74bb0831c9
++Subproject commit ae34c761d138ab6bc826a7dde1581a560796201b

Reply via email to