001: /*
002: * ====================================================================
003: * JAFFA - Java Application Framework For All
004: *
005: * Copyright (C) 2002 JAFFA Development Group
006: *
007: * This library is free software; you can redistribute it and/or
008: * modify it under the terms of the GNU Lesser General Public
009: * License as published by the Free Software Foundation; either
010: * version 2.1 of the License, or (at your option) any later version.
011: *
012: * This library is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this library; if not, write to the Free Software
019: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
020: *
021: * Redistribution and use of this software and associated documentation ("Software"),
022: * with or without modification, are permitted provided that the following conditions are met:
023: * 1. Redistributions of source code must retain copyright statements and notices.
024: * Redistributions must also contain a copy of this document.
025: * 2. Redistributions in binary form must reproduce the above copyright notice,
026: * this list of conditions and the following disclaimer in the documentation
027: * and/or other materials provided with the distribution.
028: * 3. The name "JAFFA" must not be used to endorse or promote products derived from
029: * this Software without prior written permission. For written permission,
030: * please contact mail to: jaffagroup@yahoo.com.
031: * 4. Products derived from this Software may not be called "JAFFA" nor may "JAFFA"
032: * appear in their names without prior written permission.
033: * 5. Due credit should be given to the JAFFA Project (http://jaffa.sourceforge.net).
034: *
035: * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
036: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
037: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
038: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
039: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
040: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
041: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
042: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
043: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
044: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
045: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
046: * SUCH DAMAGE.
047: * ====================================================================
048: */
049: /*
050: * LocaleHelper.java
051: *
052: * Created on April 11, 2003, 1:00 PM
053: */
054:
055: package org.jaffa.util;
056:
057: import org.apache.log4j.Logger;
058: import java.util.PropertyResourceBundle;
059: import java.util.Locale;
060: import java.lang.RuntimeException;
061: import java.util.MissingResourceException;
062: import org.jaffa.presentation.portlet.session.LocaleContext;
063:
064: /** This is a helper routine used for the internationalization of datatypes. It extracts formats from a properties file based on datatype and locale country and language codes.
065: * @author JonnyR
066: */
067: public class LocaleHelper {
068: private static Logger log = Logger.getLogger(LocaleHelper.class);
069: private static final String LOCALE_RESOURCE_PREFIX = "org.jaffa.config.locale";
070: private static PropertyResourceBundle c_localeResource = null;
071: static {
072: try {
073: c_localeResource = (PropertyResourceBundle) PropertyResourceBundle
074: .getBundle(LOCALE_RESOURCE_PREFIX);
075: } catch (MissingResourceException e) {
076: String str = "Can't load the resource file: "
077: + LOCALE_RESOURCE_PREFIX + ".properties";
078: log.fatal(str, e);
079: throw new RuntimeException(str, e);
080: }
081: }
082:
083: /** Returns a format based on country and language from the locale.properties file
084: * @param dataType datatype that the format is requested for
085: * @return returns a format string for parsing and formatting a datatype
086: */
087: public static String getProperty(String dataType) {
088:
089: Locale localeObject = LocaleContext.getLocale();
090: String key = null;
091: String format = null;
092: if (localeObject != null) {
093: String country = localeObject.getCountry();
094: String language = localeObject.getLanguage();
095: String variant = localeObject.getVariant();
096: key = language + "_" + country + "_" + variant + "."
097: + dataType;
098: try {
099: format = c_localeResource.getString(key);
100: } catch (MissingResourceException e1) {
101: String str = "Key '" + key
102: + "' not found in the default resource file";
103: log.debug(str);
104: }
105: if (format == null) {
106: key = language + "_" + country + "." + dataType;
107: try {
108: format = c_localeResource.getString(key);
109: } catch (MissingResourceException e1) {
110: String str = "Key '"
111: + key
112: + "' not found in the default resource file";
113: log.debug(str);
114: }
115:
116: }
117:
118: if (format == null) {
119: key = language + "." + dataType;
120: try {
121: format = c_localeResource.getString(key);
122: } catch (MissingResourceException e1) {
123: String str = "Key '"
124: + key
125: + "' not found in the default resource file";
126: log.debug(str);
127: }
128: }
129:
130: if (format == null) {
131: key = dataType;
132: try {
133: format = c_localeResource.getString(key);
134: } catch (MissingResourceException e1) {
135: String str = "Key '"
136: + key
137: + "' not found in the default resource file";
138: log.warn(str);
139: }
140: }
141: } else {
142: key = dataType;
143: try {
144: format = c_localeResource.getString(key);
145: } catch (MissingResourceException e1) {
146: String str = "Key '" + key
147: + "' not found in the default resource file";
148: log.warn(str);
149: }
150:
151: }
152: return format;
153: }
154:
155: /** This method will obtain obtain the layout by invoking the getProperty() method,
156: * if the inputLayout is enclosed in square brackets. Eg. [Xyz].
157: * Otherwise, it simply returns the inputLayout.
158: * A null is returned, in case the input is null.
159: * @param inputLayout the input layout to be parsed
160: * @return the parsed layout.
161: */
162: public static String determineLayout(String inputLayout) {
163: if (inputLayout != null && inputLayout.startsWith("[")) {
164: String outputLayout = getProperty(inputLayout.substring(1,
165: inputLayout.lastIndexOf(']')));
166: return outputLayout != null ? outputLayout : inputLayout;
167: } else
168: return inputLayout;
169: }
170: }
|