Bruno,

Any idea how/when we're going to merge these changes back?
(Excellent work, by the way!)  I'd really like to keep us all
on one branch of the code, instead of getting some huge
code divergence.

-- Adam




On 11/25/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

Author: baranda
Date: Sat Nov 25 09:41:05 2006
New Revision: 479151

URL: http://svn.apache.org/viewvc?view=rev&rev=479151
Log:
Applied ADFFACES-303 patch by Andreas Berger

Modified:

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/ComponentGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/AbstractComponentTagGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/ComponentTagGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.java

incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateComponentsMojo.java
Sat Nov 25 09:41:05 2006
@@ -140,8 +140,8 @@

      if (componentFamily == null)
      {
-        getLog().error("Missing <component-family> for \"" +
-                       fullClassName + "\"");
+        getLog().warn("Missing <component-family> for \"" +
+                       fullClassName + "\", generation of this Component
is skipped");
      }
      else
      {
@@ -212,7 +212,12 @@

        generator.writeFacetMethods(out, component);

-        generator.writePropertyMethods(out, component);
+        if (template == null)
+        {
+                       generator.writePropertyMethods(out, component);
+               } else {
+                       generator.writePropertyMethods(out, component,
template.getIgnoreMethods());
+               }

        if (!suppressListenerMethods)
          generator.writeListenerMethods(out, component);

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/GenerateJspTaglibsMojo.java
Sat Nov 25 09:41:05 2006
@@ -1468,99 +1468,102 @@
    }
  }

-  class ComponentTagHandlerGenerator
-  {
-    public void generateTagHandler(
-      ComponentBean component)
-    {
-      String fullClassName = component.getTagClass();
-
-        ComponentTagGenerator generator;
-
-        if (component.isTrinidadComponent())
-        {
-            generator = new TrinidadComponentTagGenerator(_is12());
-        }
-        else
-        {
-            generator = new MyFacesComponentTagGenerator(_is12());
-        }
-
-      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)
-        {
-          getLog().error("Missing JSP Tag superclass for component:
"+component.getComponentClass());
-          return;
-        }
-        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 + ";");
-
-        out.println();
-
-
-        generator.writeImports(out, null, packageName,
fullSuperclassName, superclassName,
-                       component);
-
-        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, component);
-        generator.writeSetPropertiesMethod(out, componentClass,
component);
-        generator.writeReleaseMethod(out, component);
-
-        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);
-      }
-    }
+       class ComponentTagHandlerGenerator {

-
-  }
+               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);
+                       }
+               }
+       }

-  private boolean _is12()
+       private boolean _is12()
  {
    return "1.2".equals(jsfVersion) || "12".equals(jsfVersion);
  }

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/ClassGenerator.java
Sat Nov 25 09:41:05 2006
@@ -20,6 +20,7 @@
import org.apache.myfaces.trinidadbuild.plugin.faces.util.SourceTemplate;

import java.io.IOException;
+import java.util.Collection;

/**
* Generator
@@ -36,6 +37,14 @@
            String fullSuperclassName,
            String superclassName,
            ComponentBean component);
+
+       void writeImports(
+                       PrettyWriter out,
+                       SourceTemplate template,
+                       String packageName,
+                       String fullSuperclassName,
+                       String superclassName,
+                       Collection components);

    void writeClassBegin(
            PrettyWriter out,

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/GeneratorHelper.java
Sat Nov 25 09:41:05 2006
@@ -67,10 +67,10 @@
                && property.getJspPropertyName().equals("action"));
    }

-    public static boolean isActionListener(PropertyBean property)
+    public static boolean isActionListener(PropertyBean property, boolean
is12)
    {
-        return (property.getClass().equals("javax.el.MethodExpression")
-                && property.getJspPropertyName
().equals("actionListener"));
+               return (property.getJspPropertyName().equals("actionListener")
&&
+                               (property.isMethodExpression()) || (is12
&& property.isMethodBinding()));
    }

    static public void writeImports(

Modified:
incubator/adffaces/branches/myfaces-1_2-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/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/AbstractComponentGenerator.java
Sat Nov 25 09:41:05 2006
@@ -38,6 +38,7 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import java.util.Collection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@@ -200,7 +201,13 @@
        out.println("}");
    }

-    public void writeImports(
+
+       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,
@@ -525,7 +532,13 @@
            PrettyWriter out,
            ComponentBean component) throws IOException
    {
-        Iterator properties = component.properties();
+        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())
        {
@@ -534,14 +547,14 @@
                writePropertyListMethods(out, property);
            else
            {
-                writePropertyDeclaration(out, property);
-                writePropertyGet(out, property);
-                writePropertySet(out, property);
+                               writePropertyDeclaration(out, property);
+                writePropertyGet(out, property, ignoreList);
+                writePropertySet(out, property, ignoreList);
            }
        }
-    }
+       }

-    abstract protected void writePropertyListMethods(
+       abstract protected void writePropertyListMethods(
            PrettyWriter out,
            PropertyBean property) throws IOException;

@@ -558,28 +571,32 @@

    protected void writePropertySet(
            PrettyWriter out,
-            PropertyBean property) throws IOException
+            PropertyBean property,
+                       Collection ignoreList) throws IOException
    {
        String propertyClass = Util.getPropertyClass(property);
-        writePropertySet(out, property, propertyClass);
+        writePropertySet(out, property, propertyClass, ignoreList);

        if (property.getAlternateClass() != null)
        {
            String alternateClass = Util.getAlternatePropertyClass
(property);
-            writePropertySet(out, property, alternateClass);
+            writePropertySet(out, property, alternateClass, ignoreList);
        }
    }

    protected void writePropertySet(
            PrettyWriter out,
            PropertyBean property,
-            String propertyClass) throws IOException
+            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)
@@ -616,14 +633,17 @@

    protected void writePropertyGet(
            PrettyWriter out,
-            PropertyBean property) throws IOException
+            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)

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/ComponentGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/ComponentGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/ComponentGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/component/ComponentGenerator.java
Sat Nov 25 09:41:05 2006
@@ -18,8 +18,10 @@
import
org.apache.myfaces.trinidadbuild.plugin.faces.generator.ClassGenerator;
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;

/**
* Generates component classes
@@ -69,4 +71,9 @@

    void writeOther(
            PrettyWriter out, ComponentBean component) throws IOException;
+
+
+       void writePropertyMethods(PrettyWriter out,
+                       ComponentBean component,
+                       Collection ignoreList) throws IOException;
}

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/AbstractComponentTagGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/AbstractComponentTagGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/AbstractComponentTagGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/AbstractComponentTagGenerator.java
Sat Nov 25 09:41:05 2006
@@ -28,6 +28,8 @@
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
+import java.util.Collection;
+import java.util.HashSet;

/**
* TODO: comment this!
@@ -38,70 +40,72 @@
public abstract class AbstractComponentTagGenerator implements
ComponentTagGenerator
{

-    public void writeImports(PrettyWriter out,
+       public void writeImports(PrettyWriter out,
                             SourceTemplate template,
                             String packageName,
                             String fullSuperclassName,
                             String superclassName,
                             ComponentBean component)
    {
-        String componentFullClass = component.getComponentClass();
-
-        Set imports = new TreeSet();
-
-      Iterator properties = component.properties();
-      properties = new FilteredIterator(properties, new
TagAttributeFilter());
-      //if (properties.hasNext())
-      //{
-      //  imports.add(componentFullClass);
-      //}
-
-      // 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   propertyClass = property.getPropertyClass();
-        String[] propertyClassParams =
property.getPropertyClassParameters();
-
-        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);
-        }
-
-
-
-        // 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");
-        //}
-      }
+               Collection components = new HashSet();
+               components.add(component);
+               writeImports(out, template, packageName,
fullSuperclassName, superclassName, components);
+    }

-        addSpecificImports(imports, component);

-      // do not import implicit!
-      imports.removeAll(Util.PRIMITIVE_TYPES);
+       public void writeImports(PrettyWriter out, SourceTemplate
template, String packageName, String fullSuperclassName,
+                                                        String
superclassName, Collection components) {
+               Set imports = new TreeSet();
+
+               for (Iterator lIterator = components.iterator();
lIterator.hasNext();) {
+                       ComponentBean component = (ComponentBean)
lIterator.next();
+                       Iterator properties = component.properties();
+                       properties = new FilteredIterator(properties, new
TagAttributeFilter());
+
+                       // 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 propertyClass =
property.getPropertyClass();
+                               String[] propertyClassParams =
property.getPropertyClassParameters();
+
+                               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);
+                               }
+
+                               // 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");
+                               //}
+                               addSpecificImports(imports, component);
+
+                       }
+
+               }
+               // do not import implicit!
+               imports.removeAll(Util.PRIMITIVE_TYPES);

-      GeneratorHelper.writeImports(out, packageName, imports);
-    }
+               GeneratorHelper.writeImports(out, packageName, imports);
+       }

-    public void writeClassBegin(PrettyWriter out,
+       public void writeClassBegin(PrettyWriter out,
                                String className,
                                String superclassName,
                                ComponentBean component,
@@ -194,14 +198,38 @@
        }
    }

-    public void writeReleaseMethod(PrettyWriter out,
+
+       public void writePropertyMembers(PrettyWriter out, Collection
components) throws IOException {
+               for (Iterator lIterator = components.iterator();
lIterator.hasNext();) {
+                       writePropertyMembers(out, (ComponentBean)
lIterator.next());
+               }
+       }
+
+       public void writeReleaseMethod(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()))
+               Collection components = new HashSet();
+               components.add(component);
+               writeReleaseMethod(out, components);
+    }
+
+
+       public void writeReleaseMethod(PrettyWriter out, Collection
components) throws IOException {
+               Collection all = new HashSet();
+               boolean special = false;
+               for (Iterator lIterator = components.iterator();
lIterator.hasNext();) {
+                       ComponentBean component = (ComponentBean)
lIterator.next();
+                       Iterator prop = component.properties();
+                       // TODO: remove special case for UIXFormTag
+                       special |= "
org.apache.myfaces.trinidadinternal.taglib.UIXFormTag".equals(
component.getTagClass());
+                       while (prop.hasNext()) {
+                               all.add(prop.next());
+                       }
+               }
+
+               Iterator properties = all.iterator();
+               properties = new FilteredIterator(properties, new
TagAttributeFilter());
+        if (properties.hasNext() || special)
        {
            out.println();
            out.println("@Override");
@@ -219,11 +247,7 @@
            out.unindent();
            out.println("}");
        }
-    }
-
-    public abstract void writeSetPropertiesMethod(PrettyWriter out,
-                                         String componentClass,
-                                         ComponentBean component) throws
IOException;
+       }

    protected void addSpecificImports(
            Set imports,

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/ComponentTagGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/ComponentTagGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/ComponentTagGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/ComponentTagGenerator.java
Sat Nov 25 09:41:05 2006
@@ -20,6 +20,7 @@
import org.apache.myfaces.trinidadbuild.plugin.faces.parse.ComponentBean;

import java.io.IOException;
+import java.util.Collection;

/**
* Generates tag classes
@@ -34,9 +35,16 @@
                                  String componentClass,
                                  ComponentBean component) throws
IOException;

+    void writeSetPropertiesMethod(PrettyWriter out,
+                                  String componentClass,
+                                  Collection components) throws
IOException;
+
    void writeReleaseMethod(PrettyWriter out,
                            ComponentBean component) throws IOException;

+    void writeReleaseMethod(PrettyWriter out,
+                            Collection components) throws IOException;
+
    void writeGetComponentType(PrettyWriter out,
                            ComponentBean component) throws IOException;

@@ -45,4 +53,7 @@

    void writePropertyMembers(PrettyWriter out,
                            ComponentBean component) throws IOException;
+
+    void writePropertyMembers(PrettyWriter out,
+                            Collection components) throws IOException;
}

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java
Sat Nov 25 09:41:05 2006
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
+import java.util.Collection;
+import java.util.HashSet;

/**
* Component tag generator for myfaces
@@ -74,7 +76,11 @@
                if (_is12)
                {
                    imports.add("javax.el.MethodExpression");
-                }
+                                       if (
GeneratorHelper.isActionListener(property, _is12))
+                                       {
+                                               imports.add("
javax.faces.event.MethodExpressionActionListener");
+                                       }
+                               }
                else
                {
                    imports.add("javax.faces.el.MethodBinding");
@@ -84,7 +90,7 @@
            {
                imports.add("javax.el.MethodExpression");
            }
-            else if (GeneratorHelper.isActionListener(property))
+            else if (GeneratorHelper.isActionListener(property, _is12))
            {
                imports.add("
javax.faces.event.MethodExpressionActionListener");
            }
@@ -124,7 +130,25 @@
                                         String componentClass,
                                         ComponentBean component) throws
IOException
    {
-        Iterator properties = component.properties();
+        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());

        out.println();
@@ -141,10 +165,9 @@
        writeSetPropertyMethodBody(out, componentClass, properties);
        out.unindent();
        out.println("}");
-        //    }
-    }
+       }

-    protected void writeSetPropertyMethodBody(PrettyWriter out,
+       protected void writeSetPropertyMethodBody(PrettyWriter out,
                                              String componentClass,
                                              Iterator properties) throws
IOException
    {
@@ -257,12 +280,19 @@

        if (_is12)
        {
-            out.println("if (" + propVar + " != null)");
+                       out.println("if (" + propVar + " != null)");
+                       out.println("{");
            out.indent();
-            out.println("bean.setProperty(" + componentClass + "." +
propKey + ", " +
-                    "new MethodExpressionMethodBinding(" + propVar +
"));");
+                       if (GeneratorHelper.isActionListener(property,
_is12))
+                       {
+                               out.println("comp.addActionListener(new
MethodExpressionActionListener(" + propVar + "));");
+                       } else {
+                               out.println("bean.setProperty(" +
componentClass + "." + propKey + ", " +
+                                               "new
MethodExpressionMethodBinding(" + propVar + "));");
+                       }
            out.unindent();
-        }
+                       out.println("}");
+               }
        else
        {
            MethodSignatureBean signature =
property.getMethodBindingSignature();
@@ -338,7 +368,7 @@
        {
            out.println("comp.setActionExpression("+propVar+");");
        }
-        else if (GeneratorHelper.isActionListener(property))
+        else if (GeneratorHelper.isActionListener(property, _is12))
        {
            out.println("comp.addActionListener(new
MethodExpressionActionListener(" + propVar + "));");
        }

Modified:
incubator/adffaces/branches/myfaces-1_2-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/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/TrinidadComponentTagGenerator.java
Sat Nov 25 09:41:05 2006
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
+import java.util.Collection;
+import java.util.HashSet;

/**
* TODO: comment this!
@@ -164,7 +166,24 @@
                                         String componentClass,
                                         ComponentBean component) throws
IOException
    {
-        Iterator properties = component.properties();
+        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());
        // TODO: only write out setProperties when properties exist
        //    if (properties.hasNext())
@@ -182,9 +201,9 @@
        out.unindent();
        out.println("}");
        //    }
-    }
+       }

-    protected void writeSetPropertyMethodBody(PrettyWriter out,
+       protected void writeSetPropertyMethodBody(PrettyWriter out,
                                              String componentClass,
                                              Iterator properties) throws
IOException
    {

Modified:
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java
URL:
http://svn.apache.org/viewvc/incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java?view=diff&rev=479151&r1=479150&r2=479151

==============================================================================
---
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java
(original)
+++
incubator/adffaces/branches/myfaces-1_2-maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/util/SourceTemplate.java
Sat Nov 25 09:41:05 2006
@@ -27,6 +27,7 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.Collection;

public class SourceTemplate
{
@@ -100,8 +101,15 @@
      if (line == null)
        throw new EOFException("File " + _file + " ended prematurely");

-      if (line.trim().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;
@@ -146,13 +154,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 = "/**///";
}



Reply via email to