[richfaces-svn-commits] JBoss Rich Faces SVN: r11760 - in trunk/framework/impl/src/main/java/org: richfaces/model and 1 other directories.

richfaces-svn-commits at lists.jboss.org richfaces-svn-commits at lists.jboss.org
Sun Dec 14 16:23:19 EST 2008


Author: nbelaevski
Date: 2008-12-14 16:23:18 -0500 (Sun, 14 Dec 2008)
New Revision: 11760

Modified:
   trunk/framework/impl/src/main/java/org/ajax4jsf/context/ContextInitParameters.java
   trunk/framework/impl/src/main/java/org/richfaces/model/ModifiableModel.java
   trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java
   trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanFilter.java
Log:
https://jira.jboss.org/jira/browse/RF-5008

Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/context/ContextInitParameters.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/ContextInitParameters.java	2008-12-14 18:11:00 UTC (rev 11759)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/ContextInitParameters.java	2008-12-14 21:23:18 UTC (rev 11760)
@@ -61,6 +61,7 @@
 	 */
 	public static final String HANDLE_VIEW_EXPIRED_ON_CLIENT="org.ajax4jsf.handleViewExpiredOnClient";
 	
+	public static final String[] DATATABLE_USES_VIEW_LOCALE = {"org.richfaces.datatableUsesViewLocale"};
 	
 	public static final boolean isSerializeServerState(FacesContext context) {
 		return getBoolean(context, SERIALIZE_SERVER_STATE, false);
@@ -86,6 +87,17 @@
 				AjaxStateManager.DEFAULT_NUMBER_OF_VIEWS);
 	}
 
+	/**
+	 * Defines whether data table should use view root locale for sorting and filtering or the 
+	 * default platform one
+	 * 
+	 * @param context
+	 * @return
+	 */
+	public static boolean isDatatableUsesViewLocale(FacesContext context) {
+		return getBoolean(context, DATATABLE_USES_VIEW_LOCALE, false);
+	}
+	
 	static int getInteger(FacesContext context, String[] paramNames,
 			int defaulValue) {
 		String initParameter = getInitParameter(context,paramNames);

Modified: trunk/framework/impl/src/main/java/org/richfaces/model/ModifiableModel.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/ModifiableModel.java	2008-12-14 18:11:00 UTC (rev 11759)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/ModifiableModel.java	2008-12-14 21:23:18 UTC (rev 11760)
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
 import javax.faces.context.FacesContext;
@@ -89,9 +90,16 @@
 	
 	protected String var;
 	
+	protected Locale locale;
+
 	public ModifiableModel(ExtendedDataModel originalModel, String var) {
+		this(originalModel, var, null);
+	}
+	
+	public ModifiableModel(ExtendedDataModel originalModel, String var, Locale locale) {
 		this.originalModel = originalModel;
 		this.var = var;
+		this.locale = locale;
 	}
 	
 	@Override
@@ -229,7 +237,8 @@
 			FacesContext context = FacesContext.getCurrentInstance();
 			List <Object> filteredCollection = new ArrayList<Object>();
 			ObjectWrapperFactory wrapperFactory = new RowKeyWrapperFactory(context, var, filterFields);
-			WrappedBeanFilter wrappedBeanFilter = new WrappedBeanFilter(filterFields);
+			
+			WrappedBeanFilter wrappedBeanFilter = new WrappedBeanFilter(filterFields, locale);
 			wrapperFactory.wrapList(rowKeys);
 			for (Object object : rowKeys) {
 				if(wrappedBeanFilter.accept((JavaBeanWrapper)object)) {
@@ -247,8 +256,9 @@
 			FacesContext context = FacesContext.getCurrentInstance();
 			ObjectWrapperFactory wrapperFactory = new RowKeyWrapperFactory(
 					context, var, sortFields);
+			
 			WrappedBeanComparator2 wrappedBeanComparator = new WrappedBeanComparator2(
-					sortFields);
+				sortFields, locale);
 			wrapperFactory.wrapList(rowKeys);
 			Collections.sort(rowKeys, wrappedBeanComparator);
 			wrapperFactory.unwrapList(rowKeys);

Modified: trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java	2008-12-14 18:11:00 UTC (rev 11759)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java	2008-12-14 21:23:18 UTC (rev 11760)
@@ -20,13 +20,16 @@
  */
 package org.richfaces.model.impl.expressive;
 
+import java.text.Collator;
 import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Locale;
 
 import javax.el.Expression;
 
 import org.richfaces.model.Ordering;
+import org.richfaces.model.SortField;
 import org.richfaces.model.SortField2;
 
 /**
@@ -38,13 +41,41 @@
  */
 public final class WrappedBeanComparator2 implements Comparator<Object> {
 	
+	private static final Comparator<String> defaultStringComparator = new Comparator<String>() {
+
+		public int compare(String o1, String o2) {
+			return o1.compareToIgnoreCase(o2);
+		}
+		
+	};
+
 	private final List<SortField2> sortFields;
 
+	private Locale currentLocale;
+	
+	private Comparator<? super String> stringComparator;
+
 	public WrappedBeanComparator2(List<SortField2> sortFields) {
+		this(sortFields, null);
+	}
+
+	public WrappedBeanComparator2(List<SortField2> sortFields, Locale locale) {
 		super();
 		this.sortFields = sortFields;
+		this.currentLocale = locale;
 	}
 
+	private Comparator<? super String> createStringComparator() {
+		Comparator<? super String> comparator = null;
+		if (currentLocale != null) {
+			comparator = Collator.getInstance(currentLocale);
+		} else {
+			comparator = defaultStringComparator;
+		}
+		
+		return comparator;
+	}
+	
 	public int compare(Object o1, Object o2) {
 		return compare((JavaBeanWrapper) o1, (JavaBeanWrapper) o2);
 	}
@@ -64,7 +95,10 @@
 				if (p1 == p2 && p1 instanceof Comparator) {
 					result = ((Comparator<Object>)p1).compare(w1.getWrappedObject(), w2.getWrappedObject());
 				} else if (p1 instanceof String && p2 instanceof String) {
-					result = ((String)p1).trim().compareToIgnoreCase(((String)p2).trim());
+					if (stringComparator == null) {
+						stringComparator = createStringComparator();
+					}
+					result = stringComparator.compare(((String)p1).trim(), ((String)p2).trim());
 				} else if (p1 instanceof Comparable && p2 instanceof Comparable) {
 					result = ((Comparable<Object>) p1).compareTo(p2);
 				} else if (p1 == null && p2 != null) {

Modified: trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanFilter.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanFilter.java	2008-12-14 18:11:00 UTC (rev 11759)
+++ trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanFilter.java	2008-12-14 21:23:18 UTC (rev 11760)
@@ -21,6 +21,7 @@
 package org.richfaces.model.impl.expressive;
 
 import java.util.List;
+import java.util.Locale;
 
 import org.richfaces.model.ExtendedFilterField;
 import org.richfaces.model.FilterField;
@@ -32,20 +33,26 @@
 public class WrappedBeanFilter implements org.richfaces.model.filter.Filter<JavaBeanWrapper>{
 	
 	private final List<FilterField> filterFields;
+	private Locale currentLocale;
+	
+	public WrappedBeanFilter(List<FilterField> filterFields) {
+		this(filterFields, null);
+	}
 
-	public WrappedBeanFilter(List<FilterField> filterFields) {
+	public WrappedBeanFilter(List<FilterField> filterFields, Locale locale) {
 		this.filterFields = filterFields;
+		this.currentLocale = (locale != null ? locale : Locale.getDefault());
 	}
-
+	
 	public boolean accept(JavaBeanWrapper wrapper) {
 		for (FilterField filterField : filterFields) {
 			if (filterField instanceof ExtendedFilterField) {
 				Object property = wrapper.getProperty(filterField.getExpression().getExpressionString());
 				String filterValue = ((ExtendedFilterField)filterField).getFilterValue();
 				if(filterValue != null) {
-					filterValue = filterValue.trim().toUpperCase();
+					filterValue = filterValue.trim().toUpperCase(currentLocale);
 					if(filterValue.length() > 0) {
-						if(property == null || !property.toString().trim().toUpperCase().startsWith(filterValue)) {
+						if(property == null || !property.toString().trim().toUpperCase(currentLocale).startsWith(filterValue)) {
 							return false;
 						}	
 					}				




More information about the richfaces-svn-commits mailing list