diff -r 023eef975703 -r abc41079b313 javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/connection/M2GDefaultExternalResourceHandler.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/connection/M2GDefaultExternalResourceHandler.java Fri Jul 23 12:27:20 2010 +0300 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + +package com.nokia.microedition.m2g.connection; + + +import java.io.*; +import javax.microedition.io.*; +import javax.microedition.m2g.ExternalResourceHandler; +import javax.microedition.m2g.*; + + +/** +*

This private class is the default resource handler +* used to load external resources that are referenced +* within a ScalableImage, namely within a SVG document in the case of SVG. +* The default resource handler will be used by the platform in the following cases: +* - if the MIDlet has not explicitly set its own handler to load external resources +* - if the resource handler specified by the MIDlet is not able to load the +* external resources (i.e. the MIDlet's SVGResourceHandle.getExternalResource() +* returns null).

+* @see javax.microedition.m2g.ExternalResourceHandler +*/ +public class M2GDefaultExternalResourceHandler implements ExternalResourceHandler +{ + + /* + * According to RFC 2396, the rules for determening the base URI can be summarized + * as follows (highest priority to lowest): + * 1.The base URI is embedded in the document's content. + * 2.The base URI is that of the encapsulating document. + * 3.The base URI is the URI used to retrieve the entity. + * 4.The base URI is defined by the context of the application + * + * Note that in the case of the M2GDefaultExternalResourceHandler 4. is not + * applicable. + */ + + //-------------------------------------------------- + // VARIABLES + //-------------------------------------------------- + private M2GUrlTokenizer iTokenizer = null; + + //-------------------------------------------------- + // METHODS + //-------------------------------------------------- + /** + * This constructor is used to create a default resource handler that can + * load resources from absolute URLs and from URLs that are relative + * to the aUrl. + * NOTE: This handler will not be allowed to load resources from the application's + * jar file. + * + * @param aUrl The already validated url used to load the svg document + */ + M2GDefaultExternalResourceHandler(String aUrl) + { + if (aUrl == null || aUrl.equals("")) + { + iTokenizer = new M2GUrlTokenizer(); + } + else + { + iTokenizer = new M2GUrlTokenizer(aUrl); + } + } + + /** + * This constructor is used to create a default resource handler that can + * load external resources from fully qualified URLs ONLY. Any relative URL + * will be considered to be a link to a resource within the application's jar file. + */ + M2GDefaultExternalResourceHandler() + { + this(null); + } + + /** + * This method is invoked when an external resource is required by the underlying implementation. + * When the request is completed by the implementation of this handler, a notification + * must be sent to the SVG engine through the requestCompleted() method of ScalableImage. + * To get a synchronous behaviour, requestCompleted() can be called in the implementation + * of requestResource. If called later, rendering the document before + * completing all the requests will just display the currently available content. + * Once the request is completed, the image will have to be redrawn to reflect the newly + * available data. + * For more details on required resources, please refer to the externalResourcesRequired + * attribute description in the SVG specification. + * + * @param image image that originated the external data request + * @param URL the an absolute or a relative URL for the external resource + drm mode + */ + public void requestResource(ScalableImage aImage, String aUrl) + { + M2GConnectionProxy proxy = null; + + /* IMPLEMENTATION NOTE: + * The default resource handler assumes that if there is an embedded base URL within the + * document then is upon the svg engine to provide the absolute URL. + * If the given URL is a relative URL then this handler will attempt to use as a base URL + * to retrieve the containing svg document. However, if the document's base + * URL is null then this handler will assume the given relative URL to be a file name + * within the application's jar file. + */ + try + { + // NOTE: if exception is thrown during the resolveExternalResourceUrl() call then + // the requestCompleted should be called again with a null input stream. + proxy = M2GConnectionFactory.resolveExternalResourceUrl(iTokenizer, aUrl); + aImage.requestCompleted(aUrl, proxy.getInputStream()); + } + catch (Exception e) + { + // e.printStackTrace(); + // The requestCompleted() failed + try + { + aImage.requestCompleted(aUrl, null); + } + catch (Exception ee) + { + // ee.printStackTrace(); + } + } + // Close streams + finally + { + try + { + if (proxy != null) + { + proxy.close(); + } + } + catch (Exception e) + { + // e.printStackTrace(); + } + } + } +} + +