<!--
  XML file for launching Catalina applications using ant.
-->

<project name="Catalina Launcher" default="catalina" basedir=".">
  <property file="${user.home}/.tomcat5.properties"/>

  <!-- Set the application home to the parent directory of this directory -->
  <property name="catalina.home" location="${basedir}/.."/>
  <property name="bootstrap.jar" location="${catalina.home}/bin/bootstrap.jar"/>

  <!-- Import the user's custom properties -->
  <property file="${catalina.home}/bin/catalina.properties"/> <!-- XXX shold it be conf ?? -->
  <property file="${catalina.home}/conf/catalina.properties"/> <!-- XXX shold it be conf ?? -->


  <!-- Set user configurable properties -->
  <property name="jsse.home" location="${catalina.home}"/>
  <property name="catalina.base" location="${catalina.home}"/>
  <property name="catalina.tmpdir" location="${catalina.base}/temp"/>
  <property name="catalina.out" location="${catalina.base}/logs/catalina.out"/>
  <property name="catalina.policy" location="${catalina.base}/conf/catalina.policy"/>
  <property name="catalina.jvm.args" value="-Dsun.io.useCanonCaches=false"/>

  <property name="catalina.source.path" value="${catalina.home}/../../jakarta-servletapi-5/src/share:${catalina.home}/../../jakarta-tomcat-jasper/jasper2/src/share:${catalina.home}/../../jakarta-tomcat-connectors/coyote/src/java:${catalina.home}/../../jakarta-tomcat-catalina/catalina/src/share"/>


  <!-- Build the classpath relative to the application home -->
  <path id="base.class.path">
    <pathelement location="${bootstrap.jar}"/>
    <pathelement path="${jsse.home}/lib/jsse.jar:${jsse.home}/lib/jcert.jar:${jsse.home}/lib/jnet.jar"/>
  </path>

  <property name="basedir" location="."/>
  
  <property name="tools.jar" location="${java.home}/../lib/tools.jar" />

  <path id="tomcatcp" >
    <pathelement location="${catalina.home}/bin/bootstrap.jar"/>
    <!-- 
    <fileset dir="${catalina.home}/common/lib" includes="*.jar"/>
    <fileset dir="${catalina.home}/server/lib" includes="*.jar"/>
    <pathelement location="${catalina.home}/common/classes"/>
    -->
    <!-- 
       <pathelement location="${ant.home}/lib/xercesImpl.jar" />
       <pathelement location="${ant.home}/lib/xml-apis.jar" />
    -->
    <pathelement location="${ant.home}/lib/ant.jar" />
    <pathelement location="${tools.jar}" />
  </path>
 

  <!-- =================== Initialization/helpers ================== -->


  <target name="init"
          description="Display configuration and conditional compilation flags">
  </target>

  <target name="init-launcher" >
    <!-- Build the sysproperties relative to the application home -->
    <syspropertyset id="base.sys.properties">
      <sysproperty key="java.endorsed.dirs" file="${catalina.home}/common/endorsed"/>
      <sysproperty key="java.io.tmpdir" file="${catalina.tmpdir}"/>
      <sysproperty key="catalina.home" file="${catalina.home}"/>
      <sysproperty key="catalina.base" file="${catalina.base}"/>
    </syspropertyset>

    <!-- Build the standard jvmargs -->
    <jvmargset id="base.jvm.args">
      <jvmarg line="${catalina.jvm.args}"/>
      <jvmarg value="-Xdebug" if="jpda.settings"/>
      <jvmarg value="-Xrunjdwp:${jpda.settings}" if="jpda.settings"/>
      <jvmarg value="-sourcepath" if="jdb"/>
      <jvmarg path="${catalina.source.path}" if="jdb"/>
    </jvmargset>
  </target>

  <target name="echo-config" >
    <echo>TOMCAT_HOME=${catalina.home}</echo>
    <echo>CLASSPATH=${toString:tomcatcp}</echo>
  </target>

  <target name="help" >
    <echo>
  To run any of the applications in the JDB debugger, execute the Launcher with
  a "-Ddebug=true" argument.

  To run any of the applications in JPDA mode, execute the Launcher with a
  "-Djpda=true" argument.
   </echo>
  </target>

  <!-- Target that sets JDB properties when the "debug" property is set -->
  <target name="setjdb" description="Set JDB properties" if="debug">
    <property name="jdb" value="true"/>
  </target>

  <!-- Target that sets JPDA properties when the "jpda" property is set -->
  <target name="setjpda" description="Set JPDA properties" if="jpda">
    <condition property="jpda.transport" value="dt_shmem">
      <os family="windows"/>
    </condition>
    <condition property="jpda.transport" value="dt_socket">
      <not>
        <os family="windows"/>
      </not>
    </condition>
    <condition property="jpda.address" value="jdbconn">
      <equals arg1="${jpda.transport}" arg2="dt_shmem"/>
    </condition>
    <condition property="jpda.address" value="8000">
      <not>
        <equals arg1="${jpda.transport}" arg2="dt_shmem"/>
      </not>
    </condition>
    <property name="jpda.suspend" value="y"/>
    <property name="jpda.settings" value="transport=${jpda.transport},address=${jpda.address},server=y,suspend=${jpda.suspend}"/>
  </target>

  <!-- =================== Launcher-based ================== -->

  <!-- Target that executes Catalina -->
  <target name="catalina" description="Execute Catalina"
    depends="init-launcher,setjdb,setjpda" >

    <!-- Set default title for minimized window -->
    <property name="catalina.window.title" value="Catalina"/>

    <!--
      Launch Catalina. Note that the "filterclassname" attribute will force
      the "waitforchild" attribute to "true" if any invalid arguments are
      used or if "start" is not the last argument.
    -->
    <launch classname="org.apache.catalina.startup.Bootstrap"
      waitforchild="${wait}"
      debug="${jdb}"
      print="${print}"
      filterclassname="org.apache.catalina.launcher.CatalinaLaunchFilter"
      filterclasspath="${bootstrap.jar}"
      usesystemin="false"
      requiretools="true"
      redirectoutput="true"
      output="${catalina.out}"
      displayMinimizedWindow="true"
      minimizedWindowTitle="${catalina.window.title}">
        <jvmargset refid="base.jvm.args"/>
        <syspropertyset refid="base.sys.properties"/>
        <sysproperty key="java.security.manager" value="" if="security"/>
        <sysproperty key="java.security.policy" value="=${catalina.policy}" if="security"/>
        <classpath refid="base.class.path"/>
    </launch>

  </target>

  <!-- Target that executes the Catalina tool wrapper -->
  <target name="tool-wrapper" description="Execute Catalina tool wrapper"
    depends="setjdb,setjpda" >

    <!-- Launch Catalina tool wrapper -->
    <launch classname="org.apache.catalina.startup.Tool"
      debug="${jdb}"
      print="${print}"
      usesystemin="false"
      requiretools="true">
        <jvmargset refid="base.jvm.args"/>
        <syspropertyset refid="base.sys.properties"/>
        <classpath refid="base.class.path"/>
    </launch>

  </target>

  <!-- ======================= Ant/JMX based ================ -->

  <target name="taskdef" >
    <property name="tomcat.home" location=".." />

    <path id="jmx.test.classpath">
      <pathelement location="${commons-modeler.jar}" />
      <fileset dir="${tomcat.home}/common/lib" includes="*.jar"/>
      <fileset dir="${tomcat.home}/server/lib" includes="*.jar"/>
      <fileset dir="${tomcat.home}/bin" includes="*.jar"/>
    </path>

    <!-- part of modeler -->
    <taskdef resource="META-INF/ant.properties"
             classpathref="jmx.test.classpath" />
  </target>


  <target name="run" depends="echo-config,taskdef"
        description="Start tomcat as a task and return">
   
    <MLET code="org.apache.commons.modeler.BaseModelMBean"
          name="catalina:type=server" >
       <arg value="org.apache.catalina.startup.Catalina" />
    </MLET>

    <jmxSet name="catalina:type=server"
            attribute="catalinaHome"
            value="${tomcat.home}"/>
  
    <!-- We could also call init and set other properties - 
         init should load the modules -->

    <jmx name="catalina:type=server"
         method="start" />
    
    <echo message="Tomcat5 running"/>

  </target>


  <!-- ======================= Exec/java  ================ -->

  <target name="java-start" depends="echo-config" 
        description="Run tomcat in-process and wait for it to end, using java task" >

    <property name="tomcat.fork" value="false" />

    <java classname="org.apache.catalina.startup.Bootstrap" fork="${tomcat.fork}">
      <classpath refid="tomcatcp" />
      <arg value="startd" />
      <sysproperty key="catalina.home" value="${catalina.home}"/>
      <sysproperty key="build.compiler" value="jikes"/>
      <sysproperty key="java.endorsed.dirs" value="${ant.home}/lib:${java.home}/lib"/>
    </java>

    <echo message="Tomcat5 running"/>

  </target>

</project>
