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

<!-- This ant project includes the following tasks:
        - oc4j-install : recreates server installation from download zip
        - oc4j-setup : creates connection pool
        - oc4j-reset : removes connection pool
        - oc4j-start : starts server
        - oc4j-stop : stops server
        - oc4j-deploy : deploys ear
        - oc4j-undeploy : undeploys ear

        It requires some configuration of the oc4j.properties, it should be run through build.xml, not directly.
    -->
<project name="Eclipse Persistence Services JPA OC4J Testing" basedir=".">

    <!-- Allows a user to overide certain user specific properties. -->
    <property file="${user.home}/oc4j.properties"/>
    <property file="./oc4j.properties"/>
    <property name="eclipselink.lib" value="../../${eclipselink.jar}"/>

    <!--
        This target is to install OC4J server at ${oc4j.home}.
        Before calling this target, you need to obtain Oracle OC4J standalone zip - oc4j.extended.zip and put it at ${extension.oracle.lib.external}
    -->
    <target name="oc4j-install">
        <delete dir="${oc4j.home}"/>
        <mkdir dir="${oc4j.home}"/>
        <unzip src="${oc4j.extended.zip}" dest="${oc4j.home}"/>
        <!--Change password for admin-->
        <java classname="oracle.security.jazn.util.JAZNInstallHelper" fork="true" dir="${oc4j.home}/j2ee/home">
            <classpath>
                <pathelement location="${oc4j.home}/j2ee/home/jazncore.jar" />
                <pathelement location="${oc4j.home}/j2ee/home/jazn.jar" />
            </classpath>
            <arg line="-oh ${oc4j.home} -realm jazn.com -user ${server.user} -oldpwd welcome -newpwd ${server.pwd} -clearpwd true"/>
        </java>

        <copy file="${eclipselink.lib}" todir="${oc4j.home}/j2ee/home/applib"/>
        <copy file="${junit.lib}" todir="${oc4j.home}/j2ee/home/applib"/>
        <copy file="${jdbc.driver.jar}" todir="${oc4j.home}/j2ee/home/applib"/>
        <copy file="${oracle.extensions.depend.dir}/${oracle.sdoapi.jar}" todir="${oc4j.home}/j2ee/home/applib"/>
    </target>

    <!-- Start the server. -->
    <target name="oc4j-start">
        <property file="${user.home}/oc4j.properties"/>
        <property file="./oc4j.properties"/>
        <java jar="${oc4j.home}/j2ee/home/oc4j.jar"
            fork="true"
            failonerror="false">
            <jvmarg value="-Xms512m"/>
            <jvmarg value="-Xmx960m"/>
            <jvmarg value="-XX:PermSize=128m"/>
            <arg value="-config"/>
            <arg value="${oc4j.home}/j2ee/home/config/server.xml"/>
            <arg value="-userThreads"/>
            <!--jvmarg value="-Xdebug"/-->
            <!--jvmarg value="-Xnoagent"/-->
            <!--jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=4000"/-->
            <!--sysproperty key="http.proxyHost" value="www-proxy.us.oracle.com"/-->
            <!--sysproperty key="http.proxyPort" value="80"/-->
            <sysproperty key="eclipselink.logging.level" value="${logging.level}"/>
        </java>
    </target>

    <!--
        This target is to create connection pool and managed datasource required for running JPA tests on the OC4J server
        Note: OC4J server must be up while calling this target
    -->
    <target name="oc4j-setup">
        <antcall target="create-connection-pool" inheritRefs="true"/>
        <antcall target="create-managed-datasource" inheritRefs="true"/>
    </target>

    <!--
        This target is to remove the connection pool and managed datasource created by target <oc4j.setup>
        Note: OC4J server must be up while calling this target
    -->
    <target name="oc4j-reset">
        <antcall target="remove-datasource" inheritRefs="true"/>
        <antcall target="remove-connection-pool" inheritRefs="true"/>
    </target>

    <target name="create-connection-pool">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar" fork="true">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-addDataSourceConnectionPool"/>
            <arg value="-name"/>
            <arg value="ejbPool"/>
            <arg value="-factoryClass"/>
            <arg value="oracle.jdbc.pool.OracleDataSource"/>
            <arg value="-dbUser"/>
            <arg value="${db.user}"/>
            <arg value="-dbPassword"/>
            <arg value="${db.pwd}"/>
            <arg value="-url"/>
            <arg value="${db.url}"/>
        </java>
    </target>

    <target name="create-managed-datasource">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar" fork="true">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-addManagedDataSource"/>
            <arg value="-name"/>
            <arg value="EclipseLinkDS"/>
            <arg value="-jndiLocation"/>
            <arg value="jdbc/EclipseLinkDS"/>
            <arg value="-connectionPoolName"/>
            <arg value="ejbPool"/>
        </java>
    </target>

    <target name="remove-datasource">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar" fork="true">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-removeManagedDatasource"/>
            <arg value="-name"/>
            <arg value="EclipseLinkDS"/>
        </java>
    </target>

    <target name="remove-connection-pool">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar" fork="true">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-removeDataSourceConnectionPool"/>
            <arg value="-name"/>
            <arg value="ejbPool"/>
        </java>
    </target>

    <!-- Stop the server. -->
    <target name="oc4j-stop">
        <property file="${user.home}/oc4j.properties"/>
        <property file="./oc4j.properties"/>
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar"
            fork="true"
            failonerror="false">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-shutdown"/>
            <arg value="force"/>
        </java>
    </target>

    <!--
        Deploy the application ear to the server.
        Note: OC4J server must be running.
    -->
    <target name="oc4j-deploy">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar"
            fork="true"
            failonerror="false">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-deploy"/>
            <arg value="-file"/>
            <arg value="${ear.name}"/>
            <arg value="-deploymentName"/>
            <arg value="${application.name}"/>
        </java>
    </target>

    <!--
        Undeploy the application ear to the server.
        Note: OC4J server must be running.
    -->
    <target name="oc4j-undeploy">
        <java jar="${oc4j.home}/j2ee/home/admin_client.jar"
            fork="true"
            failonerror="false">
            <arg value="deployer:oc4j:${oc4j.httphost}:${oc4j.rmiport}"/>
            <arg value="${server.user}"/>
            <arg value="${server.pwd}"/>
            <arg value="-undeploy"/>
            <arg value="${application.name}"/>
        </java>
    </target>

</project>
