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'
diff --git a/pom.xml b/pom.xml
index 76c80a8..c001cc3 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,16 @@
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-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
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..f9b169d 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;
@@ -18,6 +23,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;
@@ -33,6 +39,7 @@
public class N5ViewerCreator {
public static final N5MetadataParser>[] n5vGroupParsers = new N5MetadataParser[]{
+ new OmeNgffV05MetadataParser(),
new OmeNgffMetadataParser(),
new N5CosemMultiScaleMetadata.CosemMultiScaleParser(),
new N5ViewerMultiscaleMetadataParser(),
@@ -50,6 +57,8 @@ public class N5ViewerCreator {
new N5GenericSingleScaleMetadataParser()
};
+ private DatasetSelectorDialog dialog;
+
private String lastOpenedContainer = "";
final public static void main(final String... args) {
@@ -112,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,
@@ -138,4 +147,52 @@ 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);
+ }
+ }
+ }
+
+ 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();
+ 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;
+ }
+ }
+ }
+ }
+
}
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]);