<?xml version="1.0"?>
<!--
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.
-->
<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: download-page-template.xml                            |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons-build:download-page                |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid     (required, alphabetic, lower case)      |
 |    - commons.release.version (required)                              |
 |    - commons.release.name    (required)                              |
 |    - commons.binary.suffix   (optional)                              |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |    - commons.release.desc    (optional)                              |
 |    - commons.release.subdir  (optional)                              |
 |    - commons.release.hash    (optional, lowercase, default sha512)   |
 |                                                                      |
 |    - commons.release.[234].version       (conditional)               |
 |    - commons.release.[234].name          (conditional)               |
 |    - commons.release.[234].binary.suffix (optional)                  |
 |    - commons.release.[234].desc          (optional)                  |
 |    - commons.release.[234].subdir        (optional)                  |
 |    - commons.release.[234].hash       (optional, lowercase, [sha512])|
 |                                                                      |
 | 3) Example Properties                                                |
 |    (commons.release.name inherited by parent:                        |
 |     ${project.artifactId}-${commons.release.version}                 |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download @NAME@</title>
    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download @NAME@">
    <subsection name="Using a Mirror">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> <a href="http://www.apache.org/info/verification.html">verify the integrity</a> of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not yet
        be available from all the mirrors.
      </p>

      <p>
        You are currently using <b>[preferred]</b>.  If you
        encounter a problem with this mirror, please select another
        mirror.  If all mirrors are failing, there are <i>backup</i>
        mirrors (at the end of the mirrors list) that should be
        available.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
      </p>

      <form action="[location]" method="get" id="SelectMirror">
        <p>
          Other mirrors:
          <select name="Preferred">
          [if-any http]
            [for http]<option value="[http]">[http]</option>[end]
          [end]
          [if-any ftp]
            [for ftp]<option value="[ftp]">[ftp]</option>[end]
          [end]
          [if-any backup]
            [for backup]<option value="[backup]">[backup] (backup)</option>[end]
          [end]
          </select>
          <input type="submit" value="Change"></input>
        </p>
      </form>

      <p>
        It is essential that you
        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
        failing that using the <code>@HASHUC@</code> hash (<code>*.@HASHLC@</code> checksum files).
      </p>
      <p>
        The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
        file contains the public PGP keys used by Apache Commons developers
        to sign releases.
      </p>
    </subsection>
    </section>
