# HG changeset patch # User robcast # Date 1294311452 -3600 # Node ID 720d061a1b30e5e5195a3b81cb4a41ec23e2aa8d # Parent 41a8d293b7983f9251168d86a940e2738fbe51d4 more work on stream input diff -r 41a8d293b798 -r 720d061a1b30 servlet/src/digilib/image/ImageLoaderDocuImage.java --- a/servlet/src/digilib/image/ImageLoaderDocuImage.java Wed Jan 05 14:46:19 2011 +0100 +++ b/servlet/src/digilib/image/ImageLoaderDocuImage.java Thu Jan 06 11:57:32 2011 +0100 @@ -68,6 +68,8 @@ /** File that was read */ protected File imgFile; + private ImageInput input; + /* loadSubimage is supported. */ public boolean isSubimageSupported() { return true; @@ -167,17 +169,31 @@ * * @return */ - public ImageReader getReader(ImageFile f) throws IOException { - logger.debug("preloadImage " + f.getFile()); - if (reader != null) { - logger.debug("Reader was not null!"); + public ImageReader getReader(ImageInput input) throws IOException { + logger.debug("get ImageReader for " + input); + if (this.reader != null) { + if (this.input == input) { + // it was the same input + logger.debug("reusing Reader"); + return reader; + } // clean up old reader + logger.debug("cleaning Reader!"); dispose(); } - RandomAccessFile rf = new RandomAccessFile(f.getFile(), "r"); - ImageInputStream istream = new FileImageInputStream(rf); + ImageInputStream istream = null; + if (input.hasImageInputStream()) { + // stream input + istream = input.getImageInputStream(); + } else if (input.hasFile()) { + // file only input + RandomAccessFile rf = new RandomAccessFile(input.getFile(), "r"); + istream = new FileImageInputStream(rf); + } else { + throw new FileOpException("Unable to get data from ImageInput"); + } Iterator readers; - String mt = f.getMimetype(); + String mt = input.getMimetype(); if (mt == null) { logger.debug("No mime-type. Trying automagic."); readers = ImageIO.getImageReaders(istream); @@ -186,7 +202,6 @@ readers = ImageIO.getImageReadersByMIMEType(mt); } if (!readers.hasNext()) { - rf.close(); throw new FileOpException("Can't find Reader to load File!"); } reader = readers.next(); @@ -196,7 +211,7 @@ logger.debug("ImageIO: next reader: " + readers.next().getClass()); } */ reader.setInput(istream); - imgFile = f.getFile(); + imgFile = input.getFile(); return reader; } diff -r 41a8d293b798 -r 720d061a1b30 servlet/src/digilib/io/ImageInput.java --- a/servlet/src/digilib/io/ImageInput.java Wed Jan 05 14:46:19 2011 +0100 +++ b/servlet/src/digilib/io/ImageInput.java Thu Jan 06 11:57:32 2011 +0100 @@ -21,6 +21,10 @@ package digilib.io; +import java.io.File; + +import javax.imageio.stream.ImageInputStream; + import digilib.image.ImageSize; public abstract class ImageInput { @@ -77,4 +81,37 @@ return (pixelSize != null) ? pixelSize.getAspect() : 0f; } + /** Returns if the input can be returned as ImageInputStream. + * + * @return + */ + public boolean hasImageInputStream() { + return false; + } + + /** Returns the input as ImageInputStream (if available) + * + * @return + */ + public ImageInputStream getImageInputStream() { + return null; + } + + /** Returns if the input can be returned as File. + * + * @return + */ + public boolean hasFile() { + return false; + } + + /** Returns the input as File (if available) + * + * @return + */ + public File getFile() { + return null; + } + + } \ No newline at end of file diff -r 41a8d293b798 -r 720d061a1b30 servlet/src/digilib/io/ImageStream.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet/src/digilib/io/ImageStream.java Thu Jan 06 11:57:32 2011 +0100 @@ -0,0 +1,24 @@ +/** + * + */ +package digilib.io; + +import java.io.InputStream; + +/** + * @author casties + * + */ +public class ImageStream extends ImageInput { + + protected InputStream stream = null; + + public ImageStream(InputStream stream, String mimeType) { + this.stream = stream; + this.mimetype = mimeType; + } + + public InputStream getStream() { + return stream; + } +}