<?xml version="1.0" encoding="UTF-8" ?>
<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->


<project name="PointBase server start|stop" basedir="." default="info">
        <property name="pointbase.server.jar" value="${nbextra.home}/qa/db/data/pbserver43.jar" />
        <property name="pointbase.client.jar" value="${nbextra.home}/qa/db/lib/ext/pbclient43.jar" />
        <property name="database.home" value="${nbextra.home}/qa/db/data/pbdata" />

        <property name="srcext-dir" value="${basedir}/antsrc" />


	<target name="info">
        	<echo message="This ant buildfile contains support for start/stop PointBase server during testing process" />
                <echo message="Cannot be used outside 'build.xml' file" />
                <echo message="Necessary PointBase classes/data location:" />
                <echo message="        pbserver43.jar ... ${pointbase.server.jar}" />
                <echo message="        pbclient43.jar ... ${pointbase.client.jar}" />
                <echo message="        data directory ... ${database.home}" />
                <echo message="        other informations are from 'databases.properties' file" />
                <echo message="As testing database is used 'sample' database from PointBase instalation" />
                <echo message="PointBase server is started/stopped during testing process within 'build.xml/runidetest-pointbase' target" />
        </target>


        <target name="start">
        	<java classname="com.pointbase.net.netServer" fork="true">
                	<classpath>
                        	<pathelement location="${pointbase.server.jar}" />
                        </classpath>
                        <jvmarg value="-Ddatabase.home=${database.home}" />
                </java>
        </target>


        <target name="stop" depends="bootstrap">
	        <property file="${xtest.userdata.propertyfile}"/>
        	<java classname="org.netbeans.db.antext.StopPointBaseServer" fork="true">
                	<classpath>
                        	<pathelement location="${srcext-dir}" />
                                <pathelement location="${pointbase.client.jar}" />
                        </classpath>
                        <jvmarg value="-Dpointbase.db.url=${xtest.userdata(pointbase)|db.url}" />
                        <jvmarg value="-Dpointbase.db.user=${xtest.userdata(pointbase)|db.user}" />
                        <jvmarg value="-Dpointbase.db.password=${xtest.userdata(pointbase)|db.password}" />
                        <jvmarg value="-Dpointbase.db.driverclass=${xtest.userdata(pointbase)|db.driverclass}" />
                </java>
        </target>


        <target name="bootstrap">
        	<javac srcdir="${srcext-dir}/org/netbeans/db/antext" classpath="${srcext-dir}" />
        </target>

</project>
