package org.openswing.swing.internationalization.java;
import java.io.*;
import java.util.*;
import org.openswing.swing.util.java.*;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Class for collecting all internationalization properties:
* translations, data/numeric/currency formats.</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
*
* <p> This file is part of OpenSwing Framework.
* This library is free software; you can redistribute it and/or
* modify it under the terms of the (LGPL) Lesser General Public
* License as published by the Free Software Foundation;
*
* GNU LESSER GENERAL PUBLIC LICENSE
* Version 2.1, February 1999
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* The author may be contacted at:
* maurocarniel@tin.it</p>
*
* @author Mauro Carniel
* @version 1.0
*/
public class Resources implements Serializable {
/** dictionary containing the translations */
private Properties dictionary;
/** currency symbol */
private String currencySymbol;
/** decimal symbol */
private char decimalSymbol;
/** grouping symbol */
private char groupingSymbol;
/** time format; possible values: HH_MM, H_MM_AAA, HH_MM_SS, H_MM_SS_AAA, HH_MM_SS, H_MM_SS_AAA */
private String timeFormat;
/** example 18:30 */
public static final String HH_MM = "HH:mm";
/** example 6:30 PM */
public static final String H_MM_AAA = "h:mm aaa";
/** example 18:30:59 */
public static final String HH_MM_SS = "HH:mm:ss";
/** example 6:30:59 PM */
public static final String H_MM_SS_AAA = "h:mm:ss aaa";
/** example 18:30:59,123 */
public static final String HH_MM_SS_SSS = "HH:mm:ss,SSS";
/** example 6:30:59,123 PM */
public static final String H_MM_SS_SSS_AAA = "h:mm:ss,SSS aaa";
/** language identifier */
private String languageId;
/** date format separator; for example: '-' or '/' */
private char dateFormatSeparator;
/* date format: yy[yy]MMdd */
public static final int YMD = 0;
/* date format: ddMMyy[yy] */
public static final int DMY = 1;
/* date format: MMddyy[yy] */
public static final int MDY = 2;
/* date format: yy[yy]ddMM */
public static final int YDM = 3;
/** flag used to show century in the date format */
private boolean showCenturyInDateFormat;
/** date format; possible values: YMD, DMY, MDY, YDM */
private int dateFormat;
/** warn when no resource key not found */
private boolean showResourceNotFoundWarning = true;
/**
* Costructor used to inizialize the dictionary and other settings.
* @param dictionary dictionary containing the translations
* @param currencySymbol currency symbol
* @param decimalSymbol decimal symbol
* @param groupingSymbol grouping symbol
* @param dateFormat date format
* @param timeFormat time format; possibile values: HH_MM, H_MM_AAA, HH_MM_SS, H_MM_SS_AAA
* @param languageId language identifier
* @param showResourceNotFoundWarning define if log when a resource is not found
*/
public Resources(
Properties dictionary,
String currencySymbol,
char decimalSymbol,
char groupingSymbol,
int dateFormat,
boolean showCenturyInDateFormat,
char dateFormatSeparator,
String timeFormat,
String languageId,
boolean showResourceNotFoundWarning
) {
if(dateFormat < 0 || dateFormat > 3)
dateFormat = Resources.YMD;
this.dictionary = dictionary;
this.currencySymbol = currencySymbol;
this.decimalSymbol = decimalSymbol;
this.groupingSymbol = groupingSymbol;
this.dateFormat = dateFormat;
this.showCenturyInDateFormat = showCenturyInDateFormat;
this.dateFormatSeparator = dateFormatSeparator;
this.languageId = languageId;
this.showResourceNotFoundWarning = showResourceNotFoundWarning;
if (!timeFormat.equals(HH_MM) &&
!timeFormat.equals(H_MM_AAA) &&
!timeFormat.equals(HH_MM_SS) &&
!timeFormat.equals(H_MM_SS_AAA) &&
!timeFormat.equals(HH_MM_SS_SSS) &&
!timeFormat.equals(H_MM_SS_SSS_AAA)) {
System.err.println("The time format specified '"+timeFormat+"' is not allowed.\nAllowable values are: '"+HH_MM+"' or '"+H_MM_AAA+"'"+"' or '"+HH_MM_SS+"'"+"' or '"+H_MM_SS_AAA+"' or '"+HH_MM_SS_SSS+"'"+"' or '"+H_MM_SS_SSS_AAA+"'");
timeFormat = HH_MM;
}
this.timeFormat = timeFormat;
}
/**
* @return Enumeration of all entries in dictionary
*/
public final Enumeration getEntries() {
return dictionary.keys();
}
/**
* @param text text to translate
* @return translated text
*/
public final String getResource(String text) {
if (text==null || text.equals(""))
return "";
if (dictionary.containsKey(text))
return dictionary.getProperty(text);
if (dictionary.size()>0 && showResourceNotFoundWarning)
// if dictionary was loaded (i.e. application must support multi-language)
// then warn the translation missing...
System.err.println("The resource '"+text+"' is not defined.");
return text;
}
/**
* @return grouping symbol
*/
public final char getGroupingSymbol() {
return groupingSymbol;
}
/**
* @return currency symbol
*/
public final String getCurrencySymbol() {
return currencySymbol;
}
/**
* @return decimal symbol
*/
public final char getDecimalSymbol() {
return decimalSymbol;
}
/**
* @return date format; possible values: YMD, DMY, MDY, YDM
*/
public final int getDateFormat() {
return dateFormat;
}
/**
* @return time format
*/
public final String getTimeFormat() {
return timeFormat;
}
/**
* @return language identifier
*/
public final String getLanguageId() {
return languageId;
}
/**
* @return date format separator; for example: '-' or '/'
*/
public final char getDateFormatSeparator() {
return dateFormatSeparator;
}
/**
* @return used to show century in the date format
*/
public final boolean isShowCenturyInDateFormat() {
return showCenturyInDateFormat;
}
/**
* @param dateType possibile values: Consts.TYPE_DATE, Consts.TYPE_TIME, Consts.TYPE_DATE_TIME
* @return date format, according to dateFormat, dateFormatSeparator and showCenturyInDateFormat properties
*/
public final String getDateMask(int dateType) {
return getDateMask(dateType,dateFormat,dateFormatSeparator,showCenturyInDateFormat,timeFormat);
}
/**
* @return date format, according to dateType, dateFormat, separator, showCentury and timeFormat arguments
*/
public final String getDateMask(int dateType,int dateFormat,char separator,boolean showCentury,String timeFormat) {
String mask = null;
switch(dateType) {
case Consts.TYPE_DATE:
case Consts.TYPE_DATE_TIME:
// set date format...
String year = "yy";
if (showCentury)
year += "yy";
switch(dateFormat) {
case Resources.YMD:
mask = year+separator+"MM"+separator+"dd";
break;
case Resources.DMY:
mask = "dd"+separator+"MM"+separator+year;
break;
case Resources.MDY:
mask = "MM"+separator+"dd"+separator+year;
break;
case Resources.YDM:
mask = year+separator+"dd"+separator+"MM";
break;
}
if (dateType==Consts.TYPE_DATE_TIME) {
// set time format...
mask += " "+timeFormat;
}
break;
case Consts.TYPE_TIME:
// set time format...
mask = timeFormat;
break;
}
return mask;
}
/**
* @return dictionary containing the translations
*/
public final Properties getDictionary() {
return dictionary;
}
}