<!--

  Ant Buildfile for MOA SP/SS Server
  
  Authors: Patrick Peck, Gregor Karlinger

  $Id$

-->
<project name="moa-spss-server" default="deploy-catalina" basedir=".">
  <property environment="env"/>
  <property name="script-suffix" value="${env.SCRIPT_SUFFIX}"/>
  <property name="version" value="1.3.1"/>
  <property name="lib" value="lib"/>
  <property name="src" value="src"/>
  <property name="res" value="res"/>
  <property name="data" value="data"/>
  <property name="licenses" value="licenses"/>
  <property name="handbook" value="../spss.handbook"/>
  <property name="deploy.conf" value="${handbook}/conf"/>
  <property name="doc" value="doc"/>
  <property name="tmp" value="tmp"/>
  <property name="compile" value="${tmp}/compile"/>
  <property name="tools" value="${tmp}/tools"/>
  <property name="tmp.doc" value="${tmp}/doc"/>
  <property name="api-doc" value="${tmp}/api-doc"/>
  <property name="api-doc.internal" value="${tmp}/api-doc-internal"/>
  <property name="prj.build" value="../build"/>
  <property name="prj.common" value="../common"/>
  <property name="prj.handbook" value="../spss.handbook"/>
  <property name="dist" value="${tmp}/dist"/>
  <property name="dist.ws" value="${dist}/ws"/>
  <property name="dist.ws.conf" value="${dist.ws}/conf"/>
  <property name="dist.ws-zip" value="${dist}/ws-zip"/>
  <property name="dist.lib" value="${dist}/lib"/>
  <property name="dist.lib-zip" value="${dist}/lib-zip"/>
  <property name="dist.src" value="${dist}/src"/>
  <property name="dist.src-zip" value="${dist}/src-zip"/>
  <property name="lib.axis" value="${lib}/axis-1.0"/>
  <property name="lib.jaxp" value="${lib}/jaxp-1.2_01"/>
  <property name="lib.jaxen" value="${lib}/jaxen-1.0"/>
  <property name="lib.xerces" value="${lib}/xerces-j-2.4.0"/>
  <property name="lib.xalan" value="${lib}/xalan-j-2.5.1"/>
  <property name="lib.jsse" value="${lib}/jsse-1.0.3_03"/>
  <property name="lib.postgres-jdbc" value="${lib}/postgres-jdbc2-7.3"/>
  <property name="lib.iaik-moa" value="../spss.iaiklibsupdate/iaiklibs.prod"/>
  <property name="lib.junit" value="${lib}/junit-3.8.1"/>
  <property name="lib.servlet" value="${lib}/servlet-2.3"/>
  <property name="lib.commons-logging" value="${lib}/commons-logging-1.0.4"/>
  <property name="lib.commons-discovery" value="${lib}/commons-discovery-0.2"/>
  <property name="lib.log4j" value="${lib}/log4j-1.2.7"/>
  <property name="lib.idoclet" value="${lib}/iDoclet-1.0"/>

  <path id="compile.classpath">
    <pathelement location="${lib.axis}/axis.jar"/>
    <pathelement location="${lib.axis}/jaxrpc.jar"/>
    <pathelement location="${lib.axis}/saaj.jar"/>
    <pathelement location="${lib.jaxp}/jaxp-api.jar"/>
    <pathelement location="${lib.jaxp}/dom.jar"/>
    <pathelement location="${lib.jaxp}/sax.jar"/>
    <pathelement location="${lib.xerces}/xerces.jar"/>
    <pathelement location="${lib.jaxen}/jaxen-core.jar"/>
    <pathelement location="${lib.jaxen}/jaxen-dom.jar"/>
    <pathelement location="${lib.jaxen}/saxpath.jar"/>
    <pathelement location="${lib.xalan}/xalan.jar"/>
    <pathelement location="${lib.junit}/junit.jar"/>
    <fileset dir="${lib.jsse}" />
    <pathelement location="${lib.commons-logging}/commons-logging-api.jar"/>
    <pathelement location="${lib.commons-discovery}/commons-discovery.jar"/>
    <pathelement location="${lib.servlet}/servlet-2_3-fcs-classfiles.zip"/>
    <pathelement location="${lib.iaik-moa}/iaik_moa_full.jar"/>
    <pathelement location="${lib.iaik-moa}/iaik_ixsil.jar"/>
    <pathelement location="${lib.iaik-moa}/iaik_jce_full.jar"/>
    <pathelement location="${lib.iaik-moa}/iaik_ecc.jar"/>
    <pathelement location="${env.MOA_COMMON_TEST_JAR}"/>
  </path>
  
  <target name="init">
    <description>set up directories etc.</description>
    <tstamp/>
    <mkdir dir="${tmp}"/>
    <mkdir dir="${compile}"/>
    <mkdir dir="${tools}"/>
    <mkdir dir="${api-doc}"/>
    <mkdir dir="${api-doc.internal}"/>
    <mkdir dir="${dist}"/>
    <mkdir dir="${dist.ws}"/>
    <mkdir dir="${dist.ws-zip}"/>
    <mkdir dir="${dist.lib}"/>
    <mkdir dir="${dist.lib-zip}"/>
    <mkdir dir="${dist.src}"/>
    <mkdir dir="${dist.src-zip}"/>
  </target>
  
  <target name="compile" depends="init">
    <description>compile everything</description>
    <javac srcdir="${src}" destdir="${compile}"
           classpathref="compile.classpath" 
           debug="on">
    </javac>
  </target>
  
  <target name="package-ws" depends="compile, manifest">
    <description>package the server war file</description>
    <war warfile="${dist.ws}/moa-spss.war" webxml="web.xml" manifest="${tmp}/MANIFEST.MF">
      <lib dir="${lib.xalan}"/>
      <lib dir="${lib.xerces}"/>
      <lib dir="${lib.jaxp}"/>
      <lib dir="${lib.log4j}"/>
      <lib dir="${lib.postgres-jdbc}"/>
      <lib dir="${lib.axis}"/>
      <lib dir="${lib.jaxen}"/>
      
      <lib dir="${lib.iaik-moa}" 
           excludes="iaik_jce_full.jar, iaik_ecc.jar, iaik_Pkcs11Provider.jar, win32/**, linux/**, solaris/**, signed/**"/>
      <!--lib dir="${lib.iaik-moa}" 
           excludes="iaik_jce_full.jar, iaik_ecc.jar, iaik_Pkcs11Provider.jar, signed/,linux/libpkcs11wrapper.so,solaris/libpkcs11wrapper.so"/-->
  
          
      <lib file="${lib.commons-logging}/commons-logging.jar"/>
      <lib file="${lib.commons-discovery}/commons-discovery.jar"/>
      <lib file="${env.MOA_COMMON_JAR}"/>
      <classes dir="${compile}" excludes="test/**"/>
      <classes dir="${res}" excludes="resources/tools/**, test/**"/>
      <classes file="${handbook}/conf/moa-spss/log4j.properties"/>
      <webinf file="server-config.wsdd"/>
      <webinf dir="${handbook}" includes="conf/**"/>
      <zipfileset file="${res}/resources/wsdl/MOA-SPSS-1.3.xsd" prefix="resources/schemas"/>
    </war>
  </target>
  
  <target name="package-lib" depends="compile">
    <description>package the library jar file</description>
    <jar destfile="${dist.lib}/moa-spss.jar">
      <fileset dir="${compile}" excludes="test/**"/>
      <fileset dir="${res}" excludes="resources/tools/**, test/**"/>
      <fileset dir="${handbook}/conf/moa-spss" includes="log4j.properties"/>
    </jar>
  </target>
  
  <target name="package-tools" depends="compile">
    <description>package the configuration tools</description>
    <jar destfile="${tools}/tools.jar">
      <fileset dir="${compile}" includes="at/**/tools/**"/>
      <fileset dir="${res}" includes="resources/tools/**"/>	
    </jar>
  </target>
  
  <target name="api-doc-internal" depends="init">
    <description>create JavaDoc for the server internal classes</description>
    <javadoc defaultexcludes="yes"
           destdir="${api-doc.internal}"
           author="true"
           version="true"
           use="true"
           windowtitle="MOA SP/SS Server Internal API">
      <packageset dir="${prj.common}/src">
        <exclude name="test/**"/>
      </packageset>
      <packageset dir="src">
        <exclude name="test/**"/>
        <exclude name="at/gv/egovernment/moa/spss/api/**"/>
      </packageset>
      <group title="Exception Classes"
             packages="at.gv.egovernment.moa.spss.server">
      </group>
      <group title="MOA Configuration">
        <package name="at.gv.egovernment.moa.spss.server.config"/>
        <package name="at.gv.egovernment.moa.spss.server.iaik.config"/>
      </group>
      <group title="Web Service Handling">
        <package name="at.gv.egovernment.moa.spss.server.service"/>
        <package name="at.gv.egovernment.moa.spss.server.transaction"/>
      </group>
      <group title="Mapping MOA API calls to the IAIK API"
             packages="at.gv.egovernment.moa.spss.server.invoke">
      </group>
      <group title="Implementations of IAIK interfaces"
             packages="at.gv.egovernment.moa.spss.server.iaik.*">
      </group>
      <group title="Utilities">
        <package name="at.gv.egovernment.moa.util"/>
        <package name="at.gv.egovernment.moa.spss.server.util"/>
      </group>
      <group title="Logging">
        <package name="at.gv.egovernment.moa.logging"/>
        <package name="at.gv.egovernment.moa.spss.server.logging"/>
      </group>
      <group title="External Tools"
             packages="at.gv.egovernment.moa.spss.server.tools">
      </group>
      <link offline="false" href="http://java.sun.com/j2se/1.3/docs/api/"/>
      <doctitle><![CDATA[<h1>MOA SP/SS Server Internal API</h1>]]></doctitle>
      <classpath refid="compile.classpath"/>
    </javadoc>
  </target>
  
  <target name="api-doc" depends="init">
    <description>create JavaDoc for the SP/SS API</description>
    <javadoc defaultexcludes="yes"
           destdir="${api-doc}"
           author="false"
           version="false"
           use="true"
           Overview="${src}/at/gv/egovernment/moa/spss/overview.htm"
           windowtitle="MOA SP/SS API">
      <packageset dir="src">
        <include name="at/gv/egovernment/moa/spss/**"/>
        <exclude name="at/gv/egovernment/moa/spss/server/**"/>
        <exclude name="at/gv/egovernment/moa/spss/api/impl/**"/>
        <exclude name="test/**"/>
      </packageset>
      <packageset dir="${prj.common}/src">
        <exclude name="test/**"/>
      </packageset>
      <group title="API Factory and Services">
        <package name="at.gv.egovernment.moa.spss.api"/>
      </group>
      <group title="Exceptions">
        <package name="at.gv.egovernment.moa.spss"/>
      </group>
      <group title="API Objects for Signature Creation">
        <package name="at.gv.egovernment.moa.spss.api.xmlsign"/>
      </group>
      <group title="API Objects for CMS Signature Verification">
        <package name="at.gv.egovernment.moa.spss.api.cmsverify"/>
      </group>
      <group title="API Objects for XML Signature Verification">
        <package name="at.gv.egovernment.moa.spss.api.xmlverify"/>
      </group>
      <group title="Common API Objects">
        <package name="at.gv.egovernment.moa.spss.api.common"/>
      </group>
      <group title="Builders and Parsers to convert API Objects to and from XML">
        <package name="at.gv.egovernment.moa.spss.api.xmlbind"/>
      </group>
      <group title="Utilities">
        <package name="at.gv.egovernment.moa.util"/>
        <package name="at.gv.egovernment.moa.spss.util"/>
      </group>
      <group title="Logging">
        <package name="at.gv.egovernment.moa.logging"/>
      </group>
      <link offline="false" href="http://java.sun.com/j2se/1.3/docs/api/"/>
      <doclet name="iContract.doclet.Standard" 
              path="${lib.idoclet}/iDoclet.jar">
        <param name="-use"/>
      </doclet>
      <doctitle><![CDATA[<h1>MOA SP/SS API</h1>]]></doctitle>
      <classpath refid="compile.classpath"/>
    </javadoc>
  </target>
  
  <target name="dist-ws" depends="package-ws, package-tools">
    <description>create the webservice distributable</description>
    <copy toDir="${dist.ws}/tomcat">
      <fileset dir="${data}/deploy/tomcat"/>
    </copy>
    <copy toDir="${dist.ws}/conf">
      <fileset dir="${handbook}/conf"/>
    </copy>
    <copy toDir="${dist.ws}/ext13">
      
      <fileset dir="${lib.iaik-moa}" includes="iaik_jce_full.jar, iaik_ecc.jar, iaik_Pkcs11Provider.jar"/>
      
      <fileset dir="${lib.jsse}"/>
    </copy>
    
    <copy toDir="${dist.ws}/ext14">
      <fileset dir="${lib.iaik-moa}/signed"/>
    </copy>
    
    <copy toDir="${dist.ws}/endorsed14">
      <fileset dir="${lib.xalan}"/>
      <fileset dir="${lib.xerces}"/>
    </copy>
    <copy toDir="${dist.ws}/tools">
      <fileset dir="${tools}"/>      
      <fileset dir="${lib.iaik-moa}">
        <include name="iaik_jce_full.jar"/>
        <include name="iaik_moa_full.jar"/>
        <include name="iaik_ecc.jar"/>
      </fileset>     
      <fileset dir="${lib.log4j}"/>
      <fileset dir="${lib.xalan}"/>    	
      <fileset dir="${data}/deploy/tools"/>
    </copy>
    <copy toDir="${dist.ws}/pkcs11">
      <fileset dir="${lib.iaik-moa}" includes="win32/**, linux/**, solaris/**"/>
    </copy>
  	<copy toDir="${dist.ws}/licenses">
  	  <fileset dir="${licenses}"/>
  	</copy>	
  	<copy toDir="${dist.ws}">
  	  <fileset dir="." includes="readme.inst.txt, readme.update.txt, history.txt"/>	
  	</copy>
    <fixcrlf srcdir="${dist.ws}" includes="**/*.sh" eol="lf" eof="remove"/>
  </target>
  
  <target name="dist-ws-doc" depends="dist-ws, api-doc">
    <description>
      create the webservice-distributable, including all documentation
    </description>
    <copy toDir="${dist.ws}/doc/api-doc">
      <fileset dir="${api-doc}"/>
    </copy>
    <!-- Handbuch aus dem Projekt spss.handbook -->
  	<copy toDir="${dist.ws}/doc">
      <fileset dir="${handbook}" excludes="bin/** conf/** handbook/common/LogoMoa4c.3148x3545.jpg .project .classpath" />
    </copy>
  </target>
  
  <target name="dist-ws-zip" depends="dist-ws-doc">
    <description>
      create the zipped webservice distributable
    </description>
    <zip zipfile="${dist.ws-zip}/moa-spss-${version}.zip">
      <zipfileset dir="${dist.ws}" prefix="moa-spss-${version}"/>
    </zip>
  </target>
  
  <target name="dist-lib" depends="package-lib">
    <description>create the library distributable</description>
    <copy todir="${dist.lib}" file="${env.MOA_COMMON_JAR}"/>
    <copy todir="${dist.lib}/lib">
      <fileset dir="${lib.jaxp}"/>
      <fileset dir="${lib.jaxen}"/>
      <fileset dir="${lib.xerces}"/>
      <fileset dir="${lib.xalan}"/>
      <fileset dir="${lib.postgres-jdbc}"/>
      
      <fileset dir="${lib.iaik-moa}" excludes="signed/**, iaik_jce_full.jar, iaik_ecc.jar, iaik_Pkcs11Provider.jar"/>
      
      <fileset dir="${lib.commons-logging}"/>
      <fileset dir="${lib.log4j}"/>
      <fileset dir="${lib.commons-discovery}"/>
    </copy>
    <copy toDir="${dist.lib}/conf">
      <fileset dir="${handbook}/conf"/>
    </copy>
    <copy toDir="${dist.lib}/ext13">
      
      <fileset dir="${lib.iaik-moa}" includes="iaik_jce_full.jar, iaik_ecc.jar, iaik_Pkcs11Provider.jar"/>
      
      <fileset dir="${lib.jsse}"/>
    </copy>
    
    <copy toDir="${dist.lib}/ext14">
      <fileset dir="${lib.iaik-moa}/signed"/>
    </copy>
    
    <copy toDir="${dist.lib}/tools">
      <fileset dir="${tools}"/>     
      <fileset dir="${lib.iaik-moa}">
        <include name="iaik_jce_full.jar"/>
        <include name="iaik_moa_full.jar"/>
        <include name="iaik_ecc.jar"/>
      </fileset>      
      <fileset dir="${lib.log4j}"/>
      <fileset dir="${lib.xalan}"/>
      <fileset dir="${data}/deploy/tools"/>
    </copy>
  	<copy toDir="${dist.lib}/licenses">
  	  <fileset dir="${licenses}"/>
  	</copy>	
  	<copy toDir="${dist.lib}">
  	  <fileset dir="." includes="readme.inst.txt, readme.update.txt, history.txt"/>	
  	</copy>
    <fixcrlf srcdir="${dist.lib}" includes="**/*.sh" eol="lf" eof="remove"/>
  </target>
  
  <target name="dist-lib-doc" depends="dist-lib, api-doc">
    <description>
      create the library distributable, including all documentation
    </description>
    <copy toDir="${dist.lib}/doc/api-doc">
      <fileset dir="${api-doc}"/>
    </copy>
    <!-- Handbuch aus dem Projekt spss.handbook -->
  	<copy toDir="${dist.lib}/doc">
      <fileset dir="${handbook}" excludes="bin/** conf/** handbook/common/LogoMoa4c.3148x3545.jpg .project .classpath"/>
    </copy>
  </target>
  
  <target name="dist-lib-zip" depends="dist-lib-doc">
    <description>
      create the zipped library distributable
    </description>
    <zip zipfile="${dist.lib-zip}/moa-spss-${version}-lib.zip">
      <zipfileset dir="${dist.lib}" prefix="moa-spss-${version}-lib"/>
    </zip>
  </target>
  
  <target name="dist-src">
    <description>create the source distributable</description>
    <copy toDir="${dist.src}/build">
      <fileset dir="${prj.build}"/>
    </copy>
    <copy toDir="${dist.src}/common">
      <fileset dir="${prj.common}" excludes="tmp/**, bin/**, lib/iaik-jce-3.0.6/**"/>
    </copy>
    <copy toDir="${dist.src}/spss.handbook">
        <fileset dir="${prj.handbook}"/>
    </copy>
    <copy toDir="${dist.src}/spss.server">
      <fileset dir="." excludes="tmp/**, bin/**, lib/iaik-moa-20050623/**"/>
    </copy>
  	<copy toDir="${dist.src}">
  	  <fileset dir="." includes="readme.src.txt"/>	
  	</copy>
  	<!--mkdir "${dist.src}/spss.server/lib/iaik-moa/iaik-moa-20051107"/-->
  	<copy toDir="${dist.src}/spss.server/lib/iaik-moa-20060316">
  		<fileset dir="${lib.iaik-moa}"/>
  	</copy>
    <fixcrlf srcdir="${dist.src}" includes="**/*.sh" eol="lf" eof="remove"/>
  </target>
  
  <target name="dist-src-doc" depends="dist-src, api-doc-internal">
    <copy toDir="${dist.src}/spss.server/doc/api-doc-internal">
      <fileset dir="${api-doc.internal}"/>
    </copy>
  </target>
  
  <target name="dist-src-zip" depends="dist-src-doc">
    <zip zipfile="${dist.src-zip}/moa-spss-${version}-src.zip">
      <zipfileset dir="${dist.src}" prefix="moa-spss-${version}-src"/>
    </zip>
  </target>
  
  <target name="dist-all" depends="dist-ws-zip, dist-lib-zip, dist-src-zip">
    <description>create all distributables</description>
  </target>
  
  <target name="deploy-catalina" depends="dist-ws" if="env.CATALINA_HOME">
    <description>
      deploy the webservice to catalina (needs CATALINA_HOME defined)
    </description>
    <delete dir="${env.CATALINA_HOME}/webapps/moa-spss"/>
    <copy file="${dist.ws}/moa-spss.war" toDir="${env.CATALINA_HOME}/webapps"/>
    <!-- copy endorsed jars -->
    <copy toDir="${env.CATALINA_HOME}/common/endorsed">
      <fileset dir="${dist.ws}/endorsed14"/>
    </copy>
    <!-- copy sample configuration -->
    <copy toDir="${env.CATALINA_HOME}/conf">
      <fileset dir="${deploy.conf}"/>
    </copy>
  </target>
  
  <target name="clean">
    <description>clean temporary files</description>
    <delete dir="${tmp}"/>
  </target>
	
  <target name="manifest">
    <filter token="version" value="${version}" /> 
    <copy file="manifest.template" tofile="${tmp}/MANIFEST.MF" overwrite="true" filtering="true" /> 
  </target>	
  	
</project>