Author: konstantin.mishin
Date: 2008-02-15 14:19:41 -0500 (Fri, 15 Feb 2008)
New Revision: 6121
Modified:
trunk/ui/dataTable/src/main/config/component/column.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/column.xml
===================================================================
--- trunk/ui/dataTable/src/main/config/component/column.xml 2008-02-15 15:44:45 UTC (rev
6120)
+++ trunk/ui/dataTable/src/main/config/component/column.xml 2008-02-15 19:19:41 UTC (rev
6121)
@@ -94,6 +94,7 @@
<name>selfSorted</name>
<classname>boolean</classname>
<description></description>
+ <defaultvalue>true</defaultvalue>
</property>
<property elonly="true">
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-15
15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java 2008-02-15
19:19:41 UTC (rev 6121)
@@ -21,8 +21,16 @@
package org.richfaces.component;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
+import org.richfaces.model.ExtendedFilterField;
+import org.richfaces.model.FilterField;
+import org.richfaces.model.Ordering;
+import org.richfaces.model.SortField2;
+
+
/**
* JSF component class
*
@@ -36,4 +44,42 @@
public abstract String getSortMode();
public abstract void setSortMode(String mode);
+
+ public FilterField getFilterField(){
+ FilterField filterField = null;
+ MethodExpression filterMethod = getFilterMethod();
+ ValueExpression filterExpression = getValueExpression("filterExpression");
+ ValueExpression filterBy = getValueExpression("filterBy");
+ String filterValue = getFilterValue();
+ if (filterMethod != null) {
+ filterField = new FilterField(filterMethod);
+ } else if (filterExpression != null) {
+ filterField = new FilterField(filterExpression);
+ } else if (filterBy != null) {
+ filterField = new ExtendedFilterField(filterBy, filterValue);
+ }
+ return filterField;
+ }
+
+ public SortField2 getSortField(){
+ SortField2 sortField2 = null;
+ if (!Ordering.UNSORTED.equals(getSortOrder())) {
+ ValueExpression comparator = getValueExpression("comparator");
+ ValueExpression sortExpression = getValueExpression("sortExpression");
+ if (comparator != null) {
+ sortField2 = new SortField2(comparator, getSortOrder());
+ } else if (sortExpression != null) {
+ sortField2 = new SortField2(sortExpression, getSortOrder());
+ }
+ }
+ return sortField2;
+ }
+
+ public void toggleSortOrder(){
+ if(Ordering.ASCENDING.equals(getSortOrder())) {
+ setSortOrder(Ordering.DESCENDING);
+ } else {
+ setSortOrder(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-15
15:44:45 UTC (rev 6120)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-02-15
19:19:41 UTC (rev 6121)
@@ -22,8 +22,10 @@
package org.richfaces.component;
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;
@@ -170,38 +172,45 @@
@Override
protected ExtendedDataModel createDataModel() {
List<FilterField> filterFields = new LinkedList<FilterField>();
- List<SortField2> sortFields = new LinkedList<SortField2>();
+ Map<String, SortField2> sortFieldsMap = new LinkedHashMap<String,
SortField2>();
List<UIComponent> list = getChildren();
for (Iterator<UIComponent> iterator = list.iterator(); iterator.hasNext();) {
UIComponent component = iterator.next();
if (component instanceof org.richfaces.component.UIColumn) {
- Column column = (Column) component;
- MethodExpression filterMethod = column.getFilterMethod();
- ValueExpression filterExpression =
component.getValueExpression("filterExpression");
- ValueExpression filterBy = component.getValueExpression("filterBy");
- String filterValue = column.getFilterValue();
- if (filterMethod != null) {
- filterFields.add(new FilterField(filterMethod));
- } else if (filterExpression != null) {
- filterFields.add(new FilterField(filterExpression));
- } else if (filterBy != null) {
- filterFields.add(new ExtendedFilterField(filterBy, filterValue));
+ org.richfaces.component.UIColumn column = (org.richfaces.component.UIColumn)
component;
+ FilterField filterField = column.getFilterField();
+ if (filterField != null) {
+ filterFields.add(filterField);
}
- if (!Ordering.UNSORTED.equals(column.getSortOrder())) {
- ValueExpression comparator = component.getValueExpression("comparator");
- ValueExpression sortExpression =
component.getValueExpression("sortExpression");
- if (comparator != null) {
- sortFields.add(new SortField2(comparator, column.getSortOrder()));
- } else if (sortExpression != null) {
- sortFields.add(new SortField2(sortExpression, column.getSortOrder()));
- }
+ SortField2 sortField = column.getSortField();
+ if (sortField != null) {
+ sortFieldsMap.put(component.getId(), sortField);
}
}
}
+ List<SortField2> sortFields = new LinkedList<SortField2>();
+ List sortPriority = getSortPriority();
+ if (sortPriority != null) {
+ for (Object object : sortPriority) {
+ if (object instanceof String) {
+ String id = (String) object;
+ SortField2 sortField = sortFieldsMap.get(id);
+ if (sortField != null) {
+ sortFields.add(sortField);
+ sortFieldsMap.remove(id);
+ }
+ }
+ }
+ }
+ sortFields.addAll(sortFieldsMap.values());
setFilterFields(filterFields);
setSortFields(sortFields);
ExtendedDataModel dataModel = super.createDataModel();
return new ModifiableModel(dataModel, getVar(), getFilterFields(), getSortFields());
}
+
+ public abstract List getSortPriority();
+ public abstract void setSortPriority(List sortPriority);
+
}
\ 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-15
15:44:45 UTC (rev 6120)
+++
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-02-15
19:19:41 UTC (rev 6121)
@@ -22,6 +22,7 @@
package org.richfaces.renderkit;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -485,20 +486,26 @@
protected void doDecode(FacesContext context, UIComponent component) {
Map<String, String> map = context.getExternalContext().getRequestParameterMap();
if (SORT_FILTER_PARAMETER.equals(map.get(component.getClientId(context)))) {
- String id = map.get(SORT_FILTER_PARAMETER);
+ String clientId = map.get(SORT_FILTER_PARAMETER);
List<UIComponent> list = component.getChildren();
for (Iterator<UIComponent> iterator = list.iterator(); iterator
.hasNext();) {
UIComponent children = iterator.next();
- if (children instanceof Column) {
- Column column = (Column) children;
+ 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(id)) {
- if(Ordering.ASCENDING.equals(column.getSortOrder())) {
- column.setSortOrder(Ordering.DESCENDING);
- } else {
- column.setSortOrder(Ordering.ASCENDING);
+ 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(!sortPriority.contains(id)) {
+ sortPriority.add(id);
+ }
+ column.toggleSortOrder();
}
String filterValue = map.get(children.getClientId(context) +
SORT_FILTER_PARAMETER);
if (filterValue != null) {
Show replies by date