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