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
