diff --git a/src/loci/formats/in/ZarrReader.java b/src/loci/formats/in/ZarrReader.java index 86265db..64c5a2e 100644 --- a/src/loci/formats/in/ZarrReader.java +++ b/src/loci/formats/in/ZarrReader.java @@ -1,4 +1,3 @@ - package loci.formats.in; /*- @@ -903,7 +902,7 @@ private void parseImageLabels(String root, Map attr) throws IOEx for (int p = 0; p < properties.size(); p++) { Map prop = (Map) properties.get(p); Integer labelValue = (Integer) prop.get("label-value"); - Double area = (Double) prop.get("area (pixels)"); + Number area = (Number) prop.get("area (pixels)"); String propClass = (String) prop.get("class"); } } @@ -930,17 +929,17 @@ private void parseOmeroMetadata(String root, Map attr) throws IO for (int i = 0; i < channels.size(); i++) { Map channel = (Map) channels.get(i); Boolean channelActive = (Boolean) channel.get("active"); - Double channelCoefficient = (Double) channel.get("coefficient"); + Number channelCoefficient = (Number) channel.get("coefficient"); String channelColor = (String) channel.get("color"); String channelFamily = (String) channel.get("family"); Boolean channelInverted = (Boolean) channel.get("inverted"); String channelLabel = (String) channel.get("label"); Map window = (Map)channel.get("window"); if (window != null) { - Double windowStart = getDouble(window, "start"); - Double windowEnd = getDouble(window, "end"); - Double windowMin = getDouble(window, "min"); - Double windowMax = getDouble(window, "max"); + Number windowStart = getDouble(window, "start"); + Number windowEnd = getDouble(window, "end"); + Number windowMin = getDouble(window, "min"); + Number windowMax = getDouble(window, "max"); } } Map rdefs = (Map)omeroMetadata.get("rdefs"); @@ -1112,11 +1111,14 @@ public static String getRowString(int rowIndex) { return sb.reverse().toString(); } - private Double getDouble(Map src, String key) { + private Number getDouble(Map src, String key) { Number val = (Number) src.get(key); if (val == null) { return null; } + if (val instanceof Integer) { + return ((Integer) val).doubleValue(); + } return val.doubleValue(); } @@ -1205,7 +1207,7 @@ public boolean quickRead() { } return QUICK_READ_DEFAULT; } - + /** * Used to decide if images stored in the label sub folder should be included in the list of images * @return boolean true if images in the label folder should be included, default is false diff --git a/test/loci/formats/utests/ZarrReaderTest.java b/test/loci/formats/utests/ZarrReaderTest.java index b340ff7..d1631be 100644 --- a/test/loci/formats/utests/ZarrReaderTest.java +++ b/test/loci/formats/utests/ZarrReaderTest.java @@ -205,4 +205,81 @@ public void testResolutionCount() { assertEquals(3, reader.getSeriesCount()); } + @Test + public void testParseOmeroMetadataWithIntegerValues() { + Map omeroMetadata = new HashMap<>(); + omeroMetadata.put("id", 1); + omeroMetadata.put("name", "Test Image"); + omeroMetadata.put("version", "0.1"); + + ArrayList channels = new ArrayList<>(); + Map channel = new HashMap<>(); + channel.put("active", true); + channel.put("coefficient", 1); + channel.put("color", "FFFFFF"); + channel.put("family", "linear"); + channel.put("inverted", false); + channel.put("label", "Channel 1"); + + Map window = new HashMap<>(); + window.put("start", 0); + window.put("end", 255); + window.put("min", 0); + window.put("max", 255); + channel.put("window", window); + + channels.add(channel); + omeroMetadata.put("channels", channels); + + Map rdefs = new HashMap<>(); + rdefs.put("defaultT", 0); + rdefs.put("defaultZ", 0); + rdefs.put("model", "color"); + omeroMetadata.put("rdefs", rdefs); + + try { + reader.parseOmeroMetadata(file.getAbsolutePath(), omeroMetadata); + } catch (IOException | FormatException e) { + fail("Unexpected exception while parsing Omero metadata with Integer values"); + } + } + + @Test + public void testParseOmeroMetadataWithDoubleValues() { + Map omeroMetadata = new HashMap<>(); + omeroMetadata.put("id", 1); + omeroMetadata.put("name", "Test Image"); + omeroMetadata.put("version", "0.1"); + + ArrayList channels = new ArrayList<>(); + Map channel = new HashMap<>(); + channel.put("active", true); + channel.put("coefficient", 1.0); + channel.put("color", "FFFFFF"); + channel.put("family", "linear"); + channel.put("inverted", false); + channel.put("label", "Channel 1"); + + Map window = new HashMap<>(); + window.put("start", 0.0); + window.put("end", 255.0); + window.put("min", 0.0); + window.put("max", 255.0); + channel.put("window", window); + + channels.add(channel); + omeroMetadata.put("channels", channels); + + Map rdefs = new HashMap<>(); + rdefs.put("defaultT", 0); + rdefs.put("defaultZ", 0); + rdefs.put("model", "color"); + omeroMetadata.put("rdefs", rdefs); + + try { + reader.parseOmeroMetadata(file.getAbsolutePath(), omeroMetadata); + } catch (IOException | FormatException e) { + fail("Unexpected exception while parsing Omero metadata with Double values"); + } + } }