<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
 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.
-->
<!-- Generated by Apache Maven Doxia at $dateFormat.format( $currentDate ) -->
#macro ( link $href $name )
  #if ( ( $href.toLowerCase().startsWith("http") || $href.toLowerCase().startsWith("https") ) )
    <a href="$href" class="externalLink">$name</a>
  #else
    <a href="$href">$name</a>
  #end
#end
##
#macro ( linkWithImage $href $name $img $align )
  #if ( ( $href.toLowerCase().startsWith("http") || $href.toLowerCase().startsWith("https") ) )
    #if ( $align == "left" )
    <a href="$href" class="externalLink">$img $name</a>
    #else
    <a href="$href" class="externalLink">$name $img</a>
    #end
  #else
    #if ( $align == "left" )
    <a href="$href">$img $name</a>
    #else
    <a href="$href">$name $img</a>
    #end
  #end
#end
##
#macro ( banner $banner $id )
  #if ( $banner )
    #if( $banner.href )
      <a href="$banner.href" id="$id">
    #else
      <span id="$id">
    #end
##
    #if( $banner.src )
        #set ( $src = $banner.src )
        #if ( ! ( $src.toLowerCase().startsWith("http") || $src.toLowerCase().startsWith("https") ) )
            #set ( $src = $PathTool.calculateLink( $src, $relativePath ) )
            #set ( $src = $src.replaceAll( "\\", "/" ) )
        #end
        #if ( $banner.alt )
            #set ( $alt = $banner.alt )
        #else
            #set ( $alt = "" )
        #end
        <img src="$src" alt="$alt" />
    #else
        $banner.name
    #end
##
    #if( $banner.href )
        </a>
    #else
        </span>
    #end
  #end
#end
##
#macro ( links $links )
  #set ( $counter = 0 )
  #foreach( $item in $links )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
    #link( $currentItemHref $item.name )
    #if ( $links.size() > $counter )
      |
    #end
  #end
#end
##
#macro ( breadcrumbs $breadcrumbs )
  #set ( $counter = 0 )
  #foreach( $item in $breadcrumbs )
    #set ( $counter = $counter + 1 )
    #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
    #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
##
    #if ( $currentItemHref == $alignedFileName || $currentItemHref == "" )
      $item.name
    #else
      #link( $currentItemHref $item.name )
    #end
    #if ( $breadcrumbs.size() > $counter )
      &gt;
    #end
  #end
#end
##
#macro ( displayTree $display $item )
  #if ( $item && $item.items && $item.items.size() > 0 )
    #foreach( $subitem in $item.items )
      #set ( $subitemHref = $PathTool.calculateLink( $subitem.href, $relativePath ) )
      #set ( $subitemHref = $subitemHref.replaceAll( "\\", "/" ) )
##
      #if ( $alignedFileName == $subitemHref )
        #set ( $display = true )
      #end
##
      #displayTree( $display $subitem )
    #end
  #end
#end
##
#macro ( menuItem $item )
  #set ( $collapse = "none" )
  #set ( $currentItemHref = $PathTool.calculateLink( $item.href, $relativePath ) )
  #set ( $currentItemHref = $currentItemHref.replaceAll( "\\", "/" ) )
##
  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $item.collapse == false )
      #set ( $collapse = "expanded" )
    #else
      ## By default collapsed
      #set ( $collapse = "collapsed" )
    #end
##
    #set ( $display = false )
    #displayTree( $display $item )
##
    #if ( $alignedFileName == $currentItemHref || $display )
      #set ( $collapse = "expanded" )
    #end
  #end
  <li class="$collapse">
  #if ( $item.img )
    #if( $item.align )
      #set ( $align = $item.align )
    #else
      #set ( $align = "left" )
    #end
##
    #if ( ! ( $item.img.toLowerCase().startsWith("http") || $item.img.toLowerCase().startsWith("https") ) )
      #set ( $src = $PathTool.calculateLink( $item.img, $relativePath ) )
      #set ( $src = $src.replaceAll( "\\", "/" ) )
      #set ( $src = ' src="' + $src + '"' )
    #else
      #set ( $src = ' src="' + $item.img + '"' )
    #end
##
    #if( $item.alt )
      #set ( $alt = ' alt="' + $item.alt + '"' )
    #else
      #set ( $alt = ' alt="' + $item.name + '"' )
    #end
##
    #if( $item.border )
      #set ( $border = ' border="' + $item.border + '"' )
    #else
      #set ( $border = ' border="0"' )
    #end
##
    #if( $item.width )
      #set ( $width = ' width="' + $item.width + '"' )
    #else
      #set ( $width = "" )
    #end
    #if( $item.height )
      #set ( $height = ' height="' + $item.height + '"' )
    #else
      #set ( $height = "" )
    #end
##
    #set ( $img = '<img class="imageLink"' + $src + $alt + $border + $width + $height + "/>" )
##
    #if ( $align == "left" )
      #if ( $alignedFileName == $currentItemHref )
        <strong>$img $item.name</strong>
      #else
        #linkWithImage( $currentItemHref $item.name $img $align )
      #end
    #else
      #if ( $alignedFileName == $currentItemHref )
        <strong>$item.name $img</strong>
      #else
        #linkWithImage( $currentItemHref $item.name $img $align )
      #end
    #end
  #else
    #if ( $alignedFileName == $currentItemHref )
      <strong>$item.name</strong>
    #else
      #link( $currentItemHref $item.name )
    #end
  #end
  #if ( $item && $item.items && $item.items.size() > 0 )
    #if ( $collapse == "expanded" )
      <ul>
        #foreach( $subitem in $item.items )
          #menuItem( $subitem )
        #end
      </ul>
    #end
  #end
  </li>
#end
##
#macro ( mainMenu $menus )
  #foreach( $menu in $menus )
    #if ( $menu.name )
      #if ( $menu.img )
        #if( $menu.align )
          #set ( $align = $menu.align )
        #else
          #set ( $align = "left" )
        #end
##
        #if ( ! ( $menu.img.toLowerCase().startsWith("http") || $menu.img.toLowerCase().startsWith("https") ) )
          #set ( $src = $PathTool.calculateLink( $menu.img, $relativePath ) )
          #set ( $src = $src.replaceAll( "\\", "/" ) )
          #set ( $src = ' src="' + $src + '"' )
        #else
          #set ( $src = ' src="' + $menu.img + '"' )
        #end
##
        #if( $menu.alt )
          #set ( $alt = ' alt="' + $menu.alt + '"' )
        #else
          #set ( $alt = ' alt="' + $menu.name + '"' )
        #end
##
        #if( $menu.border )
          #set ( $border = ' border="' + $menu.border + '"' )
        #else
          #set ( $border = ' border="0"' )
        #end
##
        #if( $menu.width )
          #set ( $width = ' width="' + $menu.width + '"' )
        #else
          #set ( $width = "" )
        #end
        #if( $menu.height )
          #set ( $height = ' height="' + $menu.height + '"' )
        #else
          #set ( $height = "" )
        #end
##
        #set ( $img = '<img class="imageLink"' + $src + $alt + $border + $width + $height + "/>" )
##
        #if ( $align == "left" )
        <h5>$img $menu.name</h5>
        #else
        <h5>$menu.name $img</h5>
        #end
      #else
       <h5>$menu.name</h5>
      #end
    #end
    #if ( $menu.items && $menu.items.size() > 0 )
    <ul>
      #foreach( $item in $menu.items )
        #menuItem( $item )
      #end
    </ul>
    #end
  #end
#end
##
#macro ( copyright )
  #if ( $project )
    #set ( $currentYear = ${currentDate.year} + 1900 )
##
    #if ( ${project.inceptionYear} && ( ${project.inceptionYear} != ${currentYear.toString()} ) )
      ${project.inceptionYear}-${currentYear}
    #else
      ${currentYear}
    #end
##
    #if ( ${project.organization} && ${project.organization.name} )
      ${project.organization.name}
    #end
  #end
#end
##
#macro ( publishDate $position $publishDate $version )
  #if ( $publishDate && $publishDate.format )
    #set ( $format = $publishDate.format )
  #else
    #set ( $format = "yyyy-MM-dd" )
  #end
##
  $dateFormat.applyPattern( $format )
##
  #set ( $dateToday = $dateFormat.format( $currentDate ) )
##
  #if ( $publishDate && $publishDate.position )
    #set ( $datePosition = $publishDate.position )
  #else
    #set ( $datePosition = "left" )
  #end
##
  #if ( $version )
    #if ( $version.position )
      #set ( $versionPosition = $version.position )
    #else
      #set ( $versionPosition = "left" )
    #end
  #end
##
  #set ( $breadcrumbs = $decoration.body.breadcrumbs )
  #set ( $links = $decoration.body.links )
##
  #if ( $datePosition.equalsIgnoreCase( "right" ) && $links && $links.size() > 0 )
    #set ( $prefix = "&nbsp;|" )
  #else
    #set ( $prefix = "" )
  #end
##
  #if ( $datePosition.equalsIgnoreCase( $position ) )
    #if ( ( $datePosition.equalsIgnoreCase( "right" ) ) || ( $datePosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
      #if ( $versionPosition.equalsIgnoreCase( $position ) )
        &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
      #end
    #elseif ( ( $datePosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $datePosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
        #end
      </div>
    #elseif ( $datePosition.equalsIgnoreCase("left") )
      <div class="xleft">
        $i18n.getString( "site-renderer", $locale, "template.lastpublished" ): $dateToday
        #if ( $versionPosition.equalsIgnoreCase( $position ) )
          &nbsp;| $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
        #end
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $versionPosition.equalsIgnoreCase( $position ) )
    #if ( ( $versionPosition.equalsIgnoreCase( "right" ) ) || ( $versionPosition.equalsIgnoreCase( "bottom" ) ) )
      $prefix $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
    #elseif ( ( $versionPosition.equalsIgnoreCase( "navigation-bottom" ) ) || ( $versionPosition.equalsIgnoreCase( "navigation-top" ) ) )
      <div id="lastPublished">
        $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
      </div>
    #elseif ( $versionPosition.equalsIgnoreCase("left") )
      <div class="xleft">
        $i18n.getString( "site-renderer", $locale, "template.version" ): ${project.version}
        #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
          | #breadcrumbs( $breadcrumbs )
        #end
      </div>
    #end
  #elseif ( $position.equalsIgnoreCase( "left" ) )
    #if ( $breadcrumbs && $breadcrumbs.size() > 0 )
      <div class="xleft">
        #breadcrumbs( $breadcrumbs )
      </div>
    #end
  #end
#end
##
#macro ( poweredByLogo $poweredBy )
  #if( $poweredBy )
    #foreach ($item in $poweredBy)
      #if( $item.href )
        #set ( $href = $PathTool.calculateLink( $item.href, $relativePath ) )
        #set ( $href = $href.replaceAll( "\\", "/" ) )
      #else
        #set ( $href="http://maven.apache.org/" )
      #end
##
      #if( $item.name )
        #set ( $name = $item.name )
      #else
        #set ( $name = $i18n.getString( "site-renderer", $locale, "template.builtby" )  )
        #set ( $name = "${name} Maven"  )
      #end
##
      #if( $item.img )
        #set ( $img = $item.img )
      #else
        #set ( $img = "images/logos/maven-feather.png" )
      #end
##
      #if ( ! ( $img.toLowerCase().startsWith("http") || $img.toLowerCase().startsWith("https") ) )
        #set ( $img = $PathTool.calculateLink( $img, $relativePath ) )
        #set ( $img = $src.replaceAll( "\\", "/" ) )
      #end
##
      #if( $item.alt )
        #set ( $alt = ' alt="' + $item.alt + '"' )
      #else
        #set ( $alt = ' alt="' + $name + '"' )
      #end
##
      #if( $item.border )
        #set ( $border = ' border="' + $item.border + '"' )
      #else
        #set ( $border = "" )
      #end
##
      #if( $item.width )
        #set ( $width = ' width="' + $item.width + '"' )
      #else
        #set ( $width = "" )
      #end
      #if( $item.height )
        #set ( $height = ' height="' + $item.height + '"' )
      #else
        #set ( $height = "" )
      #end
##
      <a href="$href" title="$name" class="poweredBy">
        <img class="poweredBy" $alt src="$img" $border $width $height />
      </a>
      #end
      #if( $poweredBy.isEmpty() )
        <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
          <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"/>
        </a>
      #end
    #else
      <a href="http://maven.apache.org/" title="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" class="poweredBy">
        <img alt="$i18n.getString( "site-renderer", $locale, "template.builtby" ) Maven" src="$relativePath/images/logos/maven-feather.png"/>
      </a>
    #end
#end
##
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>$title</title>
    <style type="text/css" media="all">
      @import url("$relativePath/css/maven-base.css");
      @import url("$relativePath/css/maven-theme.css");
      @import url("$relativePath/css/site.css");
    </style>
    <link rel="stylesheet" href="$relativePath/css/print.css" type="text/css" media="print" />
    #foreach( $author in $authors )
    <meta name="author" content="$author" />
    #end
#if ( $dateCreation )
    <meta name="Date-Creation-yyyymmdd" content="$dateCreation" />
#end
#if ( $dateRevision )
    <meta name="Date-Revision-yyyymmdd" content="$dateRevision" />
#end
    <meta http-equiv="Content-Type" content="text/html; charset=${outputEncoding}" />
    #if ( $decoration.body.head )
      #foreach( $item in $decoration.body.head.getChildren() )
        ## Workaround for DOXIA-150 due to a non-desired behaviour in p-u
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toString()
        ## @see org.codehaus.plexus.util.xml.Xpp3Dom#toUnescapedString()
        #set ( $documentHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" )
        #set ( $documentHeader = $documentHeader.replaceAll( "\\", "" ) )
        #if ( $item.name == "script" )
          $StringUtils.replace( $item.toUnescapedString(), $documentHeader, "" )
        #else
          $StringUtils.replace( $item.toString(), $documentHeader, "" )
        #end
      #end
    #end
  </head>
  <body class="composite">
    <div id="banner">
      #banner( $decoration.bannerLeft "bannerLeft" )
      #banner( $decoration.bannerRight "bannerRight" )
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
      #publishDate( "left" $decoration.publishDate $decoration.version )
      <div class="xright">#links( $decoration.body.links )#publishDate( "right" $decoration.publishDate $decoration.version )</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
       #publishDate( "navigation-top" $decoration.publishDate $decoration.version )
       #mainMenu( $decoration.body.menus )
       #poweredByLogo( $decoration.poweredBy )
       #publishDate( "navigation-bottom" $decoration.publishDate $decoration.version )
      </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        $bodyContent
      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">&#169;#copyright()#publishDate( "bottom" $decoration.publishDate $decoration.version ) - <a href="http://maven.apache.org/privacy-policy.html">Privacy Policy</a></div><br />
      <div class="xright">Apache Whirr, Whirr, Apache, the Apache feather logo, and the Apache Whirr project logo are trademarks of The Apache Software Foundation.</div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
