[richfaces-svn-commits] JBoss Rich Faces SVN: r4906 - in trunk/cdk/generator/src/main: java/org/ajax4jsf/templatecompiler/el and 2 other directories.
richfaces-svn-commits at lists.jboss.org
richfaces-svn-commits at lists.jboss.org
Tue Dec 18 15:25:07 EST 2007
Author: sergeyhalipov
Date: 2007-12-18 15:25:07 -0500 (Tue, 18 Dec 2007)
New Revision: 4906
Modified:
trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/builder/AbstractCompilationContext.java
trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/el/ELCompiler.java
trunk/cdk/generator/src/main/resources/META-INF/templates/templatecompiler/ComponentTemplate.vm
trunk/cdk/generator/src/main/resources/META-INF/templates12/templatecompiler/ComponentTemplate.vm
Log:
Templates generator changed, added support for:
1. relational operators < <= > >= == != and their alphabetic variants lt le gt ge eq ne.
2. logical operators && || ! and their alphabetic variants and or not.
3. the empty operator.
4. the ternary ?: selection operator.
Modified: trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/builder/AbstractCompilationContext.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/builder/AbstractCompilationContext.java 2007-12-18 19:40:59 UTC (rev 4905)
+++ trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/builder/AbstractCompilationContext.java 2007-12-18 20:25:07 UTC (rev 4906)
@@ -83,6 +83,7 @@
private static String[] defaultImports = new String[] {
"java.util.Iterator", "java.util.Collection",
+ "java.util.Map",
"java.io.IOException", "javax.faces.component.UIComponent",
"javax.faces.context.FacesContext",
"javax.faces.context.ResponseWriter",
Modified: trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/el/ELCompiler.java
===================================================================
--- trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/el/ELCompiler.java 2007-12-18 19:40:59 UTC (rev 4905)
+++ trunk/cdk/generator/src/main/java/org/ajax4jsf/templatecompiler/el/ELCompiler.java 2007-12-18 20:25:07 UTC (rev 4906)
@@ -36,20 +36,34 @@
import org.apache.commons.logging.LogFactory;
import com.sun.el.parser.ArithmeticNode;
+import com.sun.el.parser.AstAnd;
import com.sun.el.parser.AstBracketSuffix;
+import com.sun.el.parser.AstChoice;
import com.sun.el.parser.AstDeferredExpression;
import com.sun.el.parser.AstDiv;
import com.sun.el.parser.AstDotSuffix;
+import com.sun.el.parser.AstEmpty;
+import com.sun.el.parser.AstEqual;
+import com.sun.el.parser.AstFalse;
import com.sun.el.parser.AstFunction;
+import com.sun.el.parser.AstGreaterThan;
+import com.sun.el.parser.AstGreaterThanEqual;
import com.sun.el.parser.AstIdentifier;
import com.sun.el.parser.AstInteger;
+import com.sun.el.parser.AstLessThan;
+import com.sun.el.parser.AstLessThanEqual;
import com.sun.el.parser.AstLiteralExpression;
import com.sun.el.parser.AstMinus;
import com.sun.el.parser.AstMod;
import com.sun.el.parser.AstMult;
+import com.sun.el.parser.AstNot;
+import com.sun.el.parser.AstNotEqual;
+import com.sun.el.parser.AstOr;
import com.sun.el.parser.AstPlus;
import com.sun.el.parser.AstString;
+import com.sun.el.parser.AstTrue;
import com.sun.el.parser.AstValue;
+import com.sun.el.parser.BooleanNode;
import com.sun.el.parser.ELParser;
import com.sun.el.parser.Node;
@@ -179,6 +193,18 @@
componentBean);
} else if (node instanceof AstDeferredExpression) {
+ } else if (node instanceof BooleanNode) {
+ returnValue = processingBooleanNode((BooleanNode) node,
+ sbMain, componentBean);
+ } else if (node instanceof AstNot) {
+ returnValue = processingNot((AstNot) node,
+ sbMain, componentBean);
+ } else if (node instanceof AstChoice) {
+ returnValue = processingChoice((AstChoice) node,
+ sbMain, componentBean);
+ } else if (node instanceof AstEmpty) {
+ returnValue = processingEmpty((AstEmpty) node,
+ sbMain, componentBean);
} else {
StringBuffer sb = new StringBuffer();
sb.append(node.toString());
@@ -190,8 +216,204 @@
return returnValue;
}
+
+ /**
+ * Processing 'empty' node
+ *
+ * @param node
+ * @param sb
+ * @param cMain
+ * @return
+ */
+ private boolean processingEmpty(AstEmpty node, StringBuffer sbMain,
+ CompilationContext componentBean) {
+ boolean returnValue = false;
+ StringBuffer sb1 = new StringBuffer();
+
+ Node node1 = node.jjtGetChild(0);
+ if (null != node1) {
+ if (!(returnValue = processingNode(node1, sb1,
+ componentBean))) {
+ log.error("Error processing node1: "
+ + node1.getImage());
+ }
+ }
+
+ if (returnValue) {
+ sbMain.append(" isEmpty( ");
+ sbMain.append(sb1);
+ sbMain.append(" ) ");
+ }
+
+ return returnValue;
+ }
+
/**
+ * Processing 'choice' node
+ *
+ * @param node
+ * @param sb
+ * @param cMain
+ * @return
+ */
+ private boolean processingChoice(AstChoice node, StringBuffer sbMain,
+ CompilationContext componentBean) {
+ boolean returnValue = true;
+
+ StringBuffer sb1 = new StringBuffer();
+ StringBuffer sb2 = new StringBuffer();
+ StringBuffer sb3 = new StringBuffer();
+
+ Node node1 = node.jjtGetChild(0);
+
+ if (node1 != null) {
+ if (!(returnValue &= processingNode(node1, sb1,
+ componentBean))) {
+ log.error("Error processing node1: "
+ + node1.getImage());
+ }
+ }
+
+ Node node2 = node.jjtGetChild(1);
+
+ if (null != node2) {
+ if (!(returnValue &= processingNode(node2, sb2,
+ componentBean))) {
+ log.error("Error processing node2: "
+ + node2.getImage());
+ }
+ }
+
+ Node node3 = node.jjtGetChild(2);
+
+ if (null != node3) {
+ if (!(returnValue &= processingNode(node3, sb3,
+ componentBean))) {
+ log.error("Error processing node3: "
+ + node3.getImage());
+ }
+ }
+
+ if (returnValue) {
+ sbMain.append(" ( ");
+ sbMain.append(sb1);
+ sbMain.append(" ? ");
+ sbMain.append(sb2);
+ sbMain.append(" : ");
+ sbMain.append(sb3);
+ sbMain.append(" ) ");
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * Processing node containing 'not' expression
+ *
+ * @param node
+ * @param sb
+ * @param cMain
+ * @return
+ */
+ private boolean processingNot(AstNot node, StringBuffer sbMain,
+ CompilationContext componentBean) {
+ boolean returnValue = false;
+ StringBuffer sb1 = new StringBuffer();
+
+ Node node1 = node.jjtGetChild(0);
+
+ if (null != node1) {
+ if (!(returnValue = processingNode(node1, sb1,
+ componentBean))) {
+ log.error("Error processing node1: "
+ + node1.getImage());
+ }
+ }
+
+ if (returnValue) {
+ sbMain.append(" ( ! ");
+ sbMain.append(sb1);
+ sbMain.append(" ) ");
+ }
+
+ return returnValue;
+ }
+
+ /**
+ * Processing boolean node
+ *
+ * @param node
+ * @param sb
+ * @param cMain
+ * @return
+ */
+ private boolean processingBooleanNode(BooleanNode node,
+ StringBuffer sb, CompilationContext componentBean) {
+ boolean returnValue = true;
+
+ StringBuffer sb1 = new StringBuffer();
+ StringBuffer sb2 = new StringBuffer();
+
+ if (node instanceof AstFalse) {
+ sb.append(" false ");
+ return returnValue;
+ }
+ if (node instanceof AstTrue) {
+ sb.append(" true ");
+ return returnValue;
+ }
+
+ Node node1 = node.jjtGetChild(0);
+
+ if (node1 != null) {
+ if (!(returnValue &= processingNode(node1, sb1,
+ componentBean))) {
+ log.error("Error processing node1: "
+ + node1.getImage());
+ }
+ }
+
+ Node node2 = node.jjtGetChild(1);
+
+ if (null != node2) {
+ if (!(returnValue &= processingNode(node2, sb2,
+ componentBean))) {
+ log.error("Error processing node2: "
+ + node2.getImage());
+ }
+ }
+
+ if (returnValue) {
+ sb.append(" ( ");
+ sb.append(sb1);
+
+ if (node instanceof AstAnd) {
+ sb.append(" && ");
+ } else if (node instanceof AstEqual) {
+ sb.append(" == ");
+ } else if (node instanceof AstGreaterThan) {
+ sb.append(" > ");
+ } else if (node instanceof AstGreaterThanEqual) {
+ sb.append(" >= ");
+ } else if (node instanceof AstLessThan) {
+ sb.append(" < ");
+ } else if (node instanceof AstLessThanEqual) {
+ sb.append(" <= ");
+ } else if (node instanceof AstNotEqual) {
+ sb.append(" != ");
+ } else if (node instanceof AstOr) {
+ sb.append(" || ");
+ }
+ sb.append(sb2);
+ sb.append(" ) ");
+ }
+
+ return returnValue;
+ }
+
+
+ /**
* Processing arithmetic node
*
* @param node
@@ -204,29 +426,30 @@
StringBuffer sb1 = new StringBuffer();
StringBuffer sb2 = new StringBuffer();
- boolean returnValue = false;
+ boolean returnValue = true;
Node node1 = node.jjtGetChild(0);
if (node1 != null) {
- if (!(returnValue = processingNode(node.jjtGetChild(0), sb1,
+ if (!(returnValue &= processingNode(node1, sb1,
componentBean))) {
log.error("Error processing node1: "
- + node.jjtGetChild(0).getImage());
+ + node1.getImage());
}
}
+
+ Node node2 = node.jjtGetChild(1);
- if (!(returnValue = processingNode(node.jjtGetChild(1), sb2,
- componentBean))) {
- log.error("Error processing node2: "
- + node.jjtGetChild(1).getImage());
+ if (null != node2) {
+ if (!(returnValue &= processingNode(node2, sb2,
+ componentBean))) {
+ log.error("Error processing node2: "
+ + node2.getImage());
+ }
}
if (returnValue) {
- if (node1 != null) {
- sb.append(" ( ");
- }
-
+ sb.append(" ( ");
sb.append(sb1);
if (node instanceof AstDiv) {
@@ -242,10 +465,7 @@
}
sb.append(sb2);
-
- if (node1 != null) {
- sb.append(" ) ");
- }
+ sb.append(" ) ");
}
return returnValue;
}
@@ -371,7 +591,7 @@
}
return sb.toString();
}
-
+
/**
*
* @param clazz
Modified: trunk/cdk/generator/src/main/resources/META-INF/templates/templatecompiler/ComponentTemplate.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates/templatecompiler/ComponentTemplate.vm 2007-12-18 19:40:59 UTC (rev 4905)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates/templatecompiler/ComponentTemplate.vm 2007-12-18 20:25:07 UTC (rev 4906)
@@ -38,6 +38,7 @@
#else
import java.util.Iterator;
import java.util.Collection;
+import java.util.Map;
import java.io.IOException;
import javax.faces.component.UIComponent;
@@ -96,6 +97,25 @@
return b!=Long.MIN_VALUE?String.valueOf(b):"";
}
+ private boolean isEmpty(Object o) {
+ if (null == o) {
+ return true;
+ }
+ if (o instanceof String ) {
+ return (0 == ((String)o).length());
+ }
+ if (o instanceof Collection) {
+ return (0 == ((Collection)o).size());
+ }
+ if (o instanceof Map) {
+ return (0 == ((Map)o).size());
+ }
+ if (o.getClass().isArray()) {
+ return (0 == ((Object [])o).length);
+ }
+ return false;
+ }
+
/**
* Get base component class, targetted for this renderer. Used for check arguments in decode/encode.
* @return
Modified: trunk/cdk/generator/src/main/resources/META-INF/templates12/templatecompiler/ComponentTemplate.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates12/templatecompiler/ComponentTemplate.vm 2007-12-18 19:40:59 UTC (rev 4905)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates12/templatecompiler/ComponentTemplate.vm 2007-12-18 20:25:07 UTC (rev 4906)
@@ -38,6 +38,7 @@
#else
import java.util.Iterator;
import java.util.Collection;
+import java.util.Map;
import java.io.IOException;
import javax.faces.component.UIComponent;
@@ -96,6 +97,25 @@
return b!=Long.MIN_VALUE?String.valueOf(b):"";
}
+ private boolean isEmpty(Object o) {
+ if (null == o) {
+ return true;
+ }
+ if (o instanceof String ) {
+ return (0 == ((String)o).length());
+ }
+ if (o instanceof Collection) {
+ return (0 == ((Collection)o).size());
+ }
+ if (o instanceof Map) {
+ return (0 == ((Map)o).size());
+ }
+ if (o.getClass().isArray()) {
+ return (0 == ((Object [])o).length);
+ }
+ return false;
+ }
+
/**
* Get base component class, targetted for this renderer. Used for check arguments in decode/encode.
* @return
More information about the richfaces-svn-commits
mailing list