javacommons/utils/javasrc/com/nokia/mj/impl/utils/FormatterAvkon.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 java.util.Date;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    22
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    23
/**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    24
 * Formatter for Avkon based platform.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    25
 * @see Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    26
 */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    27
public class FormatterAvkon extends Formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    28
{
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    29
    /** Original pattern string */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    30
    private String pattern;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    31
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    32
    /** String with latest replacements */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    33
    private String replaced;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    34
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    35
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    36
     * Platform localisation type.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    37
     * Either ResourceLoader.AVKON or ResourceLoader.QT.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    38
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    39
    private final int locType;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    40
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    41
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    42
     * The first text parameter replacement index. For Avkon based
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    43
     * localisation this is 0, for Qt based localisation this is 1.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    44
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    45
    private final int startIndex;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    46
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    47
    /** Next replacement index */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    48
    private int nextIndex;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    49
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    50
    /*** ----------------------------- PUBLIC ------------------------------ */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    51
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    52
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    53
     * Replace the lowest numbered parameter in the string, which is not yet
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    54
     * replaced.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    55
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    56
     * @param string string to replace at the argument
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    57
     * @return same formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    58
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    59
    public Formatter arg(String string)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    60
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    61
        // Try to replace with patterns %[N...N]n, %nU, %n, %U
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    62
        String maxPattern = findMaxPattern();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    63
        if ((maxPattern != null && replace(maxPattern, string)) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    64
                replace("%" + nextIndex + "U", string) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    65
                replace("%" + nextIndex, string) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    66
                replace("%U", string))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    67
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    68
            nextIndex++;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    69
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    70
        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    71
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    72
            Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    73
                        "FormatterAvkon: String replacement failed on parameter " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    74
                        nextIndex + ": " + pattern);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    75
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    76
        return this;
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
     * Replace the least numbered parameter in the string, which is not yet
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    81
     * replaced.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    82
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    83
     * @param number number to replace at the argument
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    84
     * @return same formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    85
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    86
    public Formatter arg(int number)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    87
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    88
        String localisedNumber = _formatInteger(number);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    89
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    90
        // Try to replace with patterns %[N...N]n, %Ln, %nN, %n, %N
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    91
        String maxPattern = findMaxPattern();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    92
        if ((maxPattern != null && replace(maxPattern, localisedNumber)) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    93
                replace("%" + "L" + nextIndex, localisedNumber) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    94
                replace("%" + nextIndex + "N", localisedNumber) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    95
                replace("%" + nextIndex, localisedNumber) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    96
                replace("%N", localisedNumber))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    97
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    98
            nextIndex++;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
    99
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   100
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   101
        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   102
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   103
            Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   104
                        "FormatterAvkon: Integer replacement failed on parameter " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   105
                        nextIndex + ": " + pattern);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   106
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   107
        return this;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   108
    }
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
     * Replace the least numbered parameter in the string, which is not yet
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   112
     * replaced.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   113
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   114
     * @param ch character to replace at the argument
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   115
     * @return same formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   116
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   117
    public Formatter arg(char ch)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   118
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   119
        String chString = new String(new char[] { ch });
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   120
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   121
        // Try to replace with patterns %nC, %n, %C
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   122
        if (replace("%" + nextIndex + "C", chString) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   123
                replace("%" + nextIndex, chString) ||
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   124
                replace("%C", chString))
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   125
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   126
            nextIndex++;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   127
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   128
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   129
        else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   130
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   131
            Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   132
                        "FormatterAvkon: Character replacement failed on parameter " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   133
                        nextIndex + ": " + pattern);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   134
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   135
        return this;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   136
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   137
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   138
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   139
     * Replace the least numbered parameter in the string, which is not yet
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   140
     * replaced. Date is formatted according to current device date format.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   141
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   142
     * @param date date to replace at the argument
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   143
     * @return same formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   144
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   145
    public Formatter arg(Date date)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   146
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   147
        String dateString = _formatDate(date.getTime());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   148
        return arg(dateString);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   149
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   150
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   151
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   152
     * Convert the current pattern to string, along with parameter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   153
     * replacements.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   154
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   155
     * @return string where parameters are replaced
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   156
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   157
    public String toString()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   158
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   159
        String result = replaced;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   160
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   161
        // Reset for next usage
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   162
        replaced = pattern;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   163
        nextIndex = startIndex;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   164
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   165
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   166
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   167
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   168
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   169
     * Applies convertion from european digits into arabic-indic digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   170
     * based on existing language settings
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   171
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   172
     * @param str String which might contain european digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   173
     * @return A string identical with the provided string but with the
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   174
     *         european digits (if any) converted to arabic-indic digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   175
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   176
    public static String formatDigits(String str)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   177
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   178
        return _formatDigits(str);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   179
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   180
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   181
    /*** ----------------------------- PROTECTED -------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   182
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   183
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   184
     * Default constructor.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   185
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   186
    protected FormatterAvkon()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   187
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   188
        this("");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   189
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   190
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   191
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   192
     * Create a new formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   193
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   194
     * @param pattern formatter pattern
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   195
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   196
    protected FormatterAvkon(String aPattern)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   197
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   198
        this(aPattern, ResourceLoader.AVKON);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   199
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   200
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   201
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   202
     * Create a new formatter
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   203
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   204
     * @param pattern formatter pattern
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   205
     * @param aLocType platform localisation type
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   206
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   207
    protected FormatterAvkon(String aPattern, int aLocType)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   208
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   209
        pattern = aPattern;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   210
        replaced = aPattern;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   211
        locType = aLocType;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   212
        startIndex = (locType == ResourceLoader.QT? 1: 0);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   213
        nextIndex = startIndex;
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
    /*** ----------------------------- PRIVATE ---------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   217
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   218
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   219
     * Replace first occurrence of the string pattern in the replaced field.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   220
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   221
     * @param pattern string to search for
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   222
     * @param replacement string to replace patterns
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   223
     * @return true if pattern was found and replaced, false if pattern was
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   224
     *         not found
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   225
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   226
    private boolean replace(String pattern, String replacement)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   227
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   228
        int index = replaced.indexOf(pattern);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   229
        if (index != -1)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   230
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   231
            if (replaced.indexOf(pattern + "[]") != -1)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   232
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   233
                replaced =
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   234
                    replaced.substring(0, index) + replacement +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   235
                    replaced.substring(index + pattern.length() + 2);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   236
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   237
            else if (replaced.indexOf(pattern + "[") != -1)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   238
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   239
                return replaceWithMax(pattern, replacement, index);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   240
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   241
            else
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   242
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   243
                replaced =
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   244
                    replaced.substring(0, index) + replacement +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   245
                    replaced.substring(index + pattern.length());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   246
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   247
            return true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   248
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   249
        return false;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   250
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   251
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   252
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   253
     * Replace first occurrence of the string pattern in the replaced field.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   254
     * Replace [N...N] defined amount of characters.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   255
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   256
     * @param pattern string to search for
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   257
     * @param replacement string to replace patterns
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   258
     * @param index of replacement tag.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   259
     * @return true if pattern was found and replaced, false if pattern was
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   260
     *         not found
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   261
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   262
    private boolean replaceWithMax(String pattern, String replacement, int maxIndex)
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
        int closingIndex = replaced.indexOf("]", maxIndex + pattern.length());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   266
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   267
        // Check format [N...N] comply. If not skip.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   268
        if (closingIndex > 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   269
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   270
            try
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   271
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   272
                int maxLen = Integer.parseInt(replaced.substring(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   273
                                                  maxIndex + pattern.length() + 1, closingIndex));
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   274
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   275
                if (maxLen > replacement.length())
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   276
                {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   277
                    maxLen = replacement.length();
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   278
                }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   279
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   280
                replaced = replaced.substring(0, maxIndex) +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   281
                           replacement.substring(0, maxLen) +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   282
                           replaced.substring(closingIndex + 1);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   283
                result = true;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   284
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   285
            catch (NumberFormatException nfe)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   286
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   287
                Logger.WLOG(Logger.EUtils,
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   288
                            "FormatterAvkon: Replace with max failed to " +
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   289
                            "invalid replacement amount");
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   290
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   291
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   292
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   293
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   294
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   295
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   296
     * Finds next %[N...N]n pattern from the replaced field.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   297
     * Returns found pattern, or null if no pattern was found.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   298
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   299
    private String findMaxPattern()
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   300
    {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   301
        String result = null;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   302
        String startPattern = "%[";
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   303
        String endPattern = "]" + nextIndex;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   304
        int startIndex = replaced.indexOf(startPattern);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   305
        if (startIndex >= 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   306
        {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   307
            int endIndex = replaced.indexOf(endPattern, startIndex);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   308
            if (endIndex >= 0)
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   309
            {
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   310
                result = replaced.substring(
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   311
                    startIndex, endIndex + endPattern.length());
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   312
            }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   313
        }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   314
        return result;
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   315
    }
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   316
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   317
    /*** ----------------------------- NATIVE ----------------------------- */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   318
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   319
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   320
     * Format integer to current locale.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   321
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   322
     * @param number to be formatted.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   323
     * @return number formatted as current locale String.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   324
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   325
    private static native String _formatInteger(int number);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   326
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   327
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   328
     * Format date to current locale.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   329
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   330
     * @param timeInMilliSecs to be formatted.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   331
     * @param format Date format.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   332
     * @return date formatted as current locale String.
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   333
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   334
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   335
    private static native String _formatDate(long timeInMilliSecs);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   336
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   337
    /**
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   338
     * Applies conversion from european digits into arabic-indic digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   339
     * based on existing language settings
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   340
     *
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   341
     * @param str String which might contain european digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   342
     * @return A string identical with the provided string but with the
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   343
     *         european digits (if any) converted to arabic-indic digits
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   344
     */
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   345
    private static native String _formatDigits(String str);
d6dafc5d983f v2.2.19_1
hgs
parents:
diff changeset
   346
}