Author: konstantin.mishin
Date: 2010-04-05 09:11:12 -0400 (Mon, 05 Apr 2010)
New Revision: 16716
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/resources/META-INF/resources/extendedDataTable.js
Log:
RF-8098
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-05
10:31:38 UTC (rev 16715)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-04-05
13:11:12 UTC (rev 16716)
@@ -56,6 +56,7 @@
import org.ajax4jsf.model.SequenceRange;
import org.ajax4jsf.renderkit.AjaxEventOptions;
import org.ajax4jsf.renderkit.RendererUtils.HTML;
+import org.richfaces.component.UIDataTableBase;
import org.richfaces.component.UIExtendedDataTable;
import org.richfaces.component.util.HtmlUtil;
@@ -90,14 +91,14 @@
private class RendererState extends RowHolderBase{
- private UIExtendedDataTable table;
+ private UIDataTableBase table;
private List<Part> parts;
private Part current;
private Iterator<Part> partIterator;
- public RendererState(FacesContext context, UIExtendedDataTable table) {
+ public RendererState(FacesContext context, UIDataTableBase table) {
super(context);
this.table = table;
List<UIComponent> frozenColumns;
@@ -134,7 +135,7 @@
}
}
- public UIExtendedDataTable getRow() {
+ public UIDataTableBase getRow() {
return table;
}
@@ -204,7 +205,7 @@
table.walk(context, new DataVisitor() {
@Override
public DataVisitResult process(FacesContext context, Object
rowKey, Object argument) {
- UIExtendedDataTable dataTable = state.getRow();
+ UIDataTableBase dataTable = state.getRow();
dataTable.setRowKey(context, rowKey);
ids.add(dataTable.getClientId(context) + ":"
+ state.getPart().getName().toString().charAt(0));
@@ -214,7 +215,7 @@
table.walk(context, new DataVisitor() {
@Override
public DataVisitResult process(FacesContext context, Object
rowKey, Object argument) {
- UIExtendedDataTable dataTable = state.getRow();
+ UIDataTableBase dataTable = state.getRow();
dataTable.setRowKey(context, rowKey);
HashMap<String, String> attributes = new
HashMap<String, String>(1);
String id = dataTable.getClientId(context) + ":"
@@ -257,11 +258,11 @@
@Override
protected void doEncodeBegin(ResponseWriter writer, FacesContext context, UIComponent
component)
throws IOException {
+ Map<String, Object> attributes = component.getAttributes();
writer.startElement(HTML.DIV_ELEM, component);
writer.writeAttribute(HTML.ID_ATTRIBUTE, component.getClientId(context), null);
- writer.writeAttribute(HTML.CLASS_ATTRIBUTE,
HtmlUtil.concatClasses("rich-extable", (String) component
- .getAttributes().get("styleClass")), null);
- getUtils().writeAttribute(writer, HTML.STYLE_ATTRIBUTE,
component.getAttributes().get("style"));
+ writer.writeAttribute(HTML.CLASS_ATTRIBUTE,
HtmlUtil.concatClasses("rich-extable", (String)
attributes.get("styleClass")), null);
+ getUtils().writeAttribute(writer, HTML.STYLE_ATTRIBUTE,
attributes.get("style"));
UIComponent header = component.getFacet("header");
if (header != null && header.isRendered()) {
writer.startElement(HTML.DIV_ELEM, component);
@@ -273,13 +274,13 @@
@Override
public RendererState createRowHolder(FacesContext context, UIComponent component) {
- return new RendererState(context, (UIExtendedDataTable) component);
+ return new RendererState(context, (UIDataTableBase) component);
}
@Override
protected void doEncodeChildren(ResponseWriter writer, FacesContext context,
UIComponent component)
throws IOException {
- UIExtendedDataTable table = (UIExtendedDataTable) component;
+ UIDataTableBase table = (UIDataTableBase) component;
Object key = table.getRowKey();
table.captureOrigValue(context);
table.setRowKey(context, null);
@@ -350,7 +351,7 @@
}
private int getRowCount(UIComponent component) {
- UIExtendedDataTable table = (UIExtendedDataTable) component;
+ UIDataTableBase table = (UIDataTableBase) component;
int rows = table.getRows();
int rowCount = table.getRowCount() - table.getFirst();
if (rows > 0) {
@@ -365,7 +366,7 @@
private void encodeStyle(RendererState state) throws IOException {
FacesContext context = state.getContext();
ResponseWriter writer = context.getResponseWriter();
- UIExtendedDataTable table = state.getRow();
+ UIDataTableBase table = state.getRow();
writer.startElement("style", table);
writer.writeAttribute(HTML.TYPE_ATTR, "text/css", null);
writer.writeText(".rich-extable-part-width{", null); // TODO
getNormalizedId(context, state.getGrid())
@@ -390,7 +391,7 @@
private void encodeHeaderOrFooter(RendererState state, String name) throws
IOException {
FacesContext context = state.getContext();
ResponseWriter writer = context.getResponseWriter();
- UIExtendedDataTable table = state.getRow();
+ UIDataTableBase table = state.getRow();
if (table.isColumnFacetPresent(name)) {
writer.startElement(HTML.DIV_ELEM, table);
writer.writeAttribute(HTML.CLASS_ATTRIBUTE,
HtmlUtil.concatClasses("rich-extable-" + name, (String) table
@@ -445,7 +446,7 @@
private void encodeBody(RendererState state) throws IOException {
FacesContext context = state.getContext();
ResponseWriter writer = context.getResponseWriter();
- UIExtendedDataTable table = state.getRow();
+ UIDataTableBase table = state.getRow();
writer.startElement(HTML.DIV_ELEM, table);
writer.writeAttribute(HTML.ID_ATTRIBUTE, table.getClientId(context) +
":b", null);
writer.writeAttribute(HTML.CLASS_ATTRIBUTE, "rich-extable-body",
null);
@@ -460,6 +461,7 @@
}
}
} else {
+ table.getAttributes().put("clientFirst", 0);
writer.startElement(HTML.DIV_ELEM, table);
writer.startElement(HTML.DIV_ELEM, table);
writer.writeAttribute(HTML.CLASS_ATTRIBUTE, "rich-extable-spacer",
null);
@@ -534,7 +536,7 @@
FacesContext context = rowHolder.getContext();
ResponseWriter writer = context.getResponseWriter();
RendererState state = (RendererState) rowHolder;
- UIExtendedDataTable table = state.getRow();
+ UIDataTableBase table = state.getRow();
writer.startElement(HTML.TR_ELEMENT, table);
Iterator<UIComponent> columns = null;
Part part = state.getPart();
@@ -571,22 +573,27 @@
if (map.get(component.getClientId(context)) != null) {
updateClientFirst(context, component,
map.get("rich:clientFirst"));
}
+ if (map.get(component.getClientId(context)) != null) {
+ decodeFiltering(context, component, map.get("rich:filterString"));
+ }
}
private void updateAttribute(FacesContext context, UIComponent component, String
attribute, Object value) {
- ELContext elContext = context.getELContext();
- ValueExpression ve = component.getValueExpression(attribute);
- if (ve != null && !ve.isReadOnly(elContext)) {
- component.getAttributes().put(attribute, null);
- try {
- ve.setValue(elContext, value);
- } catch (ELException e) {
- throw new FacesException(e);
+ Object oldValue = component.getAttributes().get(attribute);
+ if ((oldValue != null && !oldValue.equals(value)) || (oldValue == null
&& value != null)) {
+ ELContext elContext = context.getELContext();
+ ValueExpression ve = component.getValueExpression(attribute);
+ if (ve != null && !ve.isReadOnly(elContext)) {
+ component.getAttributes().put(attribute, null);
+ try {
+ ve.setValue(elContext, value);
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ component.getAttributes().put(attribute, value);
}
- } else {
- component.getAttributes().put(attribute, value);
}
-
}
private void updateWidthOfColumns(FacesContext context, UIComponent component, String
widthString) {
@@ -595,35 +602,51 @@
for (int i = 0; i < widthArray.length; i++) {
String[] widthEntry = widthArray[i].split(":");
UIComponent column = component.findComponent(widthEntry[0]);
- if (!widthEntry[1].equals(column.getAttributes().get("width")))
{
- updateAttribute(context, column, "width", widthEntry[1]);
- }
+ updateAttribute(context, column, "width", widthEntry[1]);
}
-
}
}
private void updateColumnsOrder(FacesContext context, UIComponent component, String
columnsOrderString) {
if (columnsOrderString != null && columnsOrderString.length() > 0) {
String[] columnsOrder = columnsOrderString.split(",");
- if
(!columnsOrder.equals(component.getAttributes().get("columnsOrder"))) {
- updateAttribute(context, component, "columnsOrder",
columnsOrder);
-
context.getPartialViewContext().getRenderIds().add(component.getClientId(context));
- }
+ updateAttribute(context, component, "columnsOrder", columnsOrder);
+
context.getPartialViewContext().getRenderIds().add(component.getClientId(context)); // Use
partial re-rendering here.
}
}
private void updateClientFirst(FacesContext context, UIComponent component, String
clientFirst) {
if (clientFirst != null && clientFirst.length() > 0) {
Integer value = Integer.valueOf(clientFirst);
- if (!value.equals(component.getAttributes().get("clientFirst"))) {
- component.getAttributes().put(UIExtendedDataTable.SUBMITTED_CLIENT_FIRST,
value);
+ Map<String, Object> attributes = component.getAttributes();
+ if (!value.equals(attributes.get("clientFirst"))) {
+ attributes.put(UIExtendedDataTable.SUBMITTED_CLIENT_FIRST, value);
context.getPartialViewContext().getRenderIds().add(
component.getClientId(context) + "@" +
UIExtendedDataTable.SCROLL);
}
}
}
+ private void decodeFiltering(FacesContext context, UIComponent component, String
value) {
+ if (value != null && value.length() > 0) {
+ String[] values = value.split(":");
+ if (Boolean.parseBoolean(values[2])) {
+ UIDataTableBase table = (UIDataTableBase) component;
+ for (Iterator<UIComponent> iterator = table.columns();
iterator.hasNext();) {
+ UIComponent column = iterator.next();
+ if (values[0].equals(column.getId())) {
+ updateAttribute(context, column, "filterValue",
values[1]);
+ } else {
+ updateAttribute(context, column, "filterValue", null);
+ }
+ }
+ } else {
+ updateAttribute(context, component.findComponent(values[0]),
"filterValue", values[1]);
+ }
+
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-05
10:31:38 UTC (rev 16715)
+++
root/ui-sandbox/trunk/components/tables/ui/src/main/resources/META-INF/resources/extendedDataTable.js 2010-04-05
13:11:12 UTC (rev 16716)
@@ -147,7 +147,9 @@
var initializeLayout = function() {
//TODO Use "var rowHeight" instead of "dataTableElement.offsetHeight /
rows"
- contentElement.style.height = (rowCount * dataTableElement.offsetHeight / rows) +
"px";
+ if (contentElement) {
+ contentElement.style.height = (rowCount * dataTableElement.offsetHeight / rows) +
"px";
+ }
updateLayout();
updateScrollPosition(); //TODO Restore horizontal scroll position
};
@@ -318,6 +320,17 @@
this.setColumnWidth = function(id, width) {
setColumnWidth(id, width);
}
+
+ this.filter = function(id, filterValue, isClear) {
+ if (typeof(filterValue) == "undefined" || filterValue == null) {
+ filterValue = "";
+ }
+ sendAjax(null, {"rich:filterString" : id + ":" + filterValue +
":" + isClear}); // TODO Maybe, event model should be used here.
+ }
+
+ this.clearFiltering = function() {
+ this.filter("", "", true);
+ }
};
}(window.RichFaces, jQuery));