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/11/30 20:21:29 UTC
svn commit: r481056 [2/4] - in
/incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces:
./ generator/ generator/component/ generator/taglib/ parse/ util/
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java?view=diff&rev=481056&r1=481055&r2=481056
==============================================================================
--- incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java Thu Nov 30 12:21:26 2006
@@ -15,24 +15,20 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-
-import java.lang.reflect.Modifier;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeSet;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.taglib.ComponentTagGenerator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.taglib.MyFacesComponentTagGenerator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.taglib.TagAttributeFilter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.taglib.TrinidadComponentTagGenerator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.*;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.*;
+import org.codehaus.plexus.util.FileUtils;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
@@ -40,38 +36,12 @@
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.*;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
-
-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.ConverterBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.FacesConfigBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.MethodSignatureBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ValidatorBean;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.ComponentFilter;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.ConverterFilter;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.FilteredIterator;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.ValidatorFilter;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.XIncludeFilter;
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.project.MavenProject;
-
-import org.codehaus.plexus.util.FileUtils;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
+import java.io.*;
+import java.lang.reflect.Modifier;
+import java.util.*;
/**
* @version $Id$
@@ -631,7 +601,7 @@
}
else
{
- ComponentTagGenerator componentGen = new ComponentTagGenerator();
+ ComponentTagHandlerGenerator componentGen = new ComponentTagHandlerGenerator();
ConverterTagGenerator converterGen = new ConverterTagGenerator();
ValidatorTagGenerator validatorGen = new ValidatorTagGenerator();
int count = 0;
@@ -1474,1105 +1444,206 @@
}
}
- class ComponentTagGenerator
- {
- public void generateTagHandler(
- ComponentBean component)
- {
- String fullClassName = component.getTagClass();
-
- try
- {
- getLog().debug("Generating " + fullClassName);
-
- String sourcePath = Util.convertClassToSourcePath(fullClassName, ".java");
- File targetFile = new File(generatedSourceDirectory, sourcePath);
-
- targetFile.getParentFile().mkdirs();
- StringWriter sw = new StringWriter();
- PrettyWriter out = new PrettyWriter(sw);
-
- String className = Util.getClassFromFullClass(fullClassName);
- String packageName = Util.getPackageFromFullClass(fullClassName);
- String fullSuperclassName = component.findJspTagSuperclass();
- if (fullSuperclassName == null)
- throw new IllegalArgumentException("Missing JSP Tag superclass");
- String superclassName = Util.getClassFromFullClass(fullSuperclassName);
- if (superclassName.equals(className))
- superclassName = fullSuperclassName;
- String componentFullClass = component.getComponentClass();
- String componentClass = Util.getClassFromFullClass(componentFullClass);
-
- // header/copyright
- writePreamble(out);
-
- // package
- out.println("package " + packageName + ";");
-
- // TODO: eliminate <mfp:tag-class-modifier> metadata
- int modifiers = component.getTagClassModifiers();
- String classStart = Modifier.toString(modifiers);
+ class ComponentTagHandlerGenerator {
- out.println();
- _writeImports(out, fullSuperclassName, superclassName,
- componentFullClass, component);
-
- out.println("/**");
- // TODO: remove this blank line.
- out.println();
- out.println(" * Auto-generated tag class.");
- out.println(" */");
-
- // TODO: use canonical ordering
- classStart = classStart.replaceAll("public abstract", "abstract public");
- out.println(classStart + " class " + className +
- " extends " + superclassName);
- out.println("{");
- out.indent();
-
- _writeConstructor(out, component);
+ private Set initComponentList(ComponentBean component, String fullSuperclassName) {
+ Set _componentList = new HashSet();
+ _componentList.add(component);
+ ComponentBean lBean = component;
+ while ((lBean = lBean.resolveSupertype()) != null && !fullSuperclassName.equals(lBean.getTagClass())) {
+ getLog().debug(component.getComponentType()+": Add additional Tags from: " + lBean.getComponentType());
+ _componentList.add(lBean);
+ }
+ return _componentList;
+ }
+
+ public void generateTagHandler(ComponentBean component) {
+ ComponentTagGenerator generator;
+ Set componentList;
+
+ String fullSuperclassName = component.findJspTagSuperclass();
+ if (fullSuperclassName == null) {
+ getLog().warn("Missing JSP Tag superclass for component: " + component.getComponentClass()
+ + ", generation of this Tag is skipped");
+ return;
+ }
+ componentList = initComponentList(component, fullSuperclassName);
+
+ String fullClassName = component.getTagClass();
+ try {
+ getLog().debug("Generating " + fullClassName);
+
+ String sourcePath = Util.convertClassToSourcePath(fullClassName, ".java");
+ File targetFile = new File(generatedSourceDirectory, sourcePath);
+
+ targetFile.getParentFile().mkdirs();
+ StringWriter sw = new StringWriter();
+ PrettyWriter out = new PrettyWriter(sw);
+
+ if (component.isTrinidadComponent()) {
+ generator = new TrinidadComponentTagGenerator(_is12());
+ } else {
+ generator = new MyFacesComponentTagGenerator(_is12());
+ }
+
+ String className = Util.getClassFromFullClass(fullClassName);
+ String packageName = Util.getPackageFromFullClass(fullClassName);
+
+ // header/copyright
+ writePreamble(out);
+
+ // package
+ out.println("package " + packageName + ";");
+
+ out.println();
+
+ String superclassName = Util.getClassFromFullClass(fullSuperclassName);
+ if (superclassName.equals(className)) {
+ superclassName = fullSuperclassName;
+ }
+ String componentFullClass = component.getComponentClass();
+ String componentClass = Util.getClassFromFullClass(componentFullClass);
+
+ generator.writeImports(out, null, packageName, fullSuperclassName, superclassName, componentList);
+
+ generator.writeClassBegin(out, className, superclassName, component, null);
+
+ int modifiers = component.getTagClassModifiers();
+ generator.writeConstructor(out, component, modifiers);
+
+
+ if (!Modifier.isAbstract(modifiers)) {
+ generator.writeGetComponentType(out, component);
+ generator.writeGetRendererType(out, component);
+ }
+ generator.writePropertyMembers(out, componentList);
+ generator.writeSetPropertiesMethod(out, componentClass, componentList);
+ generator.writeReleaseMethod(out, componentList);
+
+ generator.writeClassEnd(out);
+ out.close();
+
+ // delay write in case of error
+ // timestamp should not be updated when an error occurs
+ // delete target file first, because it is readonly
+ targetFile.delete();
+ FileWriter fw = new FileWriter(targetFile);
+ StringBuffer buf = sw.getBuffer();
+ fw.write(buf.toString());
+ fw.close();
+ targetFile.setReadOnly();
+ }
+ catch (Throwable e)
+ {
+ getLog().error("Error generating " + fullClassName, e);
+ }
+ }
+ }
- if (!Modifier.isAbstract(modifiers))
- {
- _writeGetComponentType(out, component);
- _writeGetRendererType(out, component);
- }
- _writePropertyMethods(out, component);
- _writeSetProperties(out, componentClass, component);
- _writeRelease(out, component);
+ private boolean _is12()
+ {
+ return "1.2".equals(jsfVersion) || "12".equals(jsfVersion);
+ }
- out.unindent();
- out.println("}");
- out.close();
+ private class IfComponentModifiedFilter extends ComponentFilter
+ {
+ protected boolean accept(
+ ComponentBean component)
+ {
+ String tagClass = component.getTagClass();
+ String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
+ String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
+ File targetFile = new File(generatedSourceDirectory, sourcePath);
+ File templateFile = new File(templateSourceDirectory, templatePath);
- // delay write in case of error
- // timestamp should not be updated when an error occurs
- // delete target file first, because it is readonly
- targetFile.delete();
- FileWriter fw = new FileWriter(targetFile);
- StringBuffer buf = sw.getBuffer();
- fw.write(buf.toString());
- fw.close();
- targetFile.setReadOnly();
- }
- catch (Throwable e)
- {
- getLog().error("Error generating " + fullClassName, e);
- }
+ // accept if templateFile is newer or component has been modified
+ return (templateFile.lastModified() > targetFile.lastModified() ||
+ component.isModifiedSince(targetFile.lastModified()));
}
+ }
- private void _writeImports(
- PrettyWriter out,
- String fullSuperclassName,
- String superclassName,
- String componentFullClass,
- ComponentBean component)
+ private class IfConverterModifiedFilter extends ConverterFilter
+ {
+ protected boolean accept(
+ ConverterBean converter)
{
- Set imports = new TreeSet();
-
- Iterator properties = component.properties();
- properties = new FilteredIterator(properties, new TagAttributeFilter());
- if (properties.hasNext())
- {
- imports.add(componentFullClass);
- }
-
- imports.add("org.apache.myfaces.trinidad.bean.FacesBean");
-
- // TODO: remove these imports
- // FIXME: Actually last 2 can be kept when not abstract
- //imports.add("javax.faces.component.UIComponent");
-
- // superclassName is fully qualified if it collides
- // with the generated class name and should not be
- // imported when such a collision would occur
- if (!superclassName.equals(fullSuperclassName))
- imports.add(fullSuperclassName);
-
- while (properties.hasNext())
- {
- PropertyBean property = (PropertyBean)properties.next();
+ String tagClass = converter.getTagClass();
+ String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
+ String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
+ File targetFile = new File(generatedSourceDirectory, sourcePath);
+ File templateFile = new File(templateSourceDirectory, templatePath);
- String propertyClass = property.getPropertyClass();
- String[] propertyClassParams = property.getPropertyClassParameters();
+ // accept if templateFile is newer or component has been modified
+ return (templateFile.lastModified() > targetFile.lastModified() ||
+ converter.isModifiedSince(targetFile.lastModified()));
+ }
+ }
- if (propertyClass != null && property.isLiteralOnly())
- {
- // Import the property class only if only litterals are supported
- // otherwise the class will be a String inside the tag to support
- // ValueBinding
- imports.add(propertyClass);
- }
+ private class IfValidatorModifiedFilter extends ValidatorFilter
+ {
+ protected boolean accept(
+ ValidatorBean validator)
+ {
+ String tagClass = validator.getTagClass();
+ String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
+ String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
+ File targetFile = new File(generatedSourceDirectory, sourcePath);
+ File templateFile = new File(templateSourceDirectory, templatePath);
- imports.add("javax.el.ValueExpression");
+ // accept if templateFile is newer or component has been modified
+ return (templateFile.lastModified() > targetFile.lastModified() ||
+ validator.isModifiedSince(targetFile.lastModified()));
+ }
+ }
- if (_isKeyStroke(propertyClass))
- {
- if (_is12())
- imports.add("javax.el.ValueExpression");
- else
- imports.add("javax.faces.el.ValueBinding");
- imports.add("javax.swing.KeyStroke");
- }
- else if (_isAWTKeyStroke(propertyClass))
- {
- if (_is12())
- imports.add("javax.el.ValueExpression");
- else
- imports.add("javax.faces.el.ValueBinding");
- imports.add("java.awt.AWTKeyStroke");
- }
- else if (_isConverter(propertyClass))
- {
- if (_is12())
- imports.add("javax.el.ValueExpression");
- else
- imports.add("javax.faces.el.ValueBinding");
- imports.add("javax.faces.convert.Converter");
- }
- else if (property.isVirtual())
- {
- if (_is12())
- imports.add("javax.el.ValueExpression");
- else
- imports.add("javax.faces.el.ValueBinding");
- imports.add("org.apache.myfaces.trinidadinternal.taglib.util.VirtualAttributeUtils");
- }
- else if (_isColorList(propertyClass, propertyClassParams))
- {
- if (_is12())
- imports.add("javax.el.ValueExpression");
- else
- imports.add("javax.faces.el.ValueBinding");
- imports.add("java.text.ParseException");
- imports.add("org.apache.myfaces.trinidadinternal.taglib.util.TagUtils");
- }
- else if (property.isMethodBinding())
- {
- if (_is12())
- {
- imports.add("javax.el.MethodExpression");
- imports.add("org.apache.myfaces.trinidadinternal.taglib.util.MethodExpressionMethodBinding");
- }
- else
- {
- imports.add("javax.faces.el.MethodBinding");
- }
- }
- else if (property.isMethodExpression())
- {
- imports.add("javax.el.MethodExpression");
- }
+ /**
+ * @parameter expression="${project}"
+ * @required
+ * @readonly
+ */
+ private MavenProject project;
- // TODO: restore import and make reference to
- // ConstantMethodBinding relative rather
- // than absolute
- //if (property.isMethodBinding() &&
- // isStringMethodBindingReturnType(property))
- //{
- // imports.add("org.apache.myfaces.trinidadinternal.taglib.ConstantMethodBinding");
- //}
- }
+ /**
+ * @parameter
+ * @required
+ */
+ private Map taglibs;
- // do not import implicit!
- imports.removeAll(Util.PRIMITIVE_TYPES);
+ /**
+ * @parameter expression="META-INF/maven-faces-plugin/faces-config.xml"
+ * @required
+ * @readonly
+ */
+ private String resourcePath;
- String tagClass = component.getTagClass();
- String packageName = Util.getPackageFromFullClass(tagClass);
- writeImports(out, packageName, imports);
- }
+ /**
+ * @parameter expression="src/main/conf"
+ * @required
+ */
+ private File configSourceDirectory;
- private void _writeConstructor(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- String fullClassName = component.getTagClass();
- String className = Util.getClassFromFullClass(fullClassName);
- out.println();
- out.println("/**");
- // TODO: restore this correctly phrased comment (tense vs. command)
- //out.println(" * Constructs an instance of " + className + ".");
- out.println(" * Construct an instance of the " + className + ".");
- out.println(" */");
- out.println("public " + className + "()");
- out.println("{");
- out.println("}");
- }
+ /**
+ * @parameter expression="src/main/java-templates"
+ * @required
+ */
+ private File templateSourceDirectory;
- private void _writeGetComponentType(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- String componentType = component.getComponentType();
- out.println();
- out.println("@Override");
- out.println("public String getComponentType()");
- out.println("{");
- out.indent();
- out.println("return \"" + componentType + "\";");
- out.unindent();
- out.println("}");
- }
+ /**
+ * @parameter expression="${project.build.directory}/maven-faces-plugin/main/java"
+ * @required
+ */
+ private File generatedSourceDirectory;
- private void _writeGetRendererType(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- String rendererType = component.getRendererType();
- out.println();
- out.println("@Override");
- out.println("public String getRendererType()");
- out.println("{");
- out.indent();
- out.println("return " + convertStringToLiteral(rendererType) + ";");
- out.unindent();
- out.println("}");
- }
-
- private void _writeRelease(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- Iterator properties = component.properties();
- properties = new FilteredIterator(properties, new TagAttributeFilter());
- // TODO: remove special case for UIXFormTag
- if (properties.hasNext() ||
- "org.apache.myfaces.trinidadinternal.taglib.UIXFormTag".equals(component.getTagClass()))
- {
- out.println();
- out.println("@Override");
- out.println("public void release()");
- out.println("{");
- out.indent();
- out.println("super.release();");
- while (properties.hasNext())
- {
- PropertyBean property = (PropertyBean)properties.next();
- String propName = property.getPropertyName();
- String propVar = "_" + Util.getVariableFromName(propName);
- out.println(propVar + " = null;");
- }
- out.unindent();
- out.println("}");
- }
- }
-
- private void _writePropertyMethods(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- Iterator properties = component.properties();
- properties = new FilteredIterator(properties, new TagAttributeFilter());
- while (properties.hasNext())
- {
- PropertyBean property = (PropertyBean)properties.next();
- out.println();
- _writePropertyMember(out, property);
- _writePropertySet(out, property);
- }
- }
-
- private void _writePropertyMembers(
- PrettyWriter out,
- ComponentBean component) throws IOException
- {
- Iterator properties = component.properties();
- properties = new FilteredIterator(properties, new TagAttributeFilter());
- if (properties.hasNext())
- {
- out.println();
- while (properties.hasNext())
- {
- PropertyBean property = (PropertyBean)properties.next();
- _writePropertyMember(out, property);
- }
- }
- }
-
- private void _writePropertyMember(
- PrettyWriter out,
- PropertyBean property) throws IOException
- {
- String propName = property.getPropertyName();
- String propVar = "_" + Util.getVariableFromName(propName);
- String jspPropType = _getJspPropertyType(property);
-
- out.println("private " + jspPropType + " " + propVar + ";");
- }
-
- private String _getJspPropertyType(PropertyBean property)
- {
- if (property.isMethodExpression())
- return "MethodExpression";
-
- if (_is12() && property.isMethodBinding())
- return "MethodExpression";
-
- if (_is12() && !property.isLiteralOnly())
- return "ValueExpression";
- return "String";
- }
-
- private void _writePropertySet(
- PrettyWriter out,
- PropertyBean property) throws IOException
- {
- String propName = property.getPropertyName();
- String jspPropName = property.getJspPropertyName();
- String propVar = Util.getVariableFromName(propName);
- String setMethod = Util.getPrefixedPropertyName("set", jspPropName);
- String jspPropType = _getJspPropertyType(property);
-
- // TODO: restore coding standards, and make final
- out.println("public void " + setMethod + "(" + jspPropType + " " + propVar + ")");
- out.println("{");
- out.indent();
- out.println("_" + propVar + " = " + propVar + ";");
- out.unindent();
- out.println("}");
- }
-
- private void _writeSetProperties(
- PrettyWriter out,
- String componentClass,
- ComponentBean component) throws IOException
- {
- Iterator properties = component.properties();
- properties = new FilteredIterator(properties, new TagAttributeFilter());
- // TODO: only write out setProperties when properties exist
- // if (properties.hasNext())
- // {
- out.println();
- out.println("@Override");
- out.println("protected void setProperties(");
- out.indent();
- out.println("FacesBean bean)");
- out.unindent();
- out.println("{");
- out.indent();
- out.println("super.setProperties(bean);");
-
- while (properties.hasNext())
- {
- PropertyBean property = (PropertyBean)properties.next();
- _writeSetPropertiesCase(out, componentClass, property);
- }
- out.unindent();
- out.println("}");
- // }
- }
-
- private void _writeSetPropertiesCase(
- PrettyWriter out,
- String componentClass,
- PropertyBean property) throws IOException
- {
- String propName = property.getPropertyName();
- String propClass = property.getPropertyClass();
- String propVar = "_" + Util.getVariableFromName(propName);
-
- if (property.isVirtual())
- {
- _writeVirtualSetMethod(out, componentClass, propName);
- }
- else if (property.isMethodBinding())
- {
- _writeSetMethodBinding(out, componentClass, property);
- }
- else if (property.isMethodExpression())
- {
- _writeSetMethodExpression(out, componentClass, property);
- }
- else if (_isKeyStroke(propClass))
- {
- _writeSetKeyStroke(out, componentClass, propName);
- }
- else if (_isAWTKeyStroke(propClass))
- {
- _writeSetAWTKeyStroke(out, componentClass, propName);
- }
- else if (_isColorList(propClass, property.getPropertyClassParameters()))
- {
- _writeSetColorList(out, componentClass, propName);
- }
- else if (_isConverter(propClass))
- {
- _writeSetConverter(out, componentClass, propName);
- }
- else if (property.isLiteralOnly())
- {
- _writeSetLiteral(out, componentClass, propName, propClass, propVar);
- }
- else //if (_hasPropertySetter(property))
- {
- _writeSetProperty(out, componentClass, propName, propClass, propVar);
- }
- // else
- // {
- // _writeSetValueBinding(out, componentClass, propName, propVar);
- // }
- }
-
- /**
- * Returns true if this property is a complex Object.
- *
- * @return true if this property is a complex Object,
- * otherwise false
- */
- private boolean _hasPropertySetter(
- PropertyBean property)
- {
- String propertyClass = property.getPropertyClass();
- return (Util.PRIMITIVE_TYPES.contains(propertyClass) ||
- "java.lang.Object".equals(propertyClass) ||
- "java.lang.String".equals(propertyClass) ||
- "java.lang.String[]".equals(propertyClass));
- }
-
- private boolean _isConverter(
- String propClass)
- {
- return ("javax.faces.convert.Converter".equals(propClass));
- }
-
- private String[] _getAccessKeyPropertyKeys(
- String componentClass,
- String propName)
- {
- String[] propKeys = new String[2];
-
- int offset = propName.indexOf("AndAccessKey");
- if (offset != -1)
- {
- String mainProp = propName.substring(0, offset);
- propKeys[0] = componentClass + "." +
- Util.getConstantNameFromProperty(mainProp, "_KEY");
- propKeys[1] = componentClass + "." +
- Util.getConstantNameFromProperty("accessKey", "_KEY");
- }
-
- return propKeys;
- }
-
- private boolean _isKeyStroke(
- String propClass)
- {
- return ("javax.swing.KeyStroke".equals(propClass));
- }
-
- private boolean _isAWTKeyStroke(
- String propClass)
- {
- return ("java.awt.AWTKeyStroke".equals(propClass));
- }
-
- private boolean _isColorList(
- String propClass,
- String[] propClassParams)
- {
- return ("java.util.List".equals(propClass) &&
- propClassParams.length == 1 &&
- "java.awt.Color".equals(propClassParams[0]));
- }
-
- private void _writeSetLiteral(
- PrettyWriter out,
- String componentClass,
- String propName,
- String propFullClass,
- String propVar)
- {
- String propClass = Util.getClassFromFullClass(propFullClass);
- String boxedClass = Util.getBoxedClass(propClass);
- if ((!_is12() && !boxedClass.equals(propClass)) ||
- "java.util.Date".equals(propFullClass) ||
- (boxedClass.indexOf("[]") != -1))
- {
- // TODO: reject value binding expressions for literal-only
- _writeSetProperty(out, componentClass, propName, propFullClass, propVar);
- }
- else
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- out.println("bean.setProperty(" +
- componentClass + "." + propKey + ", " +
- propVar + ");" );
- }
- }
-
- private void _writeSetProperty(
- PrettyWriter out,
- String componentClass,
- String propName,
- String propFullClass,
- String propVar)
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propClass = Util.getClassFromFullClass(propFullClass);
- String boxedClass = Util.getBoxedClass(propClass);
- String setProperty = "setProperty";
- if ((!_is12() && !boxedClass.equals(propClass)) ||
- "java.lang.Number".equals(propFullClass) ||
- "java.util.Date".equals(propFullClass) ||
- (boxedClass.indexOf("[]") != -1))
- {
- String propType = boxedClass.replaceAll("\\[\\]", "Array");
- setProperty = Util.getPrefixedPropertyName("set", propType + "Property");
- }
-
- out.println(setProperty + "(bean, " +
- componentClass + "." + propKey + ", " +
- propVar + ");" );
- }
-
- private void _writeSetValueBinding(
- PrettyWriter out,
- String componentClass,
- String propName,
- String propVar)
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", " +
- "createValueBinding(" + propVar + "));" );
- }
-
- private void _writeVirtualSetMethod(
- PrettyWriter out,
- String componentClass,
- String propName) throws IOException
- {
- String[] propKeys = _getAccessKeyPropertyKeys(componentClass, propName);
-
- String propVar = "_" + propName;
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
-
- if (_is12())
- {
- out.println("if (!" + propVar + ".isLiteralText())");
- out.println("{");
- out.indent();
- out.println("VirtualAttributeUtils.setAccessKeyAttribute(");
- out.indent();
- out.println("bean,");
- out.println(propVar + ",");
- out.println(propKeys[0] + ",");
- out.println(propKeys[1] + ");");
- out.unindent();
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Object o = " + propVar + ".getValue(null);");
- out.println("if (o != null)");
- out.indent();
- out.println("VirtualAttributeUtils.setAccessKeyAttribute(");
- out.indent();
- out.println("bean,");
- out.println("o.toString(),");
- out.println(propKeys[0] + ",");
- out.println(propKeys[1] + ");");
- out.unindent();
- out.unindent();
- out.unindent();
- out.println("}");
- }
- else
- {
- out.println("if (isValueReference(" + propVar + "))");
- out.println("{");
- out.indent();
- out.println("ValueBinding vb = createValueBinding(" + propVar + ");");
- out.println("VirtualAttributeUtils.setAccessKeyAttribute(");
- out.indent();
- out.println("bean,");
- out.println("vb,");
- out.println(propKeys[0] + ",");
- out.println(propKeys[1] + ");");
- out.unindent();
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("VirtualAttributeUtils.setAccessKeyAttribute(");
- out.indent();
- out.println("bean,");
- out.println(propVar + ",");
- out.println(propKeys[0] + ",");
- out.println(propKeys[1] + ");");
- out.unindent();
- out.unindent();
- out.println("}");
- }
-
- out.unindent();
- out.println("}");
- }
-
- private void _writeSetMethodBinding(
- PrettyWriter out,
- String componentClass,
- PropertyBean property) throws IOException
- {
- String propName = property.getPropertyName();
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
- if (_is12())
- {
- out.println("if (" + propVar + " != null)");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ", " +
- "new MethodExpressionMethodBinding(" + propVar + "));");
- out.unindent();
- }
- else
- {
- MethodSignatureBean signature = property.getMethodBindingSignature();
- String[] paramTypes = (signature != null) ? signature.getParameterTypes() : null;
-
- String classArray;
-
- if (paramTypes == null || paramTypes.length == 0)
- {
- classArray = "new Class[0]";
- }
- else
- {
- StringBuffer sb = new StringBuffer();
- sb.append("new Class[]{");
- for (int i=0; i < paramTypes.length; i++)
- {
- if (i > 0)
- sb.append(',');
- sb.append(paramTypes[i]);
- sb.append(".class");
- }
-
- // TODO: remove trailing comma
- sb.append(',');
-
- sb.append('}');
- classArray = sb.toString();
- }
-
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
-
- if (isStringMethodBindingReturnType(signature))
- {
- out.println("MethodBinding mb;");
- out.println("if (isValueReference(" + propVar + "))");
- out.indent();
- out.println("mb = createMethodBinding(" + propVar + ", " + classArray + ");");
- out.unindent();
- out.println("else");
- out.indent();
- out.println("mb = new org.apache.myfaces.trinidadinternal.taglib.ConstantMethodBinding(" + propVar + ");");
- out.unindent();
- }
- else
- {
- // never a literal, no need for ConstantMethodBinding
- out.println("MethodBinding mb = createMethodBinding(" + propVar + ", " +
- classArray + ");");
- }
-
- out.println("bean.setProperty(" + componentClass + "." + propKey + ", mb);");
- out.unindent();
- out.println("}");
- }
- }
-
- private void _writeSetMethodExpression(
- PrettyWriter out,
- String componentClass,
- PropertyBean property) throws IOException
- {
- String propName = property.getPropertyName();
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
- out.println("bean.setProperty(" + componentClass + "." + propKey + ", " +
- propVar + ");");
- }
-
- private void _writeSetKeyStroke(
- PrettyWriter out,
- String componentClass,
- String propName) throws IOException
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
-
- if (_is12())
- {
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- out.println("if (!" + propVar + ".isLiteralText())");
- out.println("{");
- out.indent();
- out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Object val = " + propVar + ".getValue(null);");
- out.println("if (val != null)");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println("\tKeyStroke.getKeyStroke(val.toString()));");
- out.unindent();
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- else
- {
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- out.println("if (isValueReference(" + propVar + "))");
- out.println("{");
- out.indent();
- out.println("ValueBinding vb = createValueBinding(" + propVar + ");");
- out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println("\tKeyStroke.getKeyStroke(" + propVar + "));");
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- }
-
-
- private void _writeSetAWTKeyStroke(
- PrettyWriter out,
- String componentClass,
- String propName) throws IOException
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
- if (_is12())
- {
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- out.println("if (!" + propVar + ".isLiteralText())");
- out.println("{");
- out.indent();
- out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Object val = " + propVar + ".getValue(null);");
- out.println("if (val != null)");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println("\tAWTKeyStroke.getAWTKeyStroke(val.toString()));");
- out.unindent();
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- else
- {
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- out.println("if (isValueReference(" + propVar + "))");
- out.println("{");
- out.indent();
- out.println("ValueBinding vb = createValueBinding(" + propVar + ");");
- out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println("\tAWTKeyStroke.getAWTKeyStroke(" + propVar + "));");
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- }
-
-
-
- private void _writeSetColorList(
- PrettyWriter out,
- String componentClass,
- String propName) throws IOException
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- if (_is12())
- {
- out.println("if (!" + propVar + ".isLiteralText())");
- out.println("{");
- out.indent();
- out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Object o = " + propVar + ".getValue(null);");
- out.println("if (o != null)");
- out.indent();
- out.println("{");
- out.println("try");
- out.println("{");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println(" TagUtils.getColorList(o.toString()));");
- out.unindent();
- out.println("}");
- out.println("catch (ParseException pe)");
- out.println("{");
- out.indent();
- out.println("setValidationError(");
- out.println(" pe.getMessage() + \": \" + \"Position \" + pe.getErrorOffset());");
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- else
- {
- out.println("if (isValueReference(" + propVar + "))");
- out.println("{");
- out.indent();
- out.println("ValueBinding vb = createValueBinding(" + propVar + ");");
- out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("try");
- out.println("{");
- out.indent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ",");
- out.println(" TagUtils.getColorList(" + propVar + "));");
- out.unindent();
- out.println("}");
- out.println("catch (ParseException pe)");
- out.println("{");
- out.indent();
- out.println("setValidationError(");
- out.println(" pe.getMessage() + \": \" + \"Position \" + pe.getErrorOffset());");
- out.unindent();
- out.println("}");
- out.unindent();
- out.println("}");
- }
- out.unindent();
- out.println("}");
- }
-
-
- private void _writeSetConverter(
- PrettyWriter out,
- String componentClass,
- String propName) throws IOException
- {
- String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
- String propVar = "_" + propName;
-
- out.println("if (" + propVar + " != null)");
- out.println("{");
- out.indent();
- if (_is12())
- {
- out.println("if (!" + propVar + ".isLiteralText())");
- out.println("{");
- out.indent();
- out.println("bean.setValueExpression(" + componentClass + "." + propKey + ", " + propVar + ");");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Object o = " + propVar + ".getValue(null);");
- out.println("if (o != null)");
- out.println("{");
-
- out.indent();
- out.println("Converter converter = getFacesContext().getApplication().");
- out.indent();
- out.println("createConverter(o.toString());");
- out.unindent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ", converter);");
-
- out.unindent();
- out.println("}");
-
- out.unindent();
- out.println("}");
- }
- else
- {
- out.println("if (isValueReference(" + propVar + "))");
- out.println("{");
- out.indent();
- out.println("ValueBinding vb = createValueBinding(" + propVar + ");");
- out.println("bean.setValueBinding(" + componentClass + "." + propKey + ", vb);");
- out.unindent();
- out.println("}");
- out.println("else");
- out.println("{");
- out.indent();
- out.println("Converter converter = getFacesContext().getApplication().");
- out.indent();
- out.println("createConverter(" + propVar + ");");
- out.unindent();
- out.println("bean.setProperty(" + componentClass + "." + propKey + ", converter);");
- out.unindent();
- out.println("}");
- }
- out.unindent();
- out.println("}");
- }
- }
-
- private boolean isStringMethodBindingReturnType(
- MethodSignatureBean sig)
- {
- return (sig != null && "java.lang.String".equals(sig.getReturnType()));
- }
-
- private boolean _is12()
- {
- return "1.2".equals(jsfVersion) || "12".equals(jsfVersion);
- }
-
- private class IfComponentModifiedFilter extends ComponentFilter
- {
- protected boolean accept(
- ComponentBean component)
- {
- String tagClass = component.getTagClass();
- String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
- String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
- File targetFile = new File(generatedSourceDirectory, sourcePath);
- File templateFile = new File(templateSourceDirectory, templatePath);
-
- // accept if templateFile is newer or component has been modified
- return (templateFile.lastModified() > targetFile.lastModified() ||
- component.isModifiedSince(targetFile.lastModified()));
- }
- }
-
- private class IfConverterModifiedFilter extends ConverterFilter
- {
- protected boolean accept(
- ConverterBean converter)
- {
- String tagClass = converter.getTagClass();
- String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
- String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
- File targetFile = new File(generatedSourceDirectory, sourcePath);
- File templateFile = new File(templateSourceDirectory, templatePath);
-
- // accept if templateFile is newer or component has been modified
- return (templateFile.lastModified() > targetFile.lastModified() ||
- converter.isModifiedSince(targetFile.lastModified()));
- }
- }
-
- private class IfValidatorModifiedFilter extends ValidatorFilter
- {
- protected boolean accept(
- ValidatorBean validator)
- {
- String tagClass = validator.getTagClass();
- String sourcePath = Util.convertClassToSourcePath(tagClass, ".java");
- String templatePath = Util.convertClassToSourcePath(tagClass, "Template.java");
- File targetFile = new File(generatedSourceDirectory, sourcePath);
- File templateFile = new File(templateSourceDirectory, templatePath);
-
- // accept if templateFile is newer or component has been modified
- return (templateFile.lastModified() > targetFile.lastModified() ||
- validator.isModifiedSince(targetFile.lastModified()));
- }
- }
-
- /**
- * @parameter expression="${project}"
- * @required
- * @readonly
- */
- private MavenProject project;
-
- /**
- * @parameter
- * @required
- */
- private Map taglibs;
-
- /**
- * @parameter expression="META-INF/maven-faces-plugin/faces-config.xml"
- * @required
- * @readonly
- */
- private String resourcePath;
-
- /**
- * @parameter expression="src/main/conf"
- * @required
- */
- private File configSourceDirectory;
-
- /**
- * @parameter expression="src/main/java-templates"
- * @required
- */
- private File templateSourceDirectory;
-
- /**
- * @parameter expression="${project.build.directory}/maven-faces-plugin/main/java"
- * @required
- */
- private File generatedSourceDirectory;
-
- /**
- * @parameter expression="${project.build.directory}/maven-faces-plugin/main/resources"
- * @required
- */
- private File generatedResourcesDirectory;
+ /**
+ * @parameter expression="${project.build.directory}/maven-faces-plugin/main/resources"
+ * @required
+ */
+ private File generatedResourcesDirectory;
/**
* @parameter
- * @required
*/
- private String packageContains;
+ private String packageContains = "";
/**
* @parameter
Added: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java?view=auto&rev=481056
==============================================================================
--- incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java (added)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java Thu Nov 30 12:21:26 2006
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.trinidadbuild.plugin.faces.generator;
+
+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.util.SourceTemplate;
+
+import java.io.IOException;
+import java.util.Collection;
+
+/**
+ * Generator
+ *
+ * @author Bruno Aranda (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public interface ClassGenerator
+{
+ void writeImports(
+ PrettyWriter out,
+ SourceTemplate template,
+ String packageName,
+ String fullSuperclassName,
+ String superclassName,
+ ComponentBean component);
+
+ void writeImports(
+ PrettyWriter out,
+ SourceTemplate template,
+ String packageName,
+ String fullSuperclassName,
+ String superclassName,
+ Collection components);
+
+ void writeClassBegin(
+ PrettyWriter out,
+ String className,
+ String superclassName,
+ ComponentBean component,
+ SourceTemplate template);
+
+ void writeConstructor(
+ PrettyWriter out,
+ ComponentBean component,
+ int modifiers) throws IOException;
+
+ void writeClassEnd(
+ PrettyWriter out);
+
+}
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java?view=auto&rev=481056
==============================================================================
--- incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java (added)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java Thu Nov 30 12:21:26 2006
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.trinidadbuild.plugin.faces.generator;
+
+import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.Filter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.FilteredIterator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
+
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * TODO: comment this!
+ *
+ * @author Bruno Aranda (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class GeneratorHelper
+{
+ private GeneratorHelper()
+ {
+ }
+
+ public static boolean isConverter(
+ String propClass)
+ {
+ return ("javax.faces.convert.Converter".equals(propClass));
+ }
+
+ public static boolean isKeyStroke(
+ String propClass)
+ {
+ return ("javax.swing.KeyStroke".equals(propClass));
+ }
+
+ public static boolean isAWTKeyStroke(
+ String propClass)
+ {
+ return ("java.awt.AWTKeyStroke".equals(propClass));
+ }
+
+ public static boolean isColorList(
+ String propClass,
+ String[] propClassParams)
+ {
+ return ("java.util.List".equals(propClass) &&
+ propClassParams.length == 1 &&
+ "java.awt.Color".equals(propClassParams[0]));
+ }
+
+ public static boolean isAction(PropertyBean property)
+ {
+ return (property.getClass().equals("javax.el.MethodExpression")
+ && property.getJspPropertyName().equals("action"));
+ }
+
+ public static boolean isActionListener(PropertyBean property, boolean is12)
+ {
+ return (property.getJspPropertyName().equals("actionListener") &&
+ ((property.isMethodExpression()) || (is12 && property.isMethodBinding())));
+ }
+
+ public static boolean isValueChangeListener(PropertyBean property, boolean is12)
+ {
+ return (property.getJspPropertyName().equals("valueChangeListener") &&
+ ((property.isMethodExpression()) || (is12 && property.isMethodBinding())));
+ }
+
+ public static boolean isValidator(PropertyBean property, boolean is12)
+ {
+ return (property.getJspPropertyName().equals("validator")) &&
+ ((property.isMethodExpression()) || (is12 && property.isMethodBinding()));
+ }
+
+ static public void writeImports(
+ PrettyWriter out,
+ String packageName,
+ Set imports)
+ {
+ Iterator iterator = imports.iterator();
+ iterator = new FilteredIterator(iterator,
+ new PackageImportsFilter(packageName));
+ while (iterator.hasNext())
+ {
+ String className = (String) iterator.next();
+ out.println("import " + className + ";");
+ }
+
+ out.println();
+ }
+
+ public static class PackageImportsFilter implements Filter
+ {
+ public PackageImportsFilter(
+ String packageName)
+ {
+ _packageName = packageName;
+ }
+
+ public boolean accept(
+ Object object)
+ {
+ String className = (String) object;
+ String packageName = Util.getPackageFromFullClass(className);
+ return (!packageName.equals(_packageName) &&
+ !packageName.equals("java.lang"));
+ }
+
+ private final String _packageName;
+ }
+
+ public static String getJspPropertyType(PropertyBean property, boolean is12)
+ {
+ if (property.isMethodExpression())
+ return "MethodExpression";
+
+ if (is12 && property.isMethodBinding())
+ return "MethodExpression";
+
+ if (is12 && !property.isLiteralOnly())
+ return "ValueExpression";
+ return "String";
+ }
+}
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java?view=auto&rev=481056
==============================================================================
--- incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java (added)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java Thu Nov 30 12:21:26 2006
@@ -0,0 +1,974 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.myfaces.trinidadbuild.plugin.faces.generator.component;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.myfaces.trinidadbuild.plugin.faces.generator.GeneratorHelper;
+import org.apache.myfaces.trinidadbuild.plugin.faces.io.PrettyWriter;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.*;
+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 java.io.IOException;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public abstract class AbstractComponentGenerator implements ComponentGenerator
+{
+
+ private Log _log;
+ boolean _is12;
+
+ public AbstractComponentGenerator(Log log, boolean is12)
+ {
+ _log = log;
+ _is12 = is12;
+ }
+
+ protected Log getLog()
+ {
+ return _log;
+ }
+
+ public void writeClassBegin(
+ PrettyWriter out,
+ String className,
+ String superclassName,
+ ComponentBean component,
+ SourceTemplate template)
+ {
+ out.println("/**");
+
+ // TODO: restore description (needs escaping?)
+// String description = component.getDescription();
+// if (description != null)
+// {
+// out.println(" *");
+// out.println(" * " + convertMultilineComment(description));
+// }
+
+ String longDescription = component.getLongDescription();
+ if (longDescription != null)
+ {
+ out.println(" *");
+ out.println(" * " + convertMultilineComment(longDescription));
+ }
+
+ if (component.hasEvents(true))
+ {
+ // the events javadoc
+ out.println(" *");
+ out.println(" * <h4>Events:</h4>");
+ out.println(" * <table border=\"1\" width=\"100%\" cellpadding=\"3\" summary=\"\">");
+ out.println(" * <tr bgcolor=\"#CCCCFF\" class=\"TableHeadingColor\">");
+ out.println(" * <th align=\"left\">Type</th>");
+ out.println(" * <th align=\"left\">Phases</th>");
+ out.println(" * <th align=\"left\">Description</th>");
+ out.println(" * </tr>");
+ Iterator events = component.events(true);
+ while (events.hasNext())
+ {
+ EventRefBean eventRef = (EventRefBean) events.next();
+ EventBean event = eventRef.resolveEventType();
+ if (event != null)
+ {
+ String eventClass = event.getEventClass();
+ String[] eventPhases = eventRef.getEventDeliveryPhases();
+ String eventDescription = event.getDescription();
+ out.println(" * <tr class=\"TableRowColor\">");
+ out.println(" * <td valign=\"top\"><code>" + eventClass + "</code></td>");
+ out.print(" * <td valign=\"top\" nowrap>");
+ if (eventPhases != null)
+ {
+ for (int i = 0; i < eventPhases.length; i++)
+ {
+ if (i > 0)
+ out.print("<br>");
+ out.print(eventPhases[i]);
+ }
+ }
+ out.println("</td>");
+ out.println(" * <td valign=\"top\">" + eventDescription + "</td>");
+ out.println(" * </tr>");
+ }
+ }
+ out.println(" * </table>");
+ }
+
+ if (!component.hasChildren())
+ {
+ out.println(" * <p>");
+ out.println(" * It does not support any children.");
+ }
+
+ out.println(" */");
+
+ // TODO: eliminate <mfp:component-class-modifier> metadata
+ int modifiers = component.getComponentClassModifiers();
+ String classStart = Modifier.toString(modifiers);
+ // TODO: use canonical ordering
+ classStart = classStart.replaceAll("public abstract", "abstract public");
+ out.println(classStart + " class " + className +
+ " extends " + superclassName);
+
+ Set interfaces = new HashSet();
+ if (template != null)
+ interfaces.addAll(template.getImplements());
+
+ if (component.isNamingContainer())
+ interfaces.add("javax.faces.component.NamingContainer");
+
+ Iterator events = component.events();
+ while (events.hasNext())
+ {
+ EventRefBean eventRef = (EventRefBean) events.next();
+ EventBean event = eventRef.resolveEventType();
+ if (event != null)
+ {
+ if (!eventRef.isIgnoreSourceInterface())
+ {
+ String source = event.getEventSourceInterface();
+ if (source != null)
+ interfaces.add(Util.getClassFromFullClass(source));
+ }
+ }
+ }
+
+ if (!interfaces.isEmpty())
+ {
+ Set implementsSet = new HashSet();
+ for (Iterator iter = interfaces.iterator(); iter.hasNext();)
+ {
+ String fcqn = (String) iter.next();
+ implementsSet.add(Util.getClassFromFullClass(fcqn));
+ }
+
+ // implements clause spans multiple lines
+ char[] indent = new char[classStart.length() +
+ " class ".length() +
+ className.length() + 1];
+ Arrays.fill(indent, ' ');
+ out.print(indent);
+ out.print("implements ");
+ for (Iterator iter = implementsSet.iterator(); iter.hasNext();)
+ {
+ out.print((String) iter.next());
+ if (iter.hasNext())
+ {
+ out.println(",");
+ out.print(indent);
+ out.print(" "); // same length as "implements "
+ }
+ }
+ out.println();
+ }
+
+ out.println("{");
+ out.indent();
+ }
+
+ public void writeClassEnd(
+ PrettyWriter out)
+ {
+ out.unindent();
+ out.println("}");
+ }
+
+
+ public void writeImports(PrettyWriter out, SourceTemplate template, String packageName, String fullSuperclassName,
+ String superclassName, Collection components)
+ {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ public void writeImports(
+ PrettyWriter out,
+ SourceTemplate template,
+ String packageName,
+ String fullSuperclassName,
+ String superclassName,
+ ComponentBean component)
+ {
+ Set imports = new TreeSet();
+
+ // Use the template imports
+ if (template != null)
+ imports.addAll(template.getImports());
+
+ // Detect NamingContainer
+ if (component.isNamingContainer())
+ imports.add("javax.faces.component.NamingContainer");
+
+ Iterator properties = component.properties();
+ properties = new FilteredIterator(properties, new NonVirtualFilter());
+ // PropertyKey only needed if there are properties
+ if (properties.hasNext())
+ {
+ while (properties.hasNext())
+ {
+ PropertyBean property = (PropertyBean) properties.next();
+ String propertyClass = property.getPropertyClass();
+ if (propertyClass != null)
+ {
+ imports.add(propertyClass);
+ // Check for generics
+ String[] types = property.getAttributeClassParameters();
+ if (types != null)
+ {
+ for (int i = types.length - 1; i >= 0; i--)
+ {
+ addGenericImports(imports, types[i]);
+ }
+ }
+ }
+ }
+ }
+
+ Iterator facets = component.facets();
+ // UIComponent needed if there are facets
+ if (facets.hasNext())
+ imports.add("javax.faces.component.UIComponent");
+
+ Iterator events = component.events();
+ while (events.hasNext())
+ {
+ EventRefBean eventRef = (EventRefBean) events.next();
+ EventBean event = eventRef.resolveEventType();
+
+ if (event == null)
+ {
+ getLog().warn("Unknown event type \"" + eventRef.getEventType() + "\"" +
+ " in component:" + component.getComponentType());
+ }
+ else
+ {
+ String listenerClass = event.getEventListenerClass();
+ if (listenerClass != null)
+ imports.add(listenerClass);
+
+ if (!eventRef.isIgnoreSourceInterface())
+ {
+ String sourceInterface = event.getEventSourceInterface();
+ if (sourceInterface != null)
+ imports.add(sourceInterface);
+ }
+ }
+ }
+
+ // Import causes a collision if className and superclassName are equal
+ if (!superclassName.equals(fullSuperclassName))
+ {
+ String superPackageName = Util.getPackageFromFullClass(fullSuperclassName);
+ // component superclass only needed if not in
+ // same package as component class
+ if (superPackageName != packageName)
+ imports.add(fullSuperclassName);
+ }
+
+ // add other imports (generator specific)
+ addSpecificImports(imports, component);
+
+ // do not import implicit types!
+ imports.removeAll(Util.PRIMITIVE_TYPES);
+
+ GeneratorHelper.writeImports(out, packageName, imports);
+ }
+
+ protected void addSpecificImports(
+ Set imports,
+ ComponentBean component)
+ {
+ // nothing by default
+ }
+
+ public void addGenericImports(Set imports, String type)
+ {
+ Matcher matcher = _GENERIC_TYPE.matcher(type);
+ if (matcher.matches())
+ {
+ // Generic type
+ imports.add(matcher.group(1));
+ String[] types = matcher.group(2).split(",");
+ for (int i = types.length - 1; i >= 0; i--)
+ {
+ addGenericImports(imports, types[i]);
+ }
+ }
+ else
+ {
+ // Non-generic type
+ imports.add(type);
+ }
+ }
+
+ public void writeGenericConstants(
+ PrettyWriter out,
+ String componentFamily,
+ String componentType) throws IOException
+ {
+ out.println();
+ out.println("static public final String COMPONENT_FAMILY =");
+ out.println(" \"" + componentFamily + "\";");
+ out.println("static public final String COMPONENT_TYPE =");
+ out.println(" \"" + componentType + "\";");
+ }
+
+ public void writePropertyConstants(
+ PrettyWriter out,
+ String superclassName,
+ ComponentBean component) throws IOException
+ {
+ // nothing
+ }
+
+ public void writePropertyValueConstants(
+ PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ // component property keys
+ Iterator properties = component.properties();
+ properties = new FilteredIterator(properties, new NonVirtualFilter());
+ while (properties.hasNext())
+ {
+ PropertyBean property = (PropertyBean) properties.next();
+ String[] propertyValues = property.getPropertyValues();
+
+ if (propertyValues != null)
+ {
+ String propName = property.getPropertyName();
+
+ for (int i = 0; i < propertyValues.length; i++)
+ {
+ String propValue = propertyValues[i];
+ String propValueName = propName +
+ Character.toUpperCase(propValue.charAt(0)) +
+ propValue.substring(1);
+ String propValueKey = Util.getConstantNameFromProperty(propValueName);
+
+ out.println("static public final String " + propValueKey + " = \"" + propValue + "\";");
+ }
+
+ }
+ }
+ }
+
+ public void writeFacetConstants(
+ PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ Iterator facets = component.facets();
+ while (facets.hasNext())
+ {
+ FacetBean facet = (FacetBean) facets.next();
+ String facetName = facet.getFacetName();
+ String facetKey = Util.getConstantNameFromProperty(facetName, "_FACET");
+ out.println("static public final " +
+ "String " + facetKey + " = \"" + facetName + "\";");
+ }
+ }
+
+ protected String convertStringToBoxedLiteral(
+ String className,
+ String value)
+ {
+ if (value == null)
+ {
+ return null;
+ }
+ else if ("String".equals(className))
+ {
+ return "\"" + value.replaceAll("\'", "\\'") + "\"";
+ }
+ else if ("boolean".equals(className))
+ {
+ return ("true".equals(value)) ? "Boolean.TRUE" : "Boolean.FALSE";
+ }
+ else if ("char".equals(className))
+ {
+ return "new Character('" + value.replaceAll("\'", "\\'") + "')";
+ }
+ else if ("int".equals(className))
+ {
+ return "new Integer(" + value + ")";
+ }
+ else if ("float".equals(className))
+ {
+ return "new Float(" + value + ")";
+ }
+ else
+ {
+ throw new IllegalStateException();
+ }
+ }
+
+ public void writeConstructor(
+ PrettyWriter out,
+ ComponentBean component,
+ int modifiers) throws IOException
+ {
+ String fullClassName = component.getComponentClass();
+ String className = Util.getClassFromFullClass(fullClassName);
+
+ if (Modifier.isPublic(modifiers))
+ {
+ // TODO: eliminate this inconsistency
+ if (!Modifier.isAbstract(component.getComponentClassModifiers()))
+ {
+ String rendererType = component.getRendererType();
+
+ if (rendererType != null)
+ rendererType = convertStringToBoxedLiteral("String", rendererType);
+
+ out.println();
+ out.println("/**");
+ // TODO: restore this correctly phrased comment (tense vs. command)
+ //out.println(" * Constructs an instance of " + className + ".");
+ out.println(" * Construct an instance of the " + className + ".");
+ out.println(" */");
+ out.println("public " + className + "()");
+ out.println("{");
+ out.indent();
+
+ writeConstructorContent(out, component, modifiers, rendererType);
+
+ out.unindent();
+ out.println("}");
+ }
+ }
+ else if (Modifier.isProtected(modifiers))
+ {
+ out.println();
+ out.println("/**");
+ // TODO: restore this more descriptive comment with param docs
+ //out.println(" * Construct an instance of the " + className);
+ //out.println(" * with the specified renderer type.");
+ //out.println(" * ");
+ //out.println(" * @param rendererType the renderer type");
+ out.println(" * Construct an instance of the " + className + ".");
+ out.println(" */");
+ out.println("protected " + className + "(");
+ out.indent();
+ out.println("String rendererType");
+ out.println(")");
+ out.unindent();
+ out.println("{");
+ out.indent();
+
+ writeConstructorContent(out, component, modifiers, "rendererType");
+
+ out.unindent();
+ out.println("}");
+
+ // TODO: eliminate this inconsistency
+ if (Modifier.isAbstract(component.getComponentClassModifiers()))
+ {
+ out.println();
+ out.println("/**");
+ // TODO: restore this correctly phrased comment (tense vs. command)
+ //out.println(" * Constructs an instance of " + className + ".");
+ out.println(" * Construct an instance of the " + className + ".");
+ out.println(" */");
+ out.println("protected " + className + "()");
+ out.println("{");
+ out.indent();
+ out.println("this(null);");
+ out.unindent();
+ out.println("}");
+ }
+ }
+ }
+
+ protected abstract void writeConstructorContent(
+ PrettyWriter out,
+ ComponentBean component,
+ int modifiers, String rendererType) throws IOException;
+
+ public void writeGetFamily(
+ PrettyWriter out) throws IOException
+ {
+ out.println();
+ out.println("@Override");
+ out.println("public String getFamily()");
+ out.println("{");
+ out.indent();
+ out.println("return COMPONENT_FAMILY;");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writePropertyMethods(
+ PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ writePropertyMethods(out, component, null);
+ }
+
+
+ public void writePropertyMethods(PrettyWriter out, ComponentBean component, Collection ignoreList)
+ throws IOException
+ {
+ Iterator properties = component.properties();
+ properties = new FilteredIterator(properties, new NonVirtualFilter());
+ while (properties.hasNext())
+ {
+ PropertyBean property = (PropertyBean) properties.next();
+ if (property.isList())
+ writePropertyListMethods(out, property, ignoreList);
+ else
+ {
+ writePropertyDeclaration(out, property);
+ writePropertyGet(out, property, ignoreList);
+ writePropertySet(out, property, ignoreList);
+ if (GeneratorHelper.isValidator(property, _is12))
+ {
+ writePropertyListMethods(out, property, ignoreList);
+ }
+ }
+ }
+ }
+
+ abstract protected void writePropertyListMethods(
+ PrettyWriter out,
+ PropertyBean property,
+ Collection inoreList) throws IOException;
+
+ abstract protected void writePropertyListMethods(
+ PrettyWriter out,
+ PropertyBean property) throws IOException;
+
+ static protected String getSingular(String plural)
+ {
+ if (plural.endsWith("s"))
+ return plural.substring(0, plural.length() - 1);
+ return plural;
+ }
+
+ protected abstract void writePropertyDeclaration(
+ PrettyWriter out,
+ PropertyBean property) throws IOException;
+
+ protected void writePropertySet(
+ PrettyWriter out,
+ PropertyBean property,
+ Collection ignoreList) throws IOException
+ {
+ String propertyClass = Util.getPropertyClass(property);
+ writePropertySet(out, property, propertyClass, ignoreList);
+
+ if (property.getAlternateClass() != null)
+ {
+ String alternateClass = Util.getAlternatePropertyClass(property);
+ writePropertySet(out, property, alternateClass, ignoreList);
+ }
+ }
+
+ protected void writePropertySet(
+ PrettyWriter out,
+ PropertyBean property,
+ String propertyClass,
+ Collection ignoreList) throws IOException
+ {
+ String propName = property.getPropertyName();
+ String propVar = Util.getVariableFromName(propName);
+ String description = property.getDescription();
+ String setMethod = Util.getPrefixedPropertyName("set", propName);
+ if (ignoreList != null && ignoreList.contains(setMethod))
+ {
+ return;
+ }
+ out.println();
+ out.println("/**");
+ if (description != null)
+ {
+ out.println(" * Sets " + convertMultilineComment(description));
+ }
+
+ if (property.isRequired())
+ {
+ out.println(" * <p>");
+ out.println(" * This is a required property on the component.");
+ }
+ out.println(" * ");
+ out.println(" * @param " + Util.getVariableFromName(propName) + " the new " + propName + " value");
+ if (property.isMethodBinding() && _is12)
+ {
+ out.println(" * @deprecated");
+ }
+ out.println(" */");
+
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+
+ out.println("public void " + setMethod + "(" + propertyClass + " " + propVar + ")");
+ out.println("{");
+ out.indent();
+ writePropertySetterMethodBody(out, property, propertyClass);
+ out.unindent();
+ out.println("}");
+ }
+
+ protected abstract void writePropertySetterMethodBody(
+ PrettyWriter out,
+ PropertyBean property,
+ String propertyClass) throws IOException;
+
+ protected void writePropertyGet(
+ PrettyWriter out,
+ PropertyBean property,
+ Collection ignoreList) throws IOException
+ {
+ String propName = property.getPropertyName();
+ String propertyFullClass = property.getPropertyClass();
+ String propertyClass = Util.getClassFromFullClass(propertyFullClass);
+ String description = property.getDescription();
+ String getMethod = Util.getMethodReaderFromProperty(propName, propertyClass);
+ if (ignoreList != null && ignoreList.contains(getMethod))
+ {
+ return;
+ }
+ boolean isUnchecked = false;
+ String[] genericTypes = property.getPropertyClassParameters();
+ if (genericTypes != null && genericTypes.length > 0)
+ {
+ isUnchecked = true;
+ propertyClass = Util.getPropertyClass(property);
+ }
+
+ out.println();
+ out.println("/**");
+ if (description != null)
+ {
+ out.println(" * Gets " + convertMultilineComment(description));
+ }
+ if (property.isRequired())
+ {
+ out.println(" * <p>");
+ out.println(" * This is a required property on the component.");
+ out.println(" * </p>");
+ }
+
+ out.println(" *");
+ out.println(" * @return the new " + propName + " value");
+ if (property.isMethodBinding() && _is12)
+ {
+ out.println(" * @deprecated");
+ }
+ out.println(" */");
+
+ if (isUnchecked)
+ {
+ out.println("@SuppressWarnings(\"unchecked\")");
+ }
+
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+
+ out.println("public " + propertyClass + " " + getMethod + "()");
+ out.println("{");
+ out.indent();
+
+ writePropertyGetterMethodBody(out, property);
+
+ out.unindent();
+ 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 writePropertyGetterMethodBody(
+ PrettyWriter out,
+ PropertyBean property) throws IOException;
+
+ public void writeFacetMethods(
+ PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ Iterator facets = component.facets();
+ while (facets.hasNext())
+ {
+ FacetBean facet = (FacetBean) facets.next();
+ writeFacetGet(out, facet);
+ writeFacetSet(out, facet);
+ }
+ }
+
+ public void writeFacetSet(
+ PrettyWriter out,
+ FacetBean facet) throws IOException
+ {
+ String facetName = facet.getFacetName();
+ // TODO: drop the unnecessary "Facet" suffix
+ String facetVar = facetName + "Facet";
+ String facetKey = Util.getConstantNameFromProperty(facetName, "_FACET");
+ String setMethod = Util.getPrefixedPropertyName("set", facetName);
+ String description = facet.getDescription();
+
+ out.println();
+ out.println("/**");
+ if (description != null)
+ {
+ out.println(" * " + convertMultilineComment(description));
+ }
+ if (facet.isRequired())
+ {
+ out.println(" * <p>");
+ out.println(" * This is a required facet on the component.");
+ }
+ // TODO: put this back in
+ //out.println(" * ");
+ //out.println(" * @param " + facetVar + " the new " + facetName + " facet");
+ out.println(" */");
+
+ // Remove type safety warning since getFacets is not generics enabled
+ // under JSF 1.1 spec
+ // TODO: Remove this line when Trinidad switch to JSF 1.2
+ out.println("@SuppressWarnings(\"unchecked\")");
+
+ out.println("final public void " + setMethod + "(UIComponent " + facetVar + ")");
+ out.println("{");
+ out.indent();
+ out.println("getFacets().put(" + facetKey + ", " + facetVar + ");");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writeFacetGet(
+ PrettyWriter out,
+ FacetBean facet) throws IOException
+ {
+ String facetName = facet.getFacetName();
+ String facetKey = Util.getConstantNameFromProperty(facetName, "_FACET");
+ String getMethod = Util.getPrefixedPropertyName("get", facetName);
+ String description = facet.getDescription();
+
+ out.println();
+ out.println("/**");
+ if (description != null)
+ {
+ out.println(" * " + convertMultilineComment(description));
+ }
+ if (facet.isRequired())
+ {
+ out.println(" * <p>");
+ out.println(" * This is a required facet on the component.");
+ }
+ // TODO: put this back in
+ //out.println(" * ");
+ //out.println(" * @return the " + facetName + " facet");
+ out.println(" */");
+
+ out.println("final public UIComponent " + getMethod + "()");
+ out.println("{");
+ out.indent();
+ out.println("return getFacet(" + facetKey + ");");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writeListenerMethods(
+ PrettyWriter out,
+ ComponentBean component) throws IOException
+ {
+ Iterator events = component.events();
+ while (events.hasNext())
+ {
+ EventRefBean eventRef = (EventRefBean) events.next();
+ EventBean event = eventRef.resolveEventType();
+ if (event != null)
+ {
+ writeListenerAdd(out, event);
+ writeListenerRemove(out, event);
+ writeListenersGet(out, event);
+ }
+ }
+ }
+
+ public void writeListenerAdd(
+ PrettyWriter out,
+ EventBean event) throws IOException
+ {
+ String listenerFullClass = event.getEventListenerClass();
+ String listenerClass = Util.getClassFromFullClass(listenerFullClass);
+
+ String eventName = event.getEventName();
+ String addMethod = Util.getMethodNameFromEvent("add", eventName, "Listener");
+
+ out.println();
+ out.println("/**");
+ out.println(" * Adds a " + eventName + " listener.");
+ out.println(" *");
+ out.println(" * @param listener the " + eventName + " listener to add");
+ out.println(" */");
+
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+ out.println("public void " + addMethod + "(");
+ out.indent();
+ out.println(listenerClass + " listener)");
+ out.unindent();
+ out.println("{");
+ out.indent();
+ out.println("addFacesListener(listener);");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writeListenerRemove(
+ PrettyWriter out,
+ EventBean event) throws IOException
+ {
+ String listenerFullClass = event.getEventListenerClass();
+ String listenerClass = Util.getClassFromFullClass(listenerFullClass);
+
+ String eventName = event.getEventName();
+ String removeMethod = Util.getMethodNameFromEvent("remove", eventName, "Listener");
+
+ out.println();
+ out.println("/**");
+ out.println(" * Removes a " + eventName + " listener.");
+ out.println(" *");
+ out.println(" * @param listener the " + eventName + " listener to remove");
+ out.println(" */");
+
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+ out.println("public void " + removeMethod + "(");
+ out.indent();
+ out.println(listenerClass + " listener)");
+ out.unindent();
+ out.println("{");
+ out.indent();
+ out.println("removeFacesListener(listener);");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writeListenersGet(
+ PrettyWriter out,
+ EventBean event) throws IOException
+ {
+ String listenerFullClass = event.getEventListenerClass();
+ String listenerClass = Util.getClassFromFullClass(listenerFullClass);
+
+ String eventName = event.getEventName();
+ String getMethod = Util.getMethodNameFromEvent("get", eventName, "Listeners");
+
+ out.println();
+ out.println("/**");
+ out.println(" * Returns an array of attached " + eventName + " listeners.");
+ out.println(" *");
+ out.println(" * @return an array of attached " + eventName + " listeners.");
+ out.println(" */");
+
+ if (isAccessorMethodFinal())
+ {
+ out.print("final ");
+ }
+ out.println("public " + listenerClass + "[] " + getMethod + "()");
+ out.println("{");
+ out.indent();
+ out.println("return (" + listenerClass + "[])" +
+ "getFacesListeners(" + listenerClass + ".class);");
+ out.unindent();
+ out.println("}");
+ }
+
+
+ public abstract void writeStateManagementMethods(PrettyWriter out,
+ ComponentBean component) throws IOException;
+
+ public void writeOther(
+ PrettyWriter out, ComponentBean component) throws IOException
+ {
+ // nothing
+ }
+
+ protected String convertMultilineComment(
+ String commentBody)
+ {
+ return commentBody.replaceAll("\n", "\n * ");
+ }
+
+ protected class ResolvableTypeFilter extends PropertyFilter
+ {
+ protected boolean accept(
+ PropertyBean property)
+ {
+ String propertyClass = property.getPropertyClass();
+ String resolvableType = resolveType(propertyClass);
+ return (resolvableType != null);
+ }
+ }
+
+ protected class NonVirtualFilter extends PropertyFilter
+ {
+ protected boolean accept(
+ PropertyBean property)
+ {
+ return (!property.isVirtual());
+ }
+ }
+
+ static protected String resolveType(
+ String className)
+ {
+ return (String) _RESOLVABLE_TYPES.get(className);
+ }
+
+
+ static private Map _createResolvableTypes()
+ {
+ Map resolvableTypes = new HashMap();
+
+ resolvableTypes.put("boolean", "Boolean");
+ resolvableTypes.put("char", "Character");
+ // TODO: put this back in
+ //resolvableTypes.put("java.util.Date", "Date");
+ resolvableTypes.put("int", "Integer");
+ resolvableTypes.put("float", "Float");
+ resolvableTypes.put("java.util.Locale", "Locale");
+ resolvableTypes.put("long", "Long");
+ resolvableTypes.put("java.lang.String", "String");
+ // TODO: put this back in
+ //resolvableTypes.put("java.lang.String[]", "StringArray");
+ resolvableTypes.put("java.util.TimeZone", "TimeZone");
+
+ return Collections.unmodifiableMap(resolvableTypes);
+ }
+
+ static private final Pattern _GENERIC_TYPE = Pattern.compile("([^<]+)<(.+)>");
+ static final private Map _RESOLVABLE_TYPES = _createResolvableTypes();
+}
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision