From cf9da0ecb8ddae1def4b8a084486cdf81ac4a20a Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Wed, 24 Apr 2024 14:00:11 -0400 Subject: [PATCH 1/9] test: N5URI containerPath --- .../org/janelia/saalfeldlab/n5/N5URLTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index f8e626fef..3daa79a49 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -113,4 +113,19 @@ public void testGetRelative() throws URISyntaxException { "s3://janelia-cosem-datasets/jrc_hela-3/jrc_hela-3.n5#f/g", new N5URI("s3://janelia-cosem-datasets/jrc_hela-3/jrc_hela-3.n5").resolve("#f/g").toString()); } + + @Test + public void testContainerPath() throws URISyntaxException { + + assertEquals( + "/a/b/c/d", + new N5URI("/a/b/c/d?e#f").getContainerPath()); + + final String home = System.getProperty("user.home"); + assertEquals( + home, + new N5URI(home + "?e#f").getContainerPath()); + + } + } \ No newline at end of file From 019c7391fe7f288460d30f26cb452ae61a328e62 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 14:59:02 -0400 Subject: [PATCH 2/9] feat/wip: add N5URI.from String --- .../org/janelia/saalfeldlab/n5/N5URI.java | 38 +++++++++++++++++++ .../org/janelia/saalfeldlab/n5/N5URLTest.java | 9 +++-- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index 01f7b16b8..0cd60570f 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -590,6 +590,44 @@ public static N5URI from( return new N5URI(containerPart + groupPart + attributePart); } + /** + * Generate an {@link N5URI} from a String. + * + * @param uriOrPath + * a string representation of a uri or a path string. + * @return the {@link N5URI} + */ + public static N5URI from(final String uriOrPath) { + + URI uri; + try { + uri = URI.create(uriOrPath); + } catch (Throwable ignore) {} + + try { + final String[] split = uriOrPath.split("\\?"); + final URI tmp = Paths.get(split[0]).toUri(); + if (split.length == 1) + uri = tmp; + else { + StringBuffer buildUri = new StringBuffer(); + buildUri.append(tmp.toString()); + for (int i = 1; i < split.length; i++) + buildUri.append(split[i]); + + uri = new URI(buildUri.toString()); + } + } catch (Throwable ignore) {} + + try { + uri = N5URI.encodeAsUri(uriOrPath); + } catch (URISyntaxException e) { + throw new N5Exception(e); + } + + return new N5URI(uri); + } + /** * Intentionally copied from {@link URI} for internal use * diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index 3daa79a49..12285390c 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -117,14 +117,17 @@ public void testGetRelative() throws URISyntaxException { @Test public void testContainerPath() throws URISyntaxException { + final String home = System.getProperty("user.home"); + final String posixPath = "/a/b/c/d?e#f"; + final String systemPath = home + "?e#f"; + assertEquals( "/a/b/c/d", - new N5URI("/a/b/c/d?e#f").getContainerPath()); + N5URI.from(posixPath).getContainerPath()); - final String home = System.getProperty("user.home"); assertEquals( home, - new N5URI(home + "?e#f").getContainerPath()); + N5URI.from(systemPath).getContainerPath()); } From 2c9b04b6590b5e122ac14d1c55243cb9839a5f1a Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 15:00:24 -0400 Subject: [PATCH 3/9] fix: missing dep --- src/main/java/org/janelia/saalfeldlab/n5/N5URI.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index 0cd60570f..a5d667d36 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -8,6 +8,7 @@ import java.nio.charset.CharsetDecoder; import java.nio.charset.CoderResult; import java.nio.charset.CodingErrorAction; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.List; From 72054c46f05b0e13e592b23b3c4ef2cf75caa57e Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 15:16:50 -0400 Subject: [PATCH 4/9] wip: N5URI.from info --- src/main/java/org/janelia/saalfeldlab/n5/N5URI.java | 6 +++++- .../java/org/janelia/saalfeldlab/n5/N5URLTest.java | 12 +++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index a5d667d36..280622977 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -602,12 +602,14 @@ public static N5URI from(final String uriOrPath) { URI uri; try { - uri = URI.create(uriOrPath); + uri = new URI(uriOrPath); + System.out.println("parsed as uri"); } catch (Throwable ignore) {} try { final String[] split = uriOrPath.split("\\?"); final URI tmp = Paths.get(split[0]).toUri(); + System.out.println("tmp: " + tmp.toString()); if (split.length == 1) uri = tmp; else { @@ -617,11 +619,13 @@ public static N5URI from(final String uriOrPath) { buildUri.append(split[i]); uri = new URI(buildUri.toString()); + System.out.println("path uri: " + uri.toString()); } } catch (Throwable ignore) {} try { uri = N5URI.encodeAsUri(uriOrPath); + System.out.println("encoded uri: " + uri.toString()); } catch (URISyntaxException e) { throw new N5Exception(e); } diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index 12285390c..e81a3d934 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -118,16 +118,18 @@ public void testGetRelative() throws URISyntaxException { public void testContainerPath() throws URISyntaxException { final String home = System.getProperty("user.home"); - final String posixPath = "/a/b/c/d?e#f"; +// final String posixPath = "/a/b/c/d?e#f"; final String systemPath = home + "?e#f"; - assertEquals( - "/a/b/c/d", - N5URI.from(posixPath).getContainerPath()); +// assertEquals( +// "/a/b/c/d", +// N5URI.from(posixPath).getContainerPath()); + + final N5URI systemUri = N5URI.from(systemPath); assertEquals( home, - N5URI.from(systemPath).getContainerPath()); + systemUri.getContainerPath()); } From d1dfc8eb7ebd2950ba3385d198178c884b98afbc Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 15:25:10 -0400 Subject: [PATCH 5/9] fix: N5URI.from --- src/main/java/org/janelia/saalfeldlab/n5/N5URI.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index 280622977..5eb199e76 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -600,10 +600,11 @@ public static N5URI from( */ public static N5URI from(final String uriOrPath) { - URI uri; + URI uri = null; try { uri = new URI(uriOrPath); - System.out.println("parsed as uri"); + System.out.println("direct uri: " + uri.toString()); + return new N5URI(uri); } catch (Throwable ignore) {} try { @@ -615,22 +616,23 @@ public static N5URI from(final String uriOrPath) { else { StringBuffer buildUri = new StringBuffer(); buildUri.append(tmp.toString()); + buildUri.append("?"); for (int i = 1; i < split.length; i++) buildUri.append(split[i]); uri = new URI(buildUri.toString()); System.out.println("path uri: " + uri.toString()); + return new N5URI(uri); } } catch (Throwable ignore) {} try { uri = N5URI.encodeAsUri(uriOrPath); System.out.println("encoded uri: " + uri.toString()); + return new N5URI(N5URI.encodeAsUri(uriOrPath)); } catch (URISyntaxException e) { throw new N5Exception(e); } - - return new N5URI(uri); } /** From ede7058d09ba1bee244d65ba356b501e5c87a63f Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 15:30:13 -0400 Subject: [PATCH 6/9] test: fix system uri test --- src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index e81a3d934..f22627559 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -3,6 +3,7 @@ import org.junit.Test; import java.net.URISyntaxException; +import java.nio.file.Paths; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -126,9 +127,8 @@ public void testContainerPath() throws URISyntaxException { // N5URI.from(posixPath).getContainerPath()); final N5URI systemUri = N5URI.from(systemPath); - assertEquals( - home, + Paths.get(home).toUri().toString(), systemUri.getContainerPath()); } From 2b5e25b4aca371681778a8c3b84f559b76af9955 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 16:23:51 -0400 Subject: [PATCH 7/9] test: normalize file paths before asserting --- src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index f22627559..ca5ea07b2 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -2,6 +2,8 @@ import org.junit.Test; +import java.io.File; +import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Paths; @@ -116,7 +118,7 @@ public void testGetRelative() throws URISyntaxException { } @Test - public void testContainerPath() throws URISyntaxException { + public void testContainerPath() throws URISyntaxException, IOException { final String home = System.getProperty("user.home"); // final String posixPath = "/a/b/c/d?e#f"; @@ -126,10 +128,11 @@ public void testContainerPath() throws URISyntaxException { // "/a/b/c/d", // N5URI.from(posixPath).getContainerPath()); + // normalize with File final N5URI systemUri = N5URI.from(systemPath); assertEquals( - Paths.get(home).toUri().toString(), - systemUri.getContainerPath()); + Paths.get(home).toFile().getCanonicalPath(), + new File(systemUri.getContainerPath()).getCanonicalPath()); } From 816b1be832d993360beee7b55a83e541469e46d2 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 16:33:39 -0400 Subject: [PATCH 8/9] wip: test with uri.getPath --- src/main/java/org/janelia/saalfeldlab/n5/N5URI.java | 6 +++--- src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index 5eb199e76..288bd27a5 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -603,7 +603,7 @@ public static N5URI from(final String uriOrPath) { URI uri = null; try { uri = new URI(uriOrPath); - System.out.println("direct uri: " + uri.toString()); +// System.out.println("direct uri: " + uri.toString()); return new N5URI(uri); } catch (Throwable ignore) {} @@ -621,14 +621,14 @@ public static N5URI from(final String uriOrPath) { buildUri.append(split[i]); uri = new URI(buildUri.toString()); - System.out.println("path uri: " + uri.toString()); +// System.out.println("path uri: " + uri.toString()); return new N5URI(uri); } } catch (Throwable ignore) {} try { uri = N5URI.encodeAsUri(uriOrPath); - System.out.println("encoded uri: " + uri.toString()); +// System.out.println("encoded uri: " + uri.toString()); return new N5URI(N5URI.encodeAsUri(uriOrPath)); } catch (URISyntaxException e) { throw new N5Exception(e); diff --git a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java index ca5ea07b2..d0d7e58b8 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/N5URLTest.java @@ -130,9 +130,11 @@ public void testContainerPath() throws URISyntaxException, IOException { // normalize with File final N5URI systemUri = N5URI.from(systemPath); + System.out.println( Paths.get(home).toFile().getCanonicalPath()); + System.out.println("system uri path " + systemUri.getURI().getPath()); assertEquals( Paths.get(home).toFile().getCanonicalPath(), - new File(systemUri.getContainerPath()).getCanonicalPath()); + new File(systemUri.getURI().getPath()).getCanonicalPath()); } From 83822b106c69cc2cce72ccc898aa5ce1f1790cca Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 25 Apr 2024 16:48:49 -0400 Subject: [PATCH 9/9] refactor: N5URI.from --- .../java/org/janelia/saalfeldlab/n5/N5URI.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java index 288bd27a5..c655abe23 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/N5URI.java @@ -600,19 +600,15 @@ public static N5URI from( */ public static N5URI from(final String uriOrPath) { - URI uri = null; try { - uri = new URI(uriOrPath); -// System.out.println("direct uri: " + uri.toString()); - return new N5URI(uri); + return new N5URI(new URI(uriOrPath)); } catch (Throwable ignore) {} try { final String[] split = uriOrPath.split("\\?"); final URI tmp = Paths.get(split[0]).toUri(); - System.out.println("tmp: " + tmp.toString()); if (split.length == 1) - uri = tmp; + return new N5URI(tmp); else { StringBuffer buildUri = new StringBuffer(); buildUri.append(tmp.toString()); @@ -620,15 +616,11 @@ public static N5URI from(final String uriOrPath) { for (int i = 1; i < split.length; i++) buildUri.append(split[i]); - uri = new URI(buildUri.toString()); -// System.out.println("path uri: " + uri.toString()); - return new N5URI(uri); + return new N5URI(new URI(buildUri.toString())); } } catch (Throwable ignore) {} try { - uri = N5URI.encodeAsUri(uriOrPath); -// System.out.println("encoded uri: " + uri.toString()); return new N5URI(N5URI.encodeAsUri(uriOrPath)); } catch (URISyntaxException e) { throw new N5Exception(e);