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 edc8e9e83eedcd936e9b1e23ad0902296ad26fb5 Merge: ae3809ff1c 27465f381e Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Tue Oct 1 18:36:18 2024 +0200 Merge branch 'geoapi-4.0' into geoapi-3.1. The main works are: - Addition of the optional `org.apache.sis.storage.gdal` module. - More work on GSF and GIMI modules (incubator). - API change in subsampling: `int` → `long`. - Functionality of `ResourceOnFileSystem` made public. - Documentation. .../apache/sis/buildtools/gradle/Dependency.java | 11 +- .../org/apache/sis/cloud/aws/s3/FileService.java | 1 - .../main/org/apache/sis/cloud/aws/s3/KeyPath.java | 1 - .../apache/sis/cloud/aws/s3/ObjectAttributes.java | 1 - .../sis/cloud/aws/{internal => s3}/Resources.java | 6 +- .../aws/{internal => s3}/Resources.properties | 0 .../cloud/aws/{internal => s3}/Resources_en.java | 4 +- .../cloud/aws/{internal => s3}/Resources_fr.java | 4 +- .../aws/{internal => s3}/Resources_fr.properties | 0 .../sis/cloud/aws/s3/KeyPathMatcherTest.java | 13 + .../org/apache/sis/cloud/aws/s3/KeyPathTest.java | 8 +- .../org.apache.sis.feature/main/module-info.java | 1 + .../sis/coverage/grid/BufferedGridCoverage.java | 1 + .../apache/sis/coverage/grid/GridDerivation.java | 177 +- .../org/apache/sis/coverage/grid/GridExtent.java | 63 +- .../org/apache/sis/coverage/grid/GridGeometry.java | 27 +- .../apache/sis/coverage/grid/ImageRenderer.java | 15 +- .../sis/coverage/privy/ColorModelBuilder.java | 13 +- .../sis/coverage/privy/ColorModelFactory.java | 8 +- .../org/apache/sis/coverage/privy/ImageLayout.java | 40 +- .../apache/sis/coverage/privy/ImageUtilities.java | 36 +- .../apache/sis/coverage/privy/ObservableImage.java | 2 +- .../apache/sis/coverage/privy/RangeArgument.java | 16 +- .../apache/sis/coverage/privy/RasterFactory.java | 4 +- .../apache/sis/coverage/privy/TilePlaceholder.java | 16 +- .../main/org/apache/sis/image/DataType.java | 39 +- .../main/org/apache/sis/image/ImageProcessor.java | 2 +- .../org/apache/sis/image/MultiSourceLayout.java | 2 +- .../main/org/apache/sis/image/Transferer.java | 2 +- .../sis/coverage/grid/GridDerivationTest.java | 16 +- .../apache/sis/coverage/grid/GridExtentTest.java | 4 +- .../apache/sis/coverage/grid/GridGeometryTest.java | 2 +- .../apache/sis/coverage/privy/ImageLayoutTest.java | 8 + .../sis/coverage/privy/ImageUtilitiesTest.java | 8 - .../sis/coverage/privy/RangeArgumentTest.java | 2 +- .../apache/sis/image/BandAggregateImageTest.java | 2 +- .../sis/metadata/iso/citation/Citations.java | 58 +- .../main/org/apache/sis/metadata/sql/Citations.sql | 33 +- .../main/org/apache/sis/metadata/sql/Metadata.sql | 4 +- .../apache/sis/metadata/sql/MetadataFallback.java | 26 +- .../sis/metadata/iso/citation/CitationsTest.java | 2 +- .../sis/metadata/sql/MetadataFallbackVerifier.java | 3 +- .../test/org/apache/sis/xml/test/InfiniteSet.java | 2 +- .../main/module-info.java | 2 + .../main/org/apache/sis/io/wkt/AbstractParser.java | 6 +- .../main/org/apache/sis/io/wkt/Element.java | 5 +- .../main/org/apache/sis/io/wkt/Warnings.java | 14 +- .../referencing/datum/DefaultVerticalDatum.java | 10 +- .../factory/ConcurrentAuthorityFactory.java | 24 +- .../referencing/factory/GeodeticObjectFactory.java | 4 +- .../operation/provider/NorthPoleRotation.java | 3 +- .../operation/provider/SouthPoleRotation.java | 3 +- .../operation/transform/ProjectiveTransform.java | 2 +- .../apache/sis/storage/landsat/LandsatStore.java | 3 +- .../apache/sis/storage/landsat/MetadataReader.java | 14 +- .../sis/storage/landsat/MetadataReaderTest.java | 282 ++-- .../sis/storage/geotiff/CompressedSubset.java | 34 +- .../org/apache/sis/storage/geotiff/DataCube.java | 34 +- .../org/apache/sis/storage/geotiff/DataSubset.java | 66 +- .../apache/sis/storage/geotiff/GeoTiffStore.java | 11 +- .../sis/storage/geotiff/ImageFileDirectory.java | 55 +- .../sis/storage/geotiff/MultiResolutionImage.java | 11 +- .../geotiff/reader/ImageMetadataBuilder.java | 2 - .../apache/sis/storage/netcdf/MetadataReader.java | 68 +- .../org/apache/sis/storage/netcdf/NetcdfStore.java | 7 +- .../sis/storage/netcdf/NetcdfStoreProvider.java | 12 +- .../org/apache/sis/storage/netcdf/base/Axis.java | 18 +- .../apache/sis/storage/netcdf/base/CRSBuilder.java | 16 +- .../apache/sis/storage/netcdf/base/Convention.java | 8 +- .../apache/sis/storage/netcdf/base/Decoder.java | 31 +- .../apache/sis/storage/netcdf/base/FeatureSet.java | 26 +- .../sis/storage/netcdf/base/GridMapping.java | 11 +- .../org/apache/sis/storage/netcdf/base/HYCOM.java | 124 -- .../sis/storage/netcdf/base/NamedElement.java | 6 + .../org/apache/sis/storage/netcdf/base/Node.java | 27 +- .../sis/storage/netcdf/base/RasterResource.java | 13 +- .../apache/sis/storage/netcdf/base/Variable.java | 94 +- .../storage/netcdf/base/VariableTransformer.java | 312 ++++ .../sis/storage/netcdf/classic/ChannelDecoder.java | 32 +- .../sis/storage/netcdf/classic/GridInfo.java | 22 +- .../sis/storage/netcdf/classic/VariableInfo.java | 51 +- .../sis/storage/netcdf/ucar/DecoderWrapper.java | 65 +- .../sis/storage/netcdf/ucar/GridWrapper.java | 3 +- .../sis/storage/netcdf/ucar/VariableWrapper.java | 14 +- .../sis/storage/netcdf/MetadataReaderTest.java | 104 +- .../sis/storage/sql/feature/FeatureAnalyzer.java | 7 +- .../sis/storage/sql/feature/TableReference.java | 2 +- .../org.apache.sis.storage/main/module-info.java | 3 + .../apache/sis/io/stream/HyperRectangleWriter.java | 2 +- .../main/org/apache/sis/io/stream/Region.java | 4 +- .../sis/storage/AbstractGridCoverageResource.java | 2 +- .../main/org/apache/sis/storage/FeatureNaming.java | 28 +- .../main/org/apache/sis/storage/Resource.java | 206 ++- .../apache/sis/storage/base/MetadataBuilder.java | 155 +- .../org/apache/sis/storage/base/PRJDataStore.java | 35 +- .../sis/storage/base/ResourceOnFileSystem.java | 71 - .../sis/storage/base/TiledDeferredImage.java | 15 +- .../apache/sis/storage/base/TiledGridCoverage.java | 853 +++++++--- .../apache/sis/storage/base/TiledGridResource.java | 384 ++++- .../org/apache/sis/storage/base/URIDataStore.java | 37 +- .../sis/storage/base/URIDataStoreProvider.java | 9 +- .../main/org/apache/sis/storage/csv/Store.java | 31 +- .../org/apache/sis/storage/esri/RasterStore.java | 16 +- .../apache/sis/storage/esri/RawRasterReader.java | 4 +- .../apache/sis/storage/esri/RawRasterStore.java | 5 +- .../main/org/apache/sis/storage/folder/Store.java | 6 +- .../apache/sis/storage/folder/WritableStore.java | 39 +- .../sis/storage/image/WorldFileResource.java | 18 +- .../apache/sis/storage/image/WorldFileStore.java | 13 +- .../org/apache/sis/storage/internal/Resources.java | 5 + .../sis/storage/internal/Resources.properties | 1 + .../sis/storage/internal/Resources_fr.properties | 1 + .../sis/io/stream/HyperRectangleReaderTest.java | 10 +- .../sis/io/stream/HyperRectangleWriterTest.java | 2 +- .../io/stream/SubsampledRectangleWriterTest.java | 2 +- .../sis/storage/esri/AsciiGridStoreTest.java | 59 +- .../sis/storage/test/CoverageReadConsistency.java | 12 +- .../src/org.apache.sis.util/main/module-info.java | 4 + .../main/org/apache/sis/math/Vector.java | 2 +- .../main/org/apache/sis/system/Cleaners.java} | 28 +- .../apache/sis/system/ReferenceQueueConsumer.java | 13 +- .../main/org/apache/sis/system/Shutdown.java | 2 +- .../main/org/apache/sis/util/Version.java | 53 +- .../main/org/apache/sis/util/collection/Cache.java | 1 + .../org/apache/sis/util/privy/CollectionsExt.java | 69 +- .../main/org/apache/sis/util/privy/Constants.java | 11 + .../main/org/apache/sis/util/resources/Errors.java | 5 + .../apache/sis/util/resources/Errors.properties | 1 + .../apache/sis/util/resources/Errors_fr.properties | 1 + .../org/apache/sis/test/LogRecordCollector.java | 2 +- .../test/org/apache/sis/util/VersionTest.java | 9 + .../apache/sis/util/privy/CollectionsExtTest.java | 4 +- geoapi/snapshot | 2 +- incubator/build.gradle.kts | 4 +- .../apache/sis/storage/geopackage/GpkgStore.java | 26 +- .../org/apache/sis/storage/gimi/GimiProvider.java | 2 +- .../org/apache/sis/storage/gimi/GimiStore.java | 17 +- .../apache/sis/storage/gimi/GimiTileMatrix.java | 4 +- .../org/apache/sis/storage/gimi/ResourceGrid.java | 64 +- .../storage/gimi/ResourceImageUncompressed.java | 134 +- .../apache/sis/storage/gimi/ResourcePyramid.java | 62 +- .../storage/gimi/internal/MatrixGridRessource.java | 32 +- .../sis/storage/gimi/internal/ScaleSortedMap.java | 2 +- .../isobmff/gimi/ModelTransformationProperty.java | 9 + .../gimi/isobmff/gimi/WellKnownText2Property.java | 9 + .../gimi/isobmff/iso23001_17/TAIClockInfo.java | 4 +- .../main/module-info.java | 2 + .../main/org/apache/sis/storage/gsf/Attitude.java | 11 +- .../main/org/apache/sis/storage/gsf/Comment.java | 10 +- .../main/org/apache/sis/storage/gsf/DataID.java | 9 +- .../main/org/apache/sis/storage/gsf/GSF.java | 1780 ++++++-------------- .../apache/sis/storage/gsf/GSFException.java} | 16 +- .../apache/sis/storage/gsf/GSFRecordReader.java | 122 +- .../main/org/apache/sis/storage/gsf/GSFStore.java | 102 ++ .../apache/sis/storage/gsf/GSFStoreProvider.java | 212 +++ .../apache/sis/storage/gsf/HVNavigationError.java | 9 +- .../main/org/apache/sis/storage/gsf/Header.java | 9 +- .../main/org/apache/sis/storage/gsf/History.java | 10 +- .../apache/sis/storage/gsf/NavigationError.java | 10 +- .../main/org/apache/sis/storage/gsf/Position.java | 13 +- .../apache/sis/storage/gsf/PositionOffsets.java | 8 +- .../sis/storage/gsf/ProcessingParameters.java | 8 +- .../main/org/apache/sis/storage/gsf/Records.java | 10 +- .../apache/sis/storage/gsf/SBSensorSpecific.java | 48 +- .../main/org/apache/sis/storage/gsf/SVP.java | 9 +- .../org/apache/sis/storage/gsf/ScaleFactors.java | 10 +- .../main/org/apache/sis/storage/gsf/ScaleInfo.java | 10 +- .../apache/sis/storage/gsf/SensorParameters.java | 10 +- .../org/apache/sis/storage/gsf/SensorSpecific.java | 141 +- .../org/apache/sis/storage/gsf/SingleBeamPing.java | 10 +- .../org/apache/sis/storage/gsf/StructClass.java | 32 +- .../org/apache/sis/storage/gsf/SwathBathyPing.java | 8 +- .../apache/sis/storage/gsf/SwathBathySummary.java | 10 +- .../main/org/apache/sis/storage/gsf/TimeSpec.java | 8 +- .../sis/storage/gsf/panama/LibraryLoader.java | 125 ++ .../sis/storage/gsf/panama/LibraryStatus.java | 26 +- .../sis/storage/gsf/panama/NativeFunctions.java | 84 + .../sis/storage/gsf/panama}/package-info.java | 16 +- .../gsf/specific/{BDBSpecific.java => BDB.java} | 11 +- .../{CmpSassSpecific.java => CmpSass.java} | 12 +- .../specific/{DeltaTSpecific.java => DeltaT.java} | 11 +- .../specific/{EM100Specific.java => EM100.java} | 18 +- .../gsf/specific/{EM12Specific.java => EM12.java} | 171 +- .../specific/{EM121ASpecific.java => EM121A.java} | 227 +-- .../gsf/specific/{EM3Specific.java => EM3.java} | 268 +-- .../{EM3ImagerySpecific.java => EM3Imagery.java} | 242 +-- .../specific/{EM3RawSpecific.java => EM3Raw.java} | 442 +---- .../sis/storage/gsf/specific/EM3RawTxSector.java | 238 +-- .../sis/storage/gsf/specific/EM3RunTime.java | 679 +------- .../gsf/specific/{EM4Specific.java => EM4.java} | 418 +---- .../{EM4ImagerySpecific.java => EM4Imagery.java} | 339 +--- .../sis/storage/gsf/specific/EM4TxSector.java | 262 +-- .../specific/{EM950Specific.java => EM950.java} | 155 +- .../sis/storage/gsf/specific/EMPUStatus.java | 167 +- .../apache/sis/storage/gsf/specific/EMRunTime.java | 790 +-------- .../{EchotracSpecific.java => Echotrac.java} | 83 +- .../{ElacMkIISpecific.java => ElacMkII.java} | 179 +- ...GeoSwathPlusSpecific.java => GeoSwathPlus.java} | 626 +------ .../specific/{KMALLSpecific.java => KMALL.java} | 11 +- .../sis/storage/gsf/specific/KMALLExtraDet.java | 94 +- ...n7100ImagerySpecific.java => KMALLImagery.java} | 100 +- .../sis/storage/gsf/specific/KMALLTxSector.java | 334 +--- ...Klein5410BssSpecific.java => Klein5410Bss.java} | 434 +---- ...agerySpecific.java => Klein5410BssImagery.java} | 138 +- .../specific/{MGD77Specific.java => MGD77.java} | 155 +- .../specific/{NOSHDBSpecific.java => NOSHDB.java} | 60 +- .../{R2SonicSpecific.java => R2Sonic.java} | 806 +-------- ...nicImagerySpecific.java => R2SonicImagery.java} | 695 +------- .../{Reson7100Specific.java => Reson7100.java} | 1196 ++----------- ...LImagerySpecific.java => Reson7100Imagery.java} | 60 +- .../{Reson8100Specific.java => Reson8100.java} | 674 +------- ...0ImagerySpecific.java => Reson8100Imagery.java} | 51 +- ...ResonTSeriesSpecific.java => ResonTSeries.java} | 1542 ++--------------- ...agerySpecific.java => ResonTSeriesImagery.java} | 74 +- .../specific/{SBAmpSpecific.java => SBAmp.java} | 155 +- .../specific/{SBBDBSpecific.java => SBBDB.java} | 218 +-- .../{SBEchotracSpecific.java => SBEchotrac.java} | 146 +- .../specific/{MGD77Specific.java => SBMGD77.java} | 186 +- .../sis/storage/gsf/specific/SBMGD77Specific.java | 400 ----- .../{SBNOSHDBSpecific.java => SBNOSHDB.java} | 98 +- .../{SBNavisoundSpecific.java => SBNavisound.java} | 74 +- .../specific/{SeaBatSpecific.java => SeaBat.java} | 155 +- .../{SeaBat8101Specific.java => SeaBat8101.java} | 434 +---- .../{SeaBatSpecific.java => SeaBatII.java} | 218 ++- .../sis/storage/gsf/specific/SeaBatIISpecific.java | 490 ------ .../{SeaBeam2112Specific.java => SeaBeam2112.java} | 257 +-- .../{SeabeamSpecific.java => Seabeam.java} | 35 +- .../specific/{SeamapSpecific.java => Seamap.java} | 256 +-- .../{TypeIIISpecific.java => TypeIII.java} | 155 +- .../sis/storage/shapefile/ShapefileStore.java | 17 +- .../sis/storage/shapefile/ShapefileStoreTest.java | 31 +- netbeans-project/nbproject/project.properties | 1 + optional/README.md | 3 + optional/build.gradle.kts | 19 +- optional/src/org.apache.sis.gui/bundle/README | 5 +- .../org/apache/sis/gui/coverage/GridTileCache.java | 4 +- .../org/apache/sis/gui/dataset/PathAction.java | 27 +- .../org/apache/sis/gui/map/GestureFollower.java | 2 +- .../main/org/apache/sis/gui/map/MapCanvas.java | 2 +- .../sis/gui/metadata/IdentificationInfo.java | 26 +- .../org/apache/sis/gui/metadata/MetadataTree.java | 12 +- .../org.apache.sis.storage.DataStoreProvider | 4 + .../main/module-info.java | 59 + .../main/org/apache/sis/storage/gdal/Band.java | 368 ++++ .../sis/storage/gdal/ColorInterpretation.java | 78 + .../main/org/apache/sis/storage/gdal/DataType.java | 193 +++ .../main/org/apache/sis/storage/gdal/Driver.java | 380 +++++ .../org/apache/sis/storage/gdal/ErrorHandler.java | 253 +++ .../main/org/apache/sis/storage/gdal/GDAL.java | 606 +++++++ .../org/apache/sis/storage/gdal/GDALStore.java | 511 ++++++ .../apache/sis/storage/gdal/GDALStoreProvider.java | 325 ++++ .../main/org/apache/sis/storage/gdal/OpenFlag.java | 153 ++ .../main/org/apache/sis/storage/gdal/Opener.java | 204 +++ .../org/apache/sis/storage/gdal/SpatialRef.java | 174 ++ .../org/apache/sis/storage/gdal/Subdataset.java | 69 + .../apache/sis/storage/gdal/SubdatasetList.java | 167 ++ .../org/apache/sis/storage/gdal/TiledCoverage.java | 124 ++ .../org/apache/sis/storage/gdal/TiledResource.java | 615 +++++++ .../org/apache/sis/storage/gdal/package-info.java | 44 + .../apache/sis/storage/panama/LibraryLoader.java | 223 +++ .../apache/sis/storage/panama/LibraryStatus.java | 89 + .../apache/sis/storage/panama/NativeFunctions.java | 225 +++ .../org/apache/sis/storage/panama}/Resources.java | 82 +- .../sis/storage/panama}/Resources.properties | 17 +- .../apache/sis/storage/panama}/Resources_en.java | 2 +- .../apache/sis/storage/panama}/Resources_fr.java | 2 +- .../sis/storage/panama}/Resources_fr.properties | 17 +- .../apache/sis/storage/panama}/package-info.java | 14 +- .../org/apache/sis/storage/gdal/GDALStoreTest.java | 221 +++ .../test/org/apache/sis/storage/gdal/test.tiff | Bin 0 -> 4009 bytes 270 files changed, 11148 insertions(+), 17092 deletions(-) diff --cc endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java index f20c808ffb,258a05277a..83d43908ba --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/MetadataBuilder.java @@@ -3053,14 -3081,54 +3083,54 @@@ public class MetadataBuilder public final void setFormatEdition(final CharSequence value) { final InternationalString i18n = trim(value); if (i18n != null) { - @SuppressWarnings("LocalVariableHidesMemberVariable") - final DefaultFormat format = format(); - DefaultCitation c = DefaultCitation.castOrCopy(format.getFormatSpecificationCitation()); - if (c == null) { - c = new DefaultCitation(); - format.setFormatSpecificationCitation(c); + getFormatCitation().setEdition(i18n); + } + } + + /** + * Adds a note about which reader is used. This method should not be invoked before + * the {@linkplain #addFormatName format name} has been set. Storage location is: + * + * <ul> + * <li>{@code metadata/identificationInfo/resourceFormat/formatSpecificationCitation/identifier}</li> + * <li>{@code metadata/identificationInfo/resourceFormat/formatSpecificationCitation/otherCitationDetails}</li> + * </ul> + * + * If this method is used together with {@link #setPredefinedFormat setPredefinedFormat(…)}, + * then the predefined format should be set <strong>before</strong> this method. + * + * @param driver library-specific way to identify the format (mandatory). + * @param version the library version, or {@code null} if unknown. + */ + public final void addFormatReader(final Identifier driver, final Version version) { + CharSequence title = null; + Citation authority = driver.getAuthority(); + if (authority != null) { + title = authority.getTitle(); + if (title != null) { + for (CharSequence t : authority.getAlternateTitles()) { + if (t.length() < title.length()) { + title = t; // Alternate titles are often abbreviations. + } + } } - c.setEdition(i18n); + } + final DefaultCitation c = getFormatCitation(); + addIfNotPresent(c.getIdentifiers(), driver); - addIfNotPresent(c.getOtherCitationDetails(), ++ c.setOtherCitationDetails( + Resources.formatInternational(Resources.Keys.ReadBy_2, (title != null) ? title : driver.getCodeSpace(), + (version != null) ? version : Vocabulary.formatInternational(Vocabulary.Keys.Unspecified))); + } + + /** + * Adds a note saying that Apache <abbr>SIS</abbr> has been used for decoding the format. + * This method should not be invoked before the {@linkplain #addFormatName format name} has been set. + * + * @param name the format name, or {@code null} if unspecified. + */ + public void addFormatReaderSIS(final String name) { + if (name != null) { + addFormatReader(new ImmutableIdentifier(Citations.SIS, Constants.SIS, name), Version.SIS); } } diff --cc endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java index 5f70abf546,d654e224a6..324cf33c95 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/base/TiledGridCoverage.java @@@ -45,11 -47,9 +47,12 @@@ import org.apache.sis.storage.tiling.Ti import org.apache.sis.storage.internal.Resources; import org.apache.sis.util.collection.WeakValueHashMap; import org.apache.sis.util.resources.Errors; + import org.apache.sis.util.privy.Numerics; import static org.apache.sis.pending.jdk.JDK18.ceilDiv; +// Specific to the main and geoapi-3.1 branches: +import org.opengis.geometry.MismatchedDimensionException; + // Specific to the geoapi-3.1 and geoapi-4.0 branches: import org.opengis.coverage.CannotEvaluateException; diff --cc geoapi/snapshot index 99dad58954,8b993c74d8..d71280997a --- a/geoapi/snapshot +++ b/geoapi/snapshot @@@ -1,1 -1,1 +1,1 @@@ - Subproject commit 99dad589544973864a78b982a48766b2c6a0e872 -Subproject commit 8b993c74d8f49b215f6b4aa2747e0f362d97d3e3 ++Subproject commit d71280997a414d08eefa588c12415cef390011e2