Author: andrei_exadel
Date: 2008-10-08 07:31:59 -0400 (Wed, 08 Oct 2008)
New Revision: 10692
Modified:
trunk/ui/columns/src/main/java/org/richfaces/el/ELBuilder.java
trunk/ui/columns/src/main/java/org/richfaces/iterator/ForEachIterator.java
trunk/ui/columns/src/main/java/org/richfaces/iterator/SimpleForEachIterator.java
trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsHandler.java
trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsTag.java
Log:
Refactoring
Modified: trunk/ui/columns/src/main/java/org/richfaces/el/ELBuilder.java
===================================================================
--- trunk/ui/columns/src/main/java/org/richfaces/el/ELBuilder.java 2008-10-08 11:02:59 UTC
(rev 10691)
+++ trunk/ui/columns/src/main/java/org/richfaces/el/ELBuilder.java 2008-10-08 11:31:59 UTC
(rev 10692)
@@ -1,3 +1,9 @@
+/*
+ * ELBuilder.java Date created: 08.10.2008
+ * Last modified by: $Author$
+ * $Revision$ $Date$
+ */
+
package org.richfaces.el;
import javax.el.ELContext;
@@ -4,25 +10,53 @@
import javax.el.ExpressionFactory;
import javax.el.ValueExpression;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * Class provides EL parsing for filter and sort attributes of columns component.
+ * @author Andrey Markavtsov
+ *
+ */
public class ELBuilder {
+
+ /** Log */
+ Log log = LogFactory.getLog(ELBuilder.class);
+
+ /** Original value expression string */
String orig;
+ /** Result buffer */
StringBuffer res = new StringBuffer("#{");
int l;
+ /** Columns var string */
String var;
+ /** Columns index string */
String index;
+ /** Replacement to change var string */
String varReplacement;
+ /** Replacement to change index string */
String indexReplacement;
int varL;
int indexL;
+
+
+ /**
+ * Constructor
+ * @param orig - original value expression string
+ * @param var - columns var string
+ * @param index - columns index string
+ * @param varR - replacement for var
+ * @param indexR - replacement for index
+ */
public ELBuilder(String orig, String var, String index, String varR,
String indexR) {
this.orig = trimEL(orig);
@@ -36,12 +70,33 @@
}
+ /**
+ * Parsing method
+ * @return String parsing result
+ */
public String parse() {
- internalParse(orig);
- res.append("}");
+ try {
+ internalParse(orig);
+ res.append("}");
+ }catch (Exception e) {
+ log.error("Error occured during ValueExpression parsing. Keep old expression.
" + e);
+ res.append(orig);
+ }
return res.toString();
}
+ /**
+ * Creates new expression using replacements provided
+ * @param expr - original expression
+ * @param expectedType - expected type
+ * @param factory - expression factory
+ * @param elContext - El context
+ * @param var - var string
+ * @param index - index string
+ * @param varR - replacement for var
+ * @param indexR - replacement for index
+ * @return
+ */
public static ValueExpression createValueExpression (String expr, Class<?>
expectedType,ExpressionFactory factory, ELContext elContext, String var, String index,
String varR,
String indexR) {
ELBuilder builder = new ELBuilder(expr, var, index, varR, indexR);
@@ -49,6 +104,11 @@
return factory.createValueExpression(elContext, newExpr, expectedType);
}
+ /**
+ * Removes '#', '{', '}' chars from expression
+ * @param orig - original expression
+ * @return
+ */
public static String trimEL(String orig) {
if (orig.trim().startsWith("#")) {
orig = orig.substring(1).trim();
Modified: trunk/ui/columns/src/main/java/org/richfaces/iterator/ForEachIterator.java
===================================================================
--- trunk/ui/columns/src/main/java/org/richfaces/iterator/ForEachIterator.java 2008-10-08
11:02:59 UTC (rev 10691)
+++ trunk/ui/columns/src/main/java/org/richfaces/iterator/ForEachIterator.java 2008-10-08
11:31:59 UTC (rev 10692)
@@ -17,4 +17,6 @@
public boolean hasNext() throws JspTagException;
public Object next() throws JspTagException;
+
+ public String getVarReplacement();
}
Modified:
trunk/ui/columns/src/main/java/org/richfaces/iterator/SimpleForEachIterator.java
===================================================================
---
trunk/ui/columns/src/main/java/org/richfaces/iterator/SimpleForEachIterator.java 2008-10-08
11:02:59 UTC (rev 10691)
+++
trunk/ui/columns/src/main/java/org/richfaces/iterator/SimpleForEachIterator.java 2008-10-08
11:31:59 UTC (rev 10692)
@@ -201,6 +201,8 @@
// local adapter
class EnumerationAdapter implements ForEachIterator {
private Enumeration e;
+
+ private Object o;
public EnumerationAdapter(Enumeration e) {
this.e = e;
@@ -211,8 +213,15 @@
}
public Object next() {
- return e.nextElement();
+ o = e.nextElement();
+ return o;
}
+
+ public String getVarReplacement() {
+ if (o != null)
+ return o.toString();
+ return null;
+ }
}
return new EnumerationAdapter(e);
@@ -240,4 +249,9 @@
return i.next();
}
+
+ public String getVarReplacement() {
+ return null;
+ }
+
}
Modified: trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsHandler.java
===================================================================
--- trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsHandler.java 2008-10-08
11:02:59 UTC (rev 10691)
+++ trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsHandler.java 2008-10-08
11:31:59 UTC (rev 10692)
@@ -107,6 +107,11 @@
public String valueExpr;
public String getVarReplacement() {
+ if (valueExpr == null) {
+ return String.valueOf(index);
+ }else if (items.getVarReplacement() != null) {
+ return items.getVarReplacement();
+ }
return valueExpr + "[" + _index + "]";
}
Modified: trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsTag.java
===================================================================
--- trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsTag.java 2008-10-08
11:02:59 UTC (rev 10691)
+++ trunk/ui/columns/src/main/java/org/richfaces/taglib/ColumnsTag.java 2008-10-08
11:31:59 UTC (rev 10692)
@@ -89,6 +89,7 @@
/** Column incrementer */
private Integer counter = 0;
+
/**
* style CSS style(s) is/are to be applied when this component is rendered
@@ -341,7 +342,6 @@
@Override
protected void setProperties(UIComponent component) {
ELContext elContext = getContext(pageContext.getELContext());
- String varReplacement = ELBuilder.trimEL(this.__value.getExpressionString()) +
"[" + index + "]";
Field[] fields = this.getClass().getDeclaredFields();
for (Field field : fields) {
try {
@@ -361,7 +361,7 @@
if (!ex.isLiteralText()) {
expr = ELBuilder.createValueExpression(ex.getExpressionString(),
ex.getExpectedType(),
getFacesContext().getApplication().getExpressionFactory(),
pageContext.getELContext(), itemId, indexId,
- varReplacement, String.valueOf(index));
+ getVarReplacement(), String.valueOf(index));
}else {
expr = ex;
}
@@ -387,13 +387,24 @@
if (_sortExpression != null) {
ValueExpression expr =
ELBuilder.createValueExpression(_sortExpression.getExpressionString(),
_sortExpression.getExpectedType(),
getFacesContext().getApplication().getExpressionFactory(),
pageContext.getELContext(), itemId, indexId,
- varReplacement, String.valueOf(index));
+ getVarReplacement(), String.valueOf(index));
component.setValueExpression("sortExpression", expr);
}
}
+ private String getVarReplacement() {
+ if (this.__value == null) {
+ return String.valueOf(index);
+ } else if (items.getVarReplacement() != null) {
+ return items.getVarReplacement();
+ }
+ String varReplacement = ELBuilder.trimEL(this.__value.getExpressionString())
+ + "[" + index + "]";
+ return varReplacement;
+ }
+
/**
* Evaluates expression string for SortExpression attribute using resolved vars nodes.
* @return
@@ -787,7 +798,7 @@
pageContext.removeAttribute(indexId, PageContext.PAGE_SCOPE);
else {
IteratedIndexExpression indexExpression = new IteratedIndexExpression(
- index - begin);
+ index);
VariableMapper vm = pageContext.getELContext()
.getVariableMapper();
if (vm != null) {