Author: konstantin.mishin
Date: 2008-02-07 07:45:55 -0500 (Thu, 07 Feb 2008)
New Revision: 5906
Added:
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/MethodBindingExpression.java
Modified:
trunk/framework/api/src/main/java/org/richfaces/component/Column.java
trunk/framework/api/src/main/java/org/richfaces/model/Field.java
trunk/framework/api/src/main/java/org/richfaces/model/FilterField.java
trunk/framework/api/src/main/java/org/richfaces/model/SortField2.java
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/ObjectWrapperFactory.java
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java
Log:
RF-1741
Modified: trunk/framework/api/src/main/java/org/richfaces/component/Column.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/component/Column.java 2008-02-07
12:02:18 UTC (rev 5905)
+++ trunk/framework/api/src/main/java/org/richfaces/component/Column.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -21,6 +21,8 @@
package org.richfaces.component;
+import javax.el.MethodExpression;
+
import org.richfaces.model.Ordering;
/**
@@ -68,4 +70,7 @@
*/
public abstract void setSortOrder(Ordering sortOrder);
public abstract Ordering getSortOrder();
+
+ public abstract void setFilterMethod(MethodExpression methodExpression);
+ public abstract MethodExpression getFilterMethod();
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/Field.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/Field.java 2008-02-07 12:02:18
UTC (rev 5905)
+++ trunk/framework/api/src/main/java/org/richfaces/model/Field.java 2008-02-07 12:45:55
UTC (rev 5906)
@@ -5,7 +5,7 @@
import java.io.Serializable;
-import javax.el.ValueExpression;
+import javax.el.Expression;
/**
* @author Konstantin Mishin
@@ -15,9 +15,9 @@
private static final long serialVersionUID = 7576046308828980778L;
- private ValueExpression expression;
+ private Expression expression;
- public Field(ValueExpression expression) {
+ public Field(Expression expression) {
this.expression = expression;
}
@@ -39,7 +39,7 @@
return true;
}
- public ValueExpression getExpression() {
+ public Expression getExpression() {
return expression;
}
@@ -52,7 +52,7 @@
return result;
}
- public void setExpression(ValueExpression expression) {
+ public void setExpression(Expression expression) {
this.expression = expression;
}
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/FilterField.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/FilterField.java 2008-02-07
12:02:18 UTC (rev 5905)
+++ trunk/framework/api/src/main/java/org/richfaces/model/FilterField.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -3,7 +3,7 @@
*/
package org.richfaces.model;
-import javax.el.ValueExpression;
+import javax.el.Expression;
/**
* @author Konstantin Mishin
@@ -13,7 +13,7 @@
private static final long serialVersionUID = -5453359866996963829L;
- public FilterField(ValueExpression expression) {
+ public FilterField(Expression expression) {
super(expression);
}
Modified: trunk/framework/api/src/main/java/org/richfaces/model/SortField2.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/model/SortField2.java 2008-02-07
12:02:18 UTC (rev 5905)
+++ trunk/framework/api/src/main/java/org/richfaces/model/SortField2.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -3,7 +3,7 @@
*/
package org.richfaces.model;
-import javax.el.ValueExpression;
+import javax.el.Expression;
/**
* @author Maksim Kaszynski
@@ -15,11 +15,11 @@
private Ordering ordering;
- public SortField2(ValueExpression expression) {
+ public SortField2(Expression expression) {
super(expression);
}
- public SortField2(ValueExpression expression, Ordering ordering) {
+ public SortField2(Expression expression, Ordering ordering) {
super(expression);
this.ordering = ordering;
}
Added:
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/MethodBindingExpression.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/MethodBindingExpression.java
(rev 0)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/MethodBindingExpression.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -0,0 +1,26 @@
+package org.richfaces.model.impl.expressive;
+
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.faces.context.FacesContext;
+
+/**
+ *
+ * @author Konstantin Mishin
+ *
+ */
+final public class MethodBindingExpression extends Expression {
+
+ private ELContext context;
+ private MethodExpression methodExpression;
+
+ MethodBindingExpression(FacesContext faces, MethodExpression methodExpression) {
+ super(methodExpression.getExpressionString());
+ this.context = faces.getELContext();
+ this.methodExpression = methodExpression;
+ }
+
+ public Object evaluate(Object base) {
+ return methodExpression.invoke(context, new Object[]{base});
+ }
+}
\ No newline at end of file
Modified:
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/ObjectWrapperFactory.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/ObjectWrapperFactory.java 2008-02-07
12:02:18 UTC (rev 5905)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/ObjectWrapperFactory.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -27,6 +27,7 @@
import javax.el.ELContext;
import javax.el.ELResolver;
+import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.el.VariableMapper;
import javax.faces.application.Application;
@@ -102,21 +103,28 @@
int i = 0;
for (Field field : sortOrder) {
- ValueExpression valueExpression = field.getExpression();
+ javax.el.Expression elExpression = field.getExpression();
Expression expression;
- if (valueExpression.isLiteralText()) {
- String expressionString = valueExpression.getExpressionString();
+ if (elExpression instanceof ValueExpression) {
+ ValueExpression valueExpression = (ValueExpression) elExpression;
- if (expressionString.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
- expression = new NullExpression(expressionString);
+ if (valueExpression.isLiteralText()) {
+ String expressionString = valueExpression.getExpressionString();
+
+ if (expressionString.startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
+ expression = new NullExpression(expressionString);
+ } else {
+ expression = new SimplePropertyExpression(expressionString, elContext, resolver);
+ }
} else {
- expression = new SimplePropertyExpression(expressionString, elContext, resolver);
+ expression = new ValueBindingExpression(context, valueExpression, var);
}
+ } else if(elExpression instanceof MethodExpression){
+ expression = new MethodBindingExpression(context, (MethodExpression)elExpression);
} else {
- expression = new ValueBindingExpression(context, valueExpression, var);
+ throw new IllegalArgumentException();
}
-
expressions[i++] = expression;
}
Modified:
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java
===================================================================
---
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java 2008-02-07
12:02:18 UTC (rev 5905)
+++
trunk/framework/impl/src/main/java/org/richfaces/model/impl/expressive/WrappedBeanComparator2.java 2008-02-07
12:45:55 UTC (rev 5906)
@@ -4,9 +4,8 @@
import java.util.Iterator;
import java.util.List;
-import javax.el.ValueExpression;
+import javax.el.Expression;
-import org.richfaces.model.Field;
import org.richfaces.model.Ordering;
import org.richfaces.model.SortField2;
@@ -37,7 +36,7 @@
for (Iterator<SortField2> iterator = sortFields.iterator(); iterator.hasNext()
&& result == 0;) {
SortField2 field = iterator.next();
- ValueExpression expression = field.getExpression();
+ Expression expression = field.getExpression();
String prop = expression.getExpressionString();
Ordering ordering = field.getOrdering();
if (ordering != null) {
Show replies by date