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 [4/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/
Added: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.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/taglib/TrinidadComponentTagGenerator.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/taglib/TrinidadComponentTagGenerator.java (added)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.java Thu Nov 30 12:21:26 2006
@@ -0,0 +1,777 @@
+/*
+ * 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.taglib;
+
+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.ComponentBean;
+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.util.FilteredIterator;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.Util;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * TODO: comment this!
+ *
+ * @author Bruno Aranda (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+public class TrinidadComponentTagGenerator extends AbstractComponentTagGenerator
+{
+ private boolean _is12;
+
+ public TrinidadComponentTagGenerator(boolean is12)
+ {
+ _is12 = is12;
+ }
+
+ protected void addSpecificImports(Set imports,
+ ComponentBean component)
+ {
+ imports.add("org.apache.myfaces.trinidad.bean.FacesBean");
+
+ if (_is12)
+ {
+ imports.add("javax.el.ValueExpression");
+ }
+
+ Iterator properties = component.properties();
+ properties = new FilteredIterator(properties, new TagAttributeFilter());
+
+ while (properties.hasNext())
+ {
+ PropertyBean property = (PropertyBean) properties.next();
+ String propertyClass = property.getPropertyClass();
+ String[] propertyClassParams = property.getPropertyClassParameters();
+
+ imports.add(component.getComponentClass());
+
+ if (GeneratorHelper.isKeyStroke(propertyClass))
+ {
+ if (_is12)
+ imports.add("javax.el.ValueExpression");
+ else
+ imports.add("javax.faces.el.ValueBinding");
+ imports.add("javax.swing.KeyStroke");
+ }
+ else if (GeneratorHelper.isAWTKeyStroke(propertyClass))
+ {
+ if (_is12)
+ imports.add("javax.el.ValueExpression");
+ else
+ imports.add("javax.faces.el.ValueBinding");
+ imports.add("java.awt.AWTKeyStroke");
+ }
+ else if (GeneratorHelper.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 (GeneratorHelper.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");
+ }
+ }
+ }
+
+
+ protected void writePropertyDeclaration(PrettyWriter out,
+ PropertyBean property) throws IOException
+ {
+ String propName = property.getPropertyName();
+ String fieldPropName = "_" + propName;
+ String jspPropType = GeneratorHelper.getJspPropertyType(property, _is12);
+
+ out.println();
+ out.println("private " + jspPropType + " " + fieldPropName + ";");
+ }
+
+ protected void writePropertySetter(PrettyWriter out,
+ PropertyBean property) throws IOException
+ {
+ String propName = property.getPropertyName();
+ String fieldPropName = "_" + propName;
+ String jspPropName = property.getJspPropertyName();
+ String propVar = Util.getVariableFromName(propName);
+ String setMethod = Util.getPrefixedPropertyName("set", jspPropName);
+ String jspPropType = GeneratorHelper.getJspPropertyType(property, _is12);
+
+ out.print("final ");
+ out.println("public void " + setMethod + "(" + jspPropType + " " + propVar + ")");
+ out.println("{");
+ out.indent();
+ out.println(fieldPropName + " = " + propVar + ";");
+ out.unindent();
+ out.println("}");
+ }
+
+ public void writeSetPropertiesMethod(PrettyWriter out,
+ String componentClass,
+ ComponentBean component) throws IOException
+ {
+ Collection components = new HashSet();
+ components.add(component);
+ writeSetPropertiesMethod(out, componentClass, components);
+ }
+
+
+ public void writeSetPropertiesMethod(PrettyWriter out, String componentClass, Collection components)
+ throws IOException
+ {
+ Collection all = new HashSet();
+ for (Iterator lIterator = components.iterator(); lIterator.hasNext();)
+ {
+ ComponentBean component = (ComponentBean) lIterator.next();
+ Iterator prop = component.properties();
+ while (prop.hasNext())
+ {
+ all.add(prop.next());
+ }
+ }
+
+ Iterator properties = all.iterator();
+ properties = new FilteredIterator(properties, new TagAttributeFilter());
+
+ 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();
+
+ writeSetPropertyMethodBody(out, componentClass, properties);
+ out.unindent();
+ out.println("}");
+ }
+ }
+
+ protected void writeSetPropertyMethodBody(PrettyWriter out,
+ String componentClass,
+ Iterator properties) throws IOException
+ {
+
+ out.println("super.setProperties(bean);");
+
+ while (properties.hasNext())
+ {
+ PropertyBean property = (PropertyBean) properties.next();
+ _writeSetPropertiesCase(out, componentClass, property);
+ }
+ }
+
+ private void _writeSetPropertiesCase(
+ PrettyWriter out,
+ String componentClass,
+ PropertyBean property) throws IOException
+ {
+ String propName = property.getPropertyName();
+ String propClass = property.getPropertyClass();
+ String propVar = "_" + 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 (GeneratorHelper.isKeyStroke(propClass))
+ {
+ _writeSetKeyStroke(out, componentClass, propName);
+ }
+ else if (GeneratorHelper.isAWTKeyStroke(propClass))
+ {
+ _writeSetAWTKeyStroke(out, componentClass, propName);
+ }
+ else if (GeneratorHelper.isColorList(propClass, property.getPropertyClassParameters()))
+ {
+ _writeSetColorList(out, componentClass, propName);
+ }
+ else if (GeneratorHelper.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);
+ // }
+ }
+
+ 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.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 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 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()));
+ }
+
+}
Propchange: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.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/taglib/TrinidadComponentTagGenerator.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.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/parse/ComponentBean.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/parse/ComponentBean.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ComponentBean.java Thu Nov 30 12:21:26 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.
@@ -225,6 +223,27 @@
return _tagClass;
}
+ /**
+ * Sets the JSP tag handler superclass for this component.
+ *
+ * @param tagSuperclass the JSP tag handler superclass
+ */
+ public void setTagSuperclass(
+ String tagSuperclass)
+ {
+ _tagSuperclass = tagSuperclass;
+ }
+
+ /**
+ * Returns the JSP tag handler superclass for this component.
+ *
+ * @return the JSP tag handler superclass
+ */
+ public String getTagSuperclass()
+ {
+ return _tagSuperclass;
+ }
+
/**
* Returns the JSP tag name for this component.
*
@@ -481,6 +500,15 @@
return properties;
}
+ /**
+ * Number of properties for this component
+ * @return num of properties
+ */
+ public int propertiesSize()
+ {
+ return _properties.size();
+ }
+
/**
* Adds a facet to this component.
*
@@ -914,6 +942,28 @@
FacesConfigBean owner = getOwner();
return (owner != null) ? owner.findComponent(_componentSupertype) : null;
+ }
+
+ /**
+ * Checks if any of the component superclasses is UIXComponentBase
+ */
+ public boolean isTrinidadComponent()
+ {
+ ComponentBean componentSupertype = resolveSupertype();
+
+ if (componentSupertype != null)
+ {
+ if (_TRINIDAD_COMPONENT_BASE.equals(componentSupertype.getComponentClass()))
+ {
+ return true;
+ }
+ else
+ {
+ return componentSupertype.isTrinidadComponent();
+ }
+ }
+
+ return false;
}
/**
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ConverterBean.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/parse/ConverterBean.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/parse/ConverterBean.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/ConverterBean.java Thu Nov 30 12:21:26 2006
@@ -15,14 +15,13 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.parse;
+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;
-
/**
* ConverterBean is a Java representation of the faces-config converter
* XML element.
@@ -166,7 +165,7 @@
/**
* Sets the JSP tag name for this component.
*
- * @param tagClass the JSP tag name
+ * @param tagName the JSP tag name
*/
public void setTagName(
QName tagName)
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.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/parse/FacesConfigParser.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/parse/FacesConfigParser.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/FacesConfigParser.java Thu Nov 30 12:21:26 2006
@@ -15,26 +15,20 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.parse;
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.net.URL;
-import java.net.URLConnection;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
-
-import org.apache.commons.digester.Digester;
import org.apache.commons.digester.AbstractObjectCreationFactory;
-
+import org.apache.commons.digester.Digester;
import org.apache.maven.plugin.MojoExecutionException;
-
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.rules.BeanPropertySetterRule;
+import org.apache.myfaces.trinidadbuild.plugin.faces.util.XIncludeFilter;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
-
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.rules.BeanPropertySetterRule;
-import org.apache.myfaces.trinidadbuild.plugin.faces.util.XIncludeFilter;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
public class FacesConfigParser
{
@@ -152,6 +146,8 @@
"children");
digester.addBeanPropertySetter("faces-config/component/component-extension/tag-class",
"tagClass");
+ digester.addBeanPropertySetter("faces-config/component/component-extension/tag-superclass",
+ "tagSuperclass");
digester.addCallMethod("faces-config/component/component-extension/tag-class-modifier",
"parseTagClassModifier", 1);
digester.addCallParam("faces-config/component/component-extension/tag-class-modifier", 0);
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/PropertyBean.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/parse/PropertyBean.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/parse/PropertyBean.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/parse/PropertyBean.java Thu Nov 30 12:21:26 2006
@@ -340,8 +340,33 @@
return _jspPropertyName;
}
+ /**
+ * Sets the field name of this property, when not generating Trinidad components
+ *
+ * @param fieldPropertyName the field property name
+ */
+ public void setFieldPropertyName(
+ String fieldPropertyName)
+ {
+ _fieldPropertyName = fieldPropertyName;
+ }
+
+ /**
+ * Returns the field name of this property, when not generating Trinidad components
+ *
+ * @return the field property name
+ */
+ public String getFieldPropertyName()
+ {
+ if (_fieldPropertyName == null)
+ return "_"+getPropertyName();
+
+ return _fieldPropertyName;
+ }
+
private String _aliasOf;
private String _jspPropertyName;
+ private String _fieldPropertyName;
private boolean _required;
private boolean _literalOnly;
private boolean _stateHolder;
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.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/util/SourceTemplate.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/util/SourceTemplate.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java Thu Nov 30 12:21:26 2006
@@ -15,19 +15,8 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.util;
-import java.io.BufferedReader;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Writer;
-
-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.io.*;
+import java.util.*;
public class SourceTemplate
{
@@ -101,8 +90,15 @@
if (line == null)
throw new EOFException("File " + _file + " ended prematurely");
- if (line.startsWith(_IGNORE_PREFIX))
- continue;
+ if (line.trim().startsWith(_IGNORE_PREFIX)){
+ if (line.trim().startsWith(_IGNORE_PREFIX2)){
+ String method = line.trim().substring(_IGNORE_PREFIX2.length()).trim();
+ if (method.length() > 0 ){
+ _ignoreMethods.add(method);
+ }
+ }
+ continue;
+ }
if (line.equals("}"))
break;
@@ -147,13 +143,19 @@
return buffer.toString();
}
- private File _file;
+ public Collection getIgnoreMethods() {
+ return _ignoreMethods;
+ }
+
+ private File _file;
private BufferedReader _reader;
private Set _imports = new HashSet();
private Map _fqcnMap = new HashMap();
private Set _implements = new HashSet();
private Map _substitutions = new HashMap();
+ private Set _ignoreMethods = new HashSet();
// Magic syntax indicating "please ignore this line"
static private final String _IGNORE_PREFIX = "/**/";
+ static private final String _IGNORE_PREFIX2 = "/**///";
}
Modified: incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/Util.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/util/Util.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/util/Util.java (original)
+++ incubator/adffaces/branches/faces-1_2-061113/plugins/maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/Util.java Thu Nov 30 12:21:26 2006
@@ -15,6 +15,8 @@
*/
package org.apache.myfaces.trinidadbuild.plugin.faces.util;
+import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
+
import java.io.File;
import java.util.Collections;
import java.util.Set;
@@ -22,8 +24,6 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.apache.myfaces.trinidadbuild.plugin.faces.parse.PropertyBean;
-
public class Util
{
static public String convertClassToSourcePath(
@@ -39,6 +39,17 @@
return (className != null && className.indexOf('.') != -1);
}
+ public static String getGenericsFromProperty(PropertyBean property){
+ String gen = "";
+ for (int i = 0; i < property.getAttributeClassParameters().length; i++) {
+ if (i>0){
+ gen += ",";
+ }
+ gen += getClassFromFullClass(property.getAttributeClassParameters()[i]);
+ }
+ return (gen.length() > 0?"<"+gen+">":gen);
+ }
+
static public String getClassFromFullClass(
String fullClass)
{
@@ -46,7 +57,6 @@
return null;
int lastSep = fullClass.lastIndexOf('.');
-
// Note: this code also works for the empty package
return (fullClass.substring(lastSep + 1));
}
@@ -203,6 +213,28 @@
return className;
}
+ static public String primitiveDefaultValue(String className)
+ {
+ if ("boolean".equals(className))
+ return "false";
+ else if ("byte".equals(className))
+ return "0";
+ else if ("char".equals(className))
+ return "''";
+ else if ("double".equals(className))
+ return "0.0d";
+ else if ("float".equals(className))
+ return "0.0f";
+ else if ("int".equals(className))
+ return "0";
+ else if ("long".equals(className))
+ return "0L";
+ else if ("short".equals(className))
+ return "0";
+ else
+ return className;
+ }
+
static public String fill(
String base,
int length)
@@ -254,7 +286,46 @@
return name;
}
- static private void _buildPropertyClass(StringBuffer buffer, String type)
+ static public String convertStringToLiteral(String value)
+ {
+ return convertStringToLiteral("String", value);
+ }
+
+ static public String convertStringToLiteral(String className, String value)
+ {
+ if (value == null)
+ {
+ return null;
+ }
+ else if ("String".equals(className))
+ {
+ return "\"" + value.replaceAll("\'", "\\'") + "\"";
+ }
+ else
+ {
+ return value;
+ }
+ }
+
+ static public String getDefaultValue(PropertyBean property){
+ String propertyFullClass = property.getPropertyClass();
+ String def = property.getDefaultValue();
+ if (def == null || def.length() == 0){
+ return null;
+ }
+ if (isPrimitiveClass(propertyFullClass)){
+ return def;
+ } else if ("java.lang.String".equals(propertyFullClass)){
+ if (def.startsWith("\"") && def.endsWith("\"")){
+ return def;
+ } else {
+ return "\""+def+"\"";
+ }
+ }
+ return null;
+ }
+
+ static private void _buildPropertyClass(StringBuffer buffer, String type)
{
Matcher matcher = _GENERIC_TYPE.matcher(type);
if(matcher.matches())