diff --git a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroAmazonS3ClientFactory.java b/src/main/java/com/glencoesoftware/omero/zarr/OmeroAmazonS3ClientFactory.java similarity index 99% rename from src/main/java/com/glencoesoftware/omero/ms/core/OmeroAmazonS3ClientFactory.java rename to src/main/java/com/glencoesoftware/omero/zarr/OmeroAmazonS3ClientFactory.java index ae4c2d4..88b42e9 100644 --- a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroAmazonS3ClientFactory.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/OmeroAmazonS3ClientFactory.java @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.glencoesoftware.omero.ms.core; +package com.glencoesoftware.omero.zarr; import java.net.URI; import java.util.HashMap; diff --git a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3FileSystem.java b/src/main/java/com/glencoesoftware/omero/zarr/OmeroS3FileSystem.java similarity index 96% rename from src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3FileSystem.java rename to src/main/java/com/glencoesoftware/omero/zarr/OmeroS3FileSystem.java index ae4739e..c4f02d1 100644 --- a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3FileSystem.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/OmeroS3FileSystem.java @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.glencoesoftware.omero.ms.core; +package com.glencoesoftware.omero.zarr; import java.io.IOException; diff --git a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3ReadOnlySeekableByteChannel.java b/src/main/java/com/glencoesoftware/omero/zarr/OmeroS3ReadOnlySeekableByteChannel.java similarity index 99% rename from src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3ReadOnlySeekableByteChannel.java rename to src/main/java/com/glencoesoftware/omero/zarr/OmeroS3ReadOnlySeekableByteChannel.java index e4d5a13..8dbc167 100644 --- a/src/main/java/com/glencoesoftware/omero/ms/core/OmeroS3ReadOnlySeekableByteChannel.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/OmeroS3ReadOnlySeekableByteChannel.java @@ -15,7 +15,7 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.glencoesoftware.omero.ms.core; +package com.glencoesoftware.omero.zarr; import java.io.ByteArrayInputStream; diff --git a/src/main/java/com/glencoesoftware/omero/ms/core/ZarrPixelBuffer.java b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelBuffer.java similarity index 99% rename from src/main/java/com/glencoesoftware/omero/ms/core/ZarrPixelBuffer.java rename to src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelBuffer.java index 26090f3..3a8abe4 100644 --- a/src/main/java/com/glencoesoftware/omero/ms/core/ZarrPixelBuffer.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelBuffer.java @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.glencoesoftware.omero.ms.core; +package com.glencoesoftware.omero.zarr; import java.awt.Dimension; import java.io.IOException; diff --git a/src/main/java/com/glencoesoftware/omero/ms/core/PixelsService.java b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java similarity index 92% rename from src/main/java/com/glencoesoftware/omero/ms/core/PixelsService.java rename to src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java index aa8917e..910d71e 100644 --- a/src/main/java/com/glencoesoftware/omero/ms/core/PixelsService.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java @@ -16,7 +16,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -package com.glencoesoftware.omero.ms.core; +package com.glencoesoftware.omero.zarr; import java.io.File; import java.io.IOException; @@ -58,10 +58,10 @@ * @author Chris Allan * */ -public class PixelsService extends ome.io.nio.PixelsService { +public class ZarrPixelsService extends ome.io.nio.PixelsService { private static final org.slf4j.Logger log = - LoggerFactory.getLogger(PixelsService.class); + LoggerFactory.getLogger(ZarrPixelsService.class); public static final String NGFF_ENTITY_TYPE = "com.glencoesoftware.ngff:multiscales"; public static final long NGFF_ENTITY_ID = 3; @@ -85,7 +85,7 @@ public class PixelsService extends ome.io.nio.PixelsService { /** Array path vs. ZarrArray cache */ private final AsyncLoadingCache zarrArrayCache; - public PixelsService( + public ZarrPixelsService( String path, boolean isReadOnlyRepo, File memoizerDirectory, long memoizerWait, FilePathResolver resolver, BackOff backOff, TileSizes sizes, IQuery iQuery, @@ -102,10 +102,10 @@ public PixelsService( this.iQuery = iQuery; zarrMetadataCache = Caffeine.newBuilder() .maximumSize(this.zarrCacheSize) - .buildAsync(PixelsService::getZarrMetadata); + .buildAsync(ZarrPixelsService::getZarrMetadata); zarrArrayCache = Caffeine.newBuilder() .maximumSize(this.zarrCacheSize) - .buildAsync(PixelsService::getZarrArray); + .buildAsync(ZarrPixelsService::getZarrArray); } /** @@ -242,17 +242,35 @@ public String getUri(IObject object) { } /** - * Retrieve the {@link Image} for a particular set of pixels. + * Retrieve the {@link Image} for a particular set of pixels. Where + * possible, does not initiate a query. * @param pixels Pixels set to retrieve the {@link Image} for. * @return See above. */ protected Image getImage(Pixels pixels) { if (pixels.getImage().isLoaded()) { + // Will likely only be true when operating within a microservice return pixels.getImage(); } return iQuery.get(Image.class, pixels.getImage().getId()); } + /** + * Retrieves the series for a given set of pixels. Where possible, does not + * initiate a query. + * @param pixels Set of pixels to return the series for. + * @return The series as specified by the pixels parameters or + * 0 (the first series). + */ + @Override + protected int getSeries(Pixels pixels) { + if (pixels.getImage().isLoaded()) { + // Will likely only be true when operating within a microservice + return pixels.getImage().getSeries(); + } + return super.getSeries(pixels); + } + /** * Returns a label image NGFF pixel buffer if it exists. * @param mask Mask to retrieve a pixel buffer for. diff --git a/src/main/java/com/upplication/s3fs/OmeroS3FilesystemProvider.java b/src/main/java/com/upplication/s3fs/OmeroS3FilesystemProvider.java index d86f674..fe85c30 100644 --- a/src/main/java/com/upplication/s3fs/OmeroS3FilesystemProvider.java +++ b/src/main/java/com/upplication/s3fs/OmeroS3FilesystemProvider.java @@ -35,9 +35,9 @@ import java.util.Properties; import java.util.Set; -import com.glencoesoftware.omero.ms.core.OmeroAmazonS3ClientFactory; -import com.glencoesoftware.omero.ms.core.OmeroS3FileSystem; -import com.glencoesoftware.omero.ms.core.OmeroS3ReadOnlySeekableByteChannel; +import com.glencoesoftware.omero.zarr.OmeroAmazonS3ClientFactory; +import com.glencoesoftware.omero.zarr.OmeroS3FileSystem; +import com.glencoesoftware.omero.zarr.OmeroS3ReadOnlySeekableByteChannel; import com.google.common.base.Preconditions; import com.upplication.s3fs.attribute.S3BasicFileAttributes; diff --git a/src/main/resources/blitz/blitz-ZarrPixelBuffer.xml b/src/main/resources/blitz/blitz-ZarrPixelBuffer.xml index ae818c0..bfcaff3 100644 --- a/src/main/resources/blitz/blitz-ZarrPixelBuffer.xml +++ b/src/main/resources/blitz/blitz-ZarrPixelBuffer.xml @@ -6,8 +6,10 @@ Defines the beans for microservices. - + + + diff --git a/src/test/java/com/glencoesoftware/omero/ms/core/PixelsServiceTest.java b/src/test/java/com/glencoesoftware/omero/ms/core/PixelsServiceTest.java index e183218..13b67d7 100644 --- a/src/test/java/com/glencoesoftware/omero/ms/core/PixelsServiceTest.java +++ b/src/test/java/com/glencoesoftware/omero/ms/core/PixelsServiceTest.java @@ -27,6 +27,8 @@ import org.junit.Before; import org.junit.Test; +import com.glencoesoftware.omero.zarr.ZarrPixelsService; + import omero.ApiUsageException; import omero.model.ExternalInfo; import omero.model.ExternalInfoI; @@ -43,7 +45,7 @@ public class PixelsServiceTest { - private PixelsService pixelsService; + private ZarrPixelsService pixelsService; private String uuid = UUID.randomUUID().toString(); private String imageUri = "/data/ngff/image.zarr"; private String labelUri = imageUri + "/0/labels/" + uuid; @@ -58,7 +60,7 @@ public void setUp() throws IOException { pixelsDir.deleteOnExit(); File memoDir = Files.createTempDirectory("memoizer").toFile(); memoDir.deleteOnExit(); - pixelsService = new PixelsService( + pixelsService = new ZarrPixelsService( pixelsDir.getAbsolutePath(), false, memoDir, 0L, null, null, null, null, 0, 0, 0); mask = new MaskI(); image = new ImageI(); diff --git a/src/test/java/com/glencoesoftware/omero/ms/core/ZarrPixelBufferTest.java b/src/test/java/com/glencoesoftware/omero/ms/core/ZarrPixelBufferTest.java index 19e7308..89b6b82 100644 --- a/src/test/java/com/glencoesoftware/omero/ms/core/ZarrPixelBufferTest.java +++ b/src/test/java/com/glencoesoftware/omero/ms/core/ZarrPixelBufferTest.java @@ -45,6 +45,8 @@ import picocli.CommandLine; import com.glencoesoftware.bioformats2raw.Converter; +import com.glencoesoftware.omero.zarr.ZarrPixelsService; +import com.glencoesoftware.omero.zarr.ZarrPixelBuffer; import loci.formats.FormatTools; import loci.formats.in.FakeReader; @@ -68,10 +70,10 @@ public ZarrPixelBuffer createPixelBuffer( pixels, path, maxPlaneWidth, maxPlaneHeight, Caffeine.newBuilder() .maximumSize(0) - .buildAsync(PixelsService::getZarrMetadata), + .buildAsync(ZarrPixelsService::getZarrMetadata), Caffeine.newBuilder() .maximumSize(0) - .buildAsync(PixelsService::getZarrArray) + .buildAsync(ZarrPixelsService::getZarrArray) ); }