FileDocCategorySizeDatePackage
Resource.javaAPI DocJ2ME MIDP 2.011391Thu Nov 07 12:02:22 GMT 2002com.sun.midp.lcdui

Resource

public abstract class Resource extends Object
The Resource class retrieves the RI's locale specific values such as label strings and date formats from its locale specific subclasses. A subclass of Resource is easily localizable and accompanied with a locale name following an underscore: for example, a German one would be named Resource_de. In this way, as many related locale-specific classes as needed can be provided. The location of such locale-specific classes is expected to be "com.sun.midp.lcdui.i18n".

Fields Summary
private Hashtable
lookup
handle for the key value lookup table.
static Resource
res
local handle to the current Resource structure.
Constructors Summary
Methods Summary
protected abstract java.lang.Object[][]getContents()
fetch the entire resource contents.

return
array of key value pairs

public static java.lang.StringgetDateString(java.lang.String dayOfWeek, java.lang.String date, java.lang.String month, java.lang.String year)
Returns a locale-specific formatted date string. By default, it will return like "Fri, 05 Dec 2000".

param
dayOfWeek day of week
param
date date
param
month month
param
year year
return
formatted date string

        String lStr = null;
        if (res != null) {
            if (res.lookup == null) {
                res.loadLookup();
            }
            lStr = res.getLocalizedDateString(dayOfWeek, date, month, year);
        }
        return (lStr != null) ? lStr :
            (dayOfWeek + ", " + date + " " + month + " " + year);
    
public static java.lang.StringgetDateTimeString(java.lang.String dayOfWeek, java.lang.String date, java.lang.String month, java.lang.String year, java.lang.String hour, java.lang.String min, java.lang.String sec, java.lang.String ampm)
Returns a locale-specific formatted date and time string. By default, it will like return "Fri, 05 Dec 2000 10:05:59 PM".

param
dayOfWeek day of week
param
date date
param
month month
param
year year
param
hour hour
param
min minute
param
sec secound
param
ampm AM or PM
return
formatted time and date string

        String lStr = null;
        if (res != null) {
            if (res.lookup == null) {
                res.loadLookup();
            }
            lStr = res.getLocalizedDateTimeString(dayOfWeek, date, month, year,
                                                  hour, min, sec, ampm);
        }
        return (lStr != null) ? lStr : 
            (dayOfWeek + ", " + date + " " + month + " " + year + " " +
             hour + ":" + min + ":" + sec +
             ((ampm == null) ? "" : (" " + ampm)));
    
public static intgetFirstDayOfWeek()
Returns what the first day of the week is; e.g., Sunday in US, Monday in France.

return
numeric value for first day of week

        if (res == null) {
            return java.util.Calendar.SUNDAY;
        }
        return res.getLocalizedFirstDayOfWeek();
    
protected abstract java.lang.StringgetLocalizedDateString(java.lang.String dayOfWeek, java.lang.String date, java.lang.String month, java.lang.String year)
get the localized version of the date string.

param
dayOfWeek named day of week
param
date named current date
param
month name of month
param
year name of year
return
formatted date string

protected abstract java.lang.StringgetLocalizedDateTimeString(java.lang.String dayOfWeek, java.lang.String date, java.lang.String month, java.lang.String year, java.lang.String hour, java.lang.String min, java.lang.String sec, java.lang.String ampm)
Returns a locale-specific formatted date and time string. By default, it will like return "Fri, 05 Dec 2000 10:05:59 PM".

param
dayOfWeek day of week
param
date date
param
month month
param
year year
param
hour hour
param
min minute
param
sec secound
param
ampm AM or PM
return
formatted time and date string

protected abstract intgetLocalizedFirstDayOfWeek()
get the localized first day of week.

return
numeric localized first day of week.

protected abstract java.lang.StringgetLocalizedTimeString(java.lang.String hour, java.lang.String min, java.lang.String sec, java.lang.String ampm)
Returns a locale-specific formatted time string. By default, it will return like "10:05:59 PM".

param
hour hour
param
min minute
param
sec secound
param
ampm AM or PM
return
formatted time string

public static java.lang.StringgetString(java.lang.String key)
Returns a localized string for the argument string.

param
key an original string in the source code.
return
value of named resource.

        String lStr = null;
        if (res != null) {
            if (res.lookup == null) {
                res.loadLookup();
            }
            lStr = (String) res.lookup.get(key);
        }
        return (lStr != null) ? lStr : key;
    
public static java.lang.StringgetString(java.lang.String key, java.lang.String[] values)
Returns a localized string for the argument string after substituting values for the "%d" tokens in the localized string, where "d" is 1-9 and representing a values 0-8 in an array. The tokens can be in any order in the string. If the localized String is not found the key is used as the localized string. If a "%" is not followed by 1-9 then the "%" is dropped but the next char is put directly into the output string, so "%%" will be "%" in the output and not count as part of a token. Another example would be that "%a" would be just be "a".

For example, given "%2 had a little %1." and {"lamb", "Mary"} and there is no localized string for the key, the result would be:

"Mary had a little lamb."

param
key an original string in the source code with optional substitution tokens
param
values values to substitute for the tokens in the resource
return
value of named resource with the tokens substituted
exception
ArrayIndexOutOfBoundsException if there are not enough values to substitute

        boolean tokenMarkerFound = false;
        StringBuffer output;
        char currentChar;
        int length;
        String str = getString(key);

        if (str == null) {
            return null;
        }

        length = str.length();
        output = new StringBuffer(length * 2); // try to avoid resizing

        for (int i = 0; i < length; i++) {
            currentChar = str.charAt(i);
  
            if (tokenMarkerFound) {
                if (currentChar < '1" || currentChar > '9") {
                    // covers the "%%" case
                    output.append(currentChar);
                } else {
                    // substitute a value, "1" is index 0 into the value array
                    output.append(values[currentChar - '1"]);
                }

                tokenMarkerFound = false;
            } else if (currentChar == '%") {
                tokenMarkerFound = true;
            } else {
                output.append(currentChar);
            }
        }
                
        return output.toString();
    
public static java.lang.StringgetTimeString(java.lang.String hour, java.lang.String min, java.lang.String sec, java.lang.String ampm)
Returns a locale-specific formatted time string. By default, it will return like "10:05:59 PM".

param
hour hour
param
min minute
param
sec secound
param
ampm AM or PM
return
formatted time string

        String lStr = null;
        if (res != null) {
            if (res.lookup == null) {
                res.loadLookup();
            }
            lStr = res.getLocalizedTimeString(hour, min, sec, ampm);
        }
        return (lStr != null) ? lStr : 
            (hour + ":" + min + ":" + sec + 
             ((ampm == null) ? "" : (" " + ampm)));
    
public static booleanisAMPMafterTime()
Returns whether the AM_PM field comes after the time field or not.

return
true, if AM/PM is after the time field.

        if (res == null) {
            return true;
        }
        return res.isLocalizedAMPMafterTime();
    
protected abstract booleanisLocalizedAMPMafterTime()
localized indication of where the AM/PM indicator is placed.

return
true, if AM/PM is after the time field.

private voidloadLookup()
load the lookup table.

              
       
        if (lookup != null)
            return;

        Object[][] contents = getContents();
        Hashtable tmp = new Hashtable(contents.length);
        for (int i = 0; i < contents.length; ++i) {
            tmp.put(contents[i][0], contents[i][1]);
        }
        lookup = tmp;