[richfaces-svn-commits] JBoss Rich Faces SVN: r11807 - in trunk: framework/api/src/main/java/org/richfaces/model and 3 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Tue Dec 16 08:28:07 EST 2008
Author: konstantin.mishin
Date: 2008-12-16 08:28:07 -0500 (Tue, 16 Dec 2008)
New Revision: 11807
Modified:
trunk/framework/api/src/main/java/org/ajax4jsf/model/SequenceRange.java
trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataModel.java
trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataRange.java
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/component/UIScrollableDataTable.java
trunk/ui/scrollableDataTable/src/main/java/org/richfaces/convert/rowkey/ScrollableDataTableRowKeyConverter.java
trunk/ui/scrollableDataTable/src/test/java/org/richfaces/component/AbstractScrollableDataTableTestCase.java
Log:
RF-2644
Modified: trunk/framework/api/src/main/java/org/ajax4jsf/model/SequenceRange.java
===================================================================
--- trunk/framework/api/src/main/java/org/ajax4jsf/model/SequenceRange.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/framework/api/src/main/java/org/ajax4jsf/model/SequenceRange.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -55,4 +55,12 @@
this.rows = rows;
}
+ protected void setFirstRow(int firstRow) {
+ this.firstRow = firstRow;
+ }
+
+ protected void setRows(int rows) {
+ this.rows = rows;
+ }
+
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataModel.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataModel.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataModel.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -54,6 +54,8 @@
public static class SimpleRowKey extends Number implements Serializable{
private static final long serialVersionUID = 1L;
+
+ public static final String PREFIX = "srk";
private int i;
public SimpleRowKey(int i) {
@@ -66,7 +68,7 @@
}
public String toString() {
- return String.valueOf(i);
+ return PREFIX + String.valueOf(i);
}
public int hashCode() {
Modified: trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataRange.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataRange.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/framework/api/src/main/java/org/richfaces/model/ScrollableTableDataRange.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -12,25 +12,21 @@
import java.io.Serializable;
-import org.ajax4jsf.model.Range;
+import org.ajax4jsf.model.SequenceRange;
/**
* Iteration range for Scrollable Grid
* @author Maksim Kaszynski
* @modified by Anton Belevich
*/
-public class ScrollableTableDataRange implements Range, Serializable{
+public class ScrollableTableDataRange extends SequenceRange implements Serializable{
private static final long serialVersionUID = -6675002421400464892L;
- private int first = 0;
- private int last = 0;
private SortOrder sortOrder;
public ScrollableTableDataRange(int first, int last, SortOrder sortOrder) {
- super();
- this.first = first;
- this.last = last;
+ super(first, last > 0 ? last - first : -1);
this.sortOrder = sortOrder;
}
@@ -38,25 +34,25 @@
* @return the bufferSize
*/
public int getLast() {
- return last;
+ return getFirstRow() + getRows();
}
/**
* @param bufferSize the bufferSize to set
*/
public void setLast(int lastRow) {
- this.last = lastRow;
+ setRows(lastRow > 0 ? lastRow - getFirstRow() : -1);
}
/**
* @return the first
*/
public int getFirst() {
- return first;
+ return getFirstRow();
}
/**
* @param first the first to set
*/
public void setFirst(int first) {
- this.first = first;
+ setFirstRow(first);
}
public SortOrder getSortOrder() {
@@ -66,27 +62,36 @@
public void setSortOrder(SortOrder sortOrder) {
this.sortOrder = sortOrder;
}
-
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + getFirstRow();
+ result = prime * result + getRows();
+ result = prime * result
+ + ((sortOrder == null) ? 0 : sortOrder.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
-
- if(!(obj instanceof ScrollableTableDataRange)){
- return super.equals(obj);
- }
-
- ScrollableTableDataRange ref = (ScrollableTableDataRange)obj;
-
- boolean ret = (this.first == ref.first)&&(this.last == ref.last );
-
- if(this.sortOrder != null){
- ret = ret && this.sortOrder.equals(ref.sortOrder);
- } else {
- ret = (ret && (ref.sortOrder == null));
- }
-
- return ret;
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ ScrollableTableDataRange other = (ScrollableTableDataRange) obj;
+ if (getFirstRow() != other.getFirstRow())
+ return false;
+ if (getRows() != other.getRows())
+ return false;
+ if (sortOrder == null) {
+ if (other.sortOrder != null)
+ return false;
+ } else if (!sortOrder.equals(other.sortOrder))
+ return false;
+ return true;
}
-
- public int hashCode() {
- return super.hashCode();
- }
}
Modified: trunk/ui/scrollableDataTable/src/main/java/org/richfaces/component/UIScrollableDataTable.java
===================================================================
--- trunk/ui/scrollableDataTable/src/main/java/org/richfaces/component/UIScrollableDataTable.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/ui/scrollableDataTable/src/main/java/org/richfaces/component/UIScrollableDataTable.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -24,10 +24,15 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
+import javax.el.ELContext;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
import javax.faces.component.UIColumn;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.event.AbortProcessingException;
@@ -35,13 +40,14 @@
import javax.faces.event.PhaseId;
import org.ajax4jsf.component.AjaxComponent;
-import org.ajax4jsf.component.UIDataAdaptor;
+import org.ajax4jsf.component.SequenceDataAdaptor;
import org.ajax4jsf.context.AjaxContext;
import org.ajax4jsf.event.AjaxEvent;
import org.ajax4jsf.model.DataComponentState;
import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.Range;
+import org.ajax4jsf.util.ELUtils;
import org.apache.commons.collections.iterators.IteratorChain;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -53,10 +59,14 @@
import org.richfaces.event.sort.SortEvent;
import org.richfaces.event.sort.SortListener;
import org.richfaces.model.DataModelCache;
+import org.richfaces.model.Modifiable;
+import org.richfaces.model.ModifiableModel;
+import org.richfaces.model.Ordering;
import org.richfaces.model.ScrollableTableDataModel;
import org.richfaces.model.ScrollableTableDataRange;
+import org.richfaces.model.SortField;
+import org.richfaces.model.SortField2;
import org.richfaces.model.SortOrder;
-import org.richfaces.model.internal.ComponentSortableDataModel;
import org.richfaces.renderkit.html.ScrollableDataTableUtils;
@@ -65,7 +75,7 @@
*
*/
-public abstract class UIScrollableDataTable extends UIDataAdaptor implements AjaxComponent, Sortable, Selectable, ScriptExportable{
+public abstract class UIScrollableDataTable extends SequenceDataAdaptor implements AjaxComponent, Sortable, Selectable, ScriptExportable{
public static final String COMPONENT_TYPE = "org.richfaces.component.ScrollableDataTable";
@@ -189,29 +199,29 @@
}
protected ExtendedDataModel createDataModel() {
-
- Object value = getValue();
-
- ScrollableTableDataModel<?> model = null;
-
- if (value instanceof ScrollableTableDataModel) {
-
- if (log.isDebugEnabled()) {
- log.debug("Found instanceof " + value.getClass() + " will use it unwrapped");
+ ExtendedDataModel model = super.createDataModel();
+ if (model instanceof ScrollableTableDataModel) {
+ if (isCacheable()) {
+ if (log.isDebugEnabled()) {
+ log.debug("Initializing cache of type "
+ + DataModelCache.class);
+ }
+ model = new DataModelCache((ScrollableTableDataModel<?>) model);
}
- model = (ScrollableTableDataModel<?>) value;
-
} else {
- model = new ComponentSortableDataModel(getVar(), value, this.getSortOrder());
- }
-
- if (isCacheable()) {
-
- if (log.isDebugEnabled()) {
- log.debug("Initializing cache of type " + DataModelCache.class);
+ List<SortField2> sortFields = getSortFields();
+ if (sortFields != null && !sortFields.isEmpty()) {
+ Modifiable modifiable = null;
+ if (model instanceof Modifiable) {
+ modifiable = (Modifiable) model;
+ } else {
+ ModifiableModel modifiableModel = new ModifiableModel(
+ model, getVar());
+ model = modifiableModel;
+ modifiable = modifiableModel;
+ }
+ modifiable.modify(null, sortFields);
}
-
- model = new DataModelCache(model);
}
/*
* TODO: Verify - do we really need it
@@ -220,7 +230,45 @@
return model;
}
-
+ private List<SortField2> getSortFields() {
+ FacesContext context = FacesContext.getCurrentInstance();
+ ELContext eLContext= context.getELContext();
+ ExpressionFactory expressionFactory = context.getApplication().getExpressionFactory();
+ String var = getVar();
+ SortOrder sortOrder = getSortOrder();
+ List<SortField2> sortFields2 = null;
+ if (sortOrder != null) {
+ SortField[] sortFields = sortOrder.getFields();
+ sortFields2 = new LinkedList<SortField2>();
+ for (SortField sortField : sortFields) {
+ ValueExpression valueExpression = null;
+ String name = sortField.getName();
+ if (ELUtils.isValueReference(name)) {
+ valueExpression = expressionFactory.createValueExpression(
+ eLContext, name, Object.class);
+ } else if (!name.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
+ valueExpression = expressionFactory.createValueExpression(
+ eLContext, "#{" + var + "." + name + "}",
+ Object.class);
+ }
+ Ordering ordering = Ordering.UNSORTED;
+ Boolean ascending = sortField.getAscending();
+ if (ascending != null) {
+ if (ascending) {
+ ordering = Ordering.ASCENDING;
+ } else {
+ ordering = Ordering.DESCENDING;
+ }
+ }
+ if (valueExpression != null
+ && !Ordering.UNSORTED.equals(ordering)) {
+ sortFields2.add(new SortField2(valueExpression, ordering));
+ }
+ }
+ }
+ return sortFields2;
+ }
+
public Object saveState(FacesContext context) {
Object values[] = new Object[4];
Modified: trunk/ui/scrollableDataTable/src/main/java/org/richfaces/convert/rowkey/ScrollableDataTableRowKeyConverter.java
===================================================================
--- trunk/ui/scrollableDataTable/src/main/java/org/richfaces/convert/rowkey/ScrollableDataTableRowKeyConverter.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/ui/scrollableDataTable/src/main/java/org/richfaces/convert/rowkey/ScrollableDataTableRowKeyConverter.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -43,8 +43,12 @@
public Object getAsObject(FacesContext context, UIComponent component,
String value) {
try {
- int i = Integer.parseInt(value);
- return new SimpleRowKey(i);
+ String prefix = SimpleRowKey.PREFIX;
+ if (value != null && value.startsWith(prefix)) {
+ int i = Integer.parseInt(value.substring(prefix.length()));
+ return new SimpleRowKey(i);
+ }
+ return new Integer(value);
} catch(Exception e) {
throw new ConverterException("Unable to convert value " + value + "to " + SimpleRowKey.class, e);
}
@@ -55,9 +59,8 @@
*/
public String getAsString(FacesContext context, UIComponent component,
Object value) {
- if (value instanceof SimpleRowKey) {
- SimpleRowKey key = (SimpleRowKey) value;
- return key.toString();
+ if (value instanceof SimpleRowKey || value instanceof Integer) {
+ return value.toString();
}
throw new ConverterException("Value " + value + " is not supported by this converter");
}
Modified: trunk/ui/scrollableDataTable/src/test/java/org/richfaces/component/AbstractScrollableDataTableTestCase.java
===================================================================
--- trunk/ui/scrollableDataTable/src/test/java/org/richfaces/component/AbstractScrollableDataTableTestCase.java 2008-12-16 13:25:24 UTC (rev 11806)
+++ trunk/ui/scrollableDataTable/src/test/java/org/richfaces/component/AbstractScrollableDataTableTestCase.java 2008-12-16 13:28:07 UTC (rev 11807)
@@ -43,6 +43,7 @@
import org.richfaces.model.DataModelCache;
import org.richfaces.model.SortField;
import org.richfaces.model.SortOrder;
+import org.richfaces.model.impl.ListDataModel;
import org.richfaces.model.selection.Selection;
import org.richfaces.model.selection.SimpleSelection;
@@ -202,7 +203,7 @@
- List l = Collections.singletonList("aaaa");
+ ListDataModel l = new ListDataModel(Collections.singletonList("aaaa"));
table.setValue(l);
ExtendedDataModel model = table.createDataModel();
@@ -216,7 +217,7 @@
table.setValue(null);
model = table.createDataModel();
- assertTrue(model instanceof DataModelCache);
+ assertTrue(model instanceof ExtendedDataModel);
assertEquals(0, model.getRowCount());
More information about the richfaces-svn-commits
mailing list