Author: konstantin.mishin
Date: 2010-04-06 07:27:37 -0400 (Tue, 06 Apr 2010)
New Revision: 16724
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/extendedDataTable.js
Log:
RF-8098
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIDataTableBase.java
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-04-06
11:25:11 UTC (rev 16723)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/component/UIDataTableBase.java 2010-04-06
11:27:37 UTC (rev 16724)
@@ -170,7 +170,7 @@
}
public SortMode getSortMode() {
- return (SortMode) getStateHelper().eval(PropertyKeys.sortMode);
+ return (SortMode) getStateHelper().eval(PropertyKeys.sortMode, SortMode.single);
}
public void setSortMode(SortMode sortMode) {
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-04-06
11:25:11 UTC (rev 16723)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-04-06
11:27:37 UTC (rev 16724)
@@ -47,6 +47,7 @@
import javax.faces.context.FacesContext;
import javax.faces.context.PartialResponseWriter;
import javax.faces.context.ResponseWriter;
+import javax.swing.SortOrder;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.JSReference;
@@ -59,6 +60,7 @@
import org.richfaces.component.UIDataTableBase;
import org.richfaces.component.UIExtendedDataTable;
import org.richfaces.component.util.HtmlUtil;
+import org.richfaces.model.SortMode;
@ResourceDependencies({ @ResourceDependency(library = "javax.faces", name =
"jsf-uncompressed.js"),
@ResourceDependency(name = "jquery.js"), @ResourceDependency(name =
"jquery.position.js"),
@@ -576,6 +578,9 @@
if (map.get(component.getClientId(context)) != null) {
decodeFiltering(context, component, map.get("rich:filterString"));
}
+ if (map.get(component.getClientId(context)) != null) {
+ decodeSorting(context, component, map.get("rich:sortString"));
+ }
}
private void updateAttribute(FacesContext context, UIComponent component, String
attribute, Object value) {
@@ -596,6 +601,19 @@
}
}
+ private void updateSortOrder(FacesContext context, UIComponent component, String
value) {
+ SortOrder sortOrder = SortOrder.ASCENDING;
+ try {
+ sortOrder = SortOrder.valueOf(value);
+ } catch (IllegalArgumentException e) {
+ // If value isn't name of enum constant of SortOrder, toggle sortOrder of
column.
+ if
(SortOrder.ASCENDING.equals(component.getAttributes().get("sortOrder"))) {
+ sortOrder = SortOrder.DESCENDING;
+ }
+ }
+ updateAttribute(context, component, "sortOrder", sortOrder);
+ }
+
private void updateWidthOfColumns(FacesContext context, UIComponent component, String
widthString) {
if (widthString != null && widthString.length() > 0) {
String[] widthArray = widthString.split(",");
@@ -647,6 +665,35 @@
}
}
+ private void decodeSorting(FacesContext context, UIComponent component, String value)
{
+ if (value != null && value.length() > 0) {
+ UIDataTableBase table = (UIDataTableBase) component;
+ List<Object> sortPriority = new LinkedList<Object>();
+ String[] values = value.split(":");
+ if (Boolean.parseBoolean(values[2]) ||
SortMode.single.equals(table.getSortMode())) {
+ for (Iterator<UIComponent> iterator = table.columns();
iterator.hasNext();) {
+ UIComponent column = iterator.next();
+ if (values[0].equals(column.getId())) {
+ updateSortOrder(context, column, values[1]);
+ sortPriority.add(values[0]);
+ } else {
+ updateAttribute(context, column, "sortOrder",
SortOrder.UNSORTED);
+ }
+ }
+ } else {
+ updateSortOrder(context, component.findComponent(values[0]), values[1]);
+ Collection<?> priority = table.getSortPriority();
+ if (priority != null) {
+ priority.remove(values[0]);
+ sortPriority.addAll(priority);
+ }
+ sortPriority.add(values[0]);
+ }
+ updateAttribute(context, component, "sortPriority", sortPriority);
+
context.getPartialViewContext().getRenderIds().add(component.getClientId(context)); // Use
partial re-rendering here.
+ }
+ }
+
/**
* @deprecated
* TODO Remove this method when width in relative units in columns will be
implimented.
Modified:
root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/extendedDataTable.js
===================================================================
---
root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/extendedDataTable.js 2010-04-06
11:25:11 UTC (rev 16723)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/extendedDataTable.js 2010-04-06
11:27:37 UTC (rev 16724)
@@ -331,6 +331,17 @@
this.clearFiltering = function() {
this.filter("", "", true);
}
+
+ this.sort = function(id, sortOrder, isClear) {
+ if (typeof(sortOrder) == "string") {
+ sortOrder = sortOrder.toUpperCase();
+ }
+ sendAjax(null, {"rich:sortString" : id + ":" + sortOrder +
":" + isClear}); // TODO Maybe, event model should be used here.
+ }
+
+ this.clearSorting = function() {
+ this.filter("", "", true);
+ }
};
}(window.RichFaces, jQuery));