<?xml version="1.0" encoding="UTF-8" ?>
<document>
 <properties>
  <title>&lt;${component.name}&gt;</title>
 </properties>
 <body>
  <section name="Summary">
  <p>
   <b>Tag name:</b> &lt;${component.name}&gt;
   <br/>
#set ($javadocPath = "../apidocs/" + $component.getClassName().replace('.', '/') )
   <b>UIComponent class:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${component.className}</a>
   <br/>
#if ($component.tagClass)
#set ($javadocPath = "../apidocs/" + $component.getTagClass().replace('.', '/') )
   <b>Tag class:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${component.tagClass}</a>
   <br/>
#end
   <b>Component type:</b> ${component.type}
   <br/>
   <b>Component family:</b> ${component.family}
   <br/>
#if (${component.rendererType})
   <b>Renderer type:</b> ${component.rendererType}
   <br/>
#set ($rendererClasses = $tagdocUtils.getRendererClasses($component,$model).values() )
#foreach ($rendererClass in $rendererClasses)
#set ($javadocPath = "../apidocs/" + $rendererClass.replace('.', '/') )
   <b>Renderer class:</b> <a href="${tagdocUtils.platformAgnosticPath( $javadocPath )}.html">${rendererClass}</a>
   <br/>
#end
#end
   <br/>      
${component.longDescription}   
  </p>
  </section>
#if ($baseContent)
$baseContent
#end
#set($facetList = ${tagdocUtils.getSortedFacetList($component)})
#if ($facetList.size() != 0)
  <section name="Supported Facets">
   <p>
   <table>
    <tr>
     <th>Name</th>
     <th>Required</th>
     <th>Description</th>
    </tr>
#foreach( $facet in $facetList )
    <tr>
     <td>$facet.name</td>
     <td>$facet.isRequired()</td>
#if ($facet.longDescription)
     <td>$facet.longDescription</td>
#else
     <td></td>
#end     
    </tr>
#end
   </table>
   </p>
  </section>
#end  
#set ($propertyList = ${tagdocUtils.getSortedPropertyList($component)})
#if ($propertyList.size() != 0)  
  <section name="Attributes">
<table>
 <tr>
  <th>Name</th>
  <th>Type</th>
  <th>Supports EL?</th>
  <th>Description</th>
 </tr>
#foreach( $property in $propertyList )
#if (!$property.isTagExcluded())
 <tr>
  <td>$property.jspName</td>
#set ($type = ${tagdocUtils.getDisplayType($component.className,$property.jspName,$property.className)})
  <td>$type</td>
#if ($property.jspName == "action")
  <td>Yes</td>
#elseif ($property.isMethodBinding() || $property.isMethodExpression())
  <td>Only EL</td>
#elseif ($property.jspName == "binding")
  <td>Only EL</td>
#elseif ($property.isLiteralOnly())
  <td>No</td>
#else
  <td>Yes</td>
#end
#if ($property.longDescription)
  <td>$property.longDescription</td>
#else
  <td></td>
#end
 </tr>
#end
#end
</table>
#end
  </section>
 </body> 
</document>