Hello,

In some of our reports we have entities that attempt to embed an empty image.  
That is, we blindly try to attach an image when the reference to the image is 
empty.  This results in a tortuously slow “ls” of the file store.

This is what we normally try to do:

<fo:block text-align="center">
<xsl:variable name="image2">
<xsl:value-of select="attachment/@location" />
</xsl:variable>
<fo:external-graphic src="{$image2}"
content-width="350px" content-height="350px" />
</fo:block>

We have an awkward workaround of always testing for a non-empty @location, or 
we instruct the user to to modify file permissions to wx instead of rwx.

I was wondering if it would make sense in the FOP code, in ExternalGraphic.java 
bind method:


 /** {@inheritDoc} */

    public void bind(PropertyList pList) throws FOPException {

        super.bind(pList);

        src = pList.get(PR_SRC).getString();


        //Additional processing: obtain the image's intrinsic size and baseline 
information

        url = URISpecification.getURL(src);

        FOUserAgent userAgent = getUserAgent();

        ImageManager manager = userAgent.getImageManager();

        ImageInfo info = null;

        try {

            info = manager.getImageInfo(url, 
userAgent.getImageSessionContext());

        } catch (ImageException e) {

            ResourceEventProducer eventProducer = 
ResourceEventProducer.Provider.get(

                    getUserAgent().getEventBroadcaster());

            eventProducer.imageError(this, url, e, getLocator());

        } catch (FileNotFoundException fnfe) {

            ResourceEventProducer eventProducer = 
ResourceEventProducer.Provider.get(

                    getUserAgent().getEventBroadcaster());

            eventProducer.imageNotFound(this, url, fnfe, getLocator());

        } catch (IOException ioe) {

            ResourceEventProducer eventProducer = 
ResourceEventProducer.Provider.get(

                    getUserAgent().getEventBroadcaster());

            eventProducer.imageIOError(this, url, ioe, getLocator());

        }

        if (info != null) {

            this.intrinsicWidth = info.getSize().getWidthMpt();

            this.intrinsicHeight = info.getSize().getHeightMpt();

            int baseline = info.getSize().getBaselinePositionFromBottom();

            if (baseline != 0) {

                this.intrinsicAlignmentAdjust

                    = FixedLength.getInstance(-baseline);

            }

        }

    }


to check for a URL that ends with the file separator or URL forward slash, and 
just return a FileNotFoundException in that case?  Is there any use case that 
this would disrupt?  We have users who have millions of images in their file 
store, and every time we run into one of these calls it consumes needless 
seconds or minutes of processing time until they are told that there is no 
Image Processor for <blank>.


Thanks,


Carl

________________________________
DISCLAIMER:
E-mails and attachments from Bamboo Rose, LLC are confidential.
If you are not the intended recipient, please notify the sender immediately by 
replying to the e-mail, and then delete it without making copies or using it in 
any way.
No representation is made that this email or any attachments are free of 
viruses. Virus scanning is recommended and is the responsibility of the 
recipient.

Reply via email to