<!--/*******************************************************************************
* 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:
*     eric.gwin - initial API and implementation
#******************************************************************************/-->

<!--/*******************************************************************************
  This buildfile looks for a eclipselink.jar file in the current directory, and
  generates an appropriate ear file for use as a WLS shared library. If the jar
  does not exist, an attempt to generate one will be attempted (it is assumed
  that the this file resides at the same location as the primary buildfile for
  EclipseLink - not necessary, but assumed).
#******************************************************************************/-->
<project name="wls-shared-lib" default="create-shared-lib-install" basedir=".">
    <scriptdef name="genImpVersion" language="javascript" manager="javax">
        <attribute name="input"/>
        <attribute name="property"/>
        <attribute name="newline"/>
        <![CDATA[
            // getting the value
            input = attributes.get("input");
            property = attributes.get("property");
            newline = attributes.get("newline");
            if (input == null || property == null || newline == null) {
               self.fail("'input', 'property', and 'newline' attributes must be set.");
            }
            if (input.startsWith("${") || input == "" ) {
                // Set the result of an undefined (unexpanded) or "empty string" variable to 'NA'
                project.setProperty(attributes.get("property"), "NA");
            }
            else {
                // Verstion String is displayed just before Qualifier in
                //    "java -jar eclipselink.jar" output
                // Convert newlines to ','
                trimmedInput = input.replace(newline, ',');
                // Get "endString" Index based on search for last instance of "Build Qualifier"
                endLastRev = trimmedInput.lastIndexOf(",   Build Qualifier");
                // Get "beginString" index based upon the last space in the line above the endString index
                beginLastRev = trimmedInput.lastIndexOf(" ", endLastRev);
                // Trim the string to not include the leading space, or the end-of-line
                trimmedInput = trimmedInput.substring(beginLastRev+1, endLastRev);
                project.setProperty(attributes.get("property"), trimmedInput);
            }
        ]]>
    </scriptdef>

    <scriptdef name="genSpecVersion" language="javascript" manager="javax">
        <attribute name="input"/>
        <attribute name="property"/>
        <![CDATA[
            // getting the value
            input = attributes.get("input");
            property = attributes.get("property");
            if (input == null || property == null) {
               self.fail("both 'input' and 'property' attributes must be set.");
            }
            if (input.startsWith("${") || input == "" ) {
                // Set the result of an undefined (unexpanded) or "empty string" variable to 'NA'
                project.setProperty(attributes.get("property"), "NA");
            }
            else {
                // Trim the string to not include the bugfix or qualifier tokens
                endLastRev = input.lastIndexOf(".");
                trimmedInput = input.substring(0, endLastRev);
                endLastRev = trimmedInput.lastIndexOf(".");
                trimmedInput = input.substring(0, endLastRev);
                project.setProperty(attributes.get("property"), trimmedInput);
            }
        ]]>
    </scriptdef>

    <scriptdef name="genEarnameVersion" language="javascript" manager="javax">
        <attribute name="input"/>
        <attribute name="property"/>
        <![CDATA[
            // getting the value
            input = attributes.get("input");
            property = attributes.get("property");
            if (input == null || property == null) {
               self.fail("both 'input' and 'property' attributes must be set.");
            }
            if (input.startsWith("${") || input == "" ) {
                // Set the result of an undefined (unexpanded) or "empty string" variable to 'NA'
                project.setProperty(attributes.get("property"), "NA");
            }
            else {
                // replace "." in version string with "_"
                project.setProperty(attributes.get("property"), input.replace('.', '_'));
            }
        ]]>
    </scriptdef>

<!-- ================================================================================= -->

    <target name="verify-eclipselink-exist">
        <property name="eclipselink.jar" value="eclipselink.jar"/>
        <condition property="eclipselink.exist">
            <available file="${eclipselink.jar}"/>
        </condition>
    </target>

    <target name="generate-eclipselink" unless="eclipselink.exist" depends="verify-eclipselink-exist">
        <echo message="EclipseLink jar not found! Building..."/>
        <condition property="eclipselink.build.file"  value="build.xml"
                                                       else="antbuild.xml">
            <available file="build.xml"/>
        </condition>
        <ant antfile="${eclipselink.build.file}"    dir="."   target="build-eclipselink-jar"/>
    </target>

    <target name="identify-eclipselink" depends="generate-eclipselink">
        <!-- unzip src="${eclipselink.jar}" dest=".">
           <patternset>
               <include name="META-INF/MANIFEST.MF"/>
           </patternset>
        </unzip -->
        <java jar="${eclipselink.jar}" outputproperty="implimentation.version" fork="true"/>
        <!-- echo message="${implimentation.version}"/ -->
        <genImpVersion input="${implimentation.version}" property="implimentation.version" newline="${line.separator}"/>
        <genSpecVersion input="${implimentation.version}" property="specification.version"/>
        <genEarnameVersion input="${implimentation.version}" property="earname.version"/>
        <echo message="SpecV: '${specification.version}'"/>
        <echo message="ImpV: '${implimentation.version}'"/>
        <echo message="EarV: '${earname.version}'"/>
    </target>

    <target name="package-wls-shared-lib" depends="prepare-wls-metadata">
        <!-- generate Ear file -->
        <!-- if eclipselink.jar exists, generate ear with "o.e.p:spec version:imp version" -->
        <jar destfile="${shared-lib.dir}/${wls-shared-lib.name}.ear">
            <metainf dir="${metadata.dir}" includes="*.xml"/>
            <manifest>
                <attribute name="Extension-Name"         value="${wls-shared-lib.base.name}"/>
                <attribute name="Specification-Version"  value="${specification.version}"/>
                <attribute name="Implementation-Version" value="${implimentation.version}"/>
            </manifest>
            <zipfileset dir="." includes="${eclipselink.jar}" prefix="lib"/>
        </jar>
    </target>

    <target name="create-shared-lib-install" depends="package-wls-shared-lib">
        <delete file="eclipselink${earname.version}-shared-lib.zip"/>
        <!-- generate Ear file -->
        <!-- if eclipselink.jar exists, generate ear with "o.e.p:spec version:imp version" -->
        <zip destfile="eclipselink${earname.version}-shared-lib.zip">
            <zipfileset dir="${shared-lib.dir}" includes="${wls-shared-lib.name}.ear" prefix="shared-lib"/>
            <zipfileset dir="${shared-lib.dir}" includes="weblogic-application.xml"   prefix="application"/>
            <zipfileset dir="${shared-lib.dir}" includes="README"/>
        </zip>
    </target>

<!-- ======================================================================================================================================= -->
<!-- METADATA GENERATION -->
<!-- Ugly so moved to bottom of file -->

    <target name="prepare-wls-metadata" depends="identify-eclipselink">
        <!-- artifact definitions -->
        <property name="wls-shared-lib.base.name" value="org.eclipse.persistence"/>
        <property name="wls-shared-lib.name"      value="${wls-shared-lib.base.name}${earname.version}-shared-lib"/>

        <!-- location to generate metadata artifacts -->
        <property name="shared-lib.dir"           value="build/shared-lib"/>
        <property name="metadata.dir"             value="${shared-lib.dir}/etc"/>
        <delete dir="${shared-lib.dir}"/>
        <mkdir dir="${metadata.dir}"/>

        <!-- Create Library Metadata -->
        <echo file="${metadata.dir}/weblogic-application.xml" append="false">&lt;weblogic-application&gt;
    &lt;prefer-application-packages&gt;
        &lt;package-name&gt;org.eclipse.persistence.*&lt;/package-name&gt;
        &lt;package-name&gt;commonj.sdo.*&lt;/package-name&gt;
    &lt;/prefer-application-packages&gt;
&lt;/weblogic-application&gt;
</echo>

        <echo file="${metadata.dir}/application.xml" append="false">&lt;application&gt;
    &lt;display-name&gt;${wls-shared-lib.name}&lt;/display-name&gt;
    &lt;module&gt;
        &lt;java&gt;&lt;/java&gt;
    &lt;/module&gt;
&lt;/application&gt;
</echo>

        <!-- Create "Application" Metadata -->
        <echo file="${shared-lib.dir}/weblogic-application.xml" append="false">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;wls:weblogic-application xmlns:wls=&quot;http://xmlns.oracle.com/weblogic/weblogic-application&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.2/weblogic-application.xsd&quot;&gt;
    &lt;wls:application-param&gt;
        &lt;wls:param-name&gt;webapp.encoding.default&lt;/wls:param-name&gt;
        &lt;wls:param-value&gt;UTF-8&lt;/wls:param-value&gt;
    &lt;/wls:application-param&gt;
    &lt;wls:library-ref&gt;
        &lt;wls:library-name&gt;${wls-shared-lib.base.name}&lt;/wls:library-name&gt;
        &lt;wls:specification-version&gt;${specification.version}&lt;/wls:specification-version&gt;
        &lt;wls:implementation-version&gt;${implimentation.version}&lt;/wls:implementation-version&gt;
        &lt;wls:exact-match&gt;true&lt;/wls:exact-match&gt;
    &lt;/wls:library-ref&gt;
&lt;/wls:weblogic-application&gt;
</echo>

        <!-- Create Sharedlib "Install" readme -->
        <echo file="${shared-lib.dir}/README" append="false">
How to use a different version of EclipseLink than ships with Weblogic in your application
------------------------------------------------------------------------------------------

Put the shared library (the ear in the 'shared-lib' dir) in the ...
Package the 'weblogoc-application.xml found in the 'app' dir with your application, and...
        </echo>
    </target>

</project>
