blob: 6e175724f96d68513bceacae477c79db7db459bc [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.i18n.client;
import java.util.HashMap;
import java.util.Map;
/**
* Base class of {@link DefaultLocalizedNames}, used just to isolate all
* hand-written code here from all generated code.
*/
public abstract class DefaultLocalizedNamesBase implements LocalizedNames {
protected String[] likelyRegionCodes = null;
protected String[] sortedRegionCodes = null;
protected Map<String, String> namesMap = null;
public final String[] getLikelyRegionCodes() {
if (likelyRegionCodes == null) {
likelyRegionCodes = loadLikelyRegionCodes();
}
return likelyRegionCodes;
}
public final String getRegionName(String regionCode) {
if (needsNameMap()) {
loadNameMap();
}
return getRegionNameImpl(regionCode);
}
public final String[] getSortedRegionCodes() {
if (sortedRegionCodes == null) {
sortedRegionCodes = loadSortedRegionCodes();
}
return sortedRegionCodes;
}
protected String getRegionNameImpl(String regionCode) {
return namesMap.get(regionCode);
}
/**
* Returns a possibly-empty array of country codes, ordered by the literate
* population speaking this language.
*
* The default implementation is an empty array.
*
* @return a possibly-empty array of likely country codes
*/
protected String[] loadLikelyRegionCodes() {
return new String[0];
}
/**
* Initializes {{@link #namesMap} to a map of region code (including
* non-country codes) to localized names. Subclasses should generally call the
* parent implementation and then change specific entries, though if most
* entries are being changed they can just create their own map.
*/
protected void loadNameMap() {
namesMap = new HashMap<String, String>();
}
/**
* Returns an array of currently valid country codes ordered by the collating
* order of the locale.
*
* @return an array of ordered country codes
*/
protected abstract String[] loadSortedRegionCodes();
/**
* @return true if the name map needs to be loaded -- subclasses that provide
* alternate storage for the name map (such as in JSOs) should override
* this.
*/
protected boolean needsNameMap() {
return namesMap == null;
}
}