From 0cfa51487082da59a08b77f05ce291a402165a37 Mon Sep 17 00:00:00 2001 From: belu-23 Date: Wed, 22 Jan 2025 09:51:51 +0100 Subject: [PATCH] use ZnapZipStore and construct zipFilePath correctly --- .../snap/dataio/znap/ZnapProductReader.java | 3 +- .../dataio/znap/ZnapProductReaderPlugIn.java | 3 +- .../esa/snap/dataio/znap/ZnapZipStore.java | 2 +- .../snap/dataio/znap/ZnapZipStoreTest.java | 42 +++++++++++++++++++ 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 snap-znap/src/test/java/org/esa/snap/dataio/znap/ZnapZipStoreTest.java diff --git a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReader.java b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReader.java index a1eeef1d9c3..0f168321f66 100644 --- a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReader.java +++ b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReader.java @@ -24,7 +24,6 @@ import com.bc.zarr.ZarrGroup; import com.bc.zarr.storage.FileSystemStore; import com.bc.zarr.storage.Store; -import com.bc.zarr.storage.ZipStore; import org.esa.snap.core.dataio.AbstractProductReader; import org.esa.snap.core.dataio.ProductIO; import org.esa.snap.core.dataio.ProductReader; @@ -204,7 +203,7 @@ protected Product readProductNodesImpl() throws IOException { } assert rootPath != null; if (Files.isRegularFile(rootPath)) { - store = new ZipStore(rootPath); + store = new ZnapZipStore(rootPath); } else { store = new FileSystemStore(rootPath); } diff --git a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReaderPlugIn.java b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReaderPlugIn.java index 115583e6a8f..59d8683f8ee 100644 --- a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReaderPlugIn.java +++ b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapProductReaderPlugIn.java @@ -21,7 +21,6 @@ import static org.esa.snap.dataio.znap.ZnapConstantsAndUtils.*; import static com.bc.zarr.ZarrConstants.*; -import com.bc.zarr.storage.ZipStore; import org.esa.snap.core.dataio.DecodeQualification; import org.esa.snap.core.dataio.ProductReader; import org.esa.snap.core.dataio.ProductReaderPlugIn; @@ -77,7 +76,7 @@ public DecodeQualification getDecodeQualification(Object input) { } final boolean isValidZnapZipArchiveName = productRootName != null && productRootName.toString().toLowerCase().endsWith(ZNAP_ZIP_CONTAINER_EXTENSION); if (isValidZnapZipArchiveName) { - try (ZipStore zipStore = new ZipStore(productRoot)) { + try (ZnapZipStore zipStore = new ZnapZipStore(productRoot)) { final InputStream productHeaderStream = zipStore.getInputStream(FILENAME_DOT_ZGROUP); final boolean productHeaderExist = productHeaderStream != null; if (productHeaderExist) { diff --git a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapZipStore.java b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapZipStore.java index d21838a50c8..324c1eb55dd 100644 --- a/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapZipStore.java +++ b/snap-znap/src/main/java/org/esa/snap/dataio/znap/ZnapZipStore.java @@ -30,7 +30,7 @@ public ZnapZipStore(Path zipFilePath) throws IOException { zipParams.put("create", "true"); zipParams.put("noCompression", "true"); } - final URI uri = URI.create("jar:file:" + zipFilePath.toUri().getPath()); + final URI uri = URI.create("jar:" + zipFilePath.toUri()); zfs = getFileSystem(zipParams, uri); internalRoot = zfs.getRootDirectories().iterator().next(); } diff --git a/snap-znap/src/test/java/org/esa/snap/dataio/znap/ZnapZipStoreTest.java b/snap-znap/src/test/java/org/esa/snap/dataio/znap/ZnapZipStoreTest.java new file mode 100644 index 00000000000..61cb3eae8b3 --- /dev/null +++ b/snap-znap/src/test/java/org/esa/snap/dataio/znap/ZnapZipStoreTest.java @@ -0,0 +1,42 @@ +package org.esa.snap.dataio.znap; + +import com.bc.ceres.annotation.STTM; +import org.junit.Test; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.HashMap; + +import static org.junit.Assert.*; + +public class ZnapZipStoreTest { + + @Test + @STTM("SNAP-3872") + public void testZnapZipStoreHandlesSpacesInPath() throws IOException { + + Path tempDir = Files.createTempDirectory("znap_test"); + Path zipFilePath = tempDir.resolve("test file with spaces.znap.zip"); + + HashMap env = new HashMap<>(); + env.put("create", "true"); + try (FileSystem zipFs = FileSystems.newFileSystem(URI.create("jar:" + zipFilePath.toUri()), env)) { + Path dummyFile = zipFs.getPath("dummy.txt"); + Files.write(dummyFile, "Dummy Text!".getBytes()); + } + + try { + new ZnapZipStore(zipFilePath); + } catch (IOException e) { + fail("ZnapZipStore constructor threw an exception for a path with spaces: " + e.getMessage()); + } finally { + Files.deleteIfExists(zipFilePath); + Files.deleteIfExists(tempDir); + } + + } +} \ No newline at end of file