[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