On 1/30/06, Upayavira <[EMAIL PROTECTED]> wrote: > Tim Williams wrote: > > I want the image reader to accept a variant name (e.g. "thumb", > > "small") and then write the newly created image variant to disk before > > sending the output. In other words, so that a given image > > "IMG001.jpg" might be "read" with a variant "thumb" and on disk would > > now be: > > IMG001.jpg > > IMG001.thumb.jpg > > > > Obviously, a hefty cost for the first time through on each image but > > just reading afterwards. I've initially done this by just copying the > > entire ImageReader into a new PersistentImageReader and inserting the > > applicable code in setup() and processStream(). Now that it's working > > how I'd like, I figured I'd just extend the ImageReader and only > > implement these two methods. The only way I can think to do it is > > somehow redirect the output into a buffer, write the buffer, then send > > it out. Is there a better way to extend a reader? Anyone have any > > clues as to how I might be able to buffer the ImageReader's output? > > Well, sounds like you're trying to achieve something similar to caching. > I wonder if the caching system might be an alternative approach to > achieving the same thing. > > Anyway, to answer your question directly... > > The AbstractReader class has a setOutputStream method. You could, in > your generate() method: > * check to see if the resource has already been generated. If it has, > set the inputSource to that of your cached version and proceed as > normal (calling super.generate()) > * Otherwise, take a copy of the existing output stream, set the output > stream (using setOutputStream) to your own buffering version. Proceed > as normal. At the end of the generate method you write the contents > of buffer to disc, then copy contents of buffer to original output > stream. > > I think that would work. And this should work as an extension of the > ImageReader class as you suggest. > > Have I understood your question? > > Regards, Upayavira
Exactly, I'll give these a try and see what I can manage. It is essentially the same as caching but I need something that can work in both webapp and cli modes in forrest. Thanks, --tim