cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Upayavira ...@odoko.co.uk>
Subject Re: Extending the image reader
Date Mon, 30 Jan 2006 15:28:19 GMT
Tim Williams wrote:
> On 1/30/06, Upayavira <uv@odoko.co.uk> 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.

Ah. And currently the cache doesn't survive restarts in the CLI, which
it should. So your approach is now more understandable.

Regards, Upayavira



Mime
View raw message