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.

Reply via email to