[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