This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit b1d94f3d84a24ad9e73fc529892229d8fe71dbfe Author: Martin Desruisseaux <[email protected]> AuthorDate: Fri Jul 22 10:10:08 2022 +0200 For GeoTIFF and WorldFile images, `Resource.getIdentifier()` returns a scoped name of the form "filename:imageIndex" instead of a local name of the form "imageIndex". --- .../java/org/apache/sis/internal/gui/DataStoreOpener.java | 14 ++++---------- .../org/apache/sis/storage/geotiff/ImageFileDirectory.java | 11 +++++++++-- .../apache/sis/storage/geotiff/ImageMetadataBuilder.java | 8 ++++++-- .../sis/internal/storage/image/WorldFileResource.java | 9 ++++----- .../sis/internal/storage/image/WorldFileStoreTest.java | 4 ++-- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/DataStoreOpener.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/DataStoreOpener.java index 454d49611a..d402b89405 100644 --- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/DataStoreOpener.java +++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/DataStoreOpener.java @@ -260,10 +260,9 @@ public final class DataStoreOpener extends Task<DataStore> { /* * Search for a title in metadata first because it has better chances to be human-readable * compared to the resource identifier. If the title is the same text as the identifier, - * then we will execute the code path for identifier unless the caller did not asked for - * qualified name, in which case it would make no difference. + * then execute the code path for identifier (i.e. try to find a more informative text). */ - GenericName name = qualified ? resource.getIdentifier().orElse(null) : null; + GenericName name = resource.getIdentifier().orElse(null); Collection<? extends Identification> identifications = null; final Metadata metadata = resource.getMetadata(); if (metadata != null) { @@ -273,7 +272,7 @@ public final class DataStoreOpener extends Task<DataStore> { final Citation citation = identification.getCitation(); if (citation != null) { final String t = string(citation.getTitle(), locale); - if (t != null && (name == null || !t.equals(name.toString()))) { + if (t != null && (name == null || !t.equals(name.tip().toString()))) { return t; } } @@ -285,13 +284,8 @@ public final class DataStoreOpener extends Task<DataStore> { * We search for explicitly declared identifier first before to fallback on * metadata identifier, because the latter is more subject to interpretation. */ - if (!qualified) { - name = resource.getIdentifier().orElse(null); - } if (name != null) { - if (qualified) { - name = name.toFullyQualifiedName(); - } + name = qualified ? name.toFullyQualifiedName() : name.tip(); final String t = string(name.toInternationalString(), locale); if (t != null) return t; } diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java index 001f40e5ba..e5b35f9738 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java @@ -458,6 +458,13 @@ final class ImageFileDirectory extends DataCube { return reader.store.encoding; } + /** + * Returns the image index used in the default identifier. + */ + final String getImageIndex() { + return String.valueOf(index + 1); + } + /** * Returns the identifier in the namespace of the {@link GeoTiffStore}. * The first image has the sequence number "1", optionally customized. @@ -477,8 +484,8 @@ final class ImageFileDirectory extends DataCube { // Should not happen because `setOverviewIdentifier(…)` should have been invoked. return Optional.empty(); } - final String id = String.valueOf(index + 1); - final GenericName name = reader.nameFactory.createLocalName(reader.store.namespace(), id); + GenericName name = reader.nameFactory.createLocalName(reader.store.namespace(), getImageIndex()); + name = name.toFullyQualifiedName(); // Because "1" alone is not very informative. identifier = reader.store.customizer.customize(index, name); if (identifier == null) identifier = name; } diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java index 8870d00f48..157a2d8405 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageMetadataBuilder.java @@ -39,7 +39,7 @@ import org.apache.sis.measure.Units; * discard them (which save a little bit of space) when no longer needed.</div> * * @author Martin Desruisseaux (Geomatys) - * @version 1.2 + * @version 1.3 * @since 1.2 * @module */ @@ -170,7 +170,11 @@ final class ImageMetadataBuilder extends MetadataBuilder { * @throws DataStoreException if an error occurred while reading metadata from the data store. */ void finish(final ImageFileDirectory image, final StoreListeners listeners) throws DataStoreException { - image.getIdentifier().ifPresent((id) -> addTitle(id.toString())); + image.getIdentifier().ifPresent((id) -> { + if (!image.getImageIndex().equals(id.tip().toString())) { + addTitle(id.toString()); + } + }); /* * Add information about the file format. * diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/WorldFileResource.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/WorldFileResource.java index 8c2f9e53ec..887d162dd4 100644 --- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/WorldFileResource.java +++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/image/WorldFileResource.java @@ -26,7 +26,6 @@ import java.awt.image.BandedSampleModel; import javax.imageio.ImageReader; import javax.imageio.ImageReadParam; import javax.imageio.ImageTypeSpecifier; -import org.opengis.util.LocalName; import org.opengis.util.GenericName; import org.opengis.util.InternationalString; import org.apache.sis.image.ImageProcessor; @@ -58,7 +57,7 @@ import static java.lang.Math.toIntExact; * A single image in a {@link WorldFileStore}. * * @author Martin Desruisseaux (Geomatys) - * @version 1.2 + * @version 1.3 * @since 1.2 * @module */ @@ -89,7 +88,7 @@ class WorldFileResource extends AbstractGridCoverageResource implements StoreRes * * @see #getIdentifier() */ - private LocalName identifier; + private GenericName identifier; /** * The grid geometry of this resource. The grid extent is the image size. @@ -188,7 +187,7 @@ class WorldFileResource extends AbstractGridCoverageResource implements StoreRes if (store.suffix != null) { filename = IOUtilities.filenameWithoutExtension(filename); } - identifier = Names.createLocalName(filename, null, id); + identifier = Names.createLocalName(filename, null, id).toFullyQualifiedName(); } return Optional.of(identifier); } @@ -362,7 +361,7 @@ class WorldFileResource extends AbstractGridCoverageResource implements StoreRes final void dispose() { if (identifier != null) { // For information purpose but not really used. - store.identifiers.put(identifier.toString(), Boolean.FALSE); + store.identifiers.put(identifier.tip().toString(), Boolean.FALSE); } store = null; identifier = null; diff --git a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/image/WorldFileStoreTest.java b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/image/WorldFileStoreTest.java index 1f4c1c58c6..ac413bf294 100644 --- a/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/image/WorldFileStoreTest.java +++ b/storage/sis-storage/src/test/java/org/apache/sis/internal/storage/image/WorldFileStoreTest.java @@ -43,7 +43,7 @@ import static org.apache.sis.test.TestUtilities.getSingleton; * Tests {@link WorldFileStore} and {@link WorldFileStoreProvider}. * * @author Martin Desruisseaux (Geomatys) - * @version 1.2 + * @version 1.3 * @since 1.2 * @module */ @@ -126,7 +126,7 @@ public final strictfp class WorldFileStoreTest extends TestCase { try (WorldFileStore source = provider.open(testData())) { assertFalse(source instanceof WritableStore); final GridCoverageResource resource = getSingleton(source.components()); - assertEquals("identifier", "1", resource.getIdentifier().get().toString()); + assertEquals("identifier", "gradient:1", resource.getIdentifier().get().toString()); /* * Above `resource` is the content of "gradient.png" file. * Write the resource in a new file using a different format.
