001: /*
002: *
003: *
004: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
005: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
006: *
007: * This program is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU General Public License version
009: * 2 only, as published by the Free Software Foundation.
010: *
011: * This program is distributed in the hope that it will be useful, but
012: * WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * General Public License version 2 for more details (a copy is
015: * included at /legal/license.txt).
016: *
017: * You should have received a copy of the GNU General Public License
018: * version 2 along with this work; if not, write to the Free Software
019: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA
021: *
022: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
023: * Clara, CA 95054 or visit www.sun.com if you need additional
024: * information or have any questions.
025: */
026: package com.sun.perseus.model;
027:
028: import com.sun.perseus.j2d.RasterImage;
029:
030: /**
031: * Interface for handling RasterImage resources loading. Implementations can
032: * vary in the way they handle security restrictions, caching or advanced
033: * loading policies.
034: *
035: * @version $Id: ImageLoader.java,v 1.4 2006/06/29 10:47:32 ln156897 Exp $
036: */
037: public interface ImageLoader {
038: /**
039: * Resolves the input relative and base URI into an absolute URI
040: * which can be used in subsequent calls to needsURI, getImageAndWait
041: * or getImageLater calls.
042: * @param uri the requested URI content.
043: * @param baseURI the base URI. Needed in case uri is relative.
044: * @return the resolved URI that should be requested in follow on
045: * needsURI, getImageAndWait or getImageLater calls or null if
046: * the URI cannot be resolved.
047: */
048: String resolveURI(final String uri, final String baseURI);
049:
050: /**
051: * Notifies the URILoader that the given uri will be needed.
052: *
053: * @param absoluteURI the requested URI content.
054: */
055: void needsURI(final String absoluteURI);
056:
057: /**
058: * Requests the given image. This call blocks until an image is
059: * returned.
060: *
061: * @param uri the requested URI. Should be a resolved URI.
062: * @return the loaded image or the same image as returned by
063: * a <code>getBrokenImage</code> call if the image could
064: * not be loaded.
065: */
066: RasterImage getImageAndWait(final String uri);
067:
068: /**
069: * Requests the given image. This call returns immediately and
070: * the image is set on the input <code>ImageNode</code> when the
071: * image becomes available.
072: *
073: * @param uri the requested URI. Should be a resolved URI.
074: * @param imageNode the <code>ImageNode</code> whose image
075: * member should be set as a result of loading the
076: * image.
077: */
078: void getImageLater(final String uri,
079: final RasterImageConsumer imageNode);
080:
081: /**
082: * Returns the image that should be used to represent
083: * an image which is loading.
084: *
085: * @return the image to use to represent a pending loading.
086: */
087: RasterImage getLoadingImage();
088:
089: /**
090: * Returns the image that should be used to represent an
091: * image which could not be loaded.
092: *
093: * @return the image to represent broken uris or content.
094: */
095: RasterImage getBrokenImage();
096:
097: /**
098: * Determines whether this ImageLoader can handle relative uri's
099: *
100: * @return true if this ImageLoader can handle relative uri's;
101: * false otherwise.
102: */
103: boolean allowsRelativeURI();
104:
105: /**
106: * Some ImageLoader implementations may wish to wait until the end of the
107: * Document load to start retrieving resources. This method notifies the
108: * implementation that the associated DocumentNode completed loading
109: * successfully.
110: *
111: * @param doc the DocumentNode which just finised loading.
112: */
113: void documentLoaded(final DocumentNode doc);
114:
115: /**
116: * In cases where the ImageLoader may update the images associated to a URI,
117: * RasterImageConsumer interested in updates need to register their interest
118: * throught this method.
119: *
120: * @param absoluteURI the URI the RasterImageConsumer is interested in.
121: * @param imageNode the RasterImageConsumer interested in the URI.
122: */
123: void addRasterImageConsumer(final String absoluteURI,
124: final RasterImageConsumer imageNode);
125:
126: /**
127: * In cases where the ImageLoader may update the images associated to a URI,
128: * RasterImageConsumer interested in updates need to de-register their
129: * interest throught this method.
130: *
131: * @param absoluteURI the URI the RasterImageConsumer is interested in.
132: * @param imageNode the RasterImageConsumer interested in the URI.
133: */
134: void removeRasterImageConsumer(final String absoluteURI,
135: final RasterImageConsumer imageNode);
136:
137: }
|