javauis/m2g_qt/javasrc/com/nokia/microedition/m2g/connection/M2GDefaultExternalResourceHandler.java
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 56 abc41079b313
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     1
/*
87
1627c337e51e v2.2.21_1
hgs
parents: 56
diff changeset
     2
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
56
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     3
* All rights reserved.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     8
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    11
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    12
* Contributors:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    13
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    14
* Description:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    15
*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    16
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    17
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    18
package com.nokia.microedition.m2g.connection;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    19
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    20
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    21
import java.io.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    22
import javax.microedition.io.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    23
import javax.microedition.m2g.ExternalResourceHandler;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    24
import javax.microedition.m2g.*;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    25
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    26
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    27
/**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    28
* <p>This private class is the default resource handler
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    29
* used to load external resources that are referenced
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    30
* within a ScalableImage, namely within a SVG document in the case of SVG.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    31
* The default resource handler will be used by the platform in the following cases:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    32
*   - if the MIDlet has not explicitly set its own handler to load external resources
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    33
*   - if the resource handler specified by the MIDlet is not able to load the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    34
*     external resources (i.e. the MIDlet's SVGResourceHandle.getExternalResource()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    35
*     returns null).</p>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    36
* @see javax.microedition.m2g.ExternalResourceHandler
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    37
*/
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    38
public class M2GDefaultExternalResourceHandler implements ExternalResourceHandler
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    39
{
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    40
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    41
    /*
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    42
     * According to RFC 2396, the rules for determening the base URI can be summarized
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    43
     * as follows (highest priority to lowest):
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    44
     * 1.The base URI is embedded in the document's content.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    45
     * 2.The base URI is that of the encapsulating document.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    46
     * 3.The base URI is the URI used to retrieve  the entity.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    47
     * 4.The base URI is defined by the context of the application
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    48
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    49
     * Note that in the case of the M2GDefaultExternalResourceHandler  4. is not
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    50
     * applicable.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    51
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    52
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    53
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    54
    // VARIABLES
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    55
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    56
    private M2GUrlTokenizer iTokenizer = null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    57
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    58
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    59
    // METHODS
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    60
    //--------------------------------------------------
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    61
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    62
     * This constructor is used to create a default resource handler that can
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    63
     * load resources from absolute URLs and from URLs that are relative
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    64
     * to the aUrl.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    65
     * NOTE: This handler will not be allowed to load resources from the application's
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    66
     * jar file.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    67
     *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    68
     * @param aUrl The already validated url used to load the svg document
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    69
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    70
    M2GDefaultExternalResourceHandler(String aUrl)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    71
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    72
        if (aUrl == null || aUrl.equals(""))
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    73
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    74
            iTokenizer = new M2GUrlTokenizer();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    75
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    76
        else
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    77
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    78
            iTokenizer = new M2GUrlTokenizer(aUrl);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    79
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    80
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    81
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    82
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    83
     * This constructor is used to create a default resource handler that can
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    84
     * load external resources from fully qualified URLs ONLY. Any relative URL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    85
     * will be considered to be a link to a resource within the application's jar file.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    86
     */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    87
    M2GDefaultExternalResourceHandler()
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    88
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    89
        this(null);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    90
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    91
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    92
    /**
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    93
      * This method is invoked when an external resource is required by the underlying implementation.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    94
      * When the request is completed by the implementation of this handler, a notification
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    95
      * must be sent to the SVG engine through the requestCompleted() method of <code>ScalableImage</code>.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    96
      * To get a synchronous behaviour, requestCompleted() can be called in the implementation
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    97
      * of requestResource. If called later, rendering the document before
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    98
      * completing all the requests will just display the currently available content.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
    99
      * Once the request is completed, the image will have to be redrawn to reflect the newly
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   100
      * available data.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   101
      * For more details on required resources, please refer to the <code>externalResourcesRequired</code>
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   102
      * attribute description in the SVG specification.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   103
      *
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   104
      * @param image image that originated the external data request
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   105
      * @param URL the an absolute or a relative URL for the external resource + drm mode
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   106
      */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   107
    public void requestResource(ScalableImage aImage, String aUrl)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   108
    {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   109
        M2GConnectionProxy proxy = null;
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   110
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   111
        /* IMPLEMENTATION NOTE:
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   112
         * The default resource handler assumes that if there is an embedded base URL within the
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   113
         * document then is upon the svg engine to provide the absolute URL.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   114
         * If the given URL is a relative URL then this handler will attempt to use as a base URL
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   115
         * to retrieve the containing svg document. However, if the document's base
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   116
         * URL is null then this handler will assume the given relative URL to be a file name
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   117
         * within the application's jar file.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   118
         */
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   119
        try
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   120
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   121
            // NOTE: if exception is thrown during the resolveExternalResourceUrl() call then
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   122
            // the requestCompleted should be called again with a null input stream.
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   123
            proxy = M2GConnectionFactory.resolveExternalResourceUrl(iTokenizer, aUrl);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   124
            aImage.requestCompleted(aUrl, proxy.getInputStream());
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   125
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   126
        catch (Exception e)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   127
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   128
            // e.printStackTrace();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   129
            // The requestCompleted() failed
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   130
            try
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   131
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   132
                aImage.requestCompleted(aUrl, null);
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   133
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   134
            catch (Exception ee)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   135
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   136
                // ee.printStackTrace();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   137
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   138
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   139
        // Close streams
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   140
        finally
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   141
        {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   142
            try
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   143
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   144
                if (proxy != null)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   145
                {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   146
                    proxy.close();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   147
                }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   148
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   149
            catch (Exception e)
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   150
            {
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   151
                // e.printStackTrace();
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   152
            }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   153
        }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   154
    }
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   155
}
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   156
abc41079b313 v2.2.7_1
hgs
parents:
diff changeset
   157