[richfaces-svn-commits] JBoss Rich Faces SVN: r5040 - in trunk/ui/calendar/src/main: java/org/richfaces/component and 1 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Thu Dec 27 11:31:17 EST 2007
Author: akushunin
Date: 2007-12-27 11:31:16 -0500 (Thu, 27 Dec 2007)
New Revision: 5040
Modified:
trunk/ui/calendar/src/main/config/component/calendar.xml
trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
Log:
RF-1675
Modified: trunk/ui/calendar/src/main/config/component/calendar.xml
===================================================================
--- trunk/ui/calendar/src/main/config/component/calendar.xml 2007-12-27 15:42:50 UTC (rev 5039)
+++ trunk/ui/calendar/src/main/config/component/calendar.xml 2007-12-27 16:31:16 UTC (rev 5040)
@@ -60,9 +60,9 @@
disabled
</description>
</property>
- <property elonly="true">
+ <property>
<name>locale</name>
- <classname>java.util.Locale</classname>
+ <classname>java.lang.Object</classname>
<description>Used for locale definition</description>
<defaultvalue>getDefaultLocale()</defaultvalue>
</property>
Modified: trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-12-27 15:42:50 UTC (rev 5039)
+++ trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-12-27 16:31:16 UTC (rev 5040)
@@ -75,9 +75,9 @@
private final static Log log = LogFactory.getLog(UICalendar.class);
- public abstract Locale getLocale();
+ public abstract Object getLocale();
- public abstract void setLocale(Locale locale);
+ public abstract void setLocale(Object locale);
public abstract TimeZone getTimeZone();
@@ -205,7 +205,7 @@
// currentDate processing -------------------------------------------------
public Calendar getCalendar() {
- return Calendar.getInstance(getTimeZone(), getLocale());
+ return Calendar.getInstance(getTimeZone(), getAsLocale(getLocale()));
}
public Date getConvertedValue(FacesContext context, String currentDateString)
@@ -241,7 +241,7 @@
if (vb != null) {
if (vb.getType(context).equals(String.class)) {
DateTimeConverter convert = new DateTimeConverter();
- convert.setLocale(getLocale());
+ convert.setLocale(getAsLocale(getLocale()));
convert.setPattern(getDatePattern());
vb.setValue(context, convert.getAsString(context, this,
currentDate));
@@ -302,7 +302,7 @@
if (date instanceof String) {
DateTimeConverter converter = new DateTimeConverter();
converter.setPattern(this.getDatePattern());
- converter.setLocale(this.getLocale());
+ converter.setLocale(getAsLocale(this.getLocale()));
converter.setTimeZone(this.getTimeZone());
FacesContext context = FacesContext.getCurrentInstance();
return (Date) converter.getAsObject(context, this,
@@ -342,7 +342,7 @@
}
protected Date getDefaultPreloadBegin(Date date) {
- Calendar calendar = Calendar.getInstance(getTimeZone(), getLocale());
+ Calendar calendar = Calendar.getInstance(getTimeZone(), getAsLocale(getLocale()));
calendar.setTime(date);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DATE));
/*
@@ -353,7 +353,7 @@
}
protected Date getDefaultPreloadEnd(Date date) {
- Calendar calendar = Calendar.getInstance(getTimeZone(), getLocale());
+ Calendar calendar = Calendar.getInstance(getTimeZone(), getAsLocale(getLocale()));
calendar.setTime(date);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
/*
@@ -525,8 +525,7 @@
List dates = new ArrayList();
- Calendar calendar = Calendar.getInstance(this.getTimeZone(), this
- .getLocale());
+ Calendar calendar = Calendar.getInstance(this.getTimeZone(), getAsLocale(this.getLocale()));
Calendar calendar2 = (Calendar) calendar.clone();
calendar.setTime(dateRangeBegin);
calendar2.setTime(dateRangeEnd);
@@ -552,5 +551,64 @@
CurrentDateChangeListener listener) {
removeFacesListener(listener);
}
+
+ /**
+ *Parse Locale from String.
+ *String must be represented as Locale.toString(); xx_XX_XXXX
+ */
+
+ public Locale parseLocale(String localeStr){
+
+ int length = localeStr.length();
+ if(null==localeStr||length<2){
+ return Locale.getDefault();
+ }
+
+ //Lookup index of first '_' in string locale representation.
+ int index1 = localeStr.indexOf("_");
+ //Get first charters (if exist) from string
+ String language = null;
+ if(index1!=-1){
+ language = localeStr.substring(0, index1);
+ }else{
+ return new Locale(localeStr);
+ }
+ //Lookup index of second '_' in string locale representation.
+ int index2 = localeStr.indexOf("_", index1+1);
+ String country = null;
+ if(index2!=-1){
+ country = localeStr.substring(index1+1, index2);
+ String variant = localeStr.substring(index2+1);
+ return new Locale(language, country, variant);
+ }else{
+ country = localeStr.substring(index1+1);
+ return new Locale(language, country);
+ }
+ }
+
+ public Locale getAsLocale(Object locale) {
+ if (locale instanceof Locale) {
+
+ return (Locale) locale;
+
+ } else if (locale instanceof String) {
+
+ return parseLocale((String) locale);
+
+ } else {
+
+ FacesContext context = FacesContext.getCurrentInstance();
+ Application application = context.getApplication();
+ Converter converter = application
+ .createConverter(locale.getClass());
+ if (null != converter) {
+ return parseLocale(converter.getAsString(context, this, locale));
+ } else {
+ throw new FacesException(
+ "Wrong locale attibute type or there is no converter for custom attibute type");
+ }
+ }
+ }
+
}
Modified: trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2007-12-27 15:42:50 UTC (rev 5039)
+++ trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2007-12-27 16:31:16 UTC (rev 5040)
@@ -118,7 +118,7 @@
} else {
DateTimeConverter converter = new DateTimeConverter();
converter.setPattern(calendar.getDatePattern());
- converter.setLocale(calendar.getLocale());
+ converter.setLocale(calendar.getAsLocale(calendar.getLocale()));
converter.setTimeZone(calendar.getTimeZone());
return converter.getAsObject(context, component,
(String) submittedValue);
@@ -352,7 +352,8 @@
DateTimeConverter converter = new DateTimeConverter();
converter.setPattern(input.getDatePattern());
- converter.setLocale(input.getLocale());
+ Object locale = input.getLocale();
+ converter.setLocale(input.getAsLocale(locale));
converter.setTimeZone(input.getTimeZone());
if (value == null) {
return converter.getAsString(context, input, curVal);
@@ -395,7 +396,7 @@
protected Map getSymbolsMap(FacesContext facesContext, UICalendar calendar) {
Map map = new HashMap();
- Locale locale = calendar.getLocale();
+ Locale locale = calendar.getAsLocale(calendar.getLocale());
Calendar cal = calendar.getCalendar();
int maximum = cal.getActualMaximum(Calendar.DAY_OF_WEEK);
int minimum = cal.getActualMinimum(Calendar.DAY_OF_WEEK);
@@ -558,11 +559,12 @@
ResourceBundle bundle2 = null;
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String messageBundle = context.getApplication().getMessageBundle();
+ Object locale = calendar.getLocale();
if (null != messageBundle) {
- bundle1 = ResourceBundle.getBundle(messageBundle, calendar.getLocale(), loader);
+ bundle1 = ResourceBundle.getBundle(messageBundle, calendar.getAsLocale(locale), loader);
}
try {
- bundle2 = ResourceBundle.getBundle(CALENDAR_BUNDLE, calendar.getLocale(), loader);
+ bundle2 = ResourceBundle.getBundle(CALENDAR_BUNDLE, calendar.getAsLocale(locale), loader);
} catch (MissingResourceException e) {
//No external bundle was found, ignore this exception.
More information about the richfaces-svn-commits
mailing list