[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