<!--
   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-skeletons" 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-rc2"/>
        <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="skeleton">
            <path>
                <dirset dir="${basedir}" includes="*" excludes="target" />
            </path>
            <sequential>
                <echo message="Publishing @{skeleton}" />
                <ivy:info file="@{skeleton}/module.ivy" property="ivy.@{skeleton}" />
                <ivy:resolve file="@{skeleton}/module.ivy" />
                <copy todir="@{skeleton}/target/main/classes" includeEmptyDirs="true">
                    <fileset dir="@{skeleton}/src/main/resources" />
                </copy>
                <manifest file="@{skeleton}/target/MANIFEST.MF">
                    <attribute name="Specification-Title" value="${ivy.@{skeleton}.module}" />
                    <attribute name="Specification-Version" value="${ivy.@{skeleton}.revision}" />
                    <attribute name="Specification-Vendor" value="${ivy.@{skeleton}.organisation}" />
                    <attribute name="Implementation-Title" value="${ivy.@{skeleton}.module}" />
                    <attribute name="Implementation-Version" value="${ivy.@{skeleton}.revision}" />
                    <attribute name="Implementation-Vendor" value="${ivy.@{skeleton}.organisation}" />
                </manifest>
                <jar destfile="@{skeleton}/target/artifacts/${ivy.@{skeleton}.module}.jar" manifest="@{skeleton}/target/MANIFEST.MF" basedir="@{skeleton}/target/main/classes">
                    <metainf dir="@{skeleton}" includes="NOTICE,LICENSE" />
                </jar>
                <ivy:publish artifactspattern="@{skeleton}/target/artifacts/[artifact](-[classifier]).[ext]" resolver="easyant-shared-modules"
                    forcedeliver="true" pubdate="${now}" pubrevision="${ivy.@{skeleton}.revision}" status="integration" overwrite="false"
                    haltonmissing="true" organisation="${ivy.@{skeleton}.organisation}" module="${ivy.@{skeleton}.module}" revision="${ivy.@{skeleton}.revision}" />
            </sequential>
        </ac:for>
    </target>

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

</project>
