Author: konstantin.mishin
Date: 2008-02-19 12:05:41 -0500 (Tue, 19 Feb 2008)
New Revision: 6176
Modified:
trunk/ui/dataTable/src/main/config/component/dataTable.xml
trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java
trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
Log:
RF-1741
Modified: trunk/ui/dataTable/src/main/config/component/dataTable.xml
===================================================================
--- trunk/ui/dataTable/src/main/config/component/dataTable.xml 2008-02-19 17:03:45 UTC
(rev 6175)
+++ trunk/ui/dataTable/src/main/config/component/dataTable.xml 2008-02-19 17:05:41 UTC
(rev 6176)
@@ -175,8 +175,15 @@
</property>
<property>
<name>sortPriority</name>
- <classname>java.util.List</classname>
+ <classname>java.util.Collection</classname>
<description></description>
</property>
+ <property>
+ <name>sortMode</name>
+ <classname>java.lang.String</classname>
+ <description>
+ Defines mode of sorting. Possible values are 'single' for sorting of one
column and 'multi' for some.
+ </description>
+ </property>
</component>
</components>
Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java 2008-02-19
17:03:45 UTC (rev 6175)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java 2008-02-19
17:05:41 UTC (rev 6176)
@@ -21,6 +21,7 @@
package org.richfaces.component;
+import javax.el.ELContext;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
@@ -75,11 +76,11 @@
return sortField2;
}
- public void toggleSortOrder(){
+ public void toggleSortOrder(ELContext elContext){
if(Ordering.ASCENDING.equals(getSortOrder())) {
- setSortOrder(Ordering.DESCENDING);
+ getValueExpression("sortOrder").setValue(elContext, Ordering.DESCENDING);
} else {
- setSortOrder(Ordering.ASCENDING);
+ getValueExpression("sortOrder").setValue(elContext, Ordering.ASCENDING);
}
}
}
Modified: trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java
===================================================================
--- trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-02-19
17:03:45 UTC (rev 6175)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-02-19
17:05:41 UTC (rev 6176)
@@ -21,19 +21,15 @@
package org.richfaces.component;
+import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import javax.el.ELContext;
-import javax.el.ExpressionFactory;
-import javax.el.MethodExpression;
-import javax.el.ValueExpression;
import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
import org.ajax4jsf.component.AjaxSupport;
import org.ajax4jsf.component.SequenceDataAdaptor;
@@ -41,10 +37,8 @@
import org.apache.commons.collections.Predicate;
import org.apache.commons.collections.iterators.FilterIterator;
import org.apache.commons.collections.iterators.IteratorChain;
-import org.richfaces.model.ExtendedFilterField;
import org.richfaces.model.FilterField;
import org.richfaces.model.ModifiableModel;
-import org.richfaces.model.Ordering;
import org.richfaces.model.SortField2;
@@ -186,7 +180,7 @@
}
List<SortField2> sortFields = new LinkedList<SortField2>();
- List sortPriority = getSortPriority();
+ Collection sortPriority = getSortPriority();
if (sortPriority != null) {
for (Object object : sortPriority) {
if (object instanceof String) {
@@ -206,7 +200,8 @@
return new ModifiableModel(dataModel, getVar(), getFilterFields(), getSortFields());
}
- public abstract List getSortPriority();
- public abstract void setSortPriority(List sortPriority);
-
+ public abstract Collection getSortPriority();
+ public abstract void setSortPriority(Collection sortPriority);
+ public abstract String getSortMode();
+ public abstract void setSortMode(String sortMode);
}
\ No newline at end of file
Modified:
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
===================================================================
---
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-02-19
17:03:45 UTC (rev 6175)
+++
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-02-19
17:05:41 UTC (rev 6176)
@@ -23,10 +23,12 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import javax.el.ELContext;
import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
@@ -486,26 +488,35 @@
protected void doDecode(FacesContext context, UIComponent component) {
Map<String, String> map = context.getExternalContext().getRequestParameterMap();
if (SORT_FILTER_PARAMETER.equals(map.get(component.getClientId(context)))) {
+ ELContext elContext = context.getELContext();
String clientId = map.get(SORT_FILTER_PARAMETER);
List<UIComponent> list = component.getChildren();
+ UIDataTable table = (UIDataTable) component;
+ boolean isSingleSortMode = !"multi".equals(table.getSortMode());
for (Iterator<UIComponent> iterator = list.iterator(); iterator
.hasNext();) {
UIComponent children = iterator.next();
if (children instanceof org.richfaces.component.UIColumn) {
org.richfaces.component.UIColumn column = (org.richfaces.component.UIColumn)
children;
children.setId(children.getId());
- if(children.getClientId(context).equals(clientId)) {
- String id = children.getId();
- UIDataTable table = (UIDataTable)component;
- List sortPriority = table.getSortPriority();
- if(sortPriority == null){
- sortPriority = new ArrayList();
- table.setSortPriority(sortPriority);
+ if (clientId != null) {
+ if (children.getClientId(context).equals(clientId)) {
+ String id = children.getId();
+ Collection sortPriority = table.getSortPriority();
+ if (sortPriority == null) {
+ sortPriority = new ArrayList();
+ table.getValueExpression("sortPriority").setValue(elContext,
sortPriority);
+ }
+ if (isSingleSortMode) {
+ sortPriority.clear();
+ }
+ if(!sortPriority.contains(id)) {
+ sortPriority.add(id);
+ }
+ column.toggleSortOrder(elContext);
+ } else if(isSingleSortMode){
+ column.getValueExpression("sortOrder").setValue(elContext,
Ordering.UNSORTED);
}
- if(!sortPriority.contains(id)) {
- sortPriority.add(id);
- }
- column.toggleSortOrder();
}
String filterValue = map.get(children.getClientId(context) +
SORT_FILTER_PARAMETER);
if (filterValue != null) {