<!--
   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 build script expects two properties:
- version.qualifier : defines which version append to the version defined in the manifests.
                      It will probably be "alpha1", "beta4", "RC1" or even "patch-4".
- baseLocation      : the full path to the SDK version of Eclipse in order to build the binary jars.

   Properties could be set in the two files :
- build.properties       : properties shared between developers, so under version control.
                           The version.qualifier property should be set there.
- local.build.properties : properties handled by developers, ignored by subversion.
                           The baseLocation property should be set there.
-->
<project name="ivyde" basedir="." default="build" xmlns:ivy="antlib:org.apache.ivy.ant"
        xmlns:asciidoctor="antlib:org.asciidoctor.ant">

    <property file="local.build.properties"/>
    <property file="build.properties"/>
    <property environment="env"/>

    <property name="work.dir" value="${basedir}/work"/>
    <property name="ivy.work.dir" value="${work.dir}/ivy"/>
    <property name="doc.dir" value="${basedir}/doc"/>
    <property name="src.doc.dir" value="${doc.dir}/src"/>
    <property name="dist.dir" value="${basedir}/dist"/>
    <property name="dist.work.dir" value="${work.dir}/dist"/>
    <property name="dist.work.doc.dir" value="${dist.work.dir}/doc"/>
    <property name="eclipse.work.dir" value="${work.dir}/eclipse"/>
    <property name="eclipse-doc.dir" value="${basedir}/org.apache.ivyde.eclipse/doc"/>
    <property name="checkstyle.src.dir" value="${basedir}/org.apache.ivyde.eclipse/src/etc/checkstyle"/>
    <property name="checkstyle.report.dir" value="${basedir}/checkstyle/report"/>
    <property name="checkstyle.lib" value="${basedir}/checkstyle/lib"/>
    <property name="rat.dir" value="${work.dir}/rat"/>

    <target name="download-ivy" unless="ivy.jar.file">
        <property name="ivy.jar.url"  value="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar"/>
        <property name="ivy.jar.dir"  value="${work.dir}"/>
        <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>
        <mkdir dir="${ivy.jar.dir}"/>
        <get src="${ivy.jar.url}" dest="${ivy.jar.file}" usetimestamp="true"/>
    </target>

    <target name="init-ivy" depends="download-ivy">
        <path id="ivy.lib.path">
            <pathelement location="${ivy.jar.file}"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>

    <target name="init-asciidoctor-extensions" depends="init-ivy" unless="skip.doc">
        <ivy:cachepath pathid="asciidoctorj.path" organisation="org.asciidoctor" module="asciidoctorj" revision="1.5.6" inline="true"/>
        <mkdir dir="${work.dir}/asciidoc-extensions/classes"/>
        <javac srcdir="${doc.dir}/extensions/src" destdir="${work.dir}/asciidoc-extensions/classes"
               debug="true" includeantruntime="no" classpathref="asciidoctorj.path"/>
        <copy todir="${work.dir}/asciidoc-extensions/classes">
            <fileset dir="${doc.dir}/extensions/src">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>

    <target name="init-asciidoctor" depends="init-asciidoctor-extensions">
        <mkdir dir="${work.dir}/asciidoc-lib/jars" />
        <mkdir dir="${work.dir}/asciidoc-lib/classes" />
        <ivy:retrieve organisation="org.asciidoctor" module="asciidoctor-ant" revision="1.5.4" inline="true" pattern="${work.dir}/asciidoc-lib/jars/[artifact].[ext]" conf="default" />
        <unzip src="${work.dir}/asciidoc-lib/jars/asciidoctor-ant.jar" dest="${work.dir}/asciidoc-lib/classes" />
        <taskdef uri="antlib:org.asciidoctor.ant" resource="org/asciidoctor/ant/antlib.xml">
            <classpath>
                <pathelement location="${work.dir}/asciidoc-extensions/classes"/>
                <pathelement location="${work.dir}/asciidoc-lib/classes" />
            </classpath>
        </taskdef>
    </target>

    <target name="/release" description="Make the build artifacts tagged with the release version">
        <tstamp/>
        <condition property="forceContextQualifier" value="${DSTAMP}${TSTAMP}-RELEASE">
            <length string="${version.qualifier}" trim="true" length="0"/>
        </condition>
        <property name="forceContextQualifier" value="${version.qualifier}-${DSTAMP}${TSTAMP}-RELEASE"/>
    </target>

    <target name="dist" depends="generate-eclipse-doc,build,package-binaries,package-sources,checksum" description="Build every artifacts for distribution"/>

    <target name="clean" description="Remove every build artifacts">
        <delete dir="${work.dir}"/>
        <delete dir="${dist.dir}"/>
    </target>

    <target name="check-baseLocation">
        <property name="baseLocation" location="${basedir}/dependencies/${eclipse.download.sdk.name}"/>
        <fail message="An Eclipse install is needed to run the build. Set your Eclipse install dir in the 'baseLocation' property. Or run 'ant download-eclipse'">
            <condition>
                <not>
                    <available file="${baseLocation}"/>
                </not>
            </condition>
        </fail>
    </target>

    <target name="eclipse-startup-check" depends="check-baseLocation">
        <condition property="eclipse.startup">
            <available file="${baseLocation}/startup.jar"/>
        </condition>
    </target>

    <target name="eclipse-startup-classpath" depends="eclipse-startup-check" if="eclipse.startup">
        <property name="eclipse.classpath" value="${baseLocation}/startup.jar"/>
    </target>

    <target name="eclipse-launcher-classpath" depends="eclipse-startup-check" unless="eclipse.startup">
        <!-- store path to newest launcher JAR in path id 'newest.equinox.launcher.path.id' -->
        <path id="newest.equinox.launcher.path.id">
            <first count="1">
                <sort>
                    <fileset dir="${baseLocation}/plugins" includes="**/org.eclipse.equinox.launcher_*.jar"/>
                    <!-- Seems the default order is oldest > newest so we must reverse it.
                       The 'reverse' and 'date' comparators are in the internal antlib
                       org.apache.tools.ant.types.resources.comparators.
                    -->
                    <reverse xmlns="antlib:org.apache.tools.ant.types.resources.comparators">
                        <!-- 'date' inherits 'reverse's namespace -->
                        <date/>
                    </reverse>
                </sort>
            </first>
        </path>

        <!-- turn the path into a property -->
        <property name="eclipse.classpath" refid="newest.equinox.launcher.path.id"/>
    </target>

    <target name="eclipse-classpath" depends="eclipse-startup-classpath,eclipse-launcher-classpath">
        <echo message="Using equinox launcher jar: ${eclipse.classpath}"/>
    </target>

    <target name="compute-version">
        <tstamp/>
        <condition property="forceContextQualifier" value="${DSTAMP}${TSTAMP}-dev">
            <length string="${version.qualifier}" trim="true" length="0"/>
        </condition>
        <property name="forceContextQualifier" value="${version.qualifier}-${DSTAMP}${TSTAMP}-dev"/>
        <loadfile srcfile="org.apache.ivyde.eclipse/META-INF/MANIFEST.MF" property="build.version">
            <filterchain>
                <linecontainsregexp>
                    <regexp pattern="Bundle-Version:.*"/>
                </linecontainsregexp>
                <replaceregex pattern="Bundle-Version: (.*)qualifier" replace="\1${forceContextQualifier}"/>
                <striplinebreaks/>
            </filterchain>
        </loadfile>
        <echo message="Building version ${build.version}"/>
    </target>

    <!--
        ======================================================================================
        Build targets
        ======================================================================================
     -->

    <target name="build" depends="check-ivy-installed,eclipse-classpath,compute-version" description="Build the plugin distribution binaries">
        <java classpath="${eclipse.classpath}" classname="org.eclipse.core.launcher.Main" fork="true" failonerror="true" taskname="pde-build">
            <arg value="-clean"/>
            <arg line="-application org.eclipse.pde.build.Build"/>
            <sysproperty key="eclipse.consoleLog" value="${eclipse.consoleLog}"/>
            <sysproperty key="baseLocation" value="${baseLocation}"/>
            <sysproperty key="builder" path="${basedir}/builder/component"/>
            <sysproperty key="mapsPath" path="${basedir}/builder/maps"/>
            <sysproperty key="buildDirectory" path="${eclipse.work.dir}"/>
            <sysproperty key="DSTAMP" value="${DSTAMP}"/>
            <sysproperty key="TSTAMP" value="${TSTAMP}"/>
            <sysproperty key="forceContextQualifier" value="${forceContextQualifier}"/>
            <sysproperty key="outputUpdateJars" value="true"/>
            <sysproperty key="build.version" value="${build.version}"/>
            <sysproperty key="javacDebugInfo" value="true"/>
        </java>
    </target>

    <target name="generate-dist-doc-files" depends="compute-version">
        <property name="checkUpToDate" value="true"/>
        <condition property="overwrite">
            <isfalse value="${checkUpToDate}"/>
        </condition>
        <mkdir dir="${dist.work.dir}/apache-ivyde-${build.version}/doc"/>
        <copy todir="${dist.work.dir}/apache-ivyde-${build.version}/doc" overwrite="${overwrite}">
            <fileset dir="${src.doc.dir}">
                <include name="style/**"/>
                <include name="js/**"/>
                <include name="images/**"/>
            </fileset>
        </copy>
    </target>

    <target name="generate-dist-doc-book-adoc" depends="generate-dist-doc-files">
        <scriptdef name="generate-book-adoc" language="javascript">
            <attribute name="jsontocfile"/>
            <attribute name="destFile"/>
            <![CDATA[
                var tocfile = self.getProject().resolveFile(attributes.get("jsontocfile"))
                r = new java.io.BufferedReader(new java.io.FileReader(tocfile));
                var val = "";
                while((s = r.readLine()) != null) {
                    val += s;
                }
                r.close();
                var toc = eval("("+val+")")

                var writeToc = function(o, children, level) {
                    for(var c in children) {
                        if (children[c].id) {
                            o.write(level + ' link:#' + children[c].id.replace(/\//g, '_') + '[' + children[c].title + ']\n');
                            if (children[c].children && children[c].children.length && children[c].children.length != 0) {
                                writeToc(o, children[c].children, level+'*');
                            }
                        }
                    }
                };

                var writeInclude = function(o, children) {
                    for(var c in children) {
                        if (children[c].id) {
                            o.write('= [[' + children[c].id.replace(/\//g, '_') + ']]' + children[c].title + '\n\n');
                            o.write('include::../doc/src/' + children[c].id + '.adoc[]\n\n');
                            if (children[c].children && children[c].children.length && children[c].children.length != 0) {
                                writeInclude(o, children[c].children);
                            }
                        }
                    }
                };

                out = new java.io.FileWriter(self.getProject().resolveFile(attributes.get("destfile")));
                out.write('= Table of Contents\n\n');
                writeToc(out, toc.children[0].children, '*');
                out.write('\n\n');
                writeInclude(out, toc.children[0].children, '*');
                out.close();
            ]]>
        </scriptdef>
        <mkdir dir="${work.dir}/book"/>
        <generate-book-adoc jsontocfile="${src.doc.dir}/toc.json" destFile="${work.dir}/book/book.adoc"/>
    </target>

    <target name="generate-dist-doc-book" depends="compute-version,init-asciidoctor,generate-dist-doc-book-adoc">
        <asciidoctor:convert sourceDirectory="${work.dir}/book" outputDirectory="${dist.work.dir}/apache-ivyde-${build.version}/doc" backend="xhtml5"
                             templateDir="${doc.dir}/templates/book" sourceHighlighter="highlightjs" doctype="book">
            <attribute key="imagesdir" value=""/>
            <attribute key="version" value="${build.version}"/>
            <inlineMacroProcessor blockName="jira" className="org.apache.ivy.asciidoc.JiraMacro"/>
        </asciidoctor:convert>
    </target>

    <target name="generate-dist-doc-articles" depends="compute-version,init-asciidoctor">
        <asciidoctor:convert sourceDirectory="${src.doc.dir}" outputDirectory="${dist.work.dir}/apache-ivyde-${build.version}/doc" backend="xhtml5"
                             templateDir="${doc.dir}/templates/articles" sourceHighlighter="highlightjs" preserveDirectories="true">
            <attribute key="basedir" value="${src.doc.dir}"/>
            <attribute key="imagesdir" value=""/>
            <attribute key="version" value="${build.version}"/>
            <inlineMacroProcessor blockName="jira" className="org.apache.ivy.asciidoc.JiraMacro"/>
        </asciidoctor:convert>
    </target>

    <target name="generate-dist-doc-html" depends="generate-dist-doc-articles,generate-dist-doc-book"/>

    <target name="package-binaries" depends="build,generate-p2-category,generate-dist-doc-files,generate-dist-doc-html">
        <mkdir dir="${dist.work.dir}/apache-ivyde-${build.version}"/>
        <unzip src="${eclipse.work.dir}/${build.version}/org.apache.ivyde.feature-${build.version}.zip" dest="${dist.work.dir}/apache-ivyde-${build.version}"/>
        <unzip src="${eclipse.work.dir}/${build.version}/org.apache.ivyde.eclipse.resolvevisualizer.feature-${build.version}.zip" dest="${dist.work.dir}/apache-ivyde-${build.version}"/>
        <!-- packaging the zip as a p2 repository -->
        <copy todir="${dist.work.dir}/apache-ivyde-${build.version}">
            <fileset dir="${eclipse.work.dir}/p2repo"/>
        </copy>
        <copy todir="${dist.work.dir}/apache-ivyde-${build.version}">
            <fileset dir="${basedir}">
                <include name="LICENSE"/>
                <include name="NOTICE"/>
                <include name="CHANGES.txt"/>
                <include name="README.txt"/>
            </fileset>
        </copy>
        <mkdir dir="${dist.dir}"/>
        <zip destfile="${dist.dir}/apache-ivyde-${build.version}.zip" basedir="${dist.work.dir}"/>
        <tar destfile="${dist.dir}/apache-ivyde-${build.version}.tar.gz" basedir="${dist.work.dir}" compression="gzip"/>
        <!-- put the version in a file so it will be easier in the build of the
             updatesite on jenkins to find out which version it is -->
        <echo file="${dist.dir}/version.properties">
ivyde.build.version=${build.version}
        </echo>
    </target>

    <target name="package-sources" depends="compute-version" description="Create source archive files">
        <mkdir dir="${dist.dir}"/>
        <exec executable="git" dir="${basedir}" >
            <arg value="archive"/>
            <arg value="HEAD"/>
            <arg value="--prefix=apache-ivyde-sources-${build.version}/"/>
            <arg value="-o"/>
            <arg value="${dist.dir}/apache-ivyde-sources-${build.version}.tar.gz"/>
        </exec>
        <exec executable="git" dir="${basedir}" >
            <arg value="archive"/>
            <arg value="HEAD"/>
            <arg value="--prefix=apache-ivyde-sources-${build.version}/"/>
            <arg value="-o"/>
            <arg value="${dist.dir}/apache-ivyde-sources-${build.version}.zip"/>
        </exec>
    </target>


    <target name="generate-p2-category" depends="compute-version,eclipse-classpath">
        <loadfile property="ASL2-header" srcFile="${basedir}/builder/ASL2-header.xml"/>
        <echo file="${work.dir}/category.xml"><![CDATA[<?xml version='1.0' encoding='UTF-8'?>
<site>
    <category-def name="org.apache.ivyde.category" label="Apache IvyDE Eclipse plugins"/>
    <feature url="features/org.apache.ivyde.feature_${build.version}.jar" id="org.apache.ivyde.feature" version="${build.version}">
        <category name="org.apache.ivyde.category"/>
    </feature>
    <feature url="features/org.apache.ivyde.eclipse.resolvevisualizer.feature_${build.version}.jar" id="org.apache.ivyde.eclipse.resolvevisualizer.feature" version="${build.version}">
        <category name="org.apache.ivyde.category"/>
    </feature>
</site>
]]></echo>
        <makeurl file="${eclipse.work.dir}/p2repo" property="p2repo.eclipse.work.dir.url"/>
        <makeurl file="${work.dir}/category.xml" property="p2repo.category.url"/>
        <java classpath="${eclipse.classpath}" classname="org.eclipse.core.launcher.Main" fork="true" failonerror="true">
            <arg line="-clean"/>
            <arg line="-application org.eclipse.equinox.p2.publisher.CategoryPublisher"/>
            <arg line="-metadataRepository ${p2repo.eclipse.work.dir.url}"/>
            <arg line="-categoryDefinition ${p2repo.category.url}"/>
            <arg line="-categoryQualifier"/>
            <sysproperty key="eclipse.consoleLog" value="${eclipse.consoleLog}"/>
        </java>
        <!-- as we're at it, let's put the ASL header -->
        <replaceregexp match="&lt;repository name='" replace="${ASL2-header}&lt;repository name='" flags="g">
            <fileset dir="${eclipse.work.dir}/p2repo" includes="*.xml"/>
        </replaceregexp>
    </target>

    <!--
        ======================================================================================
        Targets related to the installation of Ivy in the Eclipse install
        ======================================================================================
     -->

    <!-- Get the OSGi version of Ivy in the manifest in the jar -->
    <target name="compute-ivy-bundle-version" unless="ivy.bundle.version" depends="init-ivy">
        <loadresource property="ivy.bundle.version">
            <zipentry zipfile="${ivy.jar.file}" name="META-INF/MANIFEST.MF"/>
            <filterchain>
                <linecontains>
                    <contains value="Bundle-Version:"/>
                </linecontains>
                <tokenfilter>
                    <replaceregex pattern="Bundle-Version: (.*)" replace="\1" flags="gi"/>
                </tokenfilter>
                <striplinebreaks/>
            </filterchain>
        </loadresource>
        <echo message="Ivy Bundle-Version: ${ivy.bundle.version}"/>
    </target>

    <!-- clean up every installed ivy and install the specified one -->
    <target name="install-ivy-jar" depends="compute-ivy-bundle-version">
        <delete>
            <fileset dir="${baseLocation}/plugins/" includes="org.apache.ivy_*.jar"/>
        </delete>
        <copy file="${ivy.jar.file}" tofile="${baseLocation}/plugins/org.apache.ivy_${ivy.bundle.version}.jar"/>
        <echo message="Ivy ${ivy.bundle.version} has been installed in ${baseLocation}"/>
    </target>

    <!-- Get the Ivy jar from a zip distribution -->
    <target name="get-ivy-jar" unless="ivy.jar.url">
        <fail>
You have to specify the Ivy to install with one of the following property:
 - 'ivy.version': the version of the official Apache release to download (ex: -Divy.version=2.0.0-rc1) (older than 2.0.0-rc1 is not supported)
 - 'ivy.zip.url': the url of the zip distribution (ex: -Divy.zip.url=file:///home/me/ivy-trunk/build/distrib/apache-ivy-2.0.0-rc1-local-20080926154508-bin.zip)
 - 'ivy.jar.url': the url of the Ivy jar (ex: -Divy.jar.url=file:///home/me/ivy-trunk/build/artifact/jars/ivy.jar)
            <condition>
                <not>
                    <or>
                        <isset property="ivy.version"/>
                        <isset property="ivy.zip.url"/>
                    </or>
                </not>
            </condition>
        </fail>
        <mkdir dir="${ivy.work.dir}/distrib"/>
        <mkdir dir="${basedir}/dependencies"/>
        <property name="ivy.zip.url" value="${mirror.url}/ant/ivy/${ivy.version}/apache-ivy-${ivy.version}-bin.zip"/>
        <get src="${ivy.zip.url}" usetimestamp="true" dest="${basedir}/dependencies/apache-ivy-${ivy.version}-bin.zip" verbose="true"/>
        <unzip overwrite="true" src="${basedir}/dependencies/apache-ivy-${ivy.version}-bin.zip" dest="${ivy.work.dir}/distrib"/>
        <path id="ivy.jar.path">
            <first count="1">
                <fileset dir="${ivy.work.dir}" includes="distrib/apache-ivy-*/ivy-*.jar"/>
            </first>
        </path>
        <makeurl property="ivy.jar.url" file="${toString:ivy.jar.path}"/>
        <echo message="ivy.jar.url: ${ivy.jar.url}"/>
    </target>

    <target name="install-ivy" depends="check-baseLocation,get-ivy-jar,install-ivy-jar" description="Install an Ivy bundle into the eclipse install">
        <delete dir="${ivy.work.dir}"/>
    </target>

    <target name="list-installed-ivy" depends="check-baseLocation" description="List the Ivy bundle(s) in your Eclipse install">
        <path id="ivy.eclipse.paths">
            <fileset dir="${baseLocation}/plugins" includes="org.apache.ivy_*.jar"/>
        </path>
        <condition property="ivy.installed">
            <resourcecount refid="ivy.eclipse.paths" when="greater" count="0"/>
        </condition>
        <echo message="The Ivy installed in ${baseLocation}: ${toString:ivy.eclipse.paths}"/>
    </target>

    <target name="check-ivy-installed" depends="list-installed-ivy">
    </target>

    <!--
        ======================================================================================
        Targets related to the installation of IvyDE in the Eclipse install
        ======================================================================================
     -->

    <target name="clean-installed-ivyde" description="Remove every IvyDE version installed in Eclipse">
        <delete>
            <fileset dir="${baseLocation}/plugins/" includes="org.apache.ivyde*.jar"/>
            <fileset dir="${baseLocation}/features/" includes="org.apache.ivyde*.jar"/>
        </delete>
    </target>

    <target name="list-installed-ivyde" depends="check-baseLocation" description="List the IvyDE plugin(s) in your Eclipse install">
        <path id="ivyde.eclipse.paths">
            <fileset dir="${baseLocation}/plugins" includes="org.apache.ivyde*.jar"/>
        </path>
        <echo message="The IvyDE installed in ${baseLocation}: ${toString:ivyde.eclipse.paths}"/>
    </target>

    <target name="install" depends="dist,clean-installed-ivyde" description="Install the IvyDE bundle into the eclipse install">
        <unzip src="${dist.dir}/org.apache.ivyde.feature-${build.version}.zip" dest="${baseLocation}"/>
    </target>

    <!--
        ======================================================================================
        Targets related to the checksums of the distribution
        ======================================================================================
     -->

    <target name="checksum" description="Compute the checksum for every artifact to distribute">
        <checksum algorithm="SHA-256" fileext=".sha256">
            <fileset dir="${dist.dir}">
                <include name="apache-ivyde-*.zip"/>
                <include name="apache-ivyde-*.tar.gz"/>
            </fileset>
        </checksum>
        <checksum algorithm="SHA-512" fileext=".sha512">
            <fileset dir="${dist.dir}">
                <include name="apache-ivyde-*.zip"/>
                <include name="apache-ivyde-*.tar.gz"/>
            </fileset>
        </checksum>
    </target>

    <target name="verify-checksum" description="Verify the checksums of the artifacts to publish">
        <checksum algorithm="SHA-256" fileext=".sha256" verifyproperty="checksum.sha256.ok">
            <fileset dir="${dist.dir}">
                <include name="apache-ivyde-*.zip"/>
                <include name="apache-ivyde-*.tar.gz"/>
            </fileset>
        </checksum>
        <fail message="SHA-256 Checksum verify failed !">
            <condition>
                <isfalse value="${checksum.sha256.ok}"/>
            </condition>
        </fail>
        <echo message="SHA-256 Checksum verify passed successfully"/>
        <checksum algorithm="SHA-512" fileext=".sha512" verifyproperty="checksum.sha512.ok">
            <fileset dir="${dist.dir}">
                <include name="apache-ivyde-*.zip"/>
                <include name="apache-ivyde-*.tar.gz"/>
            </fileset>
        </checksum>
        <fail message="SHA-512 Checksum verify failed !">
            <condition>
                <isfalse value="${checksum.sha512.ok}"/>
            </condition>
        </fail>
        <echo message="SHA-512 Checksum verify passed successfully"/>
    </target>

    <!--
        ======================================================================================
        Targets related to checkstyle
        ======================================================================================
    -->

    <target name="checkstyle-internal" depends="init-ivy" description="Generate checkstyle report">
        <ivy:cachepath organisation="com.puppycrawl.tools" module="checkstyle" revision="6.19"
                       inline="true" conf="default" pathid="checkstyle.classpath" transitive="true"/>
        <taskdef uri="antlib:com.puppycrawl.tools.checkstyle.ant"
                 resource="com/puppycrawl/tools/checkstyle/ant/antlib.xml" classpathref="checkstyle.classpath"/>

        <mkdir dir="${checkstyle.report.dir}"/>
        <property name="src.dir" value="org.apache.ivyde.eclipse/src/java"/>
        <cs:checkstyle xmlns:cs="antlib:com.puppycrawl.tools.checkstyle.ant"
                       config="${checkstyle.src.dir}/checkstyle-config"
                       failOnViolation="false" failureProperty="checkstyle.failed">
            <classpath>
                <path refid="checkstyle.classpath"/>
            </classpath>
            <formatter type="xml" toFile="${checkstyle.report.dir}/checkstyle.xml"/>
            <fileset dir="${src.dir}">
                <include name="**/*.java"/>
            </fileset>
        </cs:checkstyle>
    </target>

    <target name="checkstyle" depends="checkstyle-internal"
            description="checks Ivy codebase according to ${checkstyle.src.dir}/checkstyle-config">
        <fail if="checkstyle.failed" unless="ignore.checkstyle"
              message="Checkstyle has errors. See report in ${checkstyle.report.dir}"/>
    </target>

    <target name="checkstyle-report" depends="checkstyle-internal">
        <property name="checkstyle.basedir" location="${src.dir}"/>
        <xslt in="${checkstyle.report.dir}/checkstyle.xml"
              style="${checkstyle.src.dir}/checkstyle-frames.xsl"
              out="${checkstyle.report.dir}/output.txt">
            <param name="basedir" expression="${checkstyle.basedir}"/>
            <param name="output.dir" expression="${checkstyle.report.dir}"/>
        </xslt>
    </target>

    <!--
        ======================================================================================
        Targets related to the download of Eclipse for a headless build
        ======================================================================================
    -->

    <target name="prepare-eclipse" depends="download-eclipse,unzip-eclipse"/>

    <target name="download-eclipse" depends="eclipse-get-sdk,eclipse-get-wtp,eclipse-get-emf,eclipse-get-xsd,eclipse-get-gef,eclipse-get-zest"/>

    <target name="eclipse-check-download-sdk">
        <check-eclipse-download id="sdk"/>
    </target>

    <target name="eclipse-get-sdk" depends="eclipse-check-download-sdk" unless="eclipse.sdk.downloaded">
        <eclipse-download id="sdk"/>
    </target>

    <target name="eclipse-check-download-wtp">
        <check-eclipse-download id="wtp"/>
    </target>

    <target name="eclipse-get-wtp" depends="eclipse-check-download-wtp" unless="eclipse.wtp.downloaded">
        <eclipse-download id="wtp"/>
    </target>

    <target name="eclipse-check-download-emf">
        <check-eclipse-download id="emf"/>
    </target>

    <target name="eclipse-get-emf" depends="eclipse-check-download-emf" unless="eclipse.emf.downloaded">
        <eclipse-download id="emf"/>
    </target>

    <target name="eclipse-check-download-xsd">
        <check-eclipse-download id="xsd"/>
    </target>

    <target name="eclipse-get-xsd" depends="eclipse-check-download-xsd" unless="eclipse.xsd.downloaded">
        <eclipse-download id="xsd"/>
    </target>

    <target name="eclipse-check-download-gef">
        <check-eclipse-download id="gef"/>
    </target>

    <target name="eclipse-get-gef" depends="eclipse-check-download-gef" unless="eclipse.gef.downloaded">
        <eclipse-download id="gef"/>
    </target>

    <target name="eclipse-check-download-zest">
        <check-eclipse-download id="zest"/>
    </target>

    <target name="eclipse-get-zest" depends="eclipse-check-download-zest" unless="eclipse.zest.downloaded">
        <eclipse-download id="zest"/>
    </target>

    <!-- wrapper of eclipse download urls which have a common pattern -->
    <macrodef name="check-eclipse-download">
        <attribute name="id"/>
        <sequential>
            <echo file="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip.MD5" message="${eclipse.download.@{id}.md5}"/>
            <condition property="eclipse.@{id}.downloaded">
                <and>
                    <available file="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip"/>
                    <checksum file="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip" algorithm="MD5"/>
                </and>
            </condition>
        </sequential>
    </macrodef>
    <macrodef name="eclipse-download">
        <attribute name="id"/>
        <sequential>
            <property name="eclipse.download.@{id}.baseurl" value="${eclipse.download.baseurl}"/>
            <mkdir dir="${basedir}/dependencies"/>
            <delete file="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip" failonerror="false"/>
            <get src="${eclipse.download.@{id}.baseurl}/${eclipse.download.@{id}.dropdir}/${eclipse.download.@{id}.name}.zip"
                 dest="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip" verbose="yes"/>
            <fail message="Bad MD5 on downloaded file ${eclipse.download.@{id}.name}">
                <condition>
                    <not>
                        <checksum file="${basedir}/dependencies/${eclipse.download.@{id}.name}.zip" algorithm="MD5"/>
                    </not>
                </condition>
            </fail>
        </sequential>
    </macrodef>

    <target name="check-unzip-eclipse">
        <condition property="eclipse.unzipped">
            <available file="${basedir}/dependencies/${eclipse.download.sdk.name}"/>
        </condition>
    </target>

    <target name="unzip-eclipse" depends="check-unzip-eclipse" unless="eclipse.unzipped">
        <delete dir="${basedir}/dependencies/eclipse" failonerror="false"/>
        <delete dir="${basedir}/dependencies/${eclipse.download.sdk.name}" failonerror="false"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.sdk.name}.zip" dest="${basedir}/dependencies"/>
        <mkdir dir="${basedir}/dependencies/eclipse/dropins/${eclipse.download.wtp.name}"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.wtp.name}.zip" dest="${basedir}/dependencies/eclipse/dropins/${eclipse.download.wtp.name}"/>
        <mkdir dir="${basedir}/dependencies/eclipse/dropins/${eclipse.download.emf.name}"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.emf.name}.zip" dest="${basedir}/dependencies/eclipse/dropins/${eclipse.download.emf.name}"/>
        <mkdir dir="${basedir}/dependencies/eclipse/dropins/${eclipse.download.xsd.name}"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.xsd.name}.zip" dest="${basedir}/dependencies/eclipse/dropins/${eclipse.download.xsd.name}"/>
        <mkdir dir="${basedir}/dependencies/eclipse/dropins/${eclipse.download.gef.name}"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.gef.name}.zip" dest="${basedir}/dependencies/eclipse/dropins/${eclipse.download.gef.name}"/>
        <mkdir dir="${basedir}/dependencies/eclipse/dropins/${eclipse.download.zest.name}"/>
        <unzip src="${basedir}/dependencies/${eclipse.download.zest.name}.zip" dest="${basedir}/dependencies/eclipse/dropins/${eclipse.download.zest.name}"/>
        <move file="${basedir}/dependencies/eclipse" tofile="${basedir}/dependencies/${eclipse.download.sdk.name}"/>
    </target>

    <!--
        ======================================================================================
        Targets related to prepare the build environment of IvyDE on jenkins.
        ======================================================================================
    -->

    <target name="jenkins-prepare" depends="prepare-eclipse,jenkins-prepare-properties,jenkins-install-ivy"/>

    <target name="jenkins-prepare-properties">
        <tstamp/>
        <condition property="jenkins.version.qualifier" value="${DSTAMP}${TSTAMP}-jenkins-${env.BUILD_NUMBER}">
            <length string="${version.qualifier}" trim="true" length="0"/>
        </condition>
        <property name="jenkins.version.qualifier" value="${version.qualifier}-${DSTAMP}${TSTAMP}-jenkins-${env.BUILD_NUMBER}"/>
        <echo file="local.build.properties">
forceContextQualifier=${jenkins.version.qualifier}
</echo>
    </target>

    <target name="jenkins-install-ivy">
        <ant antfile="build.xml" target="install-ivy">
            <!-- defined, to avoid to download anything -->
            <property name="ivy.jar.url" value=""/>
            <!-- this path should be propulated by the Jenkins plugins which will copy artifacts from the Ivy Job -->
            <property name="ivy.jar.file" value="${basedir}/dependencies/build/artifact/jars/ivy.jar"/>
        </ant>
    </target>

    <!--
        ======================================================================================
        Targets related to the generation of the documentation included in the eclipse plugin
        ======================================================================================
     -->

    <target name="generate-eclipse-doc" depends="clean-eclipse-doc,generate-sample-zip,generate-eclipse-doc-html,generate-eclipse-doc-files,generate-eclipse-toc" unless="skip.doc">
    </target>

    <target name="clean-eclipse-doc" unless="skip.doc">
        <delete dir="${eclipse-doc.dir}"/>
    </target>

    <target name="generate-sample-zip" unless="skip.doc">
        <zip destfile="${src.doc.dir}/sample/webapp-js-repo.zip" basedir="${src.doc.dir}/sample/webapp-js-repo"/>
    </target>

    <target name="generate-eclipse-doc-html" depends="init-asciidoctor,compute-version" unless="skip.doc">
        <asciidoctor:convert sourceDirectory="${src.doc.dir}" outputDirectory="${eclipse-doc.dir}" backend="xhtml5"
                             templateDir="${doc.dir}/templates/eclipse" preserveDirectories="true">
            <attribute key="basedir" value="${src.doc.dir}"/>
            <attribute key="imagesdir" value=""/>
            <attribute key="version" value="${build.version}"/>
            <inlineMacroProcessor blockName="jira" className="org.apache.ivy.asciidoc.JiraMacro"/>
        </asciidoctor:convert>
    </target>

    <target name="generate-eclipse-doc-files" unless="skip.doc">
        <property name="checkUpToDate" value="true"/>
        <condition property="overwrite">
            <isfalse value="${checkUpToDate}"/>
        </condition>
        <copy todir="${eclipse-doc.dir}" overwrite="${overwrite}">
            <fileset dir="${src.doc.dir}">
                <include name="style/**"/>
                <include name="js/**"/>
                <include name="images/**"/>
            </fileset>
        </copy>
    </target>

    <target name="generate-eclipse-toc" unless="skip.doc">
        <scriptdef name="generate-eclipse-toc" language="javascript">
            <attribute name="jsontocfile"/>
            <attribute name="destFile"/>
            <![CDATA[
                var tocfile = self.getProject().resolveFile(attributes.get("jsontocfile"))
                r = new java.io.BufferedReader(new java.io.FileReader(tocfile));
                var val = "";
                while((s = r.readLine()) != null) {
                    val += s;
                }
                r.close();
                var toc = eval("("+val+")")

                var writeTopic = function(o, children, indent) {
                    for(var c in children) {
                        o.write(indent + '<topic label="' + children[c].title + '" href="doc/' + children[c].id + '.html">\n');
                        if (children[c].children && children[c].children.length && children[c].children.length != 0) {
                            writeTopic(o, children[c].children, indent+'    ');
                        }
                        o.write(indent+'</topic>\n');
                    }
                };

                out = new java.io.FileWriter(self.getProject().resolveFile(attributes.get("destfile")));
                out.write('<toc label="IvyDE user documentation">\n')
                writeTopic(out, toc.children[0].children, '    ');
                out.write('</toc>\n');
                out.close();
            ]]>
        </scriptdef>
        <generate-eclipse-toc jsontocfile="${src.doc.dir}/toc.json" destFile="${eclipse-doc.dir}/toc.xml"/>
    </target>


    <!--
        ======================================================================================
        Targets related to the RAT reports
        ======================================================================================
     -->

    <!-- RAT Release Auditing Tool -->
    <property name="rat.version" value="0.12" description="Which Version of RAT to use"/>

    <target name="rat" description="--> Runs the ReleaseAuditingTool" depends="init-ivy">
        <fail message="No release available to check. Missing '${dist.dir}/version.properties'">
            <condition>
                <not>
                    <available file="${dist.dir}/version.properties"/>
                </not>
            </condition>
        </fail>
        <ivy:cachepath organisation="org.apache.rat" module="apache-rat-tasks" revision="${rat.version}"
                       inline="true" conf="default" pathid="rat.classpath" transitive="true"/>
        <typedef resource="org/apache/rat/anttasks/antlib.xml"
                 uri="antlib:org.apache.rat.anttasks"
                 classpathref="rat.classpath"/>
        <delete dir="${rat.dir}"/>
        <mkdir dir="${rat.dir}"/>
        <property file="${dist.dir}/version.properties"/>
        <rat:report xmlns:rat="antlib:org.apache.rat.anttasks" reportfile="${rat.dir}/report.txt">
            <tarfileset>
                <gzipresource>
                    <!-- 'ivyde.build.version' is loaded from prior generated version.properties -->
                    <file file="${dist.dir}/apache-ivyde-${ivyde.build.version}.tar.gz"/>
                </gzipresource>
            </tarfileset>
            <tarfileset>
                <gzipresource>
                    <file file="${dist.dir}/apache-ivyde-sources-${ivyde.build.version}.tar.gz"/>
                </gzipresource>
            </tarfileset>
        </rat:report>
    </target>

</project>
