From f095710fbf287c1a6205a1dbf89a45ac6446c32f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Besson?= Date: Fri, 3 May 2024 22:51:40 +0100 Subject: [PATCH] Generalize ZarrPixelsService.getUri() to support different entities Add support for other externalInfo entityType/entityId Update the unit tests to cover both signatures of ZarrPixelsService --- .../omero/zarr/ZarrPixelsService.java | 27 ++++++-- .../omero/zarr/ZarrPixelsServiceTest.java | 64 ++++++++++++++----- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java index 910d71e..d79c1d9 100644 --- a/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java +++ b/src/main/java/com/glencoesoftware/omero/zarr/ZarrPixelsService.java @@ -187,14 +187,29 @@ private Path asPath(String ngffDir) throws IOException { return Paths.get(ngffDir); } - /** - * Retrieve {@link Mask} or {@link Image} URI. + * Retrieve {@link Mask} or {@link Image} URI stored under {@link ExternalInfo}. * @param object loaded {@link Mask} or {@link Image} to check for a URI - * @return URI or null if the object does not contain a URI - * in its {@link ExternalInfo}. + * @return the value of {@link ExternalInfo.lsid}, null if the object + * does not have an {@link ExternalInfo} with a valid {@link ExternalInfo.lsid} atttribute + * or if {@link ExternalInfo.entityType} is not equal to {@link NGFF_ENTITY_TYPE} or if + * {@link ExternalInfo.entityId} is not equal to {@link NGFF_ENTITY_ID}. */ public String getUri(IObject object) { + return getUri(object, NGFF_ENTITY_TYPE, NGFF_ENTITY_ID); + } + + /** + * Retrieve {@link Mask} or {@link Image} URI stored under {@link ExternalInfo} + * @param object loaded {@link Mask} or {@link Image} to check for a URI + * @param targetEntityType expected entityType in the object {@link ExternalInfo} + * @param targetEntityId expected entityType in the object {@link ExternalInfo} + * @return the value of {@link ExternalInfo.lsid}, null if the object + * does not have an {@link ExternalInfo} with a valid {@link ExternalInfo.lsid} atttribute + * or if {@link ExternalInfo.entityType} is not equal to targetEntityType or if + * {@link ExternalInfo.entityId} is not equal to targetEntityId . + */ + public String getUri(IObject object, String targetEntityType, Long targetEntityId) { ExternalInfo externalInfo = object.getDetails().getExternalInfo(); if (externalInfo == null) { log.debug( @@ -210,7 +225,7 @@ public String getUri(IObject object) { object.getClass().getSimpleName(), object.getId()); return null; } - if (!entityType.equals(NGFF_ENTITY_TYPE)) { + if (!entityType.equals(targetEntityType)) { log.debug( "{}:{} unsupported ExternalInfo entityType {}", object.getClass().getSimpleName(), object.getId(), entityType); @@ -224,7 +239,7 @@ public String getUri(IObject object) { object.getClass().getSimpleName(), object.getId()); return null; } - if (!entityId.equals(NGFF_ENTITY_ID)) { + if (!entityId.equals(targetEntityId)) { log.debug( "{}:{} unsupported ExternalInfo entityId {}", object.getClass().getSimpleName(), object.getId(), entityId); diff --git a/src/test/java/com/glencoesoftware/omero/zarr/ZarrPixelsServiceTest.java b/src/test/java/com/glencoesoftware/omero/zarr/ZarrPixelsServiceTest.java index 2b6a59f..d14f104 100644 --- a/src/test/java/com/glencoesoftware/omero/zarr/ZarrPixelsServiceTest.java +++ b/src/test/java/com/glencoesoftware/omero/zarr/ZarrPixelsServiceTest.java @@ -51,8 +51,9 @@ public class ZarrPixelsServiceTest { private String labelUri = imageUri + "/0/labels/" + uuid; private Image image; private Mask mask; + private ome.model.IObject object; private String ENTITY_TYPE = "com.glencoesoftware.ngff:multiscales"; - private int ENTITY_ID = 3; + private long ENTITY_ID = 3; @Before public void setUp() throws IOException { @@ -66,7 +67,7 @@ public void setUp() throws IOException { image = new ImageI(); } - private void addExternalInfo(IObject object, Integer entityId, String entityType, String lsid, String uuid) { + private void addExternalInfo(IObject object, Long entityId, String entityType, String lsid, String uuid) { ExternalInfo externalInfo = new ExternalInfoI(); externalInfo.setEntityId(rlong(entityId)); externalInfo.setEntityType(rstring(entityType)); @@ -82,51 +83,80 @@ private void addExternalInfo(IObject object, Integer entityId, String entityType @Test public void testDefault() throws ApiUsageException, IOException { addExternalInfo(mask, ENTITY_ID, ENTITY_TYPE, labelUri, uuid); - Assert.assertEquals(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask)), labelUri); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertEquals(pixelsService.getUri(object), labelUri); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID), labelUri); addExternalInfo(image, ENTITY_ID, ENTITY_TYPE, imageUri, uuid); - Assert.assertEquals(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image)), imageUri); + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertEquals(pixelsService.getUri(object), imageUri); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID), imageUri); } @Test public void testGetUriNoExternalInfo() throws ApiUsageException, IOException { - Assert.assertNull(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask))); - Assert.assertNull(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image))); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); + + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); } @Test public void testGetUriNoUuid() throws ApiUsageException, IOException { addExternalInfo(mask, ENTITY_ID, ENTITY_TYPE, labelUri, null); - Assert.assertEquals(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask)), labelUri); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertEquals(pixelsService.getUri(object), labelUri); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID), labelUri); addExternalInfo(image, ENTITY_ID, ENTITY_TYPE, imageUri, null); - Assert.assertEquals(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image)), imageUri); + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertEquals(pixelsService.getUri(object), imageUri); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID), imageUri); } @Test public void testGetUriNoLsid() throws ApiUsageException, IOException { addExternalInfo(mask, ENTITY_ID, ENTITY_TYPE, null, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask))); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); addExternalInfo(image, ENTITY_ID, ENTITY_TYPE, null, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image))); + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); } @Test public void testGetUriWrongEntityType() throws ApiUsageException, IOException { addExternalInfo(mask, ENTITY_ID, "multiscales", labelUri, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask))); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); + Assert.assertEquals(pixelsService.getUri(object, "multiscales", ENTITY_ID), labelUri); addExternalInfo(image, ENTITY_ID, "multiscales", imageUri, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image))); + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); + Assert.assertEquals(pixelsService.getUri(object, "multiscales", ENTITY_ID), imageUri); } @Test public void testGetUriWrongEntityId() throws ApiUsageException, IOException { - addExternalInfo(mask, 1, ENTITY_TYPE, labelUri, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.roi.Mask) new IceMapper().reverse(mask))); - - addExternalInfo(image, 1, ENTITY_TYPE, imageUri, uuid); - Assert.assertNull(pixelsService.getUri((ome.model.core.Image) new IceMapper().reverse(image))); + addExternalInfo(mask, 1L, ENTITY_TYPE, labelUri, uuid); + object = (ome.model.roi.Mask) new IceMapper().reverse(mask); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, 1L), labelUri); + + addExternalInfo(image, 1L, ENTITY_TYPE, imageUri, uuid); + object = (ome.model.core.Image) new IceMapper().reverse(image); + Assert.assertNull(pixelsService.getUri(object)); + Assert.assertNull(pixelsService.getUri(object, ENTITY_TYPE, ENTITY_ID)); + Assert.assertEquals(pixelsService.getUri(object, ENTITY_TYPE, 1L), imageUri); } }