You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by ba...@apache.org on 2006/10/30 00:29:39 UTC
svn commit: r469034 - in
/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces:
./ generator/ parse/
Author: baranda
Date: Sun Oct 29 16:29:39 2006
New Revision: 469034
URL: http://svn.apache.org/viewvc?view=rev&rev=469034
Log:
Proper accessors for MyFaces component generator (following the spec)
saveState/restoreState autogeneration
Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/AbstractComponentGenerator.java
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ComponentGenerator.java
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/MyFacesComponentGenerator.java
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/TrinidadComponentGenerator.java
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java Sun Oct 29 16:29:39 2006
@@ -15,41 +15,25 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.ComponentGenerator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.MyFacesComponentGenerator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.TrinidadComponentGenerator;
import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.EventBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.EventRefBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.parse.FacesConfigBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.FacetBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.ComponentFilter;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.FilteredIterator;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.PropertyFilter;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.SourceTemplate;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
-import org.apache.myfaces.trinidadbuild.plugin.faces.generator.ComponentGenerator;
-import org.apache.myfaces.trinidadbuild.plugin.faces.generator.TrinidadComponentGenerator;
-import org.apache.myfaces.trinidadbuild.plugin.faces.generator.MyFacesComponentGenerator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.lang.reflect.Modifier;
+import java.util.Iterator;
/**
* @version $Id$
@@ -232,6 +216,8 @@
if (!suppressListenerMethods)
generator.writeListenerMethods(out, component);
+
+ generator.writeStateManagementMethods(out, component);
generator.writeGetFamily(out);
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/AbstractComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/AbstractComponentGenerator.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/AbstractComponentGenerator.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/AbstractComponentGenerator.java Sun Oct 29 16:29:39 2006
@@ -15,6 +15,7 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.generator;
+import org.apache.maven.plugin.logging.Log;
import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.parse.EventBean;
@@ -25,17 +26,14 @@
import org.apache.myfaces.trinidadbuild.plugin.faces.util.PropertyFilter;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.SourceTemplate;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
-import org.apache.maven.plugin.logging.Log;
import java.io.IOException;
import java.lang.reflect.Modifier;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
@@ -587,18 +585,22 @@
{
out.println(" * Sets " + convertMultilineComment(description));
}
- // TODO: restore this comment.
-// if (property.isRequired())
-// {
-// out.println(" * <p>");
-// out.println(" * This is a required property on the component.");
-// }
- // TODO: put this back in
- //out.println(" * ");
- //out.println(" * @param " + propName + " the new " + propName + " value");
+
+ if (property.isRequired())
+ {
+ out.println(" * <p>");
+ out.println(" * This is a required property on the component.");
+ }
+ out.println(" * ");
+ out.println(" * @param " + propName + " the new " + propName + " value");
out.println(" */");
- out.println("final public void " + setMethod + "(" + propertyClass + " " + propVar + ")");
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+
+ out.println("public void " + setMethod + "(" + propertyClass + " " + propVar + ")");
out.println("{");
out.indent();
writePropertySetterContent(out, property, propertyClass);
@@ -641,9 +643,9 @@
out.println(" * This is a required property on the component.");
out.println(" * </p>");
}
- // TODO: put this back in
- //out.println(" *");
- //out.println(" * @return the new " + propName + " value");
+
+ out.println(" *");
+ out.println(" * @return the new " + propName + " value");
out.println(" */");
if (isUnchecked)
@@ -651,7 +653,12 @@
out.println("@SuppressWarnings(\"unchecked\")");
}
- out.println("final public " + propertyClass + " " + getMethod + "()");
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+
+ out.println("public " + propertyClass + " " + getMethod + "()");
out.println("{");
out.indent();
@@ -661,6 +668,15 @@
out.println("}");
}
+ /**
+ * Whether the getters/setters have the final modifier
+ * @return true if the getters/setters are final
+ */
+ protected boolean isAccessorMethodFinal()
+ {
+ return false;
+ }
+
protected abstract void writePropertyGetterContent(
PrettyWriter out,
PropertyBean property) throws IOException;
@@ -850,6 +866,10 @@
out.unindent();
out.println("}");
}
+
+
+ public abstract void writeStateManagementMethods(PrettyWriter out,
+ ComponentBean component) throws IOException;
public void writeOther(
PrettyWriter out, ComponentBean component) throws IOException
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ComponentGenerator.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ComponentGenerator.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ComponentGenerator.java Sun Oct 29 16:29:39 2006
@@ -70,6 +70,10 @@
PrettyWriter out,
ComponentBean component) throws IOException;
+ void writeStateManagementMethods(
+ PrettyWriter out,
+ ComponentBean component) throws IOException;
+
void writeOther(
PrettyWriter out, ComponentBean component) throws IOException;
}
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/MyFacesComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/MyFacesComponentGenerator.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/MyFacesComponentGenerator.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/MyFacesComponentGenerator.java Sun Oct 29 16:29:39 2006
@@ -16,12 +16,14 @@
package org.apache.myfaces.trinidadbuild.plugin.faces.generator;
import org.apache.maven.plugin.logging.Log;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
import java.io.IOException;
+import java.util.Iterator;
+import java.util.Set;
/**
* Component generator for MyFaces
@@ -36,9 +38,11 @@
super(log);
}
- protected void writeConstructorContent(PrettyWriter out, ComponentBean component, int modifiers, String rendererType) throws IOException
+
+ protected void addSpecificImports(Set imports, ComponentBean component)
{
- out.println("setRendererType("+rendererType+");");
+ imports.add("javax.faces.context.FacesContext");
+ imports.add("javax.el.ValueExpression");
}
public void writePropertyDeclaration(PrettyWriter out,
@@ -54,6 +58,30 @@
out.println("private " + propertyClass + " " + fieldPropName + ";");
}
+ public void writeStateManagementMethods(PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ if (!component.hasProperties())
+ {
+ return;
+ }
+
+ writeSaveState(out,component);
+ writeRestoreState(out,component);
+ }
+
+ public void writePropertyListMethods(
+ PrettyWriter out,
+ PropertyBean property) throws IOException
+ {
+ // nothing
+ }
+
+ protected void writeConstructorContent(PrettyWriter out, ComponentBean component, int modifiers, String rendererType) throws IOException
+ {
+ out.println("setRendererType("+rendererType+");");
+ }
+
protected void writePropertySetterContent(PrettyWriter out,
PropertyBean property,
String propertyClass) throws IOException
@@ -64,13 +92,99 @@
protected void writePropertyGetterContent(PrettyWriter out,
PropertyBean property) throws IOException
{
- out.println("return this."+property.getFieldPropertyName()+";");
+ String varName = property.getFieldPropertyName();
+ String propName = property.getPropertyName();
+ String propFullClass = property.getPropertyClass();
+ String propClass = Util.getClassFromFullClass(propFullClass);
+
+ out.println("if ("+varName+" != null)");
+ out.println("{");
+ out.indent();
+ out.println("return "+property.getFieldPropertyName()+";");
+ out.unindent();
+ out.println("}");
+ out.println("ValueExpression expression = getValueExpression(\""+propName+"\");");
+ out.println("if (expression != null)");
+ out.println("{");
+ out.indent();
+ out.println("return "+_castIfNecessary(propClass)+"expression.getValue(getFacesContext().getELContext());");
+ out.unindent();
+ out.println("}");
+ out.println("return null;");
}
- public void writePropertyListMethods(
- PrettyWriter out,
- PropertyBean property) throws IOException
+ protected void writeSaveState(PrettyWriter out,
+ ComponentBean component) throws IOException
{
- // nothing
+ String arrayName = "values";
+ int arraySize = component.propertiesSize() + 1;
+
+ out.println();
+ out.println("@Override");
+ out.println("public Object[] saveState(FacesContext facesContext)");
+ out.println("{");
+ out.indent();
+ out.println("Object[] "+arrayName+" = new Object["+arraySize+"];");
+
+ out.println(arrayName+"["+0+"] = super.saveState(facesContext);");
+
+ int propIndex = 1;
+
+ for (Iterator iterator = component.properties(); iterator.hasNext();)
+ {
+ PropertyBean property = (PropertyBean) iterator.next();
+ String varName = property.getFieldPropertyName();
+
+ out.println(arrayName+"["+propIndex+"] = "+varName+";");
+ propIndex++;
+ }
+
+ out.println();
+ out.println("return "+arrayName+";");
+ out.unindent();
+ out.println("}");
+ }
+
+ protected void writeRestoreState(PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ String arrayName = "values";
+
+ out.println();
+ out.println("@Override");
+ out.println("public void restoreState(FacesContext facesContext, Object state)");
+ out.println("{");
+ out.indent();
+
+ out.println("Object[] "+arrayName+" = (Object[])state;");
+ out.println("super.restoreState(facesContext,"+arrayName+"[0]);");
+
+ int propIndex = 1;
+
+ for (Iterator iterator = component.properties(); iterator.hasNext();)
+ {
+ PropertyBean property = (PropertyBean) iterator.next();
+
+ String varName = property.getFieldPropertyName();
+ String propFullClass = property.getPropertyClass();
+ String propClass = Util.getClassFromFullClass(propFullClass);
+
+ out.println(varName + " = " + _castIfNecessary(propClass)
+ + arrayName + "[" + propIndex + "];");
+ propIndex++;
+ }
+
+ out.unindent();
+ out.println("}");
+ }
+
+ private static String _castIfNecessary(String propClass)
+ {
+ if (propClass.equals("Object") || propClass.equals("java.lang.Object"))
+ {
+ return "";
+ }
+
+ return "("+propClass+")";
}
}
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/TrinidadComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/TrinidadComponentGenerator.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/TrinidadComponentGenerator.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/TrinidadComponentGenerator.java Sun Oct 29 16:29:39 2006
@@ -16,19 +16,19 @@
package org.apache.myfaces.trinidadbuild.plugin.faces.generator;
import org.apache.maven.plugin.logging.Log;
+import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.FilteredIterator;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.PropertyFilter;
import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
import java.io.IOException;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
public class TrinidadComponentGenerator extends AbstractComponentGenerator
{
@@ -134,7 +134,18 @@
protected void writePropertyDeclaration(PrettyWriter out, PropertyBean property) throws IOException
{
- // nothing
+ // nothing by default
+ }
+
+
+ /**
+ * Whether the getters/setters have the final modifier
+ *
+ * @return true if the getters/setters are final
+ */
+ protected boolean isAccessorMethodFinal()
+ {
+ return true;
}
protected void writePropertySetterContent(PrettyWriter out,
@@ -211,6 +222,11 @@
"getProperty(" + propKey + ");");
}
}
+ }
+
+ public void writeStateManagementMethods(PrettyWriter out, ComponentBean component) throws IOException
+ {
+ // nothing to do here
}
public void writePropertyListMethods(
Modified: incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java?view=diff&rev=469034&r1=469033&r2=469034
==============================================================================
--- incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java (original)
+++ incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java Sun Oct 29 16:29:39 2006
@@ -15,17 +15,15 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.parse;
-import java.lang.reflect.Modifier;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.CompoundIterator;
+import javax.xml.namespace.QName;
+import java.lang.reflect.Modifier;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Logger;
-import javax.xml.namespace.QName;
-
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.CompoundIterator;
-
/**
* ComponentBean is a Java representation of the faces-config component
* XML element.
@@ -479,6 +477,15 @@
properties = new CompoundIterator(parent.properties(true), properties);
}
return properties;
+ }
+
+ /**
+ * Number of properties for this component
+ * @return num of properties
+ */
+ public int propertiesSize()
+ {
+ return _properties.size();
}
/**