<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
 * 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.
-->

<project name="MyFaces Test Project">
  <bannerLeft>
    <name>Apache MyFaces</name>
    <src>img/banners/MyFaces_logo.jpg</src>
    <href>http://myfaces.apache.org/index.html</href>
  </bannerLeft>
    
  <bannerRight>
    <name>Apache Banner</name>
    <src>img/banners/apache_banner.png</src>
    <href>http://www.apache.org</href>
  </bannerRight>
    
  <publishDate format="dd MMM yyyy" />
    
  <skin>
    <groupId>org.apache.myfaces.maven</groupId>
    <artifactId>myfaces-site-skin</artifactId>
    <version>3</version>
  </skin>

  <body>
    <links>
      <item name="Using It"      href="./usecase.html"/>
      <item name="Examples"      href="./examples.html"/>
      <item name="1.2 Javadocs"  href="./myfaces-test12/apidocs/index.html"/>
      <item name="2.0 Javadocs"  href="./myfaces-test20/apidocs/index.html"/>
      <item name="2.2 Javadocs"  href="./myfaces-test22/apidocs/index.html"/>
      <item name="Download Myfaces Test" href="./download.html"/>
      <item name="Apache" href="http://www.apache.org"/>
      <item name="MyFaces" href="http://myfaces.apache.org/index.html"/>
    </links>
  
    <menu name="Apache MyFaces" inherit="top">
      <item name="Overview"       href="http://myfaces.apache.org/index.html"/>
      <item name="Download"       href="http://myfaces.apache.org/download.html"/>
    </menu>

    <menu name="MyFaces Projects" inherit="top">
        <item name="Core JSF-2.1"   href="../core21/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
        <item name="Core JSF-2.0"   href="../core20/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
        <item name="Core JSF-1.2"   href="../core12/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
        <item name="Core JSF-1.1"   href="../core11/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
    </menu>
    
    <menu name="UI-Component Sets" inherit="top">
        <item name="Trinidad"       href="../trinidad/index.html"/>
        <item name="Tobago"         href="../tobago/index.html"/>
        <item name="Tomahawk"       href="../tomahawk/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
    </menu>
    
    <menu name="Add-ons and Extensions" inherit="top">
        <item name="CODI"           href="../extensions/cdi/index.html"/>
        <item name="Orchestra"      href="../orchestra/index.html"/>
        <item name="ExtVal"         href="../extensions/validator/index.html"/>
        <item name="Portlet Bridge" href="../portlet-bridge/index.html"/>
        <item name="Test"           href="../test/index.html" collapse="false">
          <item name="Myfaces Test Framework for JSF 1.2 (and 1.1)" href="http://myfaces.apache.org/test/myfaces-test12/index.html"/>
          <item name="Myfaces Test Framework for JSF 2.0"           href="http://myfaces.apache.org/test/myfaces-test20/index.html"/>
        </item>
        <item name="Commons"        href="../commons/index.html"/>
        <item name="HTML5"          href="../html5/index.html"/>
        <item name="Sandbox"        href="../sandbox/index.html" collapse="true">
          <item name="dummy"        href="dummy"/>
        </item>
        <item name="Others"         href="../otherProjects.html"/>
    </menu>

    <menu name="Documentation" inherit="top">
      <item name="About"         href="./index.html"/>
      <item name="Using It"      href="./usecase.html"/>
      <item name="Examples"      href="./examples.html"/>
      <item name="1.2 Javadocs"  href="./myfaces-test12/apidocs/index.html"/>
      <item name="2.0 Javadocs"  href="./myfaces-test20/apidocs/index.html"/>
    </menu>

    <menu ref="reports" inherit="top"/>

    <menu name="Foundation" inherit="top">
      <item name="ASF"            href="http://www.apache.org/" />
      <item name="Sponsorship"    href="http://www.apache.org/foundation/sponsorship.html" />
      <item name="Thanks"         href="http://www.apache.org/foundation/thanks.html" />
    </menu>
  </body>
</project>
