<!--
    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.
-->
<!--
   Commons Build: Standard XDOC Pages Generation.

   $HeadURL$
   $Revision$ $Date$
 -->
<project name="Commons Build: Standard XDOC Pages Generation" basedir=".">

    <property name="commonsMojoId"      value="Commons:xdoc-generate" />
    <property name="commonsMojoXdocDir" value="resources/commons-xdoc-templates" />
    <property name="commonsMojoTempDir" value="target/commons-generated-xdocs" />
    <property name="level"              value="info" />

    <!-- ========== Generate Mailing List Page ================================ -->

    <target name="mail-page" description="Generate Mailing List page">

        <echo level="${level}" message="----- commons:mailing-list - Parameters - START -----" />
        <echo level="${level}" message="project.name         : ${project.name}" />
        <echo level="${level}" message="commons.componentid  : ${commons.componentid}" />
        <echo level="${level}" message="commons.xdoc.dir     : ${commons.xdoc.dir}" />
        <echo level="${level}" message="----- commons:mailing-list - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} Mailing List Page ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the issue-tracking template from mojo resources to temp directory -->
        <loadresource property="mailinglists-xml">
            <javaresource name="${commonsMojoXdocDir}/mail-lists-template.xml"/>
        </loadresource>
        <echo message="${mailinglists-xml}" file="${commonsMojoTempDir}/mail-lists-template.xml" append="false" />

        <!-- Copy the mail-lists template filtering to replace properties -->
        <copy file="${commonsMojoTempDir}/mail-lists-template.xml" tofile="${commonsMojoTempDir}/mail-lists.xml" overwrite="true">
            <filterset>
            <filter  token="NAME"         value="${project.name}"/>
            <filter  token="ID"           value="${commons.componentid}"/>
            </filterset>
        </copy>

        <!-- copy to either m1 or m2 xdoc directory -->
        <antcall target="copy-to-xdoc-dir">
            <param name="file.name" value="mail-lists.xml"/>
        </antcall>

    </target>

    <!-- ========== Generate Issue Tracking Page ============================== -->

    <target name="jira-page" description="Generate JIRA Issue Tracking page">

        <echo level="${level}" message="----- commons:jira-page - Parameters - START -----" />
        <echo level="${level}" message="project.name         : ${project.name}" />
        <echo level="${level}" message="commons.xdoc.dir     : ${commons.xdoc.dir}" />
        <echo level="${level}" message="commons.jira.id      : ${commons.jira.id}" />
        <echo level="${level}" message="commons.jira.pid     : ${commons.jira.pid}" />
        <echo level="${level}" message="----- commons:jira-page - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} Issue Tracking Page ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the issue-tracking template from mojo resources to temp directory -->
        <loadresource property="issuetracking-xml">
            <javaresource name="${commonsMojoXdocDir}/issue-tracking-template.xml"/>
        </loadresource>
        <echo message="${issuetracking-xml}" file="${commonsMojoTempDir}/issue-tracking-template.xml" append="false" />

        <!-- Copy the issue-tracking template filtering to replace properties -->
        <copy file="${commonsMojoTempDir}/issue-tracking-template.xml" tofile="${commonsMojoTempDir}/issue-tracking.xml" overwrite="true">
            <filterset>
            <filter  token="NAME"         value="${project.name}"/>
            <filter  token="JIRA_ID"      value="${commons.jira.id}"/>
            <filter  token="JIRA_PID"     value="${commons.jira.pid}"/>
            </filterset>
        </copy>

        <!-- copy to either m1 or m2 xdoc directory -->
        <antcall target="copy-to-xdoc-dir">
            <param name="file.name" value="issue-tracking.xml"/>
        </antcall>

    </target>


    <!-- ========== Generate Sandbox Issue Tracking Page ====================== -->

    <target name="sandbox-jira-page" description="Generate Sandbox JIRA Issue Tracking page">

        <echo level="${level}" message="----- commons:sandbox-jira-page - Parameters - START -----" />
        <echo level="${level}" message="project.name            : ${project.name}" />
        <echo level="${level}" message="commons.jira.componentid: ${commons.jira.componentid}" />
        <echo level="${level}" message="----- commons:sandbox-jira-page - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} Sandbox Issue Tracking Page ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the issue-tracking template from mojo resources to temp directory -->
        <loadresource property="sandbox-issuetracking-xml">
            <javaresource name="${commonsMojoXdocDir}/sandbox-issue-tracking-template.xml"/>
        </loadresource>
        <echo message="${sandbox-issuetracking-xml}" file="${commonsMojoTempDir}/sandbox-issue-tracking-template.xml" append="false" />

        <!-- Copy the issue-tracking template filtering to replace properties -->
        <copy file="${commonsMojoTempDir}/sandbox-issue-tracking-template.xml" tofile="${commonsMojoTempDir}/issue-tracking.xml" overwrite="true">
            <filterset>
            <filter  token="NAME"             value="${project.name}"/>
            <filter  token="JIRA_COMPONENTID" value="${commons.jira.componentid}"/>
            </filterset>
        </copy>

        <!-- copy to either m1 or m2 xdoc directory -->
        <antcall target="copy-to-xdoc-dir">
            <param name="file.name" value="issue-tracking.xml"/>
        </antcall>

    </target>


    <!-- ========== Generate Download Page ==================================== -->

    <target name="download-page" description="Generate Download page">

        <echo level="${level}" message="----- commons:download-page - Parameters - START -----" />
        <echo level="${level}" message="project.name             : ${project.name}" />
        <echo level="${level}" message="commons.componentid      : ${commons.componentid}" />
        <echo level="${level}" message="commons.release.version  : ${commons.release.version}" />
        <echo level="${level}" message="commons.release.name     : ${commons.release.name}" />
        <echo level="${level}" message="commons.release.desc     : ${commons.release.desc}" />
        <echo level="${level}" message="commons.binary.suffix    : ${commons.binary.suffix}" />
        <echo level="${level}" message="commons.release.subdir   : ${commons.release.subdir}" />
        <echo level="${level}" message="commons.release.2.version: ${commons.release.2.version}" />
        <echo level="${level}" message="commons.release.2.name   : ${commons.release.2.name}" />
        <echo level="${level}" message="commons.release.2.desc   : ${commons.release.2.desc}" />
        <echo level="${level}" message="commons.release.2.binary.suffix: ${commons.release.2.binary.suffix}" />
        <echo level="${level}" message="commons.release.2.subdir : ${commons.release.2.subdir}" />
        <echo level="${level}" message="commons.release.3.version: ${commons.release.3.version}" />
        <echo level="${level}" message="commons.release.3.name   : ${commons.release.3.name}" />
        <echo level="${level}" message="commons.release.3.desc   : ${commons.release.3.desc}" />
        <echo level="${level}" message="commons.release.3.binary.suffix: ${commons.release.3.binary.suffix}" />
        <echo level="${level}" message="commons.release.3.subdir : ${commons.release.3.subdir}" />
        <echo level="${level}" message="----- commons:download-page - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} ${commons.release.version} Download Page ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the dowload-page template from mojo resources to temp directory -->
        <antcall target="load-no-download-page-template"/>
        <antcall target="load-download-page-head"/>
        <antcall target="load-download-page-body-1"/>
        <antcall target="load-download-page-body-2"/>
        <antcall target="load-download-page-body-3"/>
        <antcall target="load-download-page-foot"/>

        <!-- copy to either m1 or m2 xdoc directory -->
        <antcall target="copy-to-xdoc-dir">
            <param name="file.name" value="download_${commons.componentid}.xml"/>
        </antcall>
    </target>

    <target name="load-download-page-head" if="commons.release.version">
        <echo  level="info" message="*** loading download-page header file ***" />

        <!-- Load header -->
        <loadresource property="download-page-head-xml">
            <javaresource name="${commonsMojoXdocDir}/download-page-head.xml"/>
            <filterchain>
                <replacetokens>
                    <token key="NAME" value="${project.name}"/>
                </replacetokens>
            </filterchain>
        </loadresource>
        <echo message="${download-page-head-xml}" file="${commonsMojoTempDir}/download_${commons.componentid}.xml" append="false" />

    </target>

    <target name="load-download-page-body-1" if="commons.release.version">
        <echo  level="info" message="*** loading download-page body(1) file***" />

        <condition property="BINDIR" value="${commons.release.subdir}" else="binaries">
          <isset property="commons.release.subdir"/>
        </condition>
        <condition property="SRCDIR" value="${commons.release.subdir}" else="source">
          <isset property="commons.release.subdir"/>
        </condition>

        <!-- Load Body -->
        <loadresource property="download-page-body-1-xml">
            <javaresource name="${commonsMojoXdocDir}/download-page-body.xml"/>
            <filterchain>
                <replacetokens>
                    <token key="VERSION"       value="${commons.release.version}"/>
                    <token key="RELDESC"       value="${commons.release.desc}"/>
                    <token key="NAME"          value="${project.name}"/>
                    <token key="ID"            value="${commons.componentid}"/>
                    <token key="FINAL_NAME"    value="${commons.release.name}"/>
                    <token key="BINARY-SUFFIX" value="${commons.binary.suffix}"/>
                    <token key="BINDIR"        value="${BINDIR}"/>
                    <token key="SRCDIR"        value="${SRCDIR}"/>
                </replacetokens>
            </filterchain>
        </loadresource>
        <echo message="${download-page-body-1-xml}" file="${commonsMojoTempDir}/download_${commons.componentid}.xml" append="true" />

    </target>

    <target name="load-download-page-body-2" if="commons.release.2.version">
      <echo  level="info" message="*** loading download-page body(2) file***" />

      <condition property="BINDIR" value="${commons.release.2.subdir}" else="binaries">
        <isset property="commons.release.2.subdir"/>
      </condition>
      <condition property="SRCDIR" value="${commons.release.2.subdir}" else="source">
        <isset property="commons.release.2.subdir"/>
      </condition>

        <!-- Load Body -->
        <loadresource property="download-page-body-2-xml">
            <javaresource name="${commonsMojoXdocDir}/download-page-body.xml"/>
            <filterchain>
                <replacetokens>
                    <token key="VERSION"       value="${commons.release.2.version}"/>
                    <token key="RELDESC"       value="${commons.release.2.desc}"/>
                    <token key="NAME"          value="${project.name}"/>
                    <token key="ID"            value="${commons.componentid}"/>
                    <token key="FINAL_NAME"    value="${commons.release.2.name}"/>
                    <token key="BINARY-SUFFIX" value="${commons.release.2.binary.suffix}"/>
                    <token key="BINDIR"        value="${BINDIR}"/>
                    <token key="SRCDIR"        value="${SRCDIR}"/>
                </replacetokens>
            </filterchain>
        </loadresource>
        <echo message="${download-page-body-2-xml}" file="${commonsMojoTempDir}/download_${commons.componentid}.xml" append="true" />

    </target>

    <target name="load-download-page-body-3" if="commons.release.3.version">
      <echo  level="info" message="*** loading download-page body(3) file***" />

      <condition property="BINDIR" value="${commons.release.3.subdir}" else="binaries">
        <isset property="commons.release.3.subdir"/>
      </condition>
      <condition property="SRCDIR" value="${commons.release.3.subdir}" else="source">
        <isset property="commons.release.3.subdir"/>
      </condition>

        <!-- Load Body -->
        <loadresource property="download-page-body-3-xml">
            <javaresource name="${commonsMojoXdocDir}/download-page-body.xml"/>
            <filterchain>
                <replacetokens>
                    <token key="VERSION"       value="${commons.release.3.version}"/>
                    <token key="RELDESC"       value="${commons.release.3.desc}"/>
                    <token key="NAME"          value="${project.name}"/>
                    <token key="ID"            value="${commons.componentid}"/>
                    <token key="FINAL_NAME"    value="${commons.release.3.name}"/>
                    <token key="BINARY-SUFFIX" value="${commons.release.3.binary.suffix}"/>
                    <token key="BINDIR"        value="${BINDIR}"/>
                    <token key="SRCDIR"        value="${SRCDIR}"/>
                </replacetokens>
            </filterchain>
        </loadresource>
        <echo message="${download-page-body-3-xml}" file="${commonsMojoTempDir}/download_${commons.componentid}.xml" append="true" />

    </target>

    <target name="load-download-page-foot" if="commons.release.version">
        <echo  level="info" message="*** loading download-page footer files ***" />

        <!-- Load Footer -->
        <loadresource property="download-page-foot-xml">
            <javaresource name="${commonsMojoXdocDir}/download-page-foot.xml"/>
            <filterchain>
                <replacetokens>
                    <token key="ID"            value="${commons.componentid}"/>
                </replacetokens>
            </filterchain>
        </loadresource>
        <echo message="${download-page-foot-xml}" file="${commonsMojoTempDir}/download_${commons.componentid}.xml" append="true" />

    </target>

    <target name="load-no-download-page-template" unless="commons.release.version">
        <echo  level="info" message="*** copying no-download-page-template.xml ***" />
        <loadresource property="no-downloadpage-xml">
            <javaresource name="${commonsMojoXdocDir}/no-download-page-template.xml"/>
        </loadresource>
        <echo message="${no-downloadpage-xml}" file="${commonsMojoTempDir}/download-page-template.xml" append="false" />
    </target>

    <target name="copy-to-xdoc-dir">
        <available file="xdocs"         type="dir" property="m1.xdocs.lib.present"/>
        <available file="src/site/xdoc" type="dir" property="m2.xdocs.lib.present"/>
        <antcall target="copy-to-m1-xdoc-dir"/>
        <antcall target="copy-to-m2-xdoc-dir"/>
    </target>

    <target name="copy-to-m1-xdoc-dir" if="m1.xdocs.lib.present">
        <echo level="info" message="*** Copying ${file.name} to m1 xdocs dir ***" />
        <copy file="${commonsMojoTempDir}/${file.name}" tofile="xdocs/${file.name}" overwrite="true" filtering="true"/>
    </target>

    <target name="copy-to-m2-xdoc-dir" if="m2.xdocs.lib.present">
        <echo level="info" message="*** Copying ${file.name} to m2 src/site/xdoc dir ***" />
        <copy file="${commonsMojoTempDir}/${file.name}" tofile="src/site/xdoc/${file.name}" overwrite="true" filtering="true"/>
    </target>

    <!-- ========== Generate README.md file ================================ -->

    <target name="readme-md" description="Generate README.md">

        <echo level="${level}" message="----- commons:readme-md - Parameters - START -----" />
        <echo level="${level}" message="project.name              : ${project.name}" />
        <echo level="${level}" message="project.artifactId        : ${project.artifactId}" />
        <echo level="${level}" message="project.groupId           : ${project.groupId}" />
        <echo level="${level}" message="commons.release.version   : ${commons.release.version}" />
        <echo level="${level}" message="commons.componentid       : ${commons.componentid}" />
        <echo level="${level}" message="----- commons:readme-md - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} README.md ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the readme-md template from mojo resources to temp directory -->
        <loadresource property="readme-md">
            <javaresource name="${commonsMojoXdocDir}/readme-md-template.md"/>
        </loadresource>
        <echo message="${readme-md}" file="${commonsMojoTempDir}/readme-md-template.md" append="false" />

        <!-- Without using ant-contrib: remove "-project" for multi-module artifacts -->
        <loadresource property="tmp.artifactId">
            <propertyresource name="project.artifactId" />
            <filterchain>
                <tokenfilter>
                    <filetokenizer/>
                    <replacestring from="-project" to=""/>
                </tokenfilter>
            </filterchain>
        </loadresource>

        <!-- Copy the readme-md template filtering to replace properties -->
        <copy file="${commonsMojoTempDir}/readme-md-template.md" tofile="README.md" overwrite="true">
            <filterset>
             <filter  token="NAME"           value="${project.name}"/>
             <filter  token="ARTIFACTID"     value="${project.artifactId}"/>
             <filter  token="ARTIFACTCOREID" value="${tmp.artifactId}"/>
             <filter  token="GROUPID"        value="${project.groupId}"/>
             <filter  token="VERSION"        value="${commons.release.version}"/>
             <filter  token="DESCRIPTION"    value="${project.description}"/>
             <filter  token="ID"             value="${commons.componentid}"/>
            </filterset>
        </copy>

    </target>

    <!-- ========== Generate CONTRIBUTING.md file ================================ -->

    <target name="contributing-md" description="Generate CONTRIBUTING.md">

        <echo level="${level}" message="----- commons:readme-md - Parameters - START -----" />
        <echo level="${level}" message="project.name              : ${project.name}" />
        <echo level="${level}" message="project.artifactId        : ${project.artifactId}" />
        <echo level="${level}" message="commons.jira.id           : ${commons.jira.id}" />
        <echo level="${level}" message="commons.componentid       : ${commons.componentid}" />
        <echo level="${level}" message="----- commons:readme-md - Parameters - END   -----" />

        <echo level="info" message="*** Generating ${project.name} CONTRIBUTING.md ***" />

        <!-- Create a temporary directory to load the template files into -->
        <mkdir dir="${commonsMojoTempDir}"/>

        <!-- Load the contributing-md template from mojo resources to temp directory -->
        <loadresource property="contributing-md">
           <javaresource name="${commonsMojoXdocDir}/contributing-md-template.md"/>
        </loadresource>
        <echo message="${contributing-md}" file="${commonsMojoTempDir}/contributing-md-template.md" append="false" />

        <!-- Without using ant-contrib: remove "-project" for multi-module artifacts -->
        <loadresource property="tmp.artifactId">
            <propertyresource name="project.artifactId" />
            <filterchain>
                <tokenfilter>
                    <filetokenizer/>
                    <replacestring from="-project" to=""/>
                </tokenfilter>
            </filterchain>
        </loadresource>

        <!-- Copy the mail-lists template filtering to replace properties -->
        <copy file="${commonsMojoTempDir}/contributing-md-template.md" tofile="CONTRIBUTING.md" overwrite="true">
            <filterset>
                <filter  token="NAME"            value="${project.name}"/>
                <filter  token="ARTIFACTID"      value="${project.artifactId}"/>
                <filter  token="ARTIFACTCOREID"  value="${tmp.artifactId}"/>
                <filter  token="JIRA_ID"         value="${commons.jira.id}"/>
                <filter  token="ID"              value="${commons.componentid}"/>
            </filterset>
        </copy>

    </target>

</project>
