<!--
   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="easyant-buildtypes" xmlns:ivy="antlib:org.apache.ivy.ant" xmlns:ac="antlib:net.sf.antcontrib">

    <target name="init">
        <mkdir dir="target"/>

        <property name="ivy.version"  value="2.3.0"/>
        <mkdir dir="${user.home}/.ivy2/jars" />
        <get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar" dest="${user.home}/.ivy2/jars/ivy-${ivy.version}.jar" usetimestamp="true"/>
        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${user.home}/.ivy2/jars/ivy-${ivy.version}.jar" />

        <get src="http://repo1.maven.org/maven2/ant-contrib/ant-contrib/20020829/ant-contrib-20020829.jar" dest="${user.home}/.ant/jars/ant-contrib-20020829.jar" usetimestamp="true" />
        <taskdef resource="net/sf/antcontrib/antcontrib.properties" uri="antlib:net.sf.antcontrib" classpath="${user.home}/.ant/jars/ant-contrib-20020829.jar" />
    </target>

    <target name="clean-shared-repo">
        <delete dir ="${user.home}/.easyant/repository/easyant-shared-modules" failonerror="false"/>
    </target>

    <target name="clean">
        <delete dir="target" failonerror="false" />
    </target>

    <target name="install-all" depends="init">
        <tstamp>
            <format property="now" pattern="yyyyMMddHHmmss" />
        </tstamp>
        <ivy:configure file="ivysettings-bootstrap.xml" />
        <ac:for param="buildtype">
            <path>
                <dirset dir="${basedir}" includes="*" excludes="target" />
            </path>
            <sequential>
                <echo message="Publishing @{buildtype}" />
                <ivy:info file="@{buildtype}/module.ivy" property="ivy.@{buildtype}" />
                <ivy:resolve file="@{buildtype}/module.ivy" />
                <copy todir="@{buildtype}/target/artifacts" includeEmptyDirs="true">
                    <fileset dir="@{buildtype}/src/main/resources" />
                </copy>
                <ivy:publish artifactspattern="@{buildtype}/target/artifacts/[artifact](-[classifier]).[ext]" resolver="easyant-shared-modules"
                    forcedeliver="true" pubdate="${now}" pubrevision="${ivy.@{buildtype}.revision}" status="integration" overwrite="false"
                    haltonmissing="true" organisation="${ivy.@{buildtype}.organisation}" module="${ivy.@{buildtype}.module}" revision="${ivy.@{buildtype}.revision}" />
            </sequential>
        </ac:for>
    </target>

    <target name="distribution">
        <mkdir dir="${basedir}/target/dist" />
        <zip destfile="${basedir}/target/dist/easyant-buildtypes-0.9-src.zip">
            <fileset dir="${basedir}">
                <exclude name="target/**" />
                <exclude name="*/target/**" />
            </fileset>
        </zip>
    </target>

</project>
