<?xml version="1.0" encoding="utf-8"?>
<!--
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
-->
<taglib xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
        version="2.1">
   <!--
   <description>$description</description>
   <display-name>$displayname</display-name>
   <tlib-version>$version</tlib-version>
   <short-name>$shortname</short-name>
   <uri>$uri</uri>
   -->

$baseContent

    <!-- Component Tags -->
#set ($componentList = ${model.getComponents()})
#foreach( $component in $componentList )
#if ($modelIds.contains($component.modelId) 
    && ($component.name))
#if ($utils.getTagPrefix($component.name) == $shortname) 
   <tag>
      <description><![CDATA[$component.longDescription]]></description>
      <name>$utils.getTagName($component.name)</name>
      <tag-class>$component.tagClass</tag-class>
#if ($component.bodyContent)
      <body-content>$component.bodyContent</body-content>
#else
      <body-content>JSP</body-content>
#end
      
#set ($propertyList = ${component.propertyList})
#foreach( $property in $propertyList )
#if (!$property.isTagExcluded())
      <attribute>
#if ($property.longDescription)
         <description><![CDATA[$property.longDescription]]></description>
#else
         <description><![CDATA[]]></description>
#end
         <name>$property.jspName</name>
#if ($property.isRequired())
         <required>$property.isRequired()</required>
#end
#if ($property.isMethodExpression() || $property.isMethodBinding())
#if ($property.getMethodBindingSignature())
        <deferred-method>
#set ($sig = $property.getMethodBindingSignature())
            <method-signature>$sig.returnType myMethod(${sig.parameterTypesAsString})</method-signature>

        </deferred-method>
#else
## This is a very special case. If a property is MethodBinding or MethodExpression
## this should have a signature. If not, for allow multiple MethodBinding
## simulate a ValueExpression and write a custom code like in 
## org.apache.myfaces.custom.suggestajax.AbstractSuggestAjaxTag
         <deferred-value/>
#end
#elseif ($property.isLiteralOnly())
         <rtexprvalue>false</rtexprvalue>
#else
#if ( "$!property.isRtexprvalue()" == "")
#set ($type = $utils.getClassFromFullClass($property.className))
#if ($type == "String" || $type == "String[]" || $type == "Object" || $type == "List" || $type == "Date" || $type == "RowKeySet" || $type == "int[]")
         <deferred-value></deferred-value>
#else
         <deferred-value>
             <type>$property.className</type>
         </deferred-value>
#end
#else
         <rtexprvalue>$property.isRtexprvalue().booleanValue()</rtexprvalue>
#end
#end
      </attribute>
#end
#end
   </tag>
#end
#end
#end
   <!-- Converter tags -->
#set ($componentList = ${model.getConverters()})
#foreach( $component in $componentList )
#if ($modelIds.contains($component.modelId) 
    && ($component.name))
#if ($utils.getTagPrefix($component.name) == $shortname) 
   <tag>
#if ($component.longDescription)
      <description><![CDATA[$component.longDescription]]></description>
#end
      <name>$utils.getTagName($component.name)</name>
      <tag-class>$component.tagClass</tag-class>
#if ($component.bodyContent)
      <body-content>$component.bodyContent</body-content>
#else
      <body-content>empty</body-content>
#end

      <attribute>
        <name>id</name>
      </attribute>
#set ($propertyList = ${component.propertyList})
#foreach( $property in $propertyList )
#if (!$property.isTagExcluded())
      <attribute>
#if ($property.longDescription)
         <description><![CDATA[$property.longDescription]]></description>
#else
         <description><![CDATA[]]></description>
#end
         <name>$property.name</name>
#if ($property.isRequired())
         <required>$property.isRequired()</required>
#end
#if ($property.isLiteralOnly())
         <rtexprvalue>false</rtexprvalue>
#else
#set ($type = $utils.getClassFromFullClass($property.className))
#if ($type == "String" || $type == "String[]" || $type == "Object" || $type == "List" || $type == "Date" || $type == "RowKeySet" || $type == "int[]" || $type == "Locale" || $type == "TimeZone")
         <deferred-value></deferred-value>
#else
         <deferred-value>
             <type>$property.className</type>
         </deferred-value>
#end
#end
      </attribute>
#end
#end
   </tag>
#end
#end
#end
   <!-- Validator tags -->
#set ($componentList = ${model.getValidators()})
#foreach( $component in $componentList )
#if ($modelIds.contains($component.modelId) 
    && ($component.name))
#if ($utils.getTagPrefix($component.name) == $shortname) 
   <tag>
      <description><![CDATA[$component.longDescription]]></description>
      <name>$utils.getTagName($component.name)</name>
      <tag-class>$component.tagClass</tag-class>
#if ($component.bodyContent)
      <body-content>$component.bodyContent</body-content>
#else
      <body-content>empty</body-content>
#end
      
      <attribute>
        <name>id</name>
      </attribute>
#set ($propertyList = ${component.propertyList})
#foreach( $property in $propertyList )
#if (!$property.isTagExcluded())
      <attribute>
#if ($property.longDescription)
         <description><![CDATA[$property.longDescription]]></description>
#else
         <description><![CDATA[]]></description>
#end
         <name>$property.name</name>
#if ($property.isRequired())
         <required>$property.isRequired()</required>
#end
#if ($property.isLiteralOnly())
         <rtexprvalue>false</rtexprvalue>
#else
#set ($type = $utils.getClassFromFullClass($property.className))
#if ($type == "String" || $type == "String[]" || $type == "Object" || $type == "List" || $type == "Date" || $type == "RowKeySet" || $type == "int[]" || $type == "DateListProvider")
         <deferred-value></deferred-value>
#else
         <deferred-value>
             <type>$property.className</type>
         </deferred-value>
#end
#end
      </attribute>
#end
#end
   </tag>
#end
#end
#end
   <!-- Single Tags -->
#set ($tagList = $model.getTags())
#foreach( $tag in $tagList )
#if ($modelIds.contains($tag.modelId))
   <tag>
#if ($tag.longDescription)
      <description><![CDATA[$tag.longDescription]]></description>
#end
      <name>$utils.getTagName($tag.name)</name>
      <tag-class>$tag.className</tag-class>
      <body-content>$tag.bodyContent</body-content>
#set ($attributeList = ${tag.attributeList})
#foreach( $attribute in $attributeList )
#if (!$attribute.isExclude().booleanValue())
      <attribute>
#if ($attribute.longDescription)
         <description><![CDATA[$attribute.longDescription]]></description>
#else
         <description><![CDATA[]]></description>
#end
         <name>$attribute.name</name>
#if ($attribute.isRequired())
         <required>$attribute.isRequired()</required>
#end
#set ($type = $utils.getClassFromFullClass($attribute.className))
#if ($type == "MethodExpression")
        <deferred-method>
          <method-signature>${attribute.deferredMethodSignature}</method-signature>
        </deferred-method>
#elseif ($type == "ValueExpression")
         <deferred-value>#if($attribute.deferredValueType)$attribute.deferredValueType#end</deferred-value>
#else
         <rtexprvalue>$attribute.isRtexprvalue()</rtexprvalue>
#if ($attribute.className)         
         <type>$attribute.className</type>
#else
         <type>java.lang.String</type>
#end
#end
      </attribute>
#end
#end
   </tag>
#end
#end
</taglib>
