/* * Copyright 2011 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.io.bioformats; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import loci.common.RandomAccessInputStream; import loci.formats.FormatException; import loci.formats.in.MinimalTiffReader; import loci.formats.tiff.IFD; import loci.formats.tiff.TiffParser; /** * File format reader for OMERO pixels pyramid files. * * @author Chris Allan, callan at blackcat dot ca * @since Beta4.3 */ public class OmeroPixelsPyramidReader extends MinimalTiffReader { /** Logger for this class. */ private final static Logger log = LoggerFactory.getLogger(OmeroPixelsPyramidReader.class); /* (non-Javadoc) * @see loci.formats.FormatReader#isThisType(java.lang.String, boolean) */ @Override public boolean isThisType(String name, boolean open) { boolean isThisType = super.isThisType(name, open); if (!isThisType && open) { RandomAccessInputStream stream = null; try { stream = new RandomAccessInputStream(name); TiffParser tiffParser = new TiffParser(stream); if (!tiffParser.isValidHeader()) { return false; } String imageDescription = tiffParser.getFirstIFD() .getIFDTextValue(IFD.IMAGE_DESCRIPTION); if (imageDescription != null && imageDescription.startsWith("OmeroPixelsPyramid")) { return true; } return false; } catch (IOException e) { log.error("I/O exception during isThisType() evaluation.", e); return false; } finally { try { if (stream != null) { stream.close(); } } catch (IOException e) { log.error("I/O exception during stream closure.", e); } } } return isThisType; } /* (non-Javadoc) * @see loci.formats.FormatReader#setId(java.lang.String) */ @Override public void setId(String id) throws FormatException, IOException { log.debug("setId(" + id + ")"); super.setId(id); } /* (non-Javadoc) * @see loci.formats.FormatReader#close() */ @Override public void close() throws IOException { log.debug("close(" + currentId + ")"); super.close(); } @Override protected void setResolutionLevel(IFD ifd) { if (ifd.get(OmeroPixelsPyramidWriter.IFD_TAG_SERIES) == null) { super.setResolutionLevel(ifd); } } }