<!--/*******************************************************************************
* This program and the accompanying materials are made available under the 
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 
* which accompanies this distribution. 
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at 
* http://www.eclipse.org/org/documents/edl-v10.php.
*
*   Ant naming conventions:
*   - regardless of the actual OS platform,'/' is the directory separator
*     (Ant will convert as appropriate).
*   - multi-word properties use periods '.'
*   - multi-word targets use hyphens '-' 
*   - multi-word macros use underscores '_'
*   - multi-word macro attributes are concatenated
*     e.g. 'runpathref'  
*   - multi-word tasks (taskdef) names are concatenated
*     e.g. 'validateconnection'
*   - OS environment variables are in ALLCAPS and have 'env' as a prefix
*     e.g. ${env.XXX}.
*   - Ant properties are lower case.
*
* Contributors:
*     Oracle - initial API and implementation
#******************************************************************************/-->

<project name="Build Mappings Plug-in" default="build.all" basedir=".">
    <!-- =================================================================== -->
    <target name="init">
        <tstamp>
            <format property="build.date" pattern="yyyyMMdd"/>
            <format property="build.time" pattern="HHmm"/>
        </tstamp>
        <property environment="env"/>

        <property name="stop.on.error" value="false"/>
        <property name="optimize.code"    value="off"/>
        <property name="report.deprecation" value="off"/>
        <property name="javac.debug"       value="on"/>
        <property name="javac.debuglevel"  value="lines,vars,source"/>
        <property name="target.jvm"   value="${javac.version}"/>
        <property name="_nowarn"      value="on"/>
        <echo message="BuildDate.BuildTime='${build.date}.${build.time}'"/>
        <echo message="java.version='${java.version}'"/>
        <echo message="os.name='${os.name}'"/>
        <echo message="os.arch='${os.arch}'"/>
        <echo message="os.version='${os.version}'"/>
        <echo message="stop.on.error='${stop.on.error}'"/>
        <echo message="optimize.code='${optimize.code}'"/>
        <echo message="report.deprecation='${report.deprecation}'"/>
        <echo message="target.jvm='${target.jvm}'"/>
        <echo message="_nowarn='${_nowarn}'"/>
    </target>

    <!-- =================================================================== -->
    <!-- =================================================================== -->

    <target name="build-all" depends="compile-mappingsplugin, jar-mappingsplugin"/>

    <!-- =================================================================== -->
    <!--  Properties                                                         -->
    <!-- =================================================================== -->
    <target name="properties-init" depends="init">
        <property file="build.properties"/>
        <property name="build.type" value="SNAPSHOT"/>
        <property name="release.designation" value="EclipseLink DeveloperBuild"/>
        <property name="version.string" value="${release.version}.qualifier"/>
        <mkdir dir="${_classesDestDir}"/>
        <mkdir dir="${_jarDestDir}"/>
    </target>

    <!-- =================================================================== -->
    <!--  Clean                                                              -->
    <!-- =================================================================== -->
    <target name="clean" depends="init">
        <property file="build.properties"/>

        <delete dir="${_classesDestDir}" includeEmptyDirs="true" quiet="true"/>
        <delete file="${_jarDestDir}/${mappingsplugin.jarfile}" quiet="true"/>
        <delete file="${_jarDestDir}/${mappingsplugin.jarfile.src}" quiet="true"/>
    </target>

    <!-- =================================================================== -->
    <!--  Compile                                                            -->
    <!-- =================================================================== -->
    <target name="compile-mappingsplugin" depends="properties-init">
        <mkdir dir="${compile.mappingsplugin.destdir}"/>
        <javac
            classpath="${compile.mappingsplugin.classpath}"
            srcdir="${compile.mappingsplugin.srcdir}"
            destdir="${compile.mappingsplugin.destdir}"
            debug="${javac.debug}"
            debuglevel="${javac.debuglevel}"
            failonerror="${stop.on.error}"
            encoding="UTF-8"
            optimize="${optimize.code}"
            deprecation="${report.deprecation}"
            source="${target.jvm}"
            target="${target.jvm}"
            nowarn="${_nowarn}"
            includes="**/*.java"
            excludes="**/*&#35;*/**, **/.ade_path/**"
        />
    </target>

    <!-- =================================================================== -->
    <!--  Jar                                                                -->
    <!-- =================================================================== -->
    <target name="jar-mappingsplugin" depends="jar-mappingsplugin-lib, jar-mappingsplugin-src"/>

    <target name="jar-mappingsplugin-lib" depends="properties-init">
        <delete file="${_jarDestDir}/${mappingsplugin.jarfile}"/>
        <jar jarfile="${_jarDestDir}/${mappingsplugin.jarfile}">
            <manifest>
                <attribute name="Specification-Title" value="${_productName}" />
                <attribute name="Specification-Vendor" value="Eclipse Project" />
                <attribute name="Specification-Version" value="${release.version}" />
                <attribute name="Implementation-Title" value="org.eclipse.persistence.workbench.mappingsplugin" />
                <attribute name="Implementation-Version" value="${version.string}"/>
                <attribute name="Implementation-Vendor" value="Eclipse Project" />
                <attribute name="Release-Designation" value="${release.designation}" />
                <attribute name="Library-Designation" value="${_LibraryName}" />
            </manifest>
            <fileset
                dir="${compile.mappingsplugin.destdir}"
                includes="**/*.class"
            />
        </jar>
    </target>
    <target name="jar-mappingsplugin-src" depends="properties-init">
        <delete file="${_jarDestDir}/${mappingsplugin.jarfile.src}"/>
        <jar jarfile="${_jarDestDir}/${mappingsplugin.jarfile.src}">
            <manifest>
                <attribute name="Specification-Title" value="${_productName}" />
                <attribute name="Specification-Vendor" value="Eclipse Project" />
                <attribute name="Specification-Version" value="${release.version}" />
                <attribute name="Implementation-Title" value="org.eclipse.persistence.workbench.mappingsplugin" />
                <attribute name="Implementation-Version" value="${version.string}"/>
                <attribute name="Implementation-Vendor" value="Eclipse Project" />
                <attribute name="Release-Designation" value="${release.designation}" />
                <attribute name="Library-Designation" value="${_LibraryName}" />
            </manifest>
            <fileset
                dir="${compile.mappingsplugin.srcdir}"
                includes="**/*.java"
                excludes="**/*&#35;*/**, **/.ade_path/**"
            />
        </jar>
    </target>

</project>
