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

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


The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
     new 7f1b6e2563 Support URI or Path input in GIMI DataStore
7f1b6e2563 is described below

commit 7f1b6e2563586968320c1b6c7dea9251f8c74469
Author: jsorel <johann.so...@geomatys.com>
AuthorDate: Thu Oct 3 10:19:02 2024 +0200

    Support URI or Path input in GIMI DataStore
---
 .../org/apache/sis/storage/gimi/GimiProvider.java  |  3 +--
 .../org/apache/sis/storage/gimi/GimiStore.java     | 23 +++++++++++++++++-----
 2 files changed, 19 insertions(+), 7 deletions(-)

diff --git 
a/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiProvider.java
 
b/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiProvider.java
index a8e26482d1..60e84b428b 100644
--- 
a/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiProvider.java
+++ 
b/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiProvider.java
@@ -112,8 +112,7 @@ public final class GimiProvider extends DataStoreProvider {
      */
     @Override
     public DataStore open(StorageConnector connector) throws 
DataStoreException {
-        final Path path = connector.getStorageAs(Path.class);
-        return new GimiStore(path);
+        return new GimiStore(connector);
     }
 
 }
diff --git 
a/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiStore.java
 
b/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiStore.java
index 19d6059602..75eb156762 100644
--- 
a/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiStore.java
+++ 
b/incubator/src/org.apache.sis.storage.gimi/main/org/apache/sis/storage/gimi/GimiStore.java
@@ -17,6 +17,7 @@
 package org.apache.sis.storage.gimi;
 
 import java.io.IOException;
+import java.net.URI;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -56,6 +57,7 @@ import org.apache.sis.util.iso.Names;
  */
 public final class GimiStore extends DataStore implements Aggregate {
 
+    private final URI gimiUri;
     private final Path gimiPath;
 
     private List<Resource> components;
@@ -67,8 +69,10 @@ public final class GimiStore extends DataStore implements 
Aggregate {
     private ISOBMFFReader reader;
     private Box root;
 
-    public GimiStore(Path path) {
-        this.gimiPath = path;
+    public GimiStore(StorageConnector connector) throws DataStoreException {
+        this.gimiUri = connector.getStorageAs(URI.class);
+        this.gimiPath = connector.getStorageAs(Path.class);
+        connector.closeAllExcept(null);
     }
 
     /**
@@ -77,7 +81,7 @@ public final class GimiStore extends DataStore implements 
Aggregate {
     @Override
     public Optional<ParameterValueGroup> getOpenParameters() {
         final Parameters parameters = 
Parameters.castOrWrap(GimiProvider.PARAMETERS_DESCRIPTOR.createValue());
-        parameters.parameter(GimiProvider.LOCATION).setValue(gimiPath.toUri());
+        parameters.parameter(GimiProvider.LOCATION).setValue(gimiUri);
         return Optional.of(parameters);
     }
 
@@ -85,7 +89,8 @@ public final class GimiStore extends DataStore implements 
Aggregate {
     public synchronized Metadata getMetadata() throws DataStoreException {
         if (metadata == null) {
             final MetadataBuilder builder = new MetadataBuilder();
-            builder.addIdentifier(Names.createLocalName(null, null, 
IOUtilities.filenameWithoutExtension(gimiPath.getFileName().toString())), 
MetadataBuilder.Scope.ALL);
+            final String path = gimiPath == null ? gimiUri.toString() : 
gimiPath.getFileName().toString();
+            builder.addIdentifier(Names.createLocalName(null, null, 
IOUtilities.filenameWithoutExtension(path)), MetadataBuilder.Scope.ALL);
             metadata = builder.buildAndFreeze();
         }
         return metadata;
@@ -93,7 +98,7 @@ public final class GimiStore extends DataStore implements 
Aggregate {
 
     synchronized ISOBMFFReader getReader() throws DataStoreException {
         if (reader == null) {
-            final StorageConnector cnx = new StorageConnector(gimiPath);
+            final StorageConnector cnx = new StorageConnector(gimiPath == null 
? gimiUri : gimiPath);
             final ChannelDataInput cdi = 
cnx.getStorageAs(ChannelDataInput.class);
             reader = new ISOBMFFReader(cdi);
         }
@@ -230,6 +235,14 @@ public final class GimiStore extends DataStore implements 
Aggregate {
         return resource;
     }
 
+    @Override
+    public Optional<FileSet> getFileSet() throws DataStoreException {
+        if (gimiPath != null) {
+            return Optional.of(new FileSet(gimiPath));
+        }
+        return Optional.empty();
+    }
+
     /**
      * Release internal reader.
      * @throws DataStoreException if closing operation fails

Reply via email to