<!--

    Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0 which is available at
    http://www.eclipse.org/legal/epl-2.0,
    or the Eclipse Distribution License v. 1.0 which is available at
    http://www.eclipse.org/org/documents/edl-v10.php.

    SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause

-->

<!--
  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, add ability to override
                 destination URL (to pub elsewhere override ${maven.repo.url})
      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
*
*********************************************************************************-->
<!--
*   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.
-->
<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"/>

    <!-- "maven dir" defined for later use ensuring only single upload occurs -->
    <property name="maven.repo.dir" value="${eclipselink.root.download.dir}/maven.repo"/>

    <!-- The repository info of where maven artifacts will be uploaded -->
    <!--    Override value to change defaults                          -->
    <property name="stagingId"   value="eclipselink.repository"/>
    <property name="stagingURL"  value="file:///${maven.repo.dir}"/>
    <property name="snapshotId"  value="eclipselink.repository"/>
    <property name="snapshotURL" value="file:///${maven.repo.dir}"/>

    <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.2)"/>
        <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>

    <target name="upload" depends="init">
        <antcall target="upload-artifact">
            <param name="repo.dir"        value="/${maven.repo.dir}/org/eclipse/persistence/${bundle.prefix}/${maven.version}"/>
            <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">
            <or>
               <!-- if unpublished staging -->
               <and>
                   <isset property="sign"/>
                   <not><isset property="repo.version.exist"/></not>
               </and>
               <!-- if snapshot -->
               <not><isset property="sign"/></not>
            </or>
        </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 to maven repository -->
    <target name="upload-artifact" if="publish.ok" depends="verify-publish, prepare-pom"> <!-- , upload-snapshot, upload-artifact-staging, upload-source-staging"> -->
        <!-- only needed if publishing to two repos (staging and snapshot)
        <delete file="pom.xml"/>
    </target>
    <target name="upload-snapshot" unless="sign"> -->
        <!-- Deploy the jar to maven repository along with sources -->
        <artifact:pom id="maven.project" file="pom.xml" />
        <!-- 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>
        <!-- cleanup -->
        <delete file="pom.xml"/>
    </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>


