<!--
   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="uima-ducc-web" default="jconsole" basedir=".">
    
    <property environment="env" />         <!-- import env -->
    <property name="java-home"             value="${env.JAVA_HOME}" />
    <property name="ducc-home"             value="${env.DUCC_HOME}" />
	
	<!-- 
	     This script builds a signed JConsole jar file for use with browser links from DUCC
	     WS via java webstart (for example, JConsole links found on System.Daemons page).
	 
	     The 'build 'task takes an existing (unsigned) jconsole.jar file, adds the 
	     JConsoleWrapper.class found in the DUCC build, and creates a new signed jar file.
	     
	     The 'install' task places the newly build signed jar file into webserver's webstart
	     directory for use at runtime.
	     
	     The 'browser' task gives hints on how to use java webstart.

	     Expectations:
	     
	     1. environemnt variable JAVA_HOME comprises location of java runtime (e.g. JAVA_HOME=/share/ibm-jdk1.6)
	     2. environemnt variable DUCC_HOME comprises location of ducc runtime (e.g. DUCC_HOME=/home/ducc/ducc_runtime)
	-->
	
    <property name="ducc.lib"              value="${ducc-home}/lib" />
	<property name="uima.web.jar"          value="uima-ducc-web.jar" />
    
    <property name="webstart.dir"          value="${ducc-home}/webserver/root/lib/webstart" />
    
    <property name="tmp"                   value="${ducc-home}/tmp" />
    <property name="tmp.src"               value="${ducc-home}/tmp/src" />
    <property name="tmp.dst"               value="${ducc-home}/tmp/dst" />
    <property name="tmp.key"               value="${ducc-home}/tmp/key" />
    
    <property name="JConsoleWrapper.class" value="JConsoleWrapper.class" />
    
    <property name="unsigned.jar"          value="jconsole.jar" />
    <property name="src.jar"               value="${java-home}/lib/${unsigned.jar}" />
    
    <property name="wrapper.jar"           value="jconsole-wrapper.jar" />
    <property name="wrapper.signed.jar"    value="jconsole-wrapper-signed.jar" />
    
    <property name="dst.jar"               value="${tmp.dst}/${wrapper.jar}" />
    <property name="dst.signed.jar"        value="${tmp.dst}/${wrapper.signed.jar}" />
       
    <property name="key.alias"             value="ducc" />
    <property name="key.storepass"         value="uima.ducc.org" />
    <property name="key.store"             value="${tmp.key}/.keystore" />
    <property name="key.pass"              value="uima.ducc.org" />
       
    <target name="jconsole" depends="build, install, cleanup, browser" />
        
    <target name="build" depends="java-home, ducc-home, prepare, setup, unjar, rejar, gen-key, sign, proclaim" />
    
    <target name="java-home">
        <echo message="${java-home}"/>
        <fail message="Please insure that ducc.properties key=ducc.jvm value=${java-home}/bin/java is part of a JDK: ${java-home}/lib/jconsole.jar was not found.">
            <condition>
                <not>
                    <resourcecount count="1">
                        <fileset id="fs" dir="${java-home}/lib/" includes="jconsole.jar"/>
                    </resourcecount>
                </not>
            </condition>
        </fail>
    </target>
    
    <target name="ducc-home">
        <echo message="${ducc-home}"/>
    </target>
    
    <target name="prepare">
        <delete dir="${tmp}" />
    </target>
    
    <target name="cleanup">
        <delete dir="${tmp}" />
    </target>
	
    <target name="setup">
        <mkdir dir="${tmp}" />
        <mkdir dir="${tmp.src}" />
        <mkdir dir="${tmp.dst}" />
        <mkdir dir="${tmp.key}" />
    </target>
    
    
    <target name="unjar" depends="unzip-jconsole, unjar-wrapper" />
       
    <target name="unzip-jconsole">
        <unzip src="${src.jar}" dest="${tmp.src}"/>
    </target>
           
    <target name="unjar-wrapper">
        <unjar dest="${tmp.src}">
          <patternset>
            <include name="**/JConsoleWrapper.class" />
          </patternset>
          <fileset dir="${ducc.lib}" includes="${uima.web.jar}" />
        </unjar>
    </target>
       
    <target name="rejar">
        <jar destfile="${dst.jar}" basedir="${tmp.src}"/>
    </target>
       
    <target name="gen-key">
        <genkey alias="${key.alias}" verbose="true" storepass="${key.storepass}" keypass="${key.pass}" validity="3650" keystore="${key.store}">
            <dname>
                <param name="CN" value="ducc.org Group"/>
                <param name="OU" value="ducc"/>
                <param name="O"  value="ducc.org"/>
                <param name="C"  value="US"/>
            </dname>
        </genkey>
    </target>
       
    <target name="sign">
        <signjar jar="${dst.jar}"
          signedjar="${dst.signed.jar}"
          alias="${key.alias}"
          storepass="${key.storepass}"
          keystore="${key.store}"
          keypass="${key.pass}"/>
    </target>
    
    <target name="proclaim">
        <echo message="${dst.signed.jar}"/>
    </target>
    
    <target name="install">
        <copy file="${dst.signed.jar}" todir="${webstart.dir}"  overwrite="true" />
    </target>
       
    <target name="browser">
        <echo message="To launch webstart application (JConsole links) from browser:"/>
        <echo message="1. Select Open With and choose another"/>
        <echo message="2. Navigate to JAVA_HOME/bin and select javaws"/>
        <echo message="3. Select Do this automatically for files like this from now on"/>
        <echo message="4. Click OK"/>
    </target>
    
</project>