Author: konstantin.mishin
Date: 2008-02-20 11:26:10 -0500 (Wed, 20 Feb 2008)
New Revision: 6215
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-20 16:05:37 UTC (rev
6214)
+++ trunk/ui/dataTable/src/main/config/component/column.xml 2008-02-20 16:26:10 UTC (rev
6215)
@@ -79,6 +79,11 @@
<property>
<name>sortExpression</name>
<classname>java.lang.String</classname>
+ <description>DEPRECATED(use sortBy)Attribute defines a bean property which is
used for sorting of a column</description>
+ </property>
+ <property>
+ <name>sortBy</name>
+ <classname>java.lang.String</classname>
<description>Attribute defines a bean property which is used for sorting of a
column</description>
</property>
<property>
@@ -116,7 +121,7 @@
<classname>java.lang.Object</classname>
<description></description>
</property>
- <property hidden="true">
+ <property>
<name>filterValue</name>
<classname>java.lang.String</classname>
<description></description>
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-20
16:05:37 UTC (rev 6214)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIColumn.java 2008-02-20
16:26:10 UTC (rev 6215)
@@ -22,8 +22,11 @@
package org.richfaces.component;
import javax.el.ELContext;
+import javax.el.ELException;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
import org.richfaces.model.ExtendedFilterField;
import org.richfaces.model.FilterField;
@@ -42,6 +45,9 @@
public static final String COMPONENT_FAMILY = "org.richfaces.Column";
+ private Ordering sortOrder = Ordering.UNSORTED;
+ private String filterValue;
+
public abstract String getSortMode();
public abstract void setSortMode(String mode);
@@ -66,11 +72,11 @@
SortField2 sortField2 = null;
if (!Ordering.UNSORTED.equals(getSortOrder())) {
ValueExpression comparator = getValueExpression("comparator");
- ValueExpression sortExpression = getValueExpression("sortExpression");
+ ValueExpression sortBy = getValueExpression("sortBy");
if (comparator != null) {
sortField2 = new SortField2(comparator, getSortOrder());
- } else if (sortExpression != null) {
- sortField2 = new SortField2(sortExpression, getSortOrder());
+ } else if (sortBy != null) {
+ sortField2 = new SortField2(sortBy, getSortOrder());
}
}
return sortField2;
@@ -78,9 +84,84 @@
public void toggleSortOrder(ELContext elContext){
if(Ordering.ASCENDING.equals(getSortOrder())) {
- getValueExpression("sortOrder").setValue(elContext, Ordering.DESCENDING);
+ setSortOrder(Ordering.DESCENDING);
} else {
- getValueExpression("sortOrder").setValue(elContext, Ordering.ASCENDING);
+ setSortOrder(Ordering.ASCENDING);
}
}
+
+ public Ordering getSortOrder(){
+ ValueExpression ve = getValueExpression("sortOrder");
+ if (ve != null) {
+ Ordering value = null;
+ try {
+ value = (Ordering) ve.getValue(getFacesContext().getELContext());
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ return value;
+ } else {
+ return sortOrder;
+ }
+ }
+
+ public void setSortOrder(Ordering sortOrder){
+ ELContext context = getFacesContext().getELContext();
+ ValueExpression ve = getValueExpression("sortOrder");
+ if (ve != null && !ve.isReadOnly(context)) {
+ try {
+ ve.setValue(context, sortOrder);
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ this.sortOrder = sortOrder;
+ }
+ }
+
+ public String getFilterValue(){
+ ValueExpression ve = getValueExpression("filterValue");
+ if (ve != null) {
+ String value = null;
+ try {
+ value = (String) ve.getValue(getFacesContext().getELContext());
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ return value;
+ } else {
+ return filterValue;
+ }
+ }
+
+ public void setFilterValue(String filterValue){
+ ELContext context = getFacesContext().getELContext();
+ ValueExpression ve = getValueExpression("filterValue");
+ if (ve != null && !ve.isReadOnly(context)) {
+ try {
+ ve.setValue(context, filterValue);
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ this.filterValue = filterValue;
+ }
+ }
+
+ @Override
+ public Object saveState(FacesContext context) {
+ Object [] state = new Object[3];
+ state[0] = super.saveState(context);
+ state[1] = filterValue;
+ state[2] = sortOrder;
+ return state;
+ }
+
+ @Override
+ public void restoreState(FacesContext context, Object state) {
+ Object[] states = (Object[]) state;
+ super.restoreState(context, states[0]);
+ filterValue = (String)states[1];
+ sortOrder = (Ordering)states[2];
+ }
}
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-20
16:05:37 UTC (rev 6214)
+++ trunk/ui/dataTable/src/main/java/org/richfaces/component/UIDataTable.java 2008-02-20
16:26:10 UTC (rev 6215)
@@ -21,6 +21,7 @@
package org.richfaces.component;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
@@ -28,8 +29,13 @@
import java.util.List;
import java.util.Map;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
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;
@@ -39,6 +45,7 @@
import org.apache.commons.collections.iterators.IteratorChain;
import org.richfaces.model.FilterField;
import org.richfaces.model.ModifiableModel;
+import org.richfaces.model.Ordering;
import org.richfaces.model.SortField2;
@@ -48,6 +55,8 @@
*/
public abstract class UIDataTable extends SequenceDataAdaptor implements Sortable2,
Filterable {
+ Collection<Object> sortPriority = new ArrayList<Object>();
+
/**
* @author shura
*
@@ -180,7 +189,7 @@
}
List<SortField2> sortFields = new LinkedList<SortField2>();
- Collection sortPriority = getSortPriority();
+ Collection<Object> sortPriority = getSortPriority();
if (sortPriority != null) {
for (Object object : sortPriority) {
if (object instanceof String) {
@@ -200,8 +209,50 @@
return new ModifiableModel(dataModel, getVar(), getFilterFields(), getSortFields());
}
- public abstract Collection getSortPriority();
- public abstract void setSortPriority(Collection sortPriority);
+ public Collection<Object> getSortPriority(){
+ ValueExpression ve = getValueExpression("sortPriority");
+ if (ve != null) {
+ Collection<Object> value = null;
+ try {
+ value = (Collection) ve.getValue(getFacesContext().getELContext());
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ return value;
+ } else {
+ return sortPriority;
+ }
+ }
+
+ public void setSortPriority(Collection<Object> sortPriority){
+ ELContext context = getFacesContext().getELContext();
+ ValueExpression ve = getValueExpression("sortPriority");
+ if (ve != null && !ve.isReadOnly(context)) {
+ try {
+ ve.setValue(context, sortPriority);
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ this.sortPriority = sortPriority;
+ }
+ }
+
public abstract String getSortMode();
public abstract void setSortMode(String sortMode);
+
+ @Override
+ public Object saveState(FacesContext context) {
+ Object [] state = new Object[2];
+ state[0] = super.saveState(context);
+ state[1] = sortPriority;
+ return state;
+ }
+
+ @Override
+ public void restoreState(FacesContext context, Object state) {
+ Object[] states = (Object[]) state;
+ super.restoreState(context, states[0]);
+ sortPriority = (Collection)states[1];
+ }
}
\ 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-20
16:05:37 UTC (rev 6214)
+++
trunk/ui/dataTable/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2008-02-20
16:26:10 UTC (rev 6215)
@@ -160,22 +160,7 @@
String classAttribute = facetName + "Class";
String columnHeaderClass = (String) column.getAttributes().get(
classAttribute);
- if (column instanceof org.richfaces.component.UIColumn &&
- (column.getValueExpression("comparator") != null
- || column.getValueExpression("sortExpression") != null)) {
- org.richfaces.component.UIColumn col =
- (org.richfaces.component.UIColumn) column;
- columnHeaderClass = "dr-table-sortable-header " + columnHeaderClass;
- if (Ordering.ASCENDING.equals(col.getSortOrder())) {
- columnHeaderClass = "dr-table-header-sort-up " + columnHeaderClass;
- } else if (Ordering.DESCENDING.equals(col.getSortOrder())) {
- columnHeaderClass = "dr-table-header-sort-down " + columnHeaderClass;
- }
- }
-
writer.startElement(element, column);
- encodeStyleClass(writer, null, skinCellClass, headerClass,
- columnHeaderClass);
writer.writeAttribute("scope", "col", null);
getUtils().encodeAttribute(context, column, "colspan");
@@ -185,7 +170,7 @@
String clientId = col.getClientId(context) + facetName;
writer.writeAttribute("id", clientId, null);
if (column.getValueExpression("comparator") != null
- || column.getValueExpression("sortExpression") != null) {
+ || column.getValueExpression("sortBy") != null) {
StringBuffer buffer;
if (col.isSelfSorted()) {
UIComponent table = column.getParent();
@@ -204,16 +189,23 @@
writer.writeAttribute(HTML.onclick_ATTRIBUTE, buffer
.toString(), null);
}
+ columnHeaderClass = "dr-table-sortable-header " + columnHeaderClass;
+ if (Ordering.ASCENDING.equals(col.getSortOrder())) {
+ columnHeaderClass = "dr-table-header-sort-up " + columnHeaderClass;
+ } else if (Ordering.DESCENDING.equals(col.getSortOrder())) {
+ columnHeaderClass = "dr-table-header-sort-down " + columnHeaderClass;
+ }
}
}
-
+ encodeStyleClass(writer, null, skinCellClass, headerClass,
+ columnHeaderClass);
UIComponent facet = column.getFacet(facetName);
if (facet != null) {
renderChild(context, facet);
}
if (column instanceof org.richfaces.component.UIColumn) {
if (column.getValueExpression("comparator") != null
- || column.getValueExpression("sortExpression") != null) {
+ || column.getValueExpression("sortBy") != null) {
org.richfaces.component.UIColumn col =
(org.richfaces.component.UIColumn) column;
if (Ordering.ASCENDING.equals(col.getSortOrder()) ||
@@ -520,11 +512,7 @@
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);
- }
+ Collection<Object> sortPriority = table.getSortPriority();
if (isSingleSortMode) {
sortPriority.clear();
}
@@ -533,13 +521,12 @@
}
column.toggleSortOrder(elContext);
} else if(isSingleSortMode){
- column.getValueExpression("sortOrder").setValue(elContext,
Ordering.UNSORTED);
+ column.setSortOrder(Ordering.UNSORTED);
}
}
String filterValue = map.get(children.getClientId(context) +
SORT_FILTER_PARAMETER);
if (filterValue != null) {
- children.getAttributes()
- .put("filterValue", filterValue);
+ column.setFilterValue(filterValue);
}
}