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 <[email protected]>
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