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())