Author: abelevich
Date: 2010-05-25 10:32:10 -0400 (Tue, 25 May 2010)
New Revision: 17232
Added:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SortingFilteringRowsRenderer.java
Removed:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRowsRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/HeaderEncodeStrategy.java
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UISubTable.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractRowsRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableBaseRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ColumnGroupRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/RowHolder.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SubTableRenderer.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/taglib/DataTableHandler.java
Log:
rename DataTableRowsRenderer - > SortingFilteringRowsRenderer, remove uncompressed
scripts loading, fix DataTable renderers
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UISubTable.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UISubTable.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/component/UISubTable.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -33,10 +33,6 @@
import org.richfaces.event.ToggleEvent;
import org.richfaces.event.ToggleListener;
-/**
- * JSF component class
- *
- */
@ResourceDependency(name = "subtable.js")
public class UISubTable extends UIDataTableBase implements Column, Expandable {
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractRowsRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractRowsRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractRowsRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -35,7 +35,7 @@
import org.richfaces.component.Row;
/**
- * @author shura
+ * @author Anton Belevich
*
*/
public abstract class AbstractRowsRenderer extends RendererBase implements DataVisitor {
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableBaseRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableBaseRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableBaseRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -35,7 +35,11 @@
import org.richfaces.component.Row;
-public abstract class AbstractTableBaseRenderer extends DataTableRowsRenderer {
+/**
+ * @author Anton Belevich
+ *
+ */
+public abstract class AbstractTableBaseRenderer extends SortingFilteringRowsRenderer {
public static final String ROW_CLASS_KEY = "rowClass";
@@ -50,17 +54,16 @@
public static final String ROWSPAN_STRING = "rowspan";
public static final String COLSPAN_STRING = "colspan";
+
-
- public RowHolder encodeColumn(FacesContext context, ResponseWriter writer, UIColumn
component, RowHolder rowHolder) throws IOException {
+ public void encodeColumn(FacesContext context, ResponseWriter writer, UIColumn
component, RowHolder rowHolder) throws IOException {
String parentId = rowHolder.getBaseClientId();
if (component instanceof org.richfaces.component.UIColumn) {
Map<String, Object> attributes = component.getAttributes();
if (Boolean.TRUE.equals(attributes.get(BREAK_BEFORE_STRING)) &&
rowHolder.getProcessCell() != 0) {
- encodeRowEnd(writer, context, component);
- rowHolder.remove();
+ encodeRowEnd(writer);
rowHolder.nextRow();
rowHolder.setRowStart(true);
}
@@ -72,17 +75,14 @@
} else {
encodeRowStart(writer, context, parentId, component);
}
- rowHolder.add(HTML.TR_ELEMENT);
rowHolder.setRowStart(false);
}
encodeColumnStart(writer, context, parentId, component);
renderChildren(context, component);
- encodeColumnEnd(writer, context, parentId, component);
-
+ encodeColumnEnd(writer, context, parentId);
+
rowHolder.nextCell();
-
- return rowHolder;
}
public void encodeColumnStart(ResponseWriter writer, FacesContext context, String
parentId, UIComponent component) throws IOException {
@@ -107,7 +107,7 @@
}
}
- public void encodeColumnEnd(ResponseWriter writer, FacesContext context, String
parentId, UIComponent component) throws IOException {
+ public void encodeColumnEnd(ResponseWriter writer, FacesContext context, String
parentId) throws IOException {
writer.endElement(getCellElement(context, parentId));
}
@@ -117,7 +117,7 @@
encodeStyleClass(writer, context, component, HTML.STYLE_CLASS_ATTR, styleClass);
}
- public void encodeFirstRowEnd(ResponseWriter writer, FacesContext context,
UIComponent component)throws IOException {
+ public void encodeFirstRowEnd(ResponseWriter writer)throws IOException {
writer.endElement(HTML.TR_ELEMENT);
}
@@ -127,7 +127,7 @@
encodeStyleClass(writer, context, component, HTML.STYLE_CLASS_ATTR, styleClass);
}
- public void encodeRowEnd(ResponseWriter writer, FacesContext context, UIComponent
component) throws IOException {
+ public void encodeRowEnd(ResponseWriter writer) throws IOException {
writer.endElement(HTML.TR_ELEMENT);
}
@@ -154,8 +154,7 @@
protected void put(FacesContext context, String id, String key, String value) {
context.getAttributes().put(id + key, value);
}
-
- //TODO nick - nested tables will not work correct
+
protected void saveRowStyles(FacesContext context, String id, String firstRowClass,
String rowClass, String cellClass) {
put(context, id, FIRST_ROW_CLASS_KEY, firstRowClass);
put(context, id, ROW_CLASS_KEY, rowClass);
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/AbstractTableRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -35,6 +35,10 @@
import org.richfaces.component.Row;
import org.richfaces.component.UIDataTableBase;
+/**
+ * @author Anton Belevich
+ *
+ */
@ResourceDependencies(value = { @ResourceDependency(library = "javax.faces",
name = "jsf.js"),
@ResourceDependency(name = "jquery.js"), @ResourceDependency(name =
"richfaces.js"), @ResourceDependency(name = "richfaces-event.js")})
public abstract class AbstractTableRenderer extends AbstractTableBaseRenderer implements
MetaComponentRenderer {
@@ -183,7 +187,7 @@
encodeStyle(writer, context, dataTable, null);
}
- public void encodeTableBodyEnd(ResponseWriter writer, FacesContext context,
UIDataTableBase component) throws IOException {
+ public void encodeTableBodyEnd(ResponseWriter writer) throws IOException {
writer.endElement(HTML.TBODY_ELEMENT);
}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ColumnGroupRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ColumnGroupRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ColumnGroupRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -34,6 +34,10 @@
import org.richfaces.component.UIColumnGroup;
import org.richfaces.component.UIDataTableBase;
+/**
+ * @author Anton Belevich
+ *
+ */
public class ColumnGroupRenderer extends AbstractTableBaseRenderer {
@Override
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -42,6 +42,10 @@
import org.richfaces.component.UIDataTable;
import org.richfaces.component.UIDataTableBase;
+/**
+ * @author Anton Belevich
+ *
+ */
@ResourceDependencies( { @ResourceDependency(library = "javax.faces", name =
"jsf.js"),
@ResourceDependency(name = "jquery.js"), @ResourceDependency(name =
"richfaces.js"),
@ResourceDependency(name= "richfaces-event.js"),@ResourceDependency(name =
"richfaces-base-component.js"),
@@ -84,58 +88,58 @@
RowHolder rowHolder = (RowHolder)holder;
Row row = rowHolder.getRow();
- if(!containRowChildren((UIDataTable)row)) {
+ if(!containsRowChildren((UIDataTable)row)) {
encodeTableBodyStart(writer, facesContext, (UIDataTableBase)row);
- rowHolder.add(HTML.TBODY_ELEMENT);
+ rowHolder.setTbody(true);
}
}
@Override
public void encodeAfterRows(ResponseWriter writer, FacesContext facesContext,
RowHolderBase holder) throws IOException {
RowHolder rowHolder = (RowHolder)holder;
- Row row = rowHolder.getRow();
- if(!rowHolder.isEmpty()) {
- encodeTableBodyEnd(writer, facesContext, (UIDataTable)row);
+ if(rowHolder.isTbody()) {
+ encodeTableBodyEnd(writer);
}
}
public void encodeRow(ResponseWriter writer, FacesContext context, RowHolderBase
holder) throws IOException {
-
RowHolder rowHolder = (RowHolder)holder;
Row row = rowHolder.getRow();
- if(rowHolder.isEmpty()) {
+ if(!rowHolder.isTbody()) {
encodeTableBodyStart(writer, context, (UIDataTable)row);
- rowHolder.add(HTML.TBODY_ELEMENT);
}
rowHolder.setRowStart(true);
-
Iterator<UIComponent> components = row.columns();
+
+ boolean isTRopen = false;
+
while (components.hasNext()) {
UIComponent child = components.next();
if(child instanceof Row) {
- if(HTML.TR_ELEMENT.equals(rowHolder.getCurrentElement())) {
- encodeRowEnd(writer, context, child);
- rowHolder.remove();
+
+ if(rowHolder.getProcessCell() != 0) {
+ encodeRowEnd(writer);
+ isTRopen = false;
+ encodeTableBodyEnd(writer);
}
- if(HTML.TBODY_ELEMENT.equals(rowHolder.getCurrentElement())) {
- encodeTableBodyEnd(writer, context, (UIDataTable)row);
- rowHolder.remove();
- }
+ rowHolder.nextCell();
child.encodeAll(context);
+
} else if (child instanceof UIColumn) {
encodeColumn(context, writer, (UIColumn) child, rowHolder);
- if(!components.hasNext()) {
- encodeRowEnd(writer, context, (UIColumn)child);
- rowHolder.remove();
- }
+ isTRopen = true;
}
}
+
+ if(isTRopen){
+ encodeRowEnd(writer);
+ }
}
- protected boolean containRowChildren(UIDataTable dataTable) {
+ protected boolean containsRowChildren(UIDataTable dataTable) {
Iterator<UIComponent> iterator = dataTable.columns();
while (iterator.hasNext()) {
UIComponent child = iterator.next();
Deleted:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRowsRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRowsRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/DataTableRowsRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -1,149 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright ${year}, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.richfaces.renderkit;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedList;
-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.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.swing.SortOrder;
-
-import org.richfaces.component.UIDataTableBase;
-import org.richfaces.model.SortMode;
-
-public abstract class DataTableRowsRenderer extends AbstractRowsRenderer {
-
- private static final String FILTERING_STRING = "rich:filtering";
-
- private static final String SORTING_STRING = "rich:sorting";
-
- private static final String FILTER_VALUE_STRING = "filterValue";
-
- private static final String SORT_ORDER_STRING = "sortOrder";
-
- private static final String SORT_PRIORITY_STRING = "sortPriority";
-
-
- private static final String SEPARATOR = ":";
-
- protected void decodeSortingFiltering(FacesContext context, UIComponent component) {
- if(component instanceof UIDataTableBase) {
- UIDataTableBase dataTableBase = (UIDataTableBase)component;
- Map<String, String> requestMap =
context.getExternalContext().getRequestParameterMap();
- String clientId = dataTableBase.getClientId(context);
-
- String filtering = requestMap.get(clientId + FILTERING_STRING);
- if(filtering != null && filtering.trim().length() > 0) {
- decodeFiltering(context, dataTableBase, filtering);
- }
-
- String sorting = requestMap.get(clientId + SORTING_STRING);
- if(sorting != null && sorting.trim().length() > 0) {
- decodeSorting(context, dataTableBase, sorting);
- }
- }
- }
-
- protected void decodeFiltering(FacesContext context, UIDataTableBase dataTableBase,
String value) {
- String[] values = value.split(SEPARATOR);
- if (Boolean.parseBoolean(values[2])) {
- for (Iterator<UIComponent> iterator = dataTableBase.columns();
iterator.hasNext();) {
- UIComponent column = iterator.next();
- if (values[0].equals(column.getId())) {
- updateAttribute(context, column, FILTER_VALUE_STRING, values[1]);
- } else {
- updateAttribute(context, column, FILTER_VALUE_STRING, null);
- }
- }
- } else {
- updateAttribute(context, dataTableBase.findComponent(values[0]),
FILTER_VALUE_STRING, values[1]);
- }
-
context.getPartialViewContext().getRenderIds().add(dataTableBase.getClientId(context)); //
TODO Use partial re-rendering here.
- }
-
- protected void decodeSorting(FacesContext context, UIDataTableBase dataTableBase,
String value) {
- List<Object> sortPriority = new LinkedList<Object>();
- String[] values = value.split(SEPARATOR);
- if (Boolean.parseBoolean(values[2]) ||
SortMode.single.equals(dataTableBase.getSortMode())) {
- for (Iterator<UIComponent> iterator = dataTableBase.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, SORT_ORDER_STRING,
SortOrder.UNSORTED);
- }
- }
- } else {
- updateSortOrder(context, dataTableBase.findComponent(values[0]), values[1]);
- Collection<?> priority = dataTableBase.getSortPriority();
- if (priority != null) {
- priority.remove(values[0]);
- sortPriority.addAll(priority);
- }
- sortPriority.add(values[0]);
- }
- updateAttribute(context, dataTableBase, SORT_PRIORITY_STRING, sortPriority);
-
context.getPartialViewContext().getRenderIds().add(dataTableBase.getClientId(context)); //
TODO Use partial re-rendering here.
- }
-
- 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(SORT_ORDER_STRING))) {
- sortOrder = SortOrder.DESCENDING;
- }
- }
- updateAttribute(context, component, SORT_ORDER_STRING, sortOrder);
- }
-
- protected void updateAttribute(FacesContext context, UIComponent component, String
attribute, Object value) {
- 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);
- }
- }
- }
-
-}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ExtendedDataTableRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -55,11 +55,15 @@
import org.richfaces.component.util.HtmlUtil;
import org.richfaces.context.OnOffResponseWriter;
-@ResourceDependencies({ @ResourceDependency(library = "javax.faces", name =
"jsf-uncompressed.js"),
+/**
+ * @author Konstantin Mishin
+ *
+ */
+@ResourceDependencies({ @ResourceDependency(library = "javax.faces", name =
"jsf.js"),
@ResourceDependency(name = "jquery.js"), @ResourceDependency(name =
"jquery.position.js"),
@ResourceDependency(name = "richfaces.js"), @ResourceDependency(name =
"extendedDataTable.js"),
@ResourceDependency(name = "extendedDataTable.css") })
-public class ExtendedDataTableRenderer extends DataTableRowsRenderer implements
MetaComponentRenderer {
+public class ExtendedDataTableRenderer extends SortingFilteringRowsRenderer implements
MetaComponentRenderer {
private static enum PartName {
frozen, normal
Deleted:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/HeaderEncodeStrategy.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/HeaderEncodeStrategy.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/HeaderEncodeStrategy.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -1,40 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright ${year}, Red Hat, Inc. and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.richfaces.renderkit;
-
-import java.io.IOException;
-
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-import javax.faces.context.ResponseWriter;
-//TODO: anton - move to the api
-public interface HeaderEncodeStrategy {
-
-
- public abstract void encodeBegin(FacesContext context, ResponseWriter writer,
- UIComponent column, String facetName) throws IOException;
-
- public abstract void encodeEnd(FacesContext context, ResponseWriter writer,
- UIComponent column, String facetName) throws IOException;
-
-}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/RowHolder.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/RowHolder.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/RowHolder.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -22,12 +22,14 @@
package org.richfaces.renderkit;
-import java.util.LinkedList;
-
import javax.faces.context.FacesContext;
import org.richfaces.component.Row;
+/**
+ * @author Anton Belevich
+ *
+ */
public class RowHolder extends RowHolderBase {
private Row row;
@@ -37,39 +39,29 @@
private String baseClientId;
private boolean isRowStart;
-
- private LinkedList<String> elements;
+
+ private boolean tbody;
public RowHolder(FacesContext context, Row row) {
this(context, row, 0, true);
}
+ public boolean isTbody() {
+ return tbody;
+ }
+
+ public void setTbody(boolean tbody) {
+ this.tbody = tbody;
+ }
+
public RowHolder(FacesContext context, Row row, int processCell, boolean isRowStart)
{
super(context);
this.row = row;
this.processCell = processCell;
this.baseClientId = row.getClientId(context);
- this.elements = new LinkedList<String>();
}
-
- public String remove() {
- return elements.pop();
- }
- public void add(String htmlTag) {
- elements.push(htmlTag);
- }
-
- public String getCurrentElement() {
- return elements.getFirst();
- }
-
- public boolean isEmpty() {
- return elements.isEmpty();
- }
-
-
public String getBaseClientId() {
return baseClientId;
}
Added:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SortingFilteringRowsRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SortingFilteringRowsRenderer.java
(rev 0)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SortingFilteringRowsRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -0,0 +1,153 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright ${year}, Red Hat, Inc. and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+
+package org.richfaces.renderkit;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+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.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.swing.SortOrder;
+
+import org.richfaces.component.UIDataTableBase;
+import org.richfaces.model.SortMode;
+
+/**
+ * @author Anton Belevich
+ *
+ */
+public abstract class SortingFilteringRowsRenderer extends AbstractRowsRenderer {
+
+ private static final String FILTERING_STRING = "rich:filtering";
+
+ private static final String SORTING_STRING = "rich:sorting";
+
+ private static final String FILTER_VALUE_STRING = "filterValue";
+
+ private static final String SORT_ORDER_STRING = "sortOrder";
+
+ private static final String SORT_PRIORITY_STRING = "sortPriority";
+
+
+ private static final String SEPARATOR = ":";
+
+ protected void decodeSortingFiltering(FacesContext context, UIComponent component) {
+ if(component instanceof UIDataTableBase) {
+ UIDataTableBase dataTableBase = (UIDataTableBase)component;
+ Map<String, String> requestMap =
context.getExternalContext().getRequestParameterMap();
+ String clientId = dataTableBase.getClientId(context);
+
+ String filtering = requestMap.get(clientId + FILTERING_STRING);
+ if(filtering != null && filtering.trim().length() > 0) {
+ decodeFiltering(context, dataTableBase, filtering);
+ }
+
+ String sorting = requestMap.get(clientId + SORTING_STRING);
+ if(sorting != null && sorting.trim().length() > 0) {
+ decodeSorting(context, dataTableBase, sorting);
+ }
+ }
+ }
+
+ protected void decodeFiltering(FacesContext context, UIDataTableBase dataTableBase,
String value) {
+ String[] values = value.split(SEPARATOR);
+ if (Boolean.parseBoolean(values[2])) {
+ for (Iterator<UIComponent> iterator = dataTableBase.columns();
iterator.hasNext();) {
+ UIComponent column = iterator.next();
+ if (values[0].equals(column.getId())) {
+ updateAttribute(context, column, FILTER_VALUE_STRING, values[1]);
+ } else {
+ updateAttribute(context, column, FILTER_VALUE_STRING, null);
+ }
+ }
+ } else {
+ updateAttribute(context, dataTableBase.findComponent(values[0]),
FILTER_VALUE_STRING, values[1]);
+ }
+
context.getPartialViewContext().getRenderIds().add(dataTableBase.getClientId(context)); //
TODO Use partial re-rendering here.
+ }
+
+ protected void decodeSorting(FacesContext context, UIDataTableBase dataTableBase,
String value) {
+ List<Object> sortPriority = new LinkedList<Object>();
+ String[] values = value.split(SEPARATOR);
+ if (Boolean.parseBoolean(values[2]) ||
SortMode.single.equals(dataTableBase.getSortMode())) {
+ for (Iterator<UIComponent> iterator = dataTableBase.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, SORT_ORDER_STRING,
SortOrder.UNSORTED);
+ }
+ }
+ } else {
+ updateSortOrder(context, dataTableBase.findComponent(values[0]), values[1]);
+ Collection<?> priority = dataTableBase.getSortPriority();
+ if (priority != null) {
+ priority.remove(values[0]);
+ sortPriority.addAll(priority);
+ }
+ sortPriority.add(values[0]);
+ }
+ updateAttribute(context, dataTableBase, SORT_PRIORITY_STRING, sortPriority);
+
context.getPartialViewContext().getRenderIds().add(dataTableBase.getClientId(context)); //
TODO Use partial re-rendering here.
+ }
+
+ 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(SORT_ORDER_STRING))) {
+ sortOrder = SortOrder.DESCENDING;
+ }
+ }
+ updateAttribute(context, component, SORT_ORDER_STRING, sortOrder);
+ }
+
+ protected void updateAttribute(FacesContext context, UIComponent component, String
attribute, Object value) {
+ 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);
+ }
+ }
+ }
+
+}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SubTableRenderer.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SubTableRenderer.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/SubTableRenderer.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -41,6 +41,10 @@
import org.richfaces.component.UISubTable;
import org.richfaces.event.ToggleEvent;
+/**
+ * @author Anton Belevich
+ *
+ */
public class SubTableRenderer extends AbstractTableRenderer {
private static final String STATE = ":state";
@@ -122,10 +126,7 @@
while(components.hasNext()) {
encodeColumn(context, writer, (UIColumn)components.next(), rowHolder);
}
-
- if(!rowHolder.isEmpty()) {
- encodeRowEnd(writer, context, (UISubTable)row);
- }
+ encodeRowEnd(writer);
}
@Override
@@ -144,7 +145,7 @@
writer.endElement(HTML.TD_ELEM);
writer.endElement(HTML.TR_ELEMENT);
- encodeTableBodyEnd(writer, facesContext, subTable);
+ encodeTableBodyEnd(writer);
}
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/renderkit/ToggleControlRendererBase.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -42,7 +42,7 @@
* @author Anton Belevich
*
*/
-@ResourceDependencies( {@ResourceDependency(library = "javax.faces", name =
"jsf-uncompressed.js"),
+@ResourceDependencies( {@ResourceDependency(library = "javax.faces", name =
"jsf.js"),
@ResourceDependency(name = "richfaces.js"), @ResourceDependency(name =
"toggler.js")})
public abstract class ToggleControlRendererBase extends RendererBase {
Modified:
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/taglib/DataTableHandler.java
===================================================================
---
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/taglib/DataTableHandler.java 2010-05-25
14:30:01 UTC (rev 17231)
+++
root/ui-sandbox/tables/trunk/ui/src/main/java/org/richfaces/taglib/DataTableHandler.java 2010-05-25
14:32:10 UTC (rev 17232)
@@ -35,6 +35,10 @@
import org.richfaces.component.UIDataTable;
+/**
+ * @author Anton Belevich
+ *
+ */
public class DataTableHandler extends ComponentHandler {
private static final DataTableHandlerMetaRule METARULE = new
DataTableHandlerMetaRule();