<!--/*******************************************************************************
* 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 '.'
*     - properties ending in .jar define jarfile names only (no path)
*     - properties ending in .lib are fully qualified jars (path and filename)
*     - properties ending in .dir are directory paths
*     - properties ending in .path are path refid names (classpath fragments)
*   - multi-word targets use hyphens '-'
*     - targets beginning with test- are reserved for high level test targets,
*       and are used in test results parsing
*     - targets typically use the form <action>-<object>-<type> (ie. package-bundle-zip)
*   - 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:
*     mmeswani - initial API and implementation (checked in by tware)
*     egwin    - updated variables as they have changed in the rest of the system
*                updated svnversion to not break build, and default if exec fails
*     egwin    - updated for publishing to Maven Central, split nexus handling to
*                new script
*     egwin    - converted svn.revision to git.hash (was missed in original
*                migration to Git)
*     egwin    - migrated to javax.persistence
#******************************************************************************/-->
<!-- Variables Needed:
*         build.type      - should be set to "SNAPSHOT, "M##", or "RELEASE"
*         git.hash        - for stamping pom, to link build with source repo
*
*********************************************************************************-->
<!-- Build Assumptions:
*         running from a "view"
*            Needs:
*               ${mavenant.dir}/maven-ant-tasks-2.0.8.jar (assumes: ${build.deps.dir}/mavenant)
*               ../eclipselink.releng/ant_customizations.jar
*
*********************************************************************************-->
<project name="Upload2Maven"  basedir="." xmlns:artifact="urn:maven-artifact-ant" default="info">
    <property file="${user.home}/build.properties"/>
    <!-- The following properties defined so they can be overridden for testing -->
    <property name="mavenant.dir" value="${build.deps.dir}/mavenant"/>
    <property name="eclipselink.root.download.dir" value="home/data/httpd/download.eclipse.org/rt/eclipselink"/>

    <path id="maven-ant-tasks.classpath" path="${mavenant.dir}/maven-ant-tasks-2.1.3.jar" />
    <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
             classpathref="maven-ant-tasks.classpath" />

    <!-- Tool version definitions -->
    <property name="gpg.plugin.version"   value="1.4"/>
    <property name="wagon.http.version"   value="2.4"/>

    <!-- The repository info of where maven artifacts will be uploaded -->
    <!--    Override value to change defaults                          -->
    <property name="stagingId"   value="sonatype-nexus-staging"/>
    <property name="stagingURL"  value="https://oss.sonatype.org/service/local/staging/deploy/maven2"/>
    <property name="snapshotId"  value="sonatype-nexus-snapshots"/>
    <property name="snapshotURL" value="https://oss.sonatype.org/content/repositories/snapshots"/>

    <target name="init">
        <dirname  property="maven.build.location_temp" file="${ant.file.Upload2Maven}"/>
        <pathconvert targetos="unix" property="maven.build.location">
            <path>
                <pathelement location="${maven.build.location_temp}"/>
            </path>
        </pathconvert>
        <property file="${user.home}/build.properties"/>
        <!-- discover path definitions -->
        <property name="maven.2.target.dir"    value="${maven.build.location}/target"/>
        <property name="maven.2.releng.dir"    value="${maven.build.location}/../eclipselink.releng"/>

        <echo message="maven.build.location = ${maven.build.location}"/>
        <echo message="maven.2.target.dir   = ${maven.2.target.dir}"/>
        <echo message="maven.2.releng.dir   = ${maven.2.releng.dir}"/>

        <!-- Test for Basic run requirements   -->
        <available file="${maven.2.releng.dir}" type="dir" property="releng.exist"/>
        <fail message="Cannot find Releng repo! Exiting."      unless="releng.exist"/>

        <!-- Custom task definitions -->
        <property name="custom.tasks.lib"                 value="${maven.2.releng.dir}/ant_customizations.jar"/>
        <property name="custom.echo.task.class"           value="org.eclipse.persistence.buildtools.ant.taskdefs.Say"/>
        <property name="custom.selectbundle.task.class"   value="org.eclipse.persistence.buildtools.ant.taskdefs.SelectBundle"/>
        <property name="custom.stripqualifier.task.class" value="org.eclipse.persistence.buildtools.ant.taskdefs.StripQualifier"/>
        <taskdef name="say"            classname="${custom.echo.task.class}"           classpath="${custom.tasks.lib}"/>
        <taskdef name="selectbundle"   classname="${custom.selectbundle.task.class}"   classpath="${custom.tasks.lib}"/>
        <taskdef name="stripQualifier" classname="${custom.stripqualifier.task.class}" classpath="${custom.tasks.lib}"/>

        <property name="bundle.prefix"        value="javax.persistence"/>
        <property name="bundle.criteria"      value="[2.0.100, 2.3)"/>
        <property name="bundle.name"          value="Javax Persistence"/>

        <!-- Determine Version info from built bundle filename -->
        <selectbundle basename="${bundle.prefix}"  directory="${maven.2.target.dir}"
                     criterion="${bundle.criteria}" property="OSGi.version" versiononly="true"
        />
        <say  message="OSGi.version:    ${OSGi.version}"                                         if="OSGi.version"/>
        <fail message="${OSGi.version} property not set! SelectBundle failure. Exiting..."   unless="OSGi.version"/>

        <!-- Maven standards state we should publish with a stripped down 3-part version rather -->
        <!-- than the 4-part OSGi version. So we need to generate a "base.version" from the     -->
        <!-- discovered "OSGi.version". "base.version" will be combined with build.type to get  -->
        <!-- the actual "maven.version"                                                         -->
        <stripQualifier input="${OSGi.version}"                                            property="base.version"/>
        <say  message="base.version:    ${base.version}"                                         if="base.version"/>
        <fail message="${base.version} property not set! StripQualifier failure. Exiting..." unless="base.version"/>

        <say  message="build.type:      ${build.type}"                                           if="build.type"/>
        <fail message="Cannot upload to Maven without a build.type defined!"                 unless="build.type"/>

        <!-- used to determine whether to publish if version exists, and could also be used if  -->
        <!-- pgp signing required (not currently used in eclipse maven.repo)                    -->
        <condition property="sign">
            <not> <equals arg1="${build.type}" arg2="SNAPSHOT"/> </not>
        </condition>

        <!-- Set maven.version appropriately depending upon ${build.type}.           -->
        <!--    variable should only be used for maven version element in POM.       -->
        <condition property="maven.version" value="${base.version}"
                                             else="${base.version}-${build.type}">
            <equals arg1="${build.type}" arg2="RELEASE"/>
        </condition>
        <say  message="maven.version:   ${maven.version}"/>

        <say  message="git.hash:        ${git.hash}"                                             if="git.hash"/>
        <fail message="Cannot upload to Maven without 'git.hash' defined!"                   unless="git.hash"/>

        <condition property="target.repo.message" value="Target repository ID: '${stagingId}' URL:'${stagingURL}'"
                                                   else="Target repository ID: '${snapshotId}' URL:'${snapshotURL}'">
            <isset property="sign"/>
        </condition>
        <echo message="${target.repo.message}"/>
    </target>

    <target name="info" depends="init, verify-publish">
        <say  message="If above info is correct, and you want to pubish for real, Re-run specifying target 'upload'."/>
    </target>

    <!-- Nexus typicaly is configured to disallow uploads of already published versions (non-snapshot)   -->
    <!--   Aditionally Sonatype is configured to disallow publishing of non-snapshot versions to the     -->
    <!--   snapshot server (400 error). -->
    <target name="upload" depends="init">
        <antcall target="upload-artifact">
            <param name="groupId"         value="org.eclipse.persistence"/>
            <param name="artifactId"      value="${bundle.prefix}"/>
            <param name="artifactVersion" value="${maven.version}"/>
            <param name="artifact"        value="${maven.2.target.dir}/${bundle.prefix}_${bundle.version}.jar"/>
            <param name="artifactSrc"     value="${maven.2.target.dir}/${bundle.prefix}.source_${bundle.version}.jar"/>
            <param name="artifactJavadoc" value="${maven.2.target.dir}/${bundle.prefix}.javadoc_${bundle.version}.jar"/>
            <param name="artifactName"    value="${bundle.name}"/>
            <param name="dependencies"    value=""/>
        </antcall>
    </target>

    <!-- Generic targets to do the Maven work  -->
    <target name="prepare-pom">
        <!-- Copy pom.template to pom.xml filtering various properties -->
        <copy file="pom.xml.template" tofile="pom.xml" overwrite="true">
          <filterset>
            <filter token="groupId"      value="${groupId}"/>
            <filter token="version"      value="${artifactVersion}"/>
            <filter token="git.hash"     value="${git.hash}"/>
            <filter token="artifactId"   value="${artifactId}"/>
            <filter token="artifactName" value="${artifactName}"/>
            <filter token="dependencies" value="${dependencies}"/>
           </filterset>
        </copy>
    </target>

    <target name="verify-publish">
        <available file="${maven.repo.dir}" property="repo.exist"   type="dir" value="true"/>
        <say  message="Repository: '${maven.repo.dir}' inaccessible. Upload will fail." unless="repo.exist"/>
        <fail message="Repository inaccessible" unless="repo.exist"/>

        <available file="${repo.dir}" property="repo.version.exist" type="dir" value="true"/>
        <condition property="publish.ok">
               <!-- if unpublished staging -->
               <and>
                   <isset property="sign"/>
                   <not><isset property="repo.version.exist"/></not>
               </and>
        </condition>
        <condition property="publish.message"
                  value="'${artifactName}' version '${artifactVersion}' SNAPSHOT upload ok."
                   else="'${artifactName}' version '${artifactVersion}' never deployed to ... upload ok.">
            <equals arg1="${build.type}" arg2="SNAPSHOT"/>
        </condition>
        <say message="'${artifactName}' version '${artifactVersion}' already deployed to repository... skipping." unless="publish.ok"/>
        <say message="${publish.message}"                                                                             if="publish.ok"/>
     </target>

    <!-- Uploads a single artifact, source & javadoc to maven repository -->
    <target name="upload-artifact" depends="verify-publish, prepare-pom, upload-snapshot, upload-artifact-staging, upload-source-staging, upload-javadoc-staging">
        <!-- cleanup -->
        <delete file="pom.xml"/>
    </target>
    <target name="upload-snapshot" unless="sign">
        <!-- Install provider for https protocol -->
        <artifact:install-provider artifactId="wagon-http" version="${wagon.http.version}"/>
        <!-- Deploy Artifact to repote repo, attach source and javadoc -->
        <artifact:deploy file="${artifact}">
          <artifact:remoteRepository id="${snapshotId}" url="${snapshotURL}"/>
          <artifact:pom id="maven.project" file="pom.xml"/>
          <artifact:attach file="${artifactSrc}"     type="jar" classifier="sources"/>
          <artifact:attach file="${artifactJavadoc}" type="zip" classifier="javadoc"/>
        </artifact:deploy>
    </target>

    <!-- Staging targets -->
    <target name="upload-artifact-staging" if="publish.ok" >
        <!-- sign and deploy the main artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifact}"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>
    <target name="upload-source-staging" if="publish.ok" >
        <!-- sign and deploy the sources artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifactSrc}"/>
            <arg value="-Dclassifier=sources"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>
    <target name="upload-javadoc-staging" if="publish.ok" >
        <!-- sign and deploy the javadoc artifact -->
        <artifact:mvn>
            <arg value="org.apache.maven.plugins:maven-gpg-plugin:${gpg.plugin.version}:sign-and-deploy-file"/>
            <arg value="-Durl=${stagingURL}"/>
            <arg value="-DrepositoryId=${stagingId}"/>
            <arg value="-DpomFile=${maven.build.location}/pom.xml"/>
            <arg value="-Dfile=${artifactJavadoc}"/>
            <arg value="-Dclassifier=javadoc"/>
            <arg value="-Pgpg"/>
        </artifact:mvn>
    </target>

</project>


