You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2010/05/05 01:29:42 UTC

svn commit: r941092 [2/3] - in /myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main: java/org/apache/myfaces/buildtools/maven2/plugin/builder/ java/org/apache/myfaces/buildtools/maven2/plugin/builder/model/ java/org/apache/...

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java?rev=941092&r1=941091&r2=941092&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/builder/qdox/QdoxModelBuilder.java Tue May  4 23:29:42 2010
@@ -36,6 +36,7 @@ import org.apache.maven.project.MavenPro
 import org.apache.myfaces.buildtools.maven2.plugin.builder.IOUtils;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.ModelBuilder;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.AttributeMeta;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.model.BehaviorMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ClassMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ComponentMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ConverterMeta;
@@ -79,6 +80,7 @@ public class QdoxModelBuilder implements
 
     private static final String DOC_CONVERTER = "JSFConverter";
     private static final String DOC_VALIDATOR = "JSFValidator";
+    private static final String DOC_BEHAVIOR = "JSFBehavior";
     private static final String DOC_COMPONENT = "JSFComponent";
     private static final String DOC_RENDERER = "JSFRenderer";
     private static final String DOC_RENDERKIT = "JSFRenderKit";
@@ -313,6 +315,19 @@ public class QdoxModelBuilder implements
             }
         }
 
+        // post-process the list of behaviors
+        for (Iterator it = model.getBehaviors().iterator(); it.hasNext();)
+        {
+            BehaviorMeta behavior = (BehaviorMeta) it.next();
+            if (!behavior.getModelId().equals(currModelId))
+            {
+                continue;
+            }
+            QdoxHelper.initBehaviorAncestry(processedClasses, model, behavior);
+            // TODO: why is there no check for Behavior class existence here??
+            // ANS: there is no automatic generation of behavior class.
+        }
+
         // post-process the list of tags
         for (Iterator it = model.getTags().iterator(); it.hasNext();)
         {
@@ -329,7 +344,6 @@ public class QdoxModelBuilder implements
             }
             QdoxHelper.initFaceletTagHandlerAncestry(processedClasses, model, tag);            
         }
-
     }
 
     /**
@@ -342,7 +356,6 @@ public class QdoxModelBuilder implements
         {
             return;
         }
-
         // first, check that the parent type and all interfaces have been
         // processed.
         JavaClass parentClazz = clazz.getSuperJavaClass();
@@ -350,17 +363,14 @@ public class QdoxModelBuilder implements
         {
             processClass(processedClasses, parentClazz, model);
         }
-
         JavaClass[] classes = clazz.getImplementedInterfaces();
         for (int i = 0; i < classes.length; ++i)
         {
             JavaClass iclazz = classes[i];
             processClass(processedClasses, iclazz, model);
         }
-
         // ok, now we can mark this class as processed.
         processedClasses.put(clazz.getFullyQualifiedName(), clazz);
-
         log.info("processed class:" + clazz.getFullyQualifiedName());
         DocletTag tag;
         Annotation anno;
@@ -384,7 +394,7 @@ public class QdoxModelBuilder implements
                 processWebConfigParam(props, (AbstractJavaEntity)tag.getContext(), 
                         clazz, field, webConfig);
             }
-            anno = getAnnotation(field, DOC_WEB_CONFIG_PARAM);
+            anno = QdoxHelper.getAnnotation(field, DOC_WEB_CONFIG_PARAM);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -403,7 +413,7 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processConverter(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_CONVERTER);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_CONVERTER);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
@@ -416,12 +426,25 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processValidator(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_VALIDATOR);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_VALIDATOR);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
             processValidator(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
         }
+        // behaviors
+        tag = clazz.getTagByName(DOC_BEHAVIOR, false);
+        if (tag != null)
+        {
+            Map props = tag.getNamedParameterMap();
+            processBehavior(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
+        }
+        anno = QdoxHelper.getAnnotation(clazz, DOC_BEHAVIOR);
+        if (anno != null)
+        {
+            Map props = anno.getNamedParameterMap();
+            processBehavior(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
+        }
         // components
         tag = clazz.getTagByName(DOC_COMPONENT, false);
         if (tag != null)
@@ -429,7 +452,7 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processComponent(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_COMPONENT);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_COMPONENT);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
@@ -442,12 +465,21 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processTag(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_TAG);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_TAG);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
             processTag(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
         }
+
+        processClassForFaceletTagAnnotations(clazz, model, tag, anno);
+        processClassForRendekitAnnotation(clazz, model, tag, anno);
+        processClassForRendererAnnotations(clazz, model, tag, anno);
+    }
+    
+    private void processClassForFaceletTagAnnotations(JavaClass clazz, Model model, DocletTag tag, Annotation anno) 
+        throws MojoExecutionException
+    {
         //facelet tagHandler
         tag = clazz.getTagByName(DOC_FACELET_TAG, false);
         if (tag != null)
@@ -455,16 +487,16 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processFaceletTag(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_FACELET_TAG);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_FACELET_TAG);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
             processFaceletTag(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
         }        
-        anno = getAnnotation(clazz, DOC_FACELET_TAGS);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_FACELET_TAGS);
         if (anno != null)
         {
-            Object jspProps = anno.getNamedParameter("tags");            
+            Object jspProps = anno.getNamedParameter("tags");
             if (jspProps instanceof Annotation)
             {
                 Annotation jspPropertiesAnno = (Annotation) jspProps;
@@ -482,6 +514,10 @@ public class QdoxModelBuilder implements
                 }
             }
         }        
+    }
+    
+    private void processClassForRendekitAnnotation(JavaClass clazz, Model model, DocletTag tag, Annotation anno)
+    {
         // renderKit
         tag = clazz.getTagByName(DOC_RENDERKIT, false);
         if (tag != null)
@@ -489,12 +525,16 @@ public class QdoxModelBuilder implements
             Map props = tag.getNamedParameterMap();
             processRenderKit(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_RENDERKIT);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_RENDERKIT);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
             processRenderKit(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
         }
+    }
+    
+    private void processClassForRendererAnnotations(JavaClass clazz, Model model, DocletTag tag, Annotation anno)
+    {
         // renderer
         DocletTag [] tags = clazz.getTagsByName(DOC_RENDERER, false);
         for (int i = 0; i < tags.length; i++)
@@ -506,13 +546,13 @@ public class QdoxModelBuilder implements
                 processRenderer(props, (AbstractJavaEntity)tag.getContext(), clazz, model);
             }
         }
-        anno = getAnnotation(clazz, DOC_RENDERER);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_RENDERER);
         if (anno != null)
         {
             Map props = anno.getNamedParameterMap();
             processRenderer(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
         }
-        anno = getAnnotation(clazz, DOC_RENDERERS);
+        anno = QdoxHelper.getAnnotation(clazz, DOC_RENDERERS);
         if (anno != null)
         {
             Object jspProps = anno.getNamedParameter("renderers");
@@ -529,7 +569,6 @@ public class QdoxModelBuilder implements
                 for (int i = 0; i < jspPropsList.size();i++)
                 {
                     Annotation ranno = (Annotation) jspPropsList.get(i);
-                    
                     Map props = ranno.getNamedParameterMap();
                     processRenderer(props, (AbstractJavaEntity)anno.getContext(), clazz, model);
                 }
@@ -537,131 +576,6 @@ public class QdoxModelBuilder implements
         }
     }
 
-    private Annotation getAnnotation(AbstractJavaEntity entity, String annoName)
-    {
-        Annotation[] annos = entity.getAnnotations();
-        if (annos == null)
-        {
-            return null;
-        }
-        // String wanted = ANNOTATION_BASE + "." + annoName;
-        for (int i = 0; i < annos.length; ++i)
-        {
-            Annotation thisAnno = annos[i];
-            // Ideally, here we would check whether the fully-qualified name of
-            // the annotation
-            // class matches ANNOTATION_BASE + "." + annoName. However it
-            // appears that qdox 1.6.3
-            // does not correctly expand @Foo using the class import statements;
-            // method
-            // Annotation.getType.getJavaClass.getFullyQualifiedName still just
-            // returns the short
-            // class name. So for now, just check for the short name.
-            String thisAnnoName = thisAnno.getType().getJavaClass().getName();
-            
-            //Make short name for recognizing, if returns long
-            int containsPoint = thisAnnoName.lastIndexOf('.');
-            if (containsPoint != -1)
-            {
-                thisAnnoName = thisAnnoName.substring(containsPoint+1);
-            }
-            if (thisAnnoName.equals(annoName))
-            {
-                return thisAnno;
-            }
-        }
-        return null;
-    }
-    
-
-
-    /**
-     * Remove all leading whitespace and a quotemark if it exists.
-     * <p>
-     * Qdox comments like <code>foo val= "bar"</code> return a value with
-     * leading whitespace and quotes, so remove them.
-     */
-    private String clean(Object srcObj)
-    {
-        if (srcObj == null)
-        {
-            return null;
-        }
-
-        String src = srcObj.toString();
-        int start = 0;
-        int end = src.length();
-        
-        if (end == 0)
-        {
-            return src;
-        }
-        
-        if (src.equals("\"\""))
-        {
-            return "\"\"";
-        }
-
-        while (start <= end)
-        {
-            char c = src.charAt(start);
-            if (!Character.isWhitespace(c) && (c != '"'))
-            {
-                break;
-            }
-            ++start;
-        }
-        while (end >= start)
-        {
-            char c = src.charAt(end - 1);
-            if (!Character.isWhitespace(c) && (c != '"'))
-            {
-                break;
-            }
-            --end;
-        }
-        return src.substring(start, end);
-    }
-
-    /**
-     * Get the named attribute from a doc-annotation.
-     * 
-     * Param clazz is the class the annotation is attached to; only used when
-     * reporting errors.
-     */
-    private String getString(JavaClass clazz, String key, Map map, String dflt)
-    {
-        String val = clean(map.get(key));
-        if (val != null)
-        {
-            return val;
-        }
-        else
-        {
-            return dflt;
-        }
-    }
-
-    /**
-     * Get the named attribute from a doc-annotation and convert to a boolean.
-     * 
-     * Param clazz is the class the annotation is attached to; only used when
-     * reporting errors.
-     */
-    private Boolean getBoolean(JavaClass clazz, String key, Map map,
-            Boolean dflt)
-    {
-        String val = clean(map.get(key));
-        if (val == null)
-        {
-            return dflt;
-        }
-        // TODO: report problem if the value does not look like "true" or
-        // "false",
-        // rather than silently converting it to false.
-        return Boolean.valueOf(val);
-    }
-
     /**
      * Set the basic data on a ClassMeta.
      * <p>
@@ -721,14 +635,14 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
         
-        String name = getString(clazz, "name", props, 
+        String name = QdoxHelper.getString(clazz, "name", props, 
                 QdoxHelper.evaluateParameterInitializationExpression(
                         field.getInitializationExpression()));
-        String defaultValue = getString(clazz,"defaultValue",props,null);
-        String expectedValues = getString(clazz,"expectedValues",props,null);
-        String since = getString(clazz,"since",props,null);
+        String defaultValue = QdoxHelper.getString(clazz,"defaultValue",props,null);
+        String expectedValues = QdoxHelper.getString(clazz,"expectedValues",props,null);
+        String since = QdoxHelper.getString(clazz,"since",props,null);
         
         WebConfigParamMeta wcp = new WebConfigParamMeta();
         wcp.setName(name);
@@ -751,7 +665,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
 
         String converterIdDflt = null;
         JavaField fieldConverterId = clazz
@@ -759,21 +673,21 @@ public class QdoxModelBuilder implements
         if (fieldConverterId != null)
         {
             String value = fieldConverterId.getInitializationExpression();
-            converterIdDflt = clean(value.substring(value.indexOf('"')));
+            converterIdDflt = QdoxHelper.clean(value.substring(value.indexOf('"')));
         }        
-        String converterId = getString(clazz, "id", props, converterIdDflt);
+        String converterId = QdoxHelper.getString(clazz, "id", props, converterIdDflt);
 
         // Check for both "class" and "clazz" in order to support
         // doclet and real annotations.
-        String classNameOverride = getString(clazz, "class", props, null);
-        classNameOverride = getString(clazz,"clazz",props,classNameOverride);
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
         
-        String componentName = getString(clazz, "name", props, null);
-        String bodyContent = getString(clazz, "bodyContent", props, null);
-        String tagClass = getString(clazz, "tagClass", props, null);
-        String tagSuperclass = getString(clazz, "tagSuperclass", props, null);
-        String serialuidtag = getString(clazz, "serialuidtag", props, null);
-        Boolean configExcluded = getBoolean(clazz,"configExcluded",props,null);   
+        String componentName = QdoxHelper.getString(clazz, "name", props, null);
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, null);
+        String tagClass = QdoxHelper.getString(clazz, "tagClass", props, null);
+        String tagSuperclass = QdoxHelper.getString(clazz, "tagSuperclass", props, null);
+        String serialuidtag = QdoxHelper.getString(clazz, "serialuidtag", props, null);
+        Boolean configExcluded = QdoxHelper.getBoolean(clazz,"configExcluded",props,null);   
 
         ConverterMeta converter = new ConverterMeta();
         initClassMeta(model, clazz, converter, classNameOverride);
@@ -792,6 +706,51 @@ public class QdoxModelBuilder implements
         
         model.addConverter(converter);
     }
+    
+    private void processBehavior(Map props, AbstractJavaEntity ctx,
+            JavaClass clazz, Model model)
+    {
+        String longDescription = clazz.getComment();
+        String descDflt = QdoxHelper.getFirstSentence(longDescription);
+        if ((descDflt == null) || (descDflt.length() < 2))
+        {
+            descDflt = "no description";
+        }
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
+
+        String behaviorIdDflt = null;
+        JavaField fieldBehaviorId = clazz
+                .getFieldByName("BEHAVIOR_ID");
+        if (fieldBehaviorId != null)
+        {
+            String value = fieldBehaviorId.getInitializationExpression();
+            behaviorIdDflt = QdoxHelper.clean(value.substring(value.indexOf('"')));
+        }        
+        String behaviorId = QdoxHelper.getString(clazz, "id", props, behaviorIdDflt);
+
+        // Check for both "class" and "clazz" in order to support
+        // doclet and real annotations.
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
+        
+        String componentName = QdoxHelper.getString(clazz, "name", props, null);
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, null);
+        Boolean configExcluded = QdoxHelper.getBoolean(clazz,"configExcluded",props,null);
+
+        BehaviorMeta behavior = new BehaviorMeta();
+        initClassMeta(model, clazz, behavior, classNameOverride);
+        behavior.setName(componentName);
+        behavior.setBodyContent(bodyContent);
+        behavior.setBehaviorId(behaviorId);
+        behavior.setDescription(shortDescription);
+        behavior.setLongDescription(longDescription);
+        behavior.setConfigExcluded(configExcluded);
+        
+        // Now here walk the component looking for property annotations.
+        processComponentProperties(clazz, behavior);
+        
+        model.addBehavior(behavior);
+    }
         
     private void processValidator(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, Model model)
@@ -802,7 +761,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
 
         String validatorIdDflt = null;
         JavaField fieldConverterId = clazz
@@ -810,21 +769,21 @@ public class QdoxModelBuilder implements
         if (fieldConverterId != null)
         {
             String value = fieldConverterId.getInitializationExpression();
-            validatorIdDflt = clean(value.substring(value.indexOf('"')));
+            validatorIdDflt = QdoxHelper.clean(value.substring(value.indexOf('"')));
         }        
-        String validatorId = getString(clazz, "id", props, validatorIdDflt);
+        String validatorId = QdoxHelper.getString(clazz, "id", props, validatorIdDflt);
 
         // Check for both "class" and "clazz" in order to support
         // doclet and real annotations.
-        String classNameOverride = getString(clazz, "class", props, null);
-        classNameOverride = getString(clazz,"clazz",props,classNameOverride);
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
         
-        String componentName = getString(clazz, "name", props, null);
-        String bodyContent = getString(clazz, "bodyContent", props, null);
-        String tagClass = getString(clazz, "tagClass", props, null);        
-        String tagSuperclass = getString(clazz, "tagSuperclass", props, null);
-        String serialuidtag = getString(clazz, "serialuidtag", props, null);
-        Boolean configExcluded = getBoolean(clazz,"configExcluded",props,null);   
+        String componentName = QdoxHelper.getString(clazz, "name", props, null);
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, null);
+        String tagClass = QdoxHelper.getString(clazz, "tagClass", props, null);        
+        String tagSuperclass = QdoxHelper.getString(clazz, "tagSuperclass", props, null);
+        String serialuidtag = QdoxHelper.getString(clazz, "serialuidtag", props, null);
+        Boolean configExcluded = QdoxHelper.getBoolean(clazz,"configExcluded",props,null);   
         
         ValidatorMeta validator = new ValidatorMeta();
         initClassMeta(model, clazz, validator, classNameOverride);
@@ -848,10 +807,10 @@ public class QdoxModelBuilder implements
             JavaClass clazz, Model model)
     {
 
-        String renderKitId = getString(clazz, "renderKitId", props, null);
-        String renderKitClass = getString(clazz, "class", props, clazz
+        String renderKitId = QdoxHelper.getString(clazz, "renderKitId", props, null);
+        String renderKitClass = QdoxHelper.getString(clazz, "class", props, clazz
                 .getFullyQualifiedName());
-        renderKitClass = getString(clazz,"clazz",props,renderKitClass);
+        renderKitClass = QdoxHelper.getString(clazz,"clazz",props,renderKitClass);
 
         RenderKitMeta renderKit = model.findRenderKitById(renderKitId);
         
@@ -878,15 +837,15 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
    
-        String renderKitId = getString(clazz, "renderKitId", props, null);
-        String rendererClass = getString(clazz, "class", props, clazz
+        String renderKitId = QdoxHelper.getString(clazz, "renderKitId", props, null);
+        String rendererClass = QdoxHelper.getString(clazz, "class", props, clazz
                 .getFullyQualifiedName());
-        rendererClass = getString(clazz,"clazz",props,rendererClass);
+        rendererClass = QdoxHelper.getString(clazz,"clazz",props,rendererClass);
         
-        String componentFamily = getString(clazz,"family", props,null);
-        String rendererType = getString(clazz,"type", props,null);
+        String componentFamily = QdoxHelper.getString(clazz,"family", props,null);
+        String rendererType = QdoxHelper.getString(clazz,"type", props,null);
         
         RenderKitMeta renderKit = model.findRenderKitById(renderKitId);
         
@@ -914,14 +873,14 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
 
-        String tagName = getString(clazz, "name", props, null);
-        String classNameOverride = getString(clazz, "class", props, null);
-        classNameOverride = getString(clazz,"clazz",props,classNameOverride);
+        String tagName = QdoxHelper.getString(clazz, "name", props, null);
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
         
-        String bodyContent = getString(clazz, "bodyContent", props, "JSP");
-        String tagHandler = getString(clazz, "tagHandler", props, null);
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, "JSP");
+        String tagHandler = QdoxHelper.getString(clazz, "tagHandler", props, null);
 
         TagMeta tag = new TagMeta();
         initClassMeta(model, clazz, tag, classNameOverride);
@@ -947,19 +906,20 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
         
-        longDescription = getString(clazz,"longDescription",props, longDescription);
+        longDescription = QdoxHelper.getString(clazz,"longDescription",props, longDescription);
 
-        String tagName = getString(clazz, "name", props, null);
-        String classNameOverride = getString(clazz, "class", props, null);
-        classNameOverride = getString(clazz,"clazz",props,classNameOverride);
-        
-        String bodyContent = getString(clazz, "bodyContent", props, "JSP");
-        String componentClass = getString(clazz, "componentClass", props, null);
-        String tagClass = getString(clazz, "tagClass", props, null);
-        String converterClass = getString(clazz, "converterClass", props, null);
-        String validatorClass = getString(clazz, "validatorClass", props, null);
+        String tagName = QdoxHelper.getString(clazz, "name", props, null);
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
+        
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, "JSP");
+        String componentClass = QdoxHelper.getString(clazz, "componentClass", props, null);
+        String tagClass = QdoxHelper.getString(clazz, "tagClass", props, null);
+        String converterClass = QdoxHelper.getString(clazz, "converterClass", props, null);
+        String validatorClass = QdoxHelper.getString(clazz, "validatorClass", props, null);
+        String behaviorClass = QdoxHelper.getString(clazz, "behaviorClass", props, null);
 
         FaceletTagMeta tag = new FaceletTagMeta();
         initClassMeta(model, clazz, tag, classNameOverride);
@@ -971,6 +931,7 @@ public class QdoxModelBuilder implements
         tag.setTagClass(tagClass);
         tag.setConverterClass(converterClass);
         tag.setValidatorClass(validatorClass);
+        tag.setBehaviorClass(behaviorClass);
         
         processFaceletTagAttributes(clazz, tag);
         model.addFaceletTag(tag);
@@ -983,7 +944,7 @@ public class QdoxModelBuilder implements
         JavaField fieldComponentType = clazz.getFieldByName("COMPONENT_TYPE");
         if (fieldComponentType != null)
         {
-            componentTypeDflt = clean(fieldComponentType
+            componentTypeDflt = QdoxHelper.clean(fieldComponentType
                     .getInitializationExpression());
         }
 
@@ -992,7 +953,7 @@ public class QdoxModelBuilder implements
                 .getFieldByName("COMPONENT_FAMILY");
         if (fieldComponentFamily != null)
         {
-            componentTypeFamily = clean(fieldComponentFamily
+            componentTypeFamily = QdoxHelper.clean(fieldComponentFamily
                     .getInitializationExpression());
         }
 
@@ -1001,18 +962,18 @@ public class QdoxModelBuilder implements
                 .getFieldByName("DEFAULT_RENDERER_TYPE");
         if (fieldRendererType != null)
         {
-            rendererTypeDflt = clean(fieldRendererType
+            rendererTypeDflt = QdoxHelper.clean(fieldRendererType
                     .getInitializationExpression());
         }
 
-        String componentName = getString(clazz, "name", props, null);
+        String componentName = QdoxHelper.getString(clazz, "name", props, null);
 
         // Check for both "class" and "clazz" in order to support
         // doclet and real annotations.
-        String classNameOverride = getString(clazz, "class", props, null);
-        classNameOverride = getString(clazz,"clazz",props,classNameOverride);
+        String classNameOverride = QdoxHelper.getString(clazz, "class", props, null);
+        classNameOverride = QdoxHelper.getString(clazz,"clazz",props,classNameOverride);
                 
-        Boolean template = getBoolean(clazz,"template",props, null);
+        Boolean template = QdoxHelper.getBoolean(clazz,"template",props, null);
                 
         String longDescription = clazz.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1020,28 +981,28 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
 
-        String bodyContent = getString(clazz, "bodyContent", props, null);
+        String bodyContent = QdoxHelper.getString(clazz, "bodyContent", props, null);
         
-        String componentFamily = getString(clazz, "family", props,
+        String componentFamily = QdoxHelper.getString(clazz, "family", props,
                 componentTypeFamily);
-        String componentType = getString(clazz, "type", props,
+        String componentType = QdoxHelper.getString(clazz, "type", props,
                 componentTypeDflt);
-        String rendererType = getString(clazz, "defaultRendererType", props,
+        String rendererType = QdoxHelper.getString(clazz, "defaultRendererType", props,
                 rendererTypeDflt);
-        Boolean canHaveChildren = getBoolean(clazz, "canHaveChildren", props, null);
-        Boolean configExcluded = getBoolean(clazz,"configExcluded",props,null);        
+        Boolean canHaveChildren = QdoxHelper.getBoolean(clazz, "canHaveChildren", props, null);
+        Boolean configExcluded = QdoxHelper.getBoolean(clazz,"configExcluded",props,null);        
 
-        String tagClass = getString(clazz, "tagClass", props, null);
-        String tagSuperclass = getString(clazz, "tagSuperclass", props, null);
-        String tagHandler = getString(clazz, "tagHandler", props, null);
-        String defaultEventName = getString(clazz, "defaultEventName", props, null);
-        String serialuid = getString(clazz, "serialuid", props, null);
-        String implementsValue = getString(clazz, "implements", props, null);
-        implementsValue = getString(clazz, "implementz", props, implementsValue);
+        String tagClass = QdoxHelper.getString(clazz, "tagClass", props, null);
+        String tagSuperclass = QdoxHelper.getString(clazz, "tagSuperclass", props, null);
+        String tagHandler = QdoxHelper.getString(clazz, "tagHandler", props, null);
+        String defaultEventName = QdoxHelper.getString(clazz, "defaultEventName", props, null);
+        String serialuid = QdoxHelper.getString(clazz, "serialuid", props, null);
+        String implementsValue = QdoxHelper.getString(clazz, "implements", props, null);
+        implementsValue = QdoxHelper.getString(clazz, "implementz", props, implementsValue);
         
-        Boolean composite = getBoolean(clazz, "composite", props, null);
+        Boolean composite = QdoxHelper.getBoolean(clazz, "composite", props, null);
 
         ComponentMeta component = new ComponentMeta();
         initClassMeta(model, clazz, component, classNameOverride);
@@ -1125,7 +1086,7 @@ public class QdoxModelBuilder implements
                         method, ctag);
             }
 
-            Annotation anno = getAnnotation(method, DOC_JSP_ATTRIBUTE);
+            Annotation anno = QdoxHelper.getAnnotation(method, DOC_JSP_ATTRIBUTE);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1167,7 +1128,7 @@ public class QdoxModelBuilder implements
                         method, ctag);
             }
 
-            Annotation anno = getAnnotation(method, DOC_FACELET_TAG_ATTRIBUTE);
+            Annotation anno = QdoxHelper.getAnnotation(method, DOC_FACELET_TAG_ATTRIBUTE);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1187,7 +1148,7 @@ public class QdoxModelBuilder implements
                 processFaceletTagAttribute(props, (AbstractJavaEntity)tag.getContext(), clazz, field, ctag);
             }
 
-            Annotation anno = getAnnotation(field, DOC_FACELET_TAG_ATTRIBUTE);
+            Annotation anno = QdoxHelper.getAnnotation(field, DOC_FACELET_TAG_ATTRIBUTE);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1208,7 +1169,7 @@ public class QdoxModelBuilder implements
             
         }
         
-        Annotation jspPropertyAnno = getAnnotation(clazz, DOC_FACELET_TAG_ATTRIBUTE);
+        Annotation jspPropertyAnno = QdoxHelper.getAnnotation(clazz, DOC_FACELET_TAG_ATTRIBUTE);
         if (jspPropertyAnno != null)
         {
             Map props = jspPropertyAnno.getNamedParameterMap();
@@ -1216,7 +1177,7 @@ public class QdoxModelBuilder implements
                     clazz, ctag);
         }
         
-        Annotation jspAnno = getAnnotation(clazz, DOC_FACELET_TAG_ATTRIBUTES);        
+        Annotation jspAnno = QdoxHelper.getAnnotation(clazz, DOC_FACELET_TAG_ATTRIBUTES);        
         if (jspAnno != null)
         {
             Object jspProps = jspAnno.getNamedParameter("attributes");
@@ -1246,8 +1207,8 @@ public class QdoxModelBuilder implements
     private void processTagAttribute(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaMethod method, TagMeta tag)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue", props, null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1255,7 +1216,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
                 
         Type returnType = null;
         
@@ -1280,10 +1241,11 @@ public class QdoxModelBuilder implements
             }
         }
                 
-        String className = getString(clazz,"className",props, fullyQualifiedReturnType);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
-        String deferredMethodSignature = getString(clazz, "deferredMethodSignature", props, null);
-        Boolean exclude = getBoolean(clazz, "exclude", props, null);
+        String className = QdoxHelper.getString(clazz,"className",props, fullyQualifiedReturnType);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        String deferredMethodSignature = QdoxHelper.getString(clazz, "deferredMethodSignature", props, null);
+        Boolean exclude = QdoxHelper.getBoolean(clazz, "exclude", props, null);
+        Boolean faceletsOnly = QdoxHelper.getBoolean(clazz, "faceletsOnly", props, null);
         
         AttributeMeta a = new AttributeMeta();
         a.setName(QdoxHelper.methodToPropName(method.getName()));
@@ -1295,6 +1257,7 @@ public class QdoxModelBuilder implements
         a.setDeferredValueType(deferredValueType);
         a.setDeferredMethodSignature(deferredMethodSignature);
         a.setExclude(exclude);
+        a.setFaceletsOnly(faceletsOnly);
         
         tag.addAttribute(a);
     }
@@ -1302,22 +1265,23 @@ public class QdoxModelBuilder implements
     private void processTagAttribute(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, TagMeta tag)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue", props, null);
 
-        String longDescription = getString(clazz, "longDescription", props, null);
+        String longDescription = QdoxHelper.getString(clazz, "longDescription", props, null);
         String descDflt = longDescription;
         if ((descDflt == null) || (descDflt.length() < 2))
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
                 
-        String name = getString(clazz, "name", props, null);
-        String className = getString(clazz, "className", props, null);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
-        String deferredMethodSignature = getString(clazz, "deferredMethodSignature", props, null);
-        Boolean exclude = getBoolean(clazz, "exclude", props, null);
+        String name = QdoxHelper.getString(clazz, "name", props, null);
+        String className = QdoxHelper.getString(clazz, "className", props, null);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        String deferredMethodSignature = QdoxHelper.getString(clazz, "deferredMethodSignature", props, null);
+        Boolean exclude = QdoxHelper.getBoolean(clazz, "exclude", props, null);
+        Boolean faceletsOnly = QdoxHelper.getBoolean(clazz, "faceletsOnly", props, null);
                 
         AttributeMeta a = new AttributeMeta();
         a.setName(name);
@@ -1329,6 +1293,7 @@ public class QdoxModelBuilder implements
         a.setDeferredValueType(deferredValueType);
         a.setDeferredMethodSignature(deferredMethodSignature);
         a.setExclude(exclude);
+        a.setFaceletsOnly(faceletsOnly);
         
         tag.addAttribute(a);
     }
@@ -1339,8 +1304,8 @@ public class QdoxModelBuilder implements
     private void processFaceletTagAttribute(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaMethod method, FaceletTagMeta tag)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue", props, null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1348,7 +1313,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
                 
         Type returnType = null;
         
@@ -1373,10 +1338,10 @@ public class QdoxModelBuilder implements
             }
         }
                 
-        String className = getString(clazz,"className",props, fullyQualifiedReturnType);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
-        String deferredMethodSignature = getString(clazz, "deferredMethodSignature", props, null);
-        Boolean exclude = getBoolean(clazz, "exclude", props, null);
+        String className = QdoxHelper.getString(clazz,"className",props, fullyQualifiedReturnType);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        String deferredMethodSignature = QdoxHelper.getString(clazz, "deferredMethodSignature", props, null);
+        Boolean exclude = QdoxHelper.getBoolean(clazz, "exclude", props, null);
         
         AttributeMeta a = new AttributeMeta();
         a.setName(QdoxHelper.methodToPropName(method.getName()));
@@ -1398,22 +1363,22 @@ public class QdoxModelBuilder implements
     private void processFaceletTagAttribute(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, FaceletTagMeta tag)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue", props, null);
 
-        String longDescription = getString(clazz, "longDescription", props, null);
+        String longDescription = QdoxHelper.getString(clazz, "longDescription", props, null);
         String descDflt = longDescription;
         if ((descDflt == null) || (descDflt.length() < 2))
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
                 
-        String name = getString(clazz, "name", props, null);
-        String className = getString(clazz, "className", props, null);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
-        String deferredMethodSignature = getString(clazz, "deferredMethodSignature", props, null);
-        Boolean exclude = getBoolean(clazz, "exclude", props, null);
+        String name = QdoxHelper.getString(clazz, "name", props, null);
+        String className = QdoxHelper.getString(clazz, "className", props, null);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        String deferredMethodSignature = QdoxHelper.getString(clazz, "deferredMethodSignature", props, null);
+        Boolean exclude = QdoxHelper.getBoolean(clazz, "exclude", props, null);
                 
         AttributeMeta a = new AttributeMeta();
         a.setName(name);
@@ -1435,8 +1400,8 @@ public class QdoxModelBuilder implements
     private void processFaceletTagAttribute(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaField field, FaceletTagMeta tag)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue", props, null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1444,13 +1409,13 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
                 
-        String name = getString(clazz, "name", props, field.getName());
-        String className = getString(clazz, "className", props, null);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
-        String deferredMethodSignature = getString(clazz, "deferredMethodSignature", props, null);
-        Boolean exclude = getBoolean(clazz, "exclude", props, null);
+        String name = QdoxHelper.getString(clazz, "name", props, field.getName());
+        String className = QdoxHelper.getString(clazz, "className", props, null);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        String deferredMethodSignature = QdoxHelper.getString(clazz, "deferredMethodSignature", props, null);
+        Boolean exclude = QdoxHelper.getBoolean(clazz, "exclude", props, null);
                 
         AttributeMeta a = new AttributeMeta();
         a.setName(name);
@@ -1486,7 +1451,7 @@ public class QdoxModelBuilder implements
                         method, component);
             }
 
-            Annotation anno = getAnnotation(method, DOC_PROPERTY);
+            Annotation anno = QdoxHelper.getAnnotation(method, DOC_PROPERTY);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1520,7 +1485,7 @@ public class QdoxModelBuilder implements
                                 clazz, intfmethod, component);
                     }
 
-                    Annotation anno = getAnnotation(intfmethod, DOC_PROPERTY);
+                    Annotation anno = QdoxHelper.getAnnotation(intfmethod, DOC_PROPERTY);
                     if (anno != null)
                     {
                         Map props = anno.getNamedParameterMap();
@@ -1545,7 +1510,7 @@ public class QdoxModelBuilder implements
                     component);
         }
         
-        Annotation jspPropertyAnno = getAnnotation(clazz, DOC_JSP_PROPERTY);
+        Annotation jspPropertyAnno = QdoxHelper.getAnnotation(clazz, DOC_JSP_PROPERTY);
         if (jspPropertyAnno != null)
         {
             Map props = jspPropertyAnno.getNamedParameterMap();
@@ -1554,7 +1519,7 @@ public class QdoxModelBuilder implements
         }
         
         
-        Annotation jspAnno = getAnnotation(clazz, DOC_JSP_PROPERTIES);        
+        Annotation jspAnno = QdoxHelper.getAnnotation(clazz, DOC_JSP_PROPERTIES);        
         if (jspAnno != null)
         {
             Object jspProps = jspAnno.getNamedParameter("properties");
@@ -1564,7 +1529,7 @@ public class QdoxModelBuilder implements
                 Annotation jspPropertiesAnno = (Annotation) jspProps;
                 Map props = jspPropertiesAnno.getNamedParameterMap();
                 processComponentJspProperty(props, (AbstractJavaEntity)jspAnno.getContext(), clazz,
-                        component);               
+                        component);
             }
             else
             {
@@ -1575,7 +1540,7 @@ public class QdoxModelBuilder implements
 
                     Map props = anno.getNamedParameterMap();
                     processComponentJspProperty(props, (AbstractJavaEntity)jspAnno.getContext(), clazz,
-                            component);                    
+                            component);
                 }
             }
             
@@ -1598,7 +1563,7 @@ public class QdoxModelBuilder implements
                         method, component);
             }
 
-            Annotation anno = getAnnotation(method, DOC_FACET);
+            Annotation anno = QdoxHelper.getAnnotation(method, DOC_FACET);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1632,7 +1597,7 @@ public class QdoxModelBuilder implements
                                 clazz, intfmethod, component);
                     }
 
-                    Annotation anno = getAnnotation(intfmethod, DOC_FACET);
+                    Annotation anno = QdoxHelper.getAnnotation(intfmethod, DOC_FACET);
                     if (anno != null)
                     {
                         Map props = anno.getNamedParameterMap();
@@ -1663,7 +1628,7 @@ public class QdoxModelBuilder implements
                         method, component);
             }
 
-            Annotation anno = getAnnotation(method, DOC_LISTENER);
+            Annotation anno = QdoxHelper.getAnnotation(method, DOC_LISTENER);
             if (anno != null)
             {
                 Map props = anno.getNamedParameterMap();
@@ -1697,7 +1662,7 @@ public class QdoxModelBuilder implements
                                 clazz, intfmethod, component);
                     }
 
-                    Annotation anno = getAnnotation(intfmethod, DOC_LISTENER);
+                    Annotation anno = QdoxHelper.getAnnotation(intfmethod, DOC_LISTENER);
                     if (anno != null)
                     {
                         Map props = anno.getNamedParameterMap();
@@ -1769,18 +1734,18 @@ public class QdoxModelBuilder implements
     private void processComponentProperty(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaMethod method, PropertyHolder component)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean transientProp = getBoolean(clazz, "transient", props, null);
-        transientProp = getBoolean(clazz, "istransient", props, transientProp);
-        Boolean stateHolder = getBoolean(clazz, "stateHolder", props, null);
-        Boolean partialStateHolder = getBoolean(clazz, "partialStateHolder", props, null);
-        Boolean literalOnly = getBoolean(clazz, "literalOnly", props, null);
-        Boolean tagExcluded = getBoolean(clazz, "tagExcluded", props, null);
-        Boolean localMethod = getBoolean(clazz, "localMethod",props,null);
-        Boolean setMethod = getBoolean(clazz, "setMethod",props,null);
-        String localMethodScope = getString(clazz, "localMethodScope",props,null);
-        String setMethodScope = getString(clazz, "setMethodScope",props,null);
-        Boolean inheritedTag = getBoolean(clazz, "inheritedTag",props,null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean transientProp = QdoxHelper.getBoolean(clazz, "transient", props, null);
+        transientProp = QdoxHelper.getBoolean(clazz, "istransient", props, transientProp);
+        Boolean stateHolder = QdoxHelper.getBoolean(clazz, "stateHolder", props, null);
+        Boolean partialStateHolder = QdoxHelper.getBoolean(clazz, "partialStateHolder", props, null);
+        Boolean literalOnly = QdoxHelper.getBoolean(clazz, "literalOnly", props, null);
+        Boolean tagExcluded = QdoxHelper.getBoolean(clazz, "tagExcluded", props, null);
+        Boolean localMethod = QdoxHelper.getBoolean(clazz, "localMethod",props,null);
+        Boolean setMethod = QdoxHelper.getBoolean(clazz, "setMethod",props,null);
+        String localMethodScope = QdoxHelper.getString(clazz, "localMethodScope",props,null);
+        String setMethodScope = QdoxHelper.getString(clazz, "setMethodScope",props,null);
+        Boolean inheritedTag = QdoxHelper.getBoolean(clazz, "inheritedTag",props,null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1788,14 +1753,15 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
-        String returnSignature = getString(clazz, "returnSignature", props, null);
-        String methodSignature = getString(clazz, "methodSignature", props, null);
-        String defaultValue = getString(clazz,"defaultValue",props,null);
-        String jspName = getString(clazz,"jspName",props,null);
-        Boolean rtexprvalue = getBoolean(clazz, "rtexprvalue",props,null);
-        String clientEvent = getString(clazz, "clientEvent",props,null);
-        String deferredValueType = getString(clazz, "deferredValueType", props, null);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
+        String returnSignature = QdoxHelper.getString(clazz, "returnSignature", props, null);
+        String methodSignature = QdoxHelper.getString(clazz, "methodSignature", props, null);
+        String defaultValue = QdoxHelper.getString(clazz,"defaultValue",props,null);
+        String jspName = QdoxHelper.getString(clazz,"jspName",props,null);
+        Boolean rtexprvalue = QdoxHelper.getBoolean(clazz, "rtexprvalue",props,null);
+        String clientEvent = QdoxHelper.getString(clazz, "clientEvent",props,null);
+        String deferredValueType = QdoxHelper.getString(clazz, "deferredValueType", props, null);
+        Boolean faceletsOnly = QdoxHelper.getBoolean(clazz, "faceletsOnly", props, null);
 
         Type returnType = null;
         
@@ -1841,6 +1807,7 @@ public class QdoxModelBuilder implements
         p.setDeferredValueType(deferredValueType);
         p.setClientEvent(clientEvent);
         p.setInheritedTag(inheritedTag);
+        p.setFaceletsOnly(faceletsOnly);
         
         if (returnSignature != null)
         {
@@ -1874,7 +1841,7 @@ public class QdoxModelBuilder implements
     private void processComponentFacet(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaMethod method, FacetHolder component)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1882,7 +1849,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
         
         FacetMeta p = new FacetMeta();
         p.setName(QdoxHelper.methodToPropName(method.getName()));
@@ -1905,7 +1872,7 @@ public class QdoxModelBuilder implements
     private void processComponentListener(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, JavaMethod method, ListenerHolder component)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
 
         String longDescription = ctx.getComment();
         String descDflt = QdoxHelper.getFirstSentence(longDescription);
@@ -1913,7 +1880,7 @@ public class QdoxModelBuilder implements
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
         
         Type returnType = null;
         
@@ -1928,11 +1895,11 @@ public class QdoxModelBuilder implements
         
         String fullyQualifiedReturnType = returnType.getJavaClass().getFullyQualifiedName();
         fullyQualifiedReturnType = QdoxHelper.getFullyQualifiedClassName(clazz, fullyQualifiedReturnType);
-        fullyQualifiedReturnType = getString(clazz, "clazz", props, fullyQualifiedReturnType);
+        fullyQualifiedReturnType = QdoxHelper.getString(clazz, "clazz", props, fullyQualifiedReturnType);
         
-        String phases = getString(clazz, "phases", props, null);
-        String eventClassName = getString(clazz, "event", props, null);
-        String name = getString(clazz, "name", props, QdoxHelper.methodToPropName(method.getName()));
+        String phases = QdoxHelper.getString(clazz, "phases", props, null);
+        String eventClassName = QdoxHelper.getString(clazz, "event", props, null);
+        String name = QdoxHelper.getString(clazz, "name", props, QdoxHelper.methodToPropName(method.getName()));
         
         ListenerMeta p = new ListenerMeta();
         p.setName(name);
@@ -1955,23 +1922,23 @@ public class QdoxModelBuilder implements
     private void processComponentJspProperty(Map props, AbstractJavaEntity ctx,
             JavaClass clazz, PropertyHolder component)
     {
-        Boolean required = getBoolean(clazz, "required", props, null);
-        Boolean transientProp = getBoolean(clazz, "transient", props, null);
-        Boolean stateHolder = getBoolean(clazz, "stateHolder", props, null);
-        Boolean literalOnly = getBoolean(clazz, "literalOnly", props, null);
-        Boolean tagExcluded = getBoolean(clazz, "tagExcluded", props, null);
-        Boolean inheritedTag = getBoolean(clazz, "inheritedTag", props, null);
+        Boolean required = QdoxHelper.getBoolean(clazz, "required", props, null);
+        Boolean transientProp = QdoxHelper.getBoolean(clazz, "transient", props, null);
+        Boolean stateHolder = QdoxHelper.getBoolean(clazz, "stateHolder", props, null);
+        Boolean literalOnly = QdoxHelper.getBoolean(clazz, "literalOnly", props, null);
+        Boolean tagExcluded = QdoxHelper.getBoolean(clazz, "tagExcluded", props, null);
+        Boolean inheritedTag = QdoxHelper.getBoolean(clazz, "inheritedTag", props, null);
 
-        String longDescription = getString(clazz, "longDesc", props, null);
+        String longDescription = QdoxHelper.getString(clazz, "longDesc", props, null);
         
         String descDflt = longDescription;
         if ((descDflt == null) || (descDflt.length() < 2))
         {
             descDflt = "no description";
         }
-        String shortDescription = getString(clazz, "desc", props, descDflt);
-        String returnType = getString(clazz, "returnType", props, null);
-        String name = getString(clazz, "name", props, null);
+        String shortDescription = QdoxHelper.getString(clazz, "desc", props, descDflt);
+        String returnType = QdoxHelper.getString(clazz, "returnType", props, null);
+        String name = QdoxHelper.getString(clazz, "name", props, null);
         
         PropertyMeta p = new PropertyMeta();
         p.setName(name);

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocContentMojo.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocContentMojo.java?rev=941092&r1=941091&r2=941092&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocContentMojo.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocContentMojo.java Tue May  4 23:29:42 2010
@@ -50,6 +50,7 @@ import org.apache.maven.project.MavenPro
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.Flattener;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.IOUtils;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.model.BehaviorMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ClassMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ComponentMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ConverterMeta;
@@ -161,7 +162,13 @@ public class TagdocContentMojo extends A
      * @parameter expression="xdoc-validator.vm"
      */
     private String templateValidator;
-        
+
+    /**
+     * @since 1.0.6
+     * @parameter expression="xdoc-behavior.vm"
+     */
+    private String templateBehavior;
+    
     /**
      * @parameter expression="xdoc-tag.vm"
      */
@@ -276,6 +283,8 @@ public class TagdocContentMojo extends A
 
         Iterator converters = model.converters();
         
+        Iterator behaviors = model.behaviors();
+        
         Iterator tags = model.tags();
         
         Iterator faceletTags = model.faceletTags();
@@ -283,6 +292,7 @@ public class TagdocContentMojo extends A
         Set componentPages = new TreeSet();
         Set converterPages = new TreeSet();
         Set validatorPages = new TreeSet();
+        Set behaviorPages = new TreeSet();
         Set tagsPages = new TreeSet();
         Set faceletTagsPages = new TreeSet();
 
@@ -327,6 +337,19 @@ public class TagdocContentMojo extends A
                 }
             }
         }
+        while (behaviors.hasNext())
+        {
+            BehaviorMeta behavior = (BehaviorMeta) behaviors.next();
+            if (canGenerate(behavior))
+            {
+                String pageName = _generateBehaviorDoc(velocityEngine,baseContext,model,behavior);
+                if (pageName != null)
+                {
+                    behaviorPages.add(pageName);
+                    count++;
+                }
+            }
+        }
         while (tags.hasNext())
         {
             TagMeta tag = (TagMeta) tags.next();
@@ -689,6 +712,105 @@ public class TagdocContentMojo extends A
         return pageName;
     }
     
+    private String _generateBehaviorDoc(VelocityEngine velocityEngine, 
+            VelocityContext baseContext, Model model, BehaviorMeta behavior)
+            throws Exception
+    {
+        if (behavior.getName() == null)
+        {
+            return null;
+        }
+
+        String pageName = _toPageName(behavior.getName());
+        
+        Context context = new VelocityContext(baseContext);
+        context.put("behavior", behavior);
+        FaceletTagMeta faceletTag = model.findFaceletTagByName(behavior.getName());
+        if (faceletTag != null)
+        {
+            context.put("faceletTag", faceletTag);
+        }
+        
+        String baseContent = "";
+        
+        File xmlBaseFile = new File(baseFilesSourceDirectory, 
+                _platformAgnosticPath(pageName + "-base.xml"));
+        
+        if (xmlBaseFile != null && xmlBaseFile.exists())
+        {
+            if (getLog().isDebugEnabled())
+            {
+                getLog().debug("using base content file: "+xmlBaseFile.getPath());
+            }
+            
+            Reader reader = null;
+            try
+            {
+                reader = new FileReader(xmlBaseFile);
+                Xpp3Dom root = Xpp3DomBuilder.build(reader);
+                
+                StringWriter writer = new StringWriter();
+                
+                Xpp3Dom [] children = root.getChild("body").getChildren();
+                
+                for (int i = 0; i< children.length; i++)
+                {
+                    Xpp3Dom dom = children[i];
+                    Xpp3DomWriter.write(writer, dom);
+                }
+                baseContent = writer.toString();
+                writer.close();
+            }
+            catch (XmlPullParserException e)
+            {
+                throw new MojoExecutionException(
+                        "Error parsing base file: " + e.getMessage(), e);
+            }
+            finally
+            {
+                reader.close();
+            }
+        }
+        
+        baseContext.put("baseContent", baseContent);        
+        
+        Writer out = null;
+        
+        try
+        {        
+            File targetDir = new File(outputDirectory.getParentFile(),
+                    _platformAgnosticPath("generated-site/xdoc/"
+                            + _DOC_SUBDIRECTORY));
+            
+            if ( !targetDir.exists() )
+            {
+                targetDir.mkdirs();
+            }
+            File targetFile = new File(targetDir, pageName + ".xml");
+    
+            out = new OutputStreamWriter(new FileOutputStream(targetFile),
+                    "UTF-8");
+            
+            Template template = velocityEngine.getTemplate(getTemplateBehavior());
+            
+            template.merge(context, out);
+            
+            out.flush();
+        }
+        catch (Exception e)
+        {
+            throw new MojoExecutionException(
+                    "Error merging velocity templates: " + e.getMessage(), e);
+        }
+        finally
+        {
+            IOUtil.close(out);
+            out = null;
+        }
+
+        return pageName;
+    }
+    
     private String _generateTagDoc(VelocityEngine velocityEngine, 
             VelocityContext baseContext, Model model, TagMeta tag)
             throws Exception
@@ -825,6 +947,15 @@ public class TagdocContentMojo extends A
                 return null;
             }            
         }
+        if (faceletTag.getBehaviorClass() != null)
+        {
+            BehaviorMeta comp = model.findBehaviorByClassName(faceletTag.getBehaviorClass());
+            if (name.equals(comp.getName()))
+            {
+                //Exists in jsp and in facelets, but has specific facelets properties
+                return null;
+            }
+        }
         if (faceletTag.getTagClass() != null)
         {
             TagMeta comp = model.findTagByClassName(faceletTag.getTagClass());
@@ -1047,6 +1178,11 @@ public class TagdocContentMojo extends A
         return templateConverter;
     }
 
+    public String getTemplateBehavior()
+    {
+        return templateBehavior;
+    }
+
     public String getTemplateValidator()
     {
         return templateValidator;

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocIndexReport.java
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocIndexReport.java?rev=941092&r1=941091&r2=941092&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocIndexReport.java (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/java/org/apache/myfaces/buildtools/maven2/plugin/tagdoc/TagdocIndexReport.java Tue May  4 23:29:42 2010
@@ -35,6 +35,7 @@ import org.apache.maven.reporting.Abstra
 import org.apache.maven.reporting.MavenReportException;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.Flattener;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.IOUtils;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.model.BehaviorMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ClassMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ComponentMeta;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.model.ConverterMeta;
@@ -189,6 +190,8 @@ public class TagdocIndexReport extends A
 
         Iterator converters = model.converters();
         
+        Iterator behaviors = model.behaviors();
+        
         Iterator tags = model.tags();
         
         Iterator faceletTags = model.faceletTags();
@@ -206,6 +209,7 @@ public class TagdocIndexReport extends A
 
         Set componentPages = new TreeSet();
         Set converterPages = new TreeSet();
+        Set behaviorPages = new TreeSet();
         Set validatorPages = new TreeSet();
         Set tagsPages = new TreeSet();
         Set faceletTagPages = new TreeSet();
@@ -251,6 +255,20 @@ public class TagdocIndexReport extends A
                 }
             }
         }
+        while (behaviors.hasNext())
+        {
+            BehaviorMeta behavior = (BehaviorMeta) behaviors.next();
+            if (canGenerate(behavior))
+            {
+                String pageName = _generateBehaviorDoc(behavior);
+                if (pageName != null)
+                {
+                    behaviorPages.add(pageName);
+                    count++;
+                }
+            }
+        }
+
         while (tags.hasNext())
         {
             TagMeta tag = (TagMeta) tags.next();
@@ -326,6 +344,7 @@ public class TagdocIndexReport extends A
         _writeIndexSection(sink, componentPages, "Components");
         _writeIndexSection(sink, converterPages, "Converters");
         _writeIndexSection(sink, validatorPages, "Validators");
+        _writeIndexSection(sink, behaviorPages, "Behaviors");
         _writeIndexSection(sink, tagsPages, "JSF Tags");
         _writeIndexSection(sink, faceletTagPages, "JSF Facelet Tags");
         _writeIndexSection(sink, otherPages, "Miscellaneous");
@@ -429,6 +448,19 @@ public class TagdocIndexReport extends A
 
         return pageName;
     }
+    
+    private String _generateBehaviorDoc(BehaviorMeta behavior)
+            throws IOException
+    {
+        if (behavior.getName() == null)
+        {
+            return null;
+        }
+        
+        String pageName = _toPageName(behavior.getName());
+        
+        return pageName;
+    }
 
     private String _generateValidatorDoc(ValidatorMeta validator)
             throws IOException
@@ -492,6 +524,16 @@ public class TagdocIndexReport extends A
                 return null;
             }            
         }
+        if (tag.getBehaviorClass() != null)
+        {
+            BehaviorMeta comp = model.findBehaviorByClassName(tag.getBehaviorClass());
+            if (name.equals(comp.getName()))
+            {
+                //Exists in jsp and in facelets, but has specific facelets properties
+                return null;
+            }            
+        }
+
         if (tag.getTagClass() != null)
         {
             TagMeta comp = model.findTagByClassName(tag.getTagClass());

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/facelets-taglib20.vm
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/facelets-taglib20.vm?rev=941092&r1=941091&r2=941092&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/facelets-taglib20.vm (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/facelets-taglib20.vm Tue May  4 23:29:42 2010
@@ -27,12 +27,16 @@
     <composite-library-name>$compositeLibrary</composite-library-name>
 #end
 
+$baseContent
+
     <!-- Component Tags -->
 #set ($componentList = ${model.getComponents()})
 #foreach( $component in $componentList )
 #if ($modelIds.contains($component.modelId) 
-    && ($component.name) && ($component.name != "t:inputHtml"))
-#if (!$component.isConfigExcluded())
+    && ($component.name))
+#if (!$component.isConfigExcluded() && !$component.isComposite())
+## Check if we don't have a facelet tag taking precedence over this description
+#if (! ${model.findFaceletTagByName($component.name)})
     <tag>
         <tag-name>$utils.getTagName($component.name)</tag-name>
         <component>
@@ -50,13 +54,16 @@
 #end
 #end
 #end
+#end
 
    <!-- Converter tags -->
 #set ($componentList = ${model.getConverters()})
 #foreach( $component in $componentList )
 #if ($modelIds.contains($component.modelId) 
     && ($component.name))
-#if ($component.converterId) 
+#if ($component.converterId)
+## Check if we don't have a facelet tag taking precedence over this description
+#if (! ${model.findFaceletTagByName($component.name)}) 
     <tag>
         <tag-name>$utils.getTagName($component.name)</tag-name>
         <converter>
@@ -66,6 +73,7 @@
 #end
 #end
 #end
+#end
 
    <!-- Validator tags -->
 #set ($componentList = ${model.getValidators()})
@@ -73,6 +81,8 @@
 #if ($modelIds.contains($component.modelId) 
     && ($component.name))
 #if ($component.validatorId)
+## Check if we don't have a facelet tag taking precedence over this description
+#if (! ${model.findFaceletTagByName($component.name)})
     <tag>
         <tag-name>$utils.getTagName($component.name)</tag-name>
         <validator>
@@ -82,12 +92,34 @@
 #end
 #end
 #end
+#end
+
+   <!-- Behavior tags -->
+#set ($behaviorList = ${model.getBehaviors()})
+#foreach( $behavior in $behaviorList )
+#if ($modelIds.contains($behavior.modelId) 
+    && ($behavior.name))
+#if ($behavior.behaviorId)
+## Check if we don't have a facelet tag taking precedence over this description
+#if (! ${model.findFaceletTagByName($behavior.name)}) 
+    <tag>
+        <tag-name>$utils.getTagName($behavior.name)</tag-name>
+        <behavior>
+            <behavior-id>$behavior.behaviorId</behavior-id>
+        </behavior>
+    </tag>
+#end
+#end
+#end
+#end
     
    <!-- Single Tags -->
 #set ($tagList = $model.getTags())
 #foreach( $tag in $tagList )
 #if ($modelIds.contains($tag.modelId))
 #if ($tag.tagHandler)
+## Check if we don't have a facelet tag taking precedence over this description
+#if (! ${model.findFaceletTagByName($tag.name)})
    <tag>
       <tag-name>$utils.getTagName($tag.name)</tag-name>
       <handler-class>$tag.tagHandler</handler-class>
@@ -95,5 +127,43 @@
 #end
 #end
 #end
+#end
 
-</facelet-taglib>
\ No newline at end of file
+    <!-- Facelet Tags -->
+#set ($faceletTagList = $model.getFaceletTags())
+#foreach( $faceletTag in $faceletTagList )
+#if ($modelIds.contains($faceletTag.modelId) && ($faceletTag.name))
+#if ($utils.getTagPrefix($faceletTag.name) == $shortname)
+   <tag>
+      <tag-name>$utils.getTagName($faceletTag.name)</tag-name>
+#if ($faceletTag.componentClass)
+#set ($component = ${model.findComponentByClassName($faceletTag.componentClass)})
+    <component>
+        <component-type>$component.type</component-type>
+#if ($component.rendererType)
+#if (!($component.rendererType == ""))
+        <renderer-type>$component.rendererType</renderer-type>
+#end
+#end
+        <handler-class>$faceletTag.className</handler-class>
+    </component>
+#elseif ($faceletTag.converterClass)
+#set ($converter = ${model.findConverterByClassName($faceletTag.converterClass)})
+    <converter>
+        <converter-id>$converter.converterId</converter-id>
+        <handler-class>$faceletTag.className</handler-class>
+    </converter>
+#elseif ($faceletTag.behaviorClass)
+#set ($behavior = ${model.findBehaviorByClassName($faceletTag.behaviorClass)})
+    <behavior>
+        <behavior-id>$behavior.behaviorId</behavior-id>
+        <handler-class>$faceletTag.className</handler-class>
+    </behavior>
+#else
+    <handler-class>$faceletTag.className</handler-class>
+#end
+   </tag>
+#end
+#end
+#end
+</facelet-taglib>

Modified: myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/faces-config20.vm
URL: http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/faces-config20.vm?rev=941092&r1=941091&r2=941092&view=diff
==============================================================================
--- myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/faces-config20.vm (original)
+++ myfaces/myfaces-build-tools/trunk/maven2-plugins/myfaces-builder-plugin/src/main/resources/META-INF/faces-config20.vm Tue May  4 23:29:42 2010
@@ -57,6 +57,15 @@ $baseContent
   </validator>
 #end
 #end
+#set ($behaviorList = ${model.getBehaviors()})
+#foreach( $behavior in $behaviorList )
+#if ($modelIds.contains($behavior.modelId))
+  <behavior>
+    <behavior-id>$behavior.behaviorId</behavior-id>
+    <behavior-class>$behavior.className</behavior-class>
+  </behavior>
+#end
+#end
 #set ($renderKitList = ${model.getRenderKits()})
 #foreach( $renderKit in $renderKitList )
   <render-kit>