javacommons/utils/javasrc/com/nokia/mj/impl/utils/ResourceLoaderQt.java
author hgs
Fri, 15 Oct 2010 12:29:39 +0300
changeset 80 d6dafc5d983f
permissions -rw-r--r--
v2.2.19_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
80
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     1
/*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     3
* All rights reserved.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     8
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    11
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    12
* Contributors:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    13
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    14
* Description:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    15
*
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    16
*/
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    17
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    18
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    19
package com.nokia.mj.impl.utils;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    20
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    21
import com.nokia.mj.impl.coreui.CoreUi;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
import java.util.Hashtable;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
/**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
 * Resource loader to get localised strings and Formatter patterns.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
 * <br>
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
 * Usage:
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
 * <pre>
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
 *   ResourceLoader res = ResourceLoader.getInstance("javaapplicationinstaller", "txt_java_inst_");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    31
 *   Label subjectLabel = createLabel(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
 *       res.format("subject").arg(certificate.getSubject()).toString(),
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
 *       horizontalSpan, labelStyle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
 * </pre>
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
 * @see ResourceLoader
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
 */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
class ResourceLoaderQt extends ResourceLoader
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    40
     * Resource string map for the resources that have been fetched
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
     * at least once.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
    private Hashtable iResourceMap = new Hashtable();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
    /** Resource name passed when ResourceLoader is constructed. */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
    private String iResourceName = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
    /** Array of resource names. */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
    private String[] iResourceNames = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
    /** Resource name prefix passed when ResourceLoader is constructed. */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
    private String iPrefix = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
    /** Array of resource name prefixes. */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
    private String[] iPrefixes = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
    /** Array of handles to native translator objects. */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    58
    private int[] iTranslators = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    59
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    60
    /*** ----------------------------- PUBLIC ------------------------------ */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    61
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    62
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    63
     * Returns a resource loader instance.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    64
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    65
     * @param avkonFileName this parameter is ignored
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    66
     * @param avkonPrefix this parameter is ignored
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    67
     * @param qtFileName name of the Qt resource file
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    68
     * @param qtPrefix prefix added before each id when retrieving
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    69
     * @return resource loader instance
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    70
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    71
    public static ResourceLoader getInstance(String avkonFileName,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    72
                                             String avkonPrefix,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    73
                                             String qtFileName,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    74
                                             String qtPrefix)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    75
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    76
        return getInstance(qtFileName, qtPrefix);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    77
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    78
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    79
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    80
     * Returns a resource loader instance.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    81
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    82
     * @param resourceName comma separated list of resource file names
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    83
     * @param prefix comma separated list of prefixes added before each
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    84
     * id when retrieving
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    85
     * @return resource loader instance
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    86
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    87
    public static ResourceLoader getInstance(String resourceName, String prefix)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    88
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    89
        String key = resourceName + ":" + prefix;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    90
        ResourceLoader result = (ResourceLoader)iResourceLoaders.get(key);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    91
        if (result == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    92
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    93
            result = new ResourceLoaderQt(resourceName, prefix);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    94
            iResourceLoaders.put(key, result);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    95
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    96
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    97
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    98
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    99
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   100
     * Get a string formatter of a given resource id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   101
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   102
     * @param id comma separated list of resource ids
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   103
     * @return formatter instance
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   104
     * @see Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   105
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   106
    public Formatter format(String id)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   107
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   108
        return new FormatterQt(this, id);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   109
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   110
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   111
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   112
     * Get a string formatter of a given resource id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   113
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   114
     * @param id resource id
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   115
     * @return formatter instance
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   116
     * @see Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   117
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   118
    public Formatter format(Id id)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   119
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   120
        return new FormatterQt(this, id.getString(QT));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   121
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   122
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   123
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   124
     * Formats localised text with specified parameters from an array.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   125
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   126
     * @param id comma separated list of resource ids
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   127
     * @param textParameters parameters to be filled into the text
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   128
     * @return localised text formatted with the provided parameters
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   129
     * @see Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   130
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   131
    public String format(String id, Object[] textParameters)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   132
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   133
        return new FormatterQt(this, id).format(textParameters);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   134
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   135
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   136
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   137
     * Formats localised text with specified parameters from an array.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   138
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   139
     * @param id resource id
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   140
     * @param textParameters parameters to be filled into the text
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   141
     * @return localised text formatted with the provided parameters
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   142
     * @see Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   143
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   144
    public String format(Id id, Object[] textParameters)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   145
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   146
        return new FormatterQt(this, id.getString(QT)).format(textParameters);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   147
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   148
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   149
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   150
    /*** ----------------------------- PACKAGE ---------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   151
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   152
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   153
     * Releases resources and destroys this ResourceLoader instance.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   154
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   155
    void destroy()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   156
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   157
        deleteTranslators();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   158
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   159
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   160
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   161
     * Get a plain string resource with a given resource id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   162
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   163
     * @param id resource id, either with prefix or without
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   164
     * @param n used to identify plural forms
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   165
     * @return resource string, or the id if does not exist
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   166
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   167
    synchronized String string(final String id, final int n)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   168
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   169
        String str = (String)iResourceMap.get(id+n);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   170
        if (str == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   171
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   172
            str = getResourceStringByList(id, n);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   173
            // Put to resource map with original key for quick retrieval.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   174
            iResourceMap.put(id, str+n);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   175
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   176
        return str;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   177
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   178
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   179
    /*** ----------------------------- PRIVATE ---------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   180
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   181
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   182
     * Creates resource loader, using the current locale of the environment.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   183
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   184
     * @param resourceName name of the resource
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   185
     * @param aPrefix prefix added before each id when retrieving
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   186
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   187
    private ResourceLoaderQt(String aResourceName, String aPrefix)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   188
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   189
        setResourceName(aResourceName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   190
        setPrefix(aPrefix);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   191
        if (!loadTranslators())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   192
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   193
            throw new IllegalArgumentException(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   194
                "Translations not found for " + aResourceName);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   195
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   196
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   197
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   198
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   199
     * Initializes member variables according to given resource name.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   200
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   201
     * @param aResourceName comma separated list of resource names
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   202
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   203
    private void setResourceName(String aResourceName)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   204
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   205
        iResourceName = aResourceName;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   206
        iResourceNames = Tokenizer.split(iResourceName, SEPARATOR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   207
        if (iResourceNames == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   208
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   209
            iResourceNames = new String[0];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   210
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   211
        for (int i = 0; i < iResourceNames.length; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   212
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   213
            iResourceNames[i] = iResourceNames[i].trim();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   214
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   215
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   216
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   217
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   218
     * Initializes member variables according to given prefix.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   219
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   220
     * @param aPrefix comma separated list of text id prefixes
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   221
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   222
    private void setPrefix(String aPrefix)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   223
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   224
        iPrefix = aPrefix;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   225
        iPrefixes = Tokenizer.split(iPrefix, SEPARATOR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   226
        if (iPrefixes == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   227
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   228
            iPrefixes = new String[0];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   229
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   230
        for (int i = 0; i < iPrefixes.length; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   231
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   232
            iPrefixes[i] = iPrefixes[i].trim();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   233
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   234
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   235
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   236
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   237
     * Initializes iTranslators array from given resource files.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   238
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   239
     * @param true if operation succeeds.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   240
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   241
    private boolean loadTranslators()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   242
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   243
        if (iResourceName == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   244
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   245
            return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   246
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   247
        iTranslators = new int[iResourceNames.length];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   248
        CoreUi.runInSyncUiThread(new Runnable() {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   249
            public void run()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   250
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   251
                for (int i = 0; i < iResourceNames.length; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   252
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   253
                    iTranslators[i] = _createTranslator(iResourceNames[i]);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   254
                    if (iTranslators[i] < 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   255
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   256
                        Logger.ILOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   257
                                    "ResourceLoaderQt: Cannot load resource file " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   258
                                    iResourceNames[i] + ", error: " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   259
                                    iTranslators[i]);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   260
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   261
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   262
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   263
        });
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   264
        boolean result = false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   265
        for (int i = 0; i < iTranslators.length; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   266
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   267
            if (iTranslators[i] > 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   268
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   269
                // Return true if loading succeeds for at least one translator.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   270
                result = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   271
                break;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   272
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   273
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   274
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   275
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   276
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   277
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   278
     * Deletes translator from iTranslators array.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   279
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   280
    private void deleteTranslators()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   281
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   282
        CoreUi.runInSyncUiThread(new Runnable() {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   283
            public void run()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   284
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   285
                for (int i = 0; i < iTranslators.length; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   286
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   287
                    if (iTranslators[i] <= 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   288
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   289
                        continue;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   290
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   291
                    int result = _deleteTranslator(iTranslators[i]);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   292
                    if (result < 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   293
                    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   294
                        Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   295
                                    "ResourceLoaderQt: Deleting translator for resource " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   296
                                    iResourceNames[i] + " failed, error: " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   297
                                    result);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   298
                    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   299
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   300
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   301
        });
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   302
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   303
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   304
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   305
     * Get a string with a given comma separated resource id list.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   306
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   307
     * @param id comma separated resource id list, either with prefix or without
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   308
     * @param n used to identify plural forms
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   309
     * @return resource string, or the id if does not exist
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   310
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   311
    private String getResourceStringByList(String id, int n)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   312
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   313
        String str = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   314
        String[] ids = Tokenizer.split(id, SEPARATOR);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   315
        String strIn = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   316
        String strOut = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   317
        for (int i = 0; i < ids.length && str == null; i++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   318
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   319
            for (int j = 0; j < iTranslators.length && str == null; j++)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   320
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   321
                if (iTranslators[j] <= 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   322
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   323
                    // Skip invalid translator handles.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   324
                    continue;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   325
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   326
                // Check if id already has prefix.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   327
                if (iPrefixes != null && iPrefixes.length > j &&
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   328
                    !ids[i].startsWith(iPrefixes[j]))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   329
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   330
                    // Try with prefix and id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   331
                    strIn = iPrefixes[j] + ids[i];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   332
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   333
                else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   334
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   335
                    // Try with id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   336
                    strIn = ids[i];
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   337
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   338
                strOut = _translate(iTranslators[j], strIn, n);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   339
                if (!strIn.equals(strOut))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   340
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   341
                    // Translation was found.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   342
                    str = strOut;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   343
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   344
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   345
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   346
        if (str == null)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   347
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   348
            // Not found. Use the id itself.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   349
            str = id;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   350
            Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   351
                        "ResourceLoaderQt: Cannot find resource: " + id +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   352
                        ", prefix: " + iPrefix);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   353
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   354
        return str;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   355
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   356
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   357
    /*** ----------------------------- NATIVE ----------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   358
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   359
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   360
     * Creates native translator object.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   361
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   362
     * @param aResourceFilename resource filename
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   363
     * @return handle to native side translator object, or negative
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   364
     * error code
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   365
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   366
    private static native int _createTranslator(String aResourceFilename);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   367
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   368
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   369
     * Deletes native translator object.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   370
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   371
     * @param handle to native side translator object
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   372
     * @return 0 if deletion was successful, or negative error code
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   373
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   374
    private static native int _deleteTranslator(int aHandle);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   375
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   376
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   377
     * Fetches localized text for given text id.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   378
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   379
     * @param aHandle translator to be used
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   380
     * @param aId text id
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   381
     * @param aN used to identify plural forms
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   382
     * @return localized text, or aId if text is not found
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   383
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   384
    private static native String _translate(int aHandle, String aId, int aN);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   385
}