From 2382bf42ea4fde76a9dc61d00660b8c591e29ce2 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 13 Nov 2025 20:10:15 +0100 Subject: [PATCH 1/9] chore: bump to 6.1.3-alpha-4-SNAPSHOT * bump dependencies to alpha versions --- pom.xml | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 76c80a8..9559a61 100644 --- a/pom.xml +++ b/pom.xml @@ -5,12 +5,12 @@ org.scijava pom-scijava - 38.0.1 + 43.0.0 org.janelia.saalfeldlab n5-viewer_fiji - 6.1.3-SNAPSHOT + 6.1.3-alpha-4-SNAPSHOT N5 Viewer for Fiji BigDataViewer-based visualization tool for N5 datasets @@ -134,13 +134,15 @@ 10.6.1 1.0.0-beta-36 - 7.1.1 - 3.3.0 - 4.2.1 - 4.1.1 - 4.2.5 - 7.0.2 - 1.6.0 + 4.0.0-alpha-7-SNAPSHOT + 4.4.0-alpha-4 + 5.2.0-alpha-4 + 2.0.0-alpha-5-SNAPSHOT + 2.3.0-alpha-4 + 2.0.0-alpha-4 + 7.1.0-alpha-6 + 2.0.0-alpha-4 + 2.4.0-alpha-7-SNAPSHOT From d4e0cdd50ef62a91b3bad730970b3b2759dd3336 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Thu, 13 Nov 2025 20:10:34 +0100 Subject: [PATCH 2/9] fix: add OME-Zarr 0.5 metadata parser --- .../java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java | 9 ++++++++- .../org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java index 55f8781..620751b 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5Viewer.java @@ -80,6 +80,7 @@ import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.NgffSingleScaleAxesMetadata; import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMetadata; import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMultiScaleMetadata; +import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v05.OmeNgffV05Metadata; import org.scijava.ui.behaviour.io.InputTriggerConfig; import org.scijava.ui.behaviour.util.Actions; import org.scijava.ui.behaviour.util.InputActionBindings; @@ -543,6 +544,12 @@ public static & NativeType, V extends Volatile & .sort(multiScaleDataset.getPaths(), multiScaleDataset.spatialTransforms3d()); datasetsToOpen = msd.getPaths(); transforms = msd.getTransforms(); + } else if (metadata instanceof OmeNgffV05Metadata) { + final OmeNgffV05Metadata multiScaleDataset = (OmeNgffV05Metadata)metadata; + final MultiscaleDatasets msd = MultiscaleDatasets + .sort(multiScaleDataset.getPaths(), multiScaleDataset.spatialTransforms3d()); + datasetsToOpen = msd.getPaths(); + transforms = msd.getTransforms(); } else if (metadata instanceof N5CosemMultiScaleMetadata) { final N5CosemMultiScaleMetadata multiScaleDataset = (N5CosemMultiScaleMetadata)metadata; final MultiscaleDatasets msd = MultiscaleDatasets @@ -722,7 +729,7 @@ protected static & NativeType> RandomAccessibleInte final N5Reader n5, final String dataset) { final CachedCellImg img = N5Utils.openVolatile(n5, dataset); - final Object t = Util.getTypeFromInterval(img); + final Object t = img.getType(); if( t instanceof LabelMultisetType ) { final CachedCellImg lmsImg = (CachedCellImg)img; diff --git a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java index fd59284..74bcb5f 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java @@ -18,6 +18,7 @@ import org.janelia.saalfeldlab.n5.universe.metadata.N5ViewerMultiscaleMetadataParser; import org.janelia.saalfeldlab.n5.universe.metadata.canonical.CanonicalMetadataParser; import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v04.OmeNgffMetadataParser; +import org.janelia.saalfeldlab.n5.universe.metadata.ome.ngff.v05.OmeNgffV05MetadataParser; import ij.ImageJ; @@ -34,6 +35,7 @@ public class N5ViewerCreator { public static final N5MetadataParser[] n5vGroupParsers = new N5MetadataParser[]{ new OmeNgffMetadataParser(), + new OmeNgffV05MetadataParser(), new N5CosemMultiScaleMetadata.CosemMultiScaleParser(), new N5ViewerMultiscaleMetadataParser(), new CanonicalMetadataParser(), From 96082ff670e67b2936e264510a11d8d529ddba9e Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Fri, 14 Nov 2025 08:08:14 +0100 Subject: [PATCH 3/9] feat: add N5ViewerCreator.runWithDialog --- .../saalfeldlab/n5/bdv/N5ViewerCreator.java | 46 ++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java index 74bcb5f..3d15a53 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java @@ -1,15 +1,20 @@ package org.janelia.saalfeldlab.n5.bdv; import java.io.IOException; +import java.util.Collections; +import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.function.Consumer; +import javax.swing.JTree; + import org.janelia.saalfeldlab.n5.ij.N5Importer; import org.janelia.saalfeldlab.n5.metadata.N5ViewerMultichannelMetadata; import org.janelia.saalfeldlab.n5.metadata.imagej.ImagePlusLegacyMetadataParser; import org.janelia.saalfeldlab.n5.ui.DataSelection; import org.janelia.saalfeldlab.n5.ui.DatasetSelectorDialog; +import org.janelia.saalfeldlab.n5.ui.N5SwingTreeNode; import org.janelia.saalfeldlab.n5.universe.metadata.N5CosemMetadataParser; import org.janelia.saalfeldlab.n5.universe.metadata.N5CosemMultiScaleMetadata; import org.janelia.saalfeldlab.n5.universe.metadata.N5GenericSingleScaleMetadataParser; @@ -34,8 +39,8 @@ public class N5ViewerCreator { public static final N5MetadataParser[] n5vGroupParsers = new N5MetadataParser[]{ - new OmeNgffMetadataParser(), new OmeNgffV05MetadataParser(), + new OmeNgffMetadataParser(), new N5CosemMultiScaleMetadata.CosemMultiScaleParser(), new N5ViewerMultiscaleMetadataParser(), new CanonicalMetadataParser(), @@ -52,6 +57,8 @@ public class N5ViewerCreator { new N5GenericSingleScaleMetadataParser() }; + private DatasetSelectorDialog dialog; + private String lastOpenedContainer = ""; final public static void main(final String... args) { @@ -114,7 +121,7 @@ public void openViewer( final Consumer cancelConsumer) { final ExecutorService exec = Executors.newFixedThreadPool(ij.Prefs.getThreads()); - final DatasetSelectorDialog dialog = new DatasetSelectorDialog( + dialog = new DatasetSelectorDialog( new N5Importer.N5ViewerReaderFun(), new N5Importer.N5BasePathFun(), lastOpenedContainer, @@ -140,4 +147,39 @@ public void openViewer( } }); } + + public void runWithDialog(final String pathToContainer, final List selectThisSubPath) { + + lastOpenedContainer = pathToContainer; + dialog = null; + openViewer((e) -> e.printStackTrace()); + if (dialog == null) { + throw new RuntimeException("The \"Open N5\" didn't come up when it should."); + } else { + dialog.detectDatasets(); + if (selectThisSubPath != null) { + boolean isDiscoveryFinished = dialog.waitUntilDiscoveryIsFinished(60000); + if (isDiscoveryFinished) + selectTreeItem(selectThisSubPath); + } + } + } + + private void selectTreeItem(final List itemPath) { + + final JTree t = dialog.getJTree(); + int currRow = 0; + for (String subPath : itemPath) { + for (int r = currRow; r < t.getRowCount(); ++r, ++currRow) { + N5SwingTreeNode n = (N5SwingTreeNode)t.getPathForRow(r).getLastPathComponent(); + if (n.getNodeName().equals(subPath)) { + t.expandRow(r); + t.setSelectionRow(r); + ++currRow; + break; + } + } + } + } + } From 40ff60833edbdb6f5eda47bb0dbd59e37ce2cf6e Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Fri, 14 Nov 2025 09:48:31 +0100 Subject: [PATCH 4/9] chore: bump n5-ij to 4.5.0-alpha-6-SNAPSHOT --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 9559a61..76949f7 100644 --- a/pom.xml +++ b/pom.xml @@ -138,6 +138,7 @@ 4.4.0-alpha-4 5.2.0-alpha-4 2.0.0-alpha-5-SNAPSHOT + 4.5.0-alpha-6-SNAPSHOT 2.3.0-alpha-4 2.0.0-alpha-4 7.1.0-alpha-6 From 7f5c62997bbe8826aae968cd17c8749868ea7a90 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Tue, 27 Jan 2026 17:10:03 -0500 Subject: [PATCH 5/9] chore: update dependency versions --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 76949f7..6aa9b3f 100644 --- a/pom.xml +++ b/pom.xml @@ -134,14 +134,14 @@ 10.6.1 1.0.0-beta-36 - 4.0.0-alpha-7-SNAPSHOT + 4.0.0-alpha-8 4.4.0-alpha-4 5.2.0-alpha-4 - 2.0.0-alpha-5-SNAPSHOT + 2.0.0-alpha-5 4.5.0-alpha-6-SNAPSHOT - 2.3.0-alpha-4 + 2.3.0-alpha-5 2.0.0-alpha-4 - 7.1.0-alpha-6 + 7.1.0-alpha-7 2.0.0-alpha-4 2.4.0-alpha-7-SNAPSHOT From e2cd150b69a515e5b434f59875d99a27236b6e95 Mon Sep 17 00:00:00 2001 From: stefanhahmann Date: Thu, 29 Jan 2026 15:35:35 +0100 Subject: [PATCH 6/9] Add `runWithDialog` method with complete path to container and exception handler params --- .../janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java index 3d15a53..f9b169d 100644 --- a/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java +++ b/src/main/java/org/janelia/saalfeldlab/n5/bdv/N5ViewerCreator.java @@ -165,6 +165,19 @@ public void runWithDialog(final String pathToContainer, final List selec } } + public void runWithDialog( final String pathToContainer ) + { + runWithDialog( pathToContainer, Throwable::printStackTrace ); + } + + public void runWithDialog( final String pathToContainer, final Consumer< Exception > exceptionHandler ) + { + lastOpenedContainer = pathToContainer; + dialog = null; + openViewer( exceptionHandler ); + dialog.openContainer( pathToContainer ); + } + private void selectTreeItem(final List itemPath) { final JTree t = dialog.getJTree(); From e8d36978524ebcd4a412cf00d260ba1e79ec4892 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Fri, 27 Feb 2026 13:50:29 -0500 Subject: [PATCH 7/9] chore: update dependencies --- pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 6aa9b3f..c001cc3 100644 --- a/pom.xml +++ b/pom.xml @@ -134,16 +134,16 @@ 10.6.1 1.0.0-beta-36 - 4.0.0-alpha-8 - 4.4.0-alpha-4 - 5.2.0-alpha-4 - 2.0.0-alpha-5 - 4.5.0-alpha-6-SNAPSHOT - 2.3.0-alpha-5 + 4.0.0-alpha-10 + 4.4.0-alpha-7 2.0.0-alpha-4 + 5.2.0-alpha-6 + 2.3.0-alpha-6 + 4.5.0-alpha-6 7.1.0-alpha-7 + 2.4.0-alpha-7 + 2.0.0-alpha-7 2.0.0-alpha-4 - 2.4.0-alpha-7-SNAPSHOT From e952f97fdba10cf745a096f7a45aebdb260ffd12 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Fri, 27 Feb 2026 14:01:49 -0500 Subject: [PATCH 8/9] test: AxisPermutationTest specifies zarr2 --- .../saalfeldlab/n5/bdv/N5vAxisPermutationTests.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/test/java/org/janelia/saalfeldlab/n5/bdv/N5vAxisPermutationTests.java b/src/test/java/org/janelia/saalfeldlab/n5/bdv/N5vAxisPermutationTests.java index 9122560..401d40c 100644 --- a/src/test/java/org/janelia/saalfeldlab/n5/bdv/N5vAxisPermutationTests.java +++ b/src/test/java/org/janelia/saalfeldlab/n5/bdv/N5vAxisPermutationTests.java @@ -22,6 +22,7 @@ import org.janelia.saalfeldlab.n5.universe.N5DatasetDiscoverer; import org.janelia.saalfeldlab.n5.universe.N5Factory; import org.janelia.saalfeldlab.n5.universe.N5TreeNode; +import org.janelia.saalfeldlab.n5.universe.StorageFormat; import org.janelia.saalfeldlab.n5.universe.metadata.N5Metadata; import org.janelia.saalfeldlab.n5.universe.metadata.NgffTests; import org.junit.After; @@ -83,11 +84,10 @@ protected String tempN5Location() throws URISyntaxException { @Test public void testPermutations() throws IOException { - final N5Writer zarr = new N5Factory().openWriter(containerUri.toString()); + final N5Writer zarr = new N5Factory().openWriter(StorageFormat.ZARR2, containerUri.toString()); // don't check every axis permutation, but some relevant ones, and some strange ones final String[] names = new String[]{ - // TODO five still don't work "xyz", "zyx", "yzx", "xyc", "xcy", "cyx", "xyt", "xty", "tyx", @@ -145,10 +145,6 @@ protected & NativeType> void writeAndTest(final N5W final AffineTransform3D tform = new AffineTransform3D(); src.getSourceTransform(0, 0, tform); - // System.out.println(""); - // System.out.println("" + sourcesAndConverters.size()); - // System.out.println(""); - // test assertEquals(dset + "size x", NgffTests.NX, dims[0]); assertEquals(dset + "size y", NgffTests.NY, dims[1]); From 7209c9f785168f5fa32de3f5307a35002d8c2277 Mon Sep 17 00:00:00 2001 From: John Bogovic Date: Fri, 27 Feb 2026 14:28:34 -0500 Subject: [PATCH 9/9] build: update setup-java action --- .github/workflows/build-main.yml | 2 +- .github/workflows/build-pr.yml | 2 +- .github/workflows/platform-test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-main.yml b/.github/workflows/build-main.yml index e7488cd..c9e05b8 100644 --- a/.github/workflows/build-main.yml +++ b/.github/workflows/build-main.yml @@ -18,7 +18,7 @@ jobs: sudo apt-get update sudo apt-get install -y libblosc1 - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '8' distribution: 'zulu' diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 0bcda3d..cff9ce9 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -16,7 +16,7 @@ jobs: sudo apt-get update sudo apt-get install -y libblosc1 - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: '8' distribution: 'zulu' diff --git a/.github/workflows/platform-test.yml b/.github/workflows/platform-test.yml index 019f001..9cac328 100644 --- a/.github/workflows/platform-test.yml +++ b/.github/workflows/platform-test.yml @@ -35,7 +35,7 @@ jobs: pip install blosc --no-input --target src/test/resources mv src/test/resources/lib64/* src/test/resources - name: Set up Java - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: java-version: '8' distribution: 'zulu'