<?xml version="1.0"?>

<!--
#
# $Header: //cheiron/seven/main/build/build.xml#20 $
#
# Copyright 2002-2003 Virgil BV.
#
-->

<project name="seven" default="package">

        <!--
                properties
        -->
        <property name="base" value="${basedir}/.."/>
        <property name="src" value="${base}/src"/>
        <property name="classes" value="${base}/classes"/>
        <property name="lib" value="${base}/lib"/>
        <property name="build" value="${base}/build"/>
        <property name="distr" value="${base}/distr"/>
        <property name="seven.service" value="${base}/services/1.3.6.1.4.12543.2.0"/>

        <property name="docsite" value="/data/websites/www.cheiron.org/public_html"/>

        <property name="store.location" value="/home/diva/security/keystore"/>
        <property name="store.secret" value="changeit"/>
        <property name="alias" value="seven"/>
        <property name="key.secret" value="changeit"/>

        <property name="debuglevel" value="lines,source,vars"/>

        <property name="version.major" value="0"/>
        <property name="version.minor" value="0"/>
        <property name="version.revision" value="2"/>
        <property name="version" value="${version.major}.${version.minor}.${version.revision}"/>

        <!--
                task definition for creating download jar file
        -->
    <taskdef name="dljar" classname="org.cheiron.tools.ant.DownloadJar">
        <classpath>
                <fileset dir="${ant.home}/../jini/lib" includes="*.jar"/>
        </classpath>
    </taskdef>

        <!--
                task definition for JAXB compiler
        -->
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
        <classpath>
                <fileset dir="${ant.home}/../xjc/lib" includes="*.jar"/>
        </classpath>
    </taskdef>

        <!--
                task definition for source code formatter
        -->
        <!--
        <taskdef name="jalopy" classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
                <classpath>
                        <fileset dir="${ant.home}/../jalopy/lib" includes="*.jar"/>
                </classpath>
        </taskdef>

        <target name="format">
                <jalopy
                        fileformat="unix"
                        style="${ant.home}/../jalopy/conf/cheiron.xml"
                        loglevel="info">

                        <fileset dir="${src}/org/cheiron/seven/plugins/config/xml/model">
                                <include name="**/*.java"/>
                        </fileset>
                </jalopy>
        </target>
        -->

        <!--
                path definitions
        -->
        <path id="classpath">
                <fileset
                        dir="${lib}"
                        includes="jini-boot.jar,jini-core.jar,jini-epmi.jar,jini-nrmi.jar,jini-ext.jar,jsc.jar,jdbm.jar"/>
                <fileset
                        dir="${seven.service}/lib"
                        includes="cheiron-util.jar,jini-tools.jar,serviceui.jar,
                                  activation.jar,mailapi.jar,smtp.jar,
                      jaxb-api.jar,jaxb-impl.jar,jaxb-libs.jar,jax-qname.jar,
                      namespace.jar,relaxngDatatype.jar,xsdlib.jar"/>
                <pathelement location="${classes}"/>
        </path>

        <!--
                targets
        -->
        <target
                name="nightly"
                depends="package-nightly,javadoc,upload-dev"
                description="nightly build process"/>
<!--
        <target name="distr-install" depends="package" if="version">
                <exec executable="distribute" failonerror="true">
                        <arg value="-i"/>
                        <arg value="${ant.project.name}"/>
                        <arg path="${base}"/>
                        <arg path="${target}/.."/>
                        <arg value="${version}"/>
                </exec>
        </target>

        <target name="distr-upgrade" if="version.from">
                <exec executable="distribute" failonerror="true">
                        <arg value="-u"/>
                        <arg value="${ant.project.name}"/>
                        <arg path="${base}"/>
                        <arg path="${target}/.."/>
                        <arg value="${version.from}"/>
                        <arg value="${version}"/>
                </exec>
        </target>
-->
        <!--
                create a source and binary distribution of Seven
        -->
        <target name="package-nightly" depends="build-dev">
                <antcall target="pack">
                        <param name="version" value="${version}-dev"/>
                </antcall>
        </target>

        <target
                name="package"
                depends="build-rel,pack"
                description="builds a packaged release version of the container"/>

        <!--
                create End User distribution for the UNIX and Windows platform, only
                valid within the official Cheiron build environment
        -->
        <target
                name="distribution"
                depends="distr-windows-jre,distr-unix,distr-unix-jre"
                description="creates end user distributions, run package task first!"/>

        <target name="distr-windows-jre">
                <delete dir="${base}/tmp" quiet="true"/>
                <mkdir dir="${base}/tmp/"/>
                <antcall target="copy-jre">
                        <param name="jre" value="/data/opt/jdk1.4.1/jre"/>
                </antcall>
                <copy
                        file="${distr}/seven-${version}.zip"
                        tofile="${distr}/seven-${version}-jre.zip"
                        overwrite="true"/>
                <zip destfile="${distr}/seven-${version}-jre.zip" update="true">
                        <zipfileset
                                dir="${base}/tmp/"
                                includes="**"/>
                </zip>
                <delete dir="${base}/tmp" quiet="true"/>
        </target>

        <target name="distr-unix">
                <antcall target="unix-installer">
                        <param name="distribution" value="${distr}/seven-${version}.sh"/>
                </antcall>
        </target>

        <target name="distr-unix-jre">
                <antcall target="unix-installer">
                        <param name="distribution" value="${distr}/seven-${version}-jre.sh"/>
                        <param name="jre" value="/opt/jdk1.4.1/jre"/>
                </antcall>
        </target>

        <!--
                build a UNIX installer
        -->
        <target name="unix-installer">

                <delete dir="${base}/tmp" quiet="true"/>
                <mkdir dir="${base}/tmp/"/>
                <unzip src="${distr}/seven-${version}.zip"
                           dest="${base}/tmp"/>

                <chmod file="${base}/tmp/seven-${version}/bin/seven" perm="+x"/>

                <antcall target="copy-jre"/>

                <delete file="${distribution}"/>
                <exec executable="${build}/create-installer">
                        <arg file="${distribution}"/>
                        <arg file="${build}/install"/>
                        <arg file="${base}/tmp/seven-${version}"/>
                </exec>
                <delete dir="${base}/tmp" quiet="true"/>
        </target>

        <!--
                package a JRE for distribution
        -->
        <target name="copy-jre" if="jre">
                <copy todir="${base}/tmp/seven-${version}/jre">
                        <fileset dir="${jre}">
                                <exclude name="javaws*"/>
                                <exclude name="bin/**/rmid"/>
                                <exclude name="bin/**/rmiregistry"/>
                                <exclude name="bin/**/tnameserv"/>
                                <exclude name="bin/**/policytool"/>
                                <exclude name="bin/**/orbd"/>
                                <exclude name="bin/**/servertool"/>
                        </fileset>
                </copy>
                <chmod dir="${base}/tmp/seven-${version}/jre/bin/"
                           includes="**/java,**/keytool"
                           perm="+x"/>
        </target>

        <!--
                group all files together for distribution purposes
        -->
        <target
                name="pack"
                description="packs all the resources for various distributions">

                <!--
                        supply the examples sar files
                -->
                <ant antfile="examples.xml" dir="${build}"/>

                <!--
                        dual license downloads
                -->
                <copy
                        file="${base}/README.DUAL"
                        tofile="${base}/README"
                        overwrite="true"/>

                <!--
                        binary distribution
                -->
                <zip destfile="${distr}/seven-${version}-bin.zip">
                        <zipfileset
                                dir="${base}"
                                prefix="seven-${version}"
                                includes="README,LICENSE,
                                          bin/seven*,
                                          conf/seven*,conf/keystore"/>
                        <zipfileset
                                dir="${lib}"
                                prefix="seven-${version}/lib"
                                includes="boot.jar,intersect.jar,jsc.jar,preferred.jar"/>
                        <zipfileset
                                dir="${seven.service}"
                                prefix="seven-${version}/services/1.3.6.1.4.12543.2.0"
                                includes="jsc.xml,seven.xml"/>
                        <zipfileset
                                dir="${seven.service}/lib"
                                prefix="seven-${version}/services/1.3.6.1.4.12543.2.0/lib"
                                includes="seven.jar,jsc-descriptor,cheiron-util.jar,
                                                  dl/*.jar,plugins/*.jar"/>
                        <zipfileset
                                dir="${seven.service}/lib-dl"
                                prefix="seven-${version}/services/1.3.6.1.4.12543.2.0/lib-dl"
                                excludes="dl.jar"/>
                        <zipfileset
                                dir="${base}/services"
                                prefix="seven-${version}/services"
                                includes="client/**,examples/**"/>
                </zip>

                <!--
                        source distribution
                -->

<!--
                <zip destfile="${base}/utils-${version}-src.zip">
                        <zipfileset
                                dir="${base}"
                                prefix="utils-${version}"
                                includes="BUILD.TXT,LICENSE,README,
                                          build/build.xml,
                                          lib/jsc.jar,lib/junit.jar,
                                          src/org/**,test/src/org/**"/>
                </zip>
-->

                <!--
                        SCSL downloads
                -->
                <copy
                        file="${base}/README.SCSL"
                        tofile="${base}/README"
                        overwrite="true"/>

                <!--
                        binary distribution
                -->
                <copy
                        file="${distr}/seven-${version}-bin.zip"
                        tofile="${distr}/seven-${version}-bin_scsl.zip"
                        overwrite="true"/>
                <zip destfile="${distr}/seven-${version}-bin_scsl.zip" update="true">
                        <zipfileset
                                dir="${base}"
                                prefix="seven-${version}"
                                includes="README"/>
                        <zipfileset
                                dir="${lib}"
                                prefix="seven-${version}/lib"
                                includes="jini-boot.jar,jini-core.jar,jini-epmi.jar,jini-nrmi.jar,jini-ext.jar"/>
                        <zipfileset
                                dir="${seven.service}/lib"
                                prefix="seven-${version}/services/1.3.6.1.4.12543.2.0/lib"
                                includes="jini-tools.jar,serviceui.jar"/>
                </zip>

                <!--
                        'commercial' download

                        in the future these will be done in a seperate build file for it
                        will include a Cheiron/Virgil BV End User License

                        we also have to delete the junit.jar file as we don't need this
                        in the commercial distribution
                -->
<!--
                <copy
                        file="${base}/README.COMMERCIAL"
                        tofile="${base}/README"
                        overwrite="true"/>
-->
                <copy
                        file="${distr}/seven-${version}-bin_scsl.zip"
                        tofile="${distr}/seven-${version}.zip"
                        overwrite="true"/>
                <zip destfile="${distr}/seven-${version}.zip" update="true">
                        <zipfileset
                                dir="${base}"
                                prefix="seven-${version}"
                                includes="README"/>
                        <zipfileset
                                dir="${seven.service}/lib"
                                prefix="seven-${version}/services/1.3.6.1.4.12543.2.0/lib"
                                includes="jaxb-api.jar,jaxb-impl.jar,jaxb-libs.jar,jax-qname.jar,
                          namespace.jar,relaxngDatatype.jar,xsdlib.jar"/>
                </zip>
                <delete file="${base}/README"/>
        </target>

        <!--
                build Seven intermediate and end products, the development version
                includes local variable debug information
        -->
        <target
                name="build-dev"
                depends="clean,create-config-model"
                description="build a working container ready for testing">

                <antcall target="compile"/>
                <antcall target="jar"/>
        </target>

        <target
                name="build-rel"
                depends="clean,create-config-model">

                <antcall target="compile">
                        <param name="debuglevel" value="lines,source"/>
                </antcall>
                <antcall target="jar"/>
        </target>

        <target
                name="build-seven"
                depends="create-jsc-model,compile-seven,jar-seven"
                description="compile and jar the container (no clean workspace)"/>

        <target
                name="build-xml-config"
                depends="create-config-model,compile-xml-config,jar-xml-config"
                description="compile and jar XML configuration plugin (no clean workspace)"/>

        <target
                name="build-jdbm-db"
                depends="compile-jdbm-db,jar-jdbm-db"
                description="compile and jar JDBM persistency plugin (no clean workspace)"/>

        <!--
                compile complete project
        -->
        <target
                name="compile"
                depends="compile-seven,compile-xml-config,compile-jdbm-db"
                description="compile container and configuration plugin"/>

        <!--
                jar complete project
        -->
        <target
                name="jar"
                depends="jar-seven,jar-xml-config,jar-jdbm-db"
                description="jar container and configuration plugin"/>

        <!--
                create Java model for XML configuration
        -->
        <target name="create-jsc-model">

                <xjc
                        schema="${build}/schema/jsc.xsd"
                        target="${src}"
                        readonly="true">

                        <arg value="-catalog"/>
                        <arg value="${build}/resolve.cat"/>
                        <binding dir="${build}" includes="jsc.xjb"/>
                        <produces dir="${src}/org/cheiron/jsc/model" includes="**/*.java"/>
                </xjc>
        </target>

        <!--
                compile container
        -->
        <target name="compile-seven">

                <!--
                        delete test classes from the classes directory if they exist
                -->
                <delete quiet="true">
                        <fileset
                                dir="${classes}"
                                includes="**/*Test.class,**/*Test$*.class"/>
                </delete>

                <!--
                        build project sources for distribution
                -->
                <mkdir dir="${classes}"/>
                <mkdir dir="${seven.service}/lib"/>
                <javac
                        srcdir="${src}"
                        destdir="${classes}"
                        classpathref="classpath"
                        compiler="javac1.4"
                        deprecation="on"
                        debug="on"
                        debuglevel="${debuglevel}"
                        optimize="off">

                        <exclude name="org/cheiron/jsc/**"/>
                        <exclude name="org/cheiron/seven/examples/**"/>
                        <exclude name="org/cheiron/seven/plugins/**"/>
                </javac>

                <!--
                        using the RMI compiler is only required in case we use JRMP
                        for deployment, in case of JERI a stub is created dynamically
                -->
                <rmic
                        base="${classes}"
                        classpathref="classpath"
                        stubversion="1.2">

                        <include name="org/cheiron/seven/core/ContainerService$$ContainerAdminProviderImpl.class"/>
                        <include name="org/cheiron/seven/core/ContainerManager$$JoinAdminProviderImpl.class"/>
                        <include name="org/cheiron/seven/core/ContainerManager$$LifeCycleAdminProviderImpl.class"/>
                        <include name="org/cheiron/seven/event/RemoteEventManager.class"/>
                </rmic>
        </target>

        <!--
                jar container
        -->
        <target name="jar-seven">

                <jar
                        destfile="${lib}/boot.jar"
                        manifest="${src}/org/cheiron/seven/META-INF/boot.mf">

                        <fileset dir="${classes}">
                                <include name="org/cheiron/seven/boot/**/*.class"/>
                                <include name="org/cheiron/seven/loader/**/*.class"/>
                                <include name="org/cheiron/seven/logging/*.class"/>
                        </fileset>
                        <fileset dir="${src}">
                                <include name="org/cheiron/seven/boot/**/*.properties"/>
                                <include name="org/cheiron/seven/loader/**/*.properties"/>
                                <include name="org/cheiron/seven/logging/*.properties"/>
                        </fileset>
                </jar>

                <!--
                        all classes that are needed by a Jini service (as part of the
                        aggregate RMI connector) and that are defined within the
                        Jini Service Container.
                -->
                <dljar
                        destfile="${lib}/intersect.jar"
                        in="net.jini,org.cheiron.seven"
                        out="net.jini.core">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.core.JoinAdminProvider"/>
                        <class name="org.cheiron.seven.core.LifeCycleAdminProvider"/>
                        <class name="org.cheiron.seven.event.EventProtocolProvider"/>
                        <class name="org.cheiron.seven.proxy.ProxyRemoteMethodControl"/>
                </dljar>

                <!--
                        defines a PREFERRED.LIST that arranges class loader delegation
                        for Jini services
                -->
                <dljar
                        destfile="${lib}/preferred.jar"
                        preferred="${src}/org/cheiron/seven/META-INF/preferred.list"
                        in="org.cheiron.seven">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.proxy.AdministrableDelegator"/>
                        <class name="org.cheiron.seven.proxy.ProxySer"/>
                        <class name="org.cheiron.seven.proxy.ServiceProxyHandler"/>
                        <class name="org.cheiron.seven.proxy.ServiceStubProxyHandler"/>
                        <class name="org.cheiron.seven.util.Utils$UuidImpl"/>
                </dljar>

                <dljar
                        destfile="${seven.service}/lib/seven.jar"
                        manifest="${src}/org/cheiron/seven/META-INF/seven.mf"
                        preferred="${src}/org/cheiron/seven/META-INF/seven.list">

                        <fileset dir="${classes}">
                                <include name="org/cheiron/seven/admin/**/*.class"/>
                                <include name="org/cheiron/seven/config/**/*.class"/>
                                <include name="org/cheiron/seven/core/**/*.class"/>
                                <include name="org/cheiron/seven/db/**/*.class"/>
                                <include name="org/cheiron/seven/event/**/*.class"/>
                                <include name="org/cheiron/seven/lease/**/*.class"/>
                                <include name="org/cheiron/seven/logging/filter/**/*.class"/>
                                <include name="org/cheiron/seven/logging/handler/**/*.class"/>
                                <include name="org/cheiron/seven/proxy/**/*.class"/>
                                <include name="org/cheiron/seven/security/**/*.class"/>
                                <include name="org/cheiron/seven/util/**/*.class"/>
                        </fileset>
                        <fileset dir="${src}">
                                <include name="org/cheiron/seven/admin/**/*.properties"/>
                                <include name="org/cheiron/seven/config/**/*.properties"/>
                                <include name="org/cheiron/seven/core/**/*.properties"/>
                                <include name="org/cheiron/seven/db/**/*.properties"/>
                                <include name="org/cheiron/seven/event/**/*.properties"/>
                                <include name="org/cheiron/seven/lease/**/*.properties"/>
                                <include name="org/cheiron/seven/logging/filter/**/*.properties"/>
                                <include name="org/cheiron/seven/logging/handler/**/*.properties"/>
                                <include name="org/cheiron/seven/proxy/**/*.properties"/>
                                <include name="org/cheiron/seven/security/**/*.properties"/>
                                <include name="org/cheiron/seven/util/**/*.properties"/>
                        </fileset>
                </dljar>

                <jar
                        destfile="${seven.service}/lib/jsc-descriptor.jar">

                        <fileset dir="${classes}">
                                <include name="org/cheiron/jsc/model/**/*.class"/>
                        </fileset>
                        <fileset dir="${src}">
                                <include name="org/cheiron/jsc/model/**/*.properties"/>
                                <include name="org/cheiron/jsc/model/**/*.ser"/>
                        </fileset>
                </jar>

                <!--

                        Build download jar files, we don't include the dependencies on the
                        Jini core classes for the following reasons:

                        1. these are expected to be at the client already and we don't
                           want them to be preferred;

                        2. probably each download jar will include exactly the same classes
                           making the donwload jar files unnecessary large.

                        However for those rare cases the client doesn't have the Jini core
                        classes we supply all the core classes in a seperate download, this
                        jar file will be copied to the lib-dl directory of each jini
                        service group definition installed under the container.
                -->
                <copy file="${lib}/jini-core.jar" tofile="${seven.service}/lib-dl/jini-core-dl.jar"/>

                <!--
                        we provide a downloadable Jeri implementation for the most basic
                        configuration (no security)

                        we try to keep the download size as small as possible, therefore
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/jeri-dl.jar"
                        in="com.sun.jini,net.jini"
                        hide="com.sun.jini,net.jini.core,net.jini.jeri.tcp"
                        preferred="${src}/org/cheiron/seven/META-INF/jeri-dl.list">

                        <classpath refid="classpath"/>

                        <class name="net.jini.id.UuidFactory$Impl"/>
                        <class name="net.jini.jeri.BasicInvocationHandler"/>
                        <class name="net.jini.jeri.BasicObjectEndpoint"/>

                        <!--
                                we also include classes in the net.jini namespace as a result
                                of the TCP (server) endpoint as there is much overlap, however
                                we don't include classes of the (server) endpoint itself
                        -->
                        <class name="net.jini.jeri.tcp.TcpEndpoint"/>
                </dljar>
                <dljar
                        destfile="${seven.service}/lib-dl/jeri-sun-dl.jar"
                        in="com.sun.jini,net.jini"
                        hide="net.jini">

                        <classpath refid="classpath"/>

                        <class name="net.jini.jeri.BasicInvocationHandler"/>
                        <class name="net.jini.jeri.BasicObjectEndpoint"/>

                        <!--
                                we also include classes in the net.jini namespace as a result
                                of the TCP (server) endpoint as there is much overlap, however
                                we don't include classes of the (server) endpoint itself
                        -->
                        <class name="net.jini.jeri.tcp.TcpEndpoint"/>
                </dljar>
                <dljar
                        destfile="${seven.service}/lib-dl/jeri-tcp-dl.jar"
                        in="com.sun.jini,net.jini.jeri.tcp"
                        show="net.jini.jeri.tcp">

                        <classpath refid="classpath"/>

                        <class name="net.jini.jeri.tcp.TcpEndpoint"/>
                </dljar>

                <!--
                        container download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/sdm-dl.jar"
                        in="com.sun.jini,net.jini"
                        hide="net.jini.core"
                        preferred="${src}/org/cheiron/seven/META-INF/sdm-dl.list">

                        <classpath refid="classpath"/>

                        <class name="net.jini.lookup.ServiceDiscoveryManager$LookupCacheImpl$LookupListener_Stub"/>
                </dljar>

                <!--
                        all classes that can be added by the container to the
                        dynamic proxies created by the container as part of the
                        aggregate service proxy. The Jini core classes are part
                        of a different download jar so are kept out.

                        this jar file will be copied to the lib-dl directory of
                        each jini service group definition installed under the
                        container.
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-dp-dl.jar"
                        in="com.sun.jini,net.jini,org.cheiron"
                        preferred="${src}/org/cheiron/seven/META-INF/proxy-dl.list"
                        hide="net.jini.core">

                        <classpath refid="classpath"/>

                        <class name="net.jini.admin.Administrable"/>
                        <class name="net.jini.admin.JoinAdmin"/>
                        <class name="net.jini.security.proxytrust.TrustEquivalence"/>
                        <class name="org.cheiron.jsc.admin.LifeCycleAdmin"/>
                        <class name="org.cheiron.jsc.event.EventFactory"/>
                        <class name="org.cheiron.jsc.lease.LeaseFactory"/>
                        <class name="org.cheiron.seven.core.LifeCycleAdminProvider"/>
                        <class name="org.cheiron.seven.event.EventProtocolProvider"/>
                        <class name="org.cheiron.seven.proxy.AdministrableDelegator"/>
                        <class name="org.cheiron.seven.proxy.ProxySer"/>
                        <class name="org.cheiron.seven.proxy.ServiceProxyHandler"/>
                        <class name="org.cheiron.seven.proxy.ServiceStubProxyHandler"/>
                        <class name="org.cheiron.seven.util.Utils$UuidImpl"/>
                </dljar>

                <!--
                        administration download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-event-dl.jar"
                        in="com.sun.jini,net.jini,org.cheiron"
                        hide="net.jini.core,org.cheiron.jsc,org.cheiron.seven.proxy"
                        preferred="${src}/org/cheiron/seven/META-INF/event-dl.list">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.event.EventFactoryProxy"/>
                        <class name="org.cheiron.seven.event.RemoteEventManager_Stub"/>
                        <class name="org.cheiron.seven.util.Utils$UuidImpl"/>
                </dljar>

                <!--
                        administration download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-admin-dl.jar"
                        in="com.sun.jini,javax.xml,net.jini,org.cheiron.seven"
                        hide="net.jini.core"
                        preferred="${src}/org/cheiron/seven/META-INF/admin-dl.list">

                        <classpath refid="classpath"/>

                        <class name="net.jini.lookup.entry.Name"/>
                        <class name="org.cheiron.seven.core.ContainerAdminProxy$ConstrainableProxy"/>
                        <class name="org.cheiron.seven.core.ContainerService$ContainerAdminProviderImpl_Stub"/>
                        <class name="org.cheiron.seven.util.Utils$UuidImpl"/>
                </dljar>

                <!--
                        join-admin download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-joinadmin-dl.jar"
                        in="com.sun.jini,net.jini,org.cheiron.seven.core"
                        hide="net.jini.core"
                        preferred="${src}/org/cheiron/seven/META-INF/joinadmin-dl.list">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.core.JoinAdminProxy"/>
                        <class name="org.cheiron.seven.core.ContainerManager$JoinAdminProviderImpl_Stub"/>
                </dljar>

                <!--
                        life-cycle download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-lifecycle-dl.jar"
                        in="com.sun.jini,net.jini,org.cheiron.seven.core"
                        hide="net.jini.core"
                        preferred="${src}/org/cheiron/seven/META-INF/lifecycle-dl.list">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.core.LifeCycleAdminProxy"/>
                        <class name="org.cheiron.seven.core.ContainerManager$LifeCycleAdminProviderImpl_Stub"/>
                </dljar>

                <!--
                        administration ui download jar
                -->
                <dljar
                        destfile="${seven.service}/lib-dl/seven-adminui-dl.jar"
                        in="com.sun.jini,net.jini,org.cheiron"
                        out="net.jini.core"
                        preferred="${src}/org/cheiron/seven/admin/ui/META-INF/adminui-dl.list">

                        <classpath refid="classpath"/>

                        <class name="org.cheiron.seven.admin.ui.AdminUIFactory"/>
                        <class name="net.jini.lookup.entry.UIDescriptor"/>
                        <class name="net.jini.lookup.ui.attribute.Locales"/>
                        <class name="net.jini.lookup.ui.attribute.RequiredPackages"/>
                        <class name="net.jini.lookup.ui.attribute.UIFactoryTypes"/>

                        <fileset dir="${src}" includes="org/cheiron/seven/admin/ui/resources/**"/>
                </dljar>

                <!--

This is something from the past I guess so ...


                        shared download jar as result of container functionality, this
                        must according to the JSC Specification all shared classes as
                        well as classes used by the container implementation to enhance
                        the service proxy
                -->
<!--
                <copy
                        file="${lib}/jini-core.jar"
                        tofile="${seven.service}/lib-dl/seven-shared-dl.jar"
                        overwrite="true"/>
                <jar
                        destfile="${seven.service}/lib-dl/seven-shared-dl.jar"
                        update="true">

                        <fileset dir="${classes}">
                                <include name="net/jini/admin/Administrable.class"/>
                                <include name="net/jini/admin/JoinAdmin.class"/>
                                <include name="net/jini/config/Configuration.class"/>
                                <include name="net/jini/config/ConfigurationException.class"/>
                                <include name="net/jini/export/Exporter.class"/>
                        </fileset>
                </jar>
-->
        </target>

        <!--
                create Java model for XML configuration
        -->
        <target name="create-config-model" depends="create-jsc-model">

                <xjc
                        schema="${base}/src/org/cheiron/seven/plugins/config/xml/doc-files/schema/seven-config.xsd"
                        target="${src}"
                        readonly="true">
<!--
                        <arg value="-catalog"/>
                        <arg value="${build}/resolve.cat"/>
-->
                        <arg value="-use-runtime"/>
                        <arg value="org.cheiron.jsc.model.impl.runtime"/>
                        <binding dir="${build}" includes="jsc.xjb,seven-config.xjb"/>
                        <depends dir="${build}" includes="schema/jsc.xsd"/>
                        <produces dir="${src}/org/cheiron/seven/plugins/config/xml/model" includes="**/*.java"/>
                </xjc>
        </target>

        <!--
                compile container XML configuration
        -->
        <target name="compile-xml-config">

                <!--
                        delete test classes from the classes directory if they exist
                -->
                <delete>
                        <fileset
                                dir="${classes}"
                                includes="**/*Test.class,**/*Test$*.class"/>
                </delete>

                <!--
                        build project sources for distribution
                -->
                <mkdir dir="${classes}"/>
                <mkdir dir="${seven.service}/lib/plugins"/>
                <javac
                        srcdir="${src}"
                        destdir="${classes}"
                        classpathref="classpath"
                        compiler="javac1.4"
                        deprecation="on"
                        debug="on"
                        debuglevel="${debuglevel}"
                        optimize="off">

                        <include name="org/cheiron/jsc/model/**"/>
                        <include name="org/cheiron/seven/plugins/config/xml/**"/>
                </javac>
        </target>

        <!--
                jar container XML configuration
        -->
        <target name="jar-xml-config">

                <jar
                        destfile="${seven.service}/lib/plugins/xmlconfig.jar"
                        manifest="${src}/org/cheiron/seven/plugins/config/xml/META-INF/xmlconfig.mf">

                        <fileset dir="${classes}">
                                <include name="org/cheiron/seven/plugins/config/xml/**/*.class"/>
                        </fileset>
                        <fileset dir="${src}">
                                <include name="org/cheiron/seven/plugins/config/xml/**/*.properties"/>
                                <include name="org/cheiron/seven/plugins/config/xml/**/*.ser"/>
                        </fileset>
                </jar>
        </target>

        <!--
                compile container JDBM persistence implementation
        -->
        <target name="compile-jdbm-db">

                <!--
                        delete test classes from the classes directory if they exist
                -->
                <delete quiet="true">
                        <fileset
                                dir="${classes}"
                                includes="**/*Test.class,**/*Test$*.class"/>
                </delete>

                <!--
                        build project sources for distribution
                -->
                <mkdir dir="${classes}"/>
                <mkdir dir="${seven.service}/lib/plugins"/>
                <javac
                        srcdir="${src}"
                        destdir="${classes}"
                        classpathref="classpath"
                        compiler="javac1.4"
                        deprecation="on"
                        debug="on"
                        debuglevel="${debuglevel}"
                        optimize="off">

                        <include name="org/cheiron/seven/plugins/db/jdbm/**"/>
                </javac>
        </target>

        <!--
                jar container Persistence plugin configuration
        -->
        <target name="jar-jdbm-db">

                <copy
                        file="${lib}/jdbm.jar"
                        tofile="${seven.service}/lib/plugins/jdbmdb.jar"
                        overwrite="true"/>
                <jar
                        destfile="${seven.service}/lib/plugins/jdbmdb.jar"
                        manifest="${src}/org/cheiron/seven/plugins/db/jdbm/META-INF/jdbm.mf"
                        update="true">

                        <fileset dir="${classes}">
                                <include name="org/cheiron/seven/plugins/db/jdbm/**/*.class"/>
                        </fileset>
                        <fileset dir="${src}">
                                <include name="org/cheiron/seven/plugins/db/jdbm/**/*.properties"/>
                        </fileset>
                </jar>
        </target>

        <!--
                sign the seven jar files
        -->
        <target
                name="sign"
                description="sign all the created jar files">

                <signjar
                        keystore="${store.location}"
                        storepass="${store.secret}"
                        alias="${alias}"
                        keypass="${key.secret}">

                        <fileset
                                dir="${lib}"
                                includes="boot.jar,preferred.jar"/>
                        <fileset
                                dir="${seven.service}/lib"
                                includes="seven.jar,plugins/xmlconfig.jar,plugins/jdbmdb.jar"/>
                        <fileset
                                dir="${seven.service}/lib-dl"
                                includes="jeri-dl.jar,jeri-sun-dl.jar,jeri-tcp-dl.jar,jini-core-dl.jar,sdm-dl.jar,seven-admin-dl.jar,
                                          seven-adminui-dl.jar,seven-destroy-dl.jar,seven-dp-dl.jar,seven-event-dl.jar"/>
                </signjar>
        </target>

        <!--
                generate javadoc for the project
        -->
        <target
                name="javadoc"
                description="generate javadoc for container, config plugin and examples">

                <delete dir="${base}/docs/api"/>
                <mkdir dir="${base}/docs/api"/>
                <javadoc
                        sourcepath="${src}"
                        destdir="${base}/docs/api"
                        classpathref="classpath"
                        packagenames="org.cheiron.*"
                        excludepackagenames="org.cheiron.seven.plugins.config.xml.model.impl*,org.cheiron.jsc.model.impl*"
                        protected="true"
                        version="true"
                        author="true"
                        nodeprecated="false"
                        use="true"
                        splitindex="true"
                        serialwarn="true"
                        additionalparam="-breakiterator -docfilessubdirs -excludedocfilessubdir exclude -quiet -source 1.4"
                        doctitle="Seven - JSC Reference Implementation"
                        windowtitle="Seven"
                        header="&lt;b&gt;Seven ${version}&lt;/b&gt;"
                        bottom="&lt;font size=&quot;-1&quot;&gt; Bugs or problems related to this documentation can be reported to the &lt;a href=&quot;http://www.cheiron.org/participate/bugs.html&quot; target=&quot;child&quot; &gt;Seven bug and feature tracking system&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Copyright 2002 Virgil BV.&lt;/font&gt;">

                        <tag name="todo" scope="all" description="To do:"/>

                        <group title="Seven Jini Service Container" packages="org.cheiron.seven*,org.cheiron.jsc.model"/>
                        <group title="Seven Configuration Plugin Specification" packages="org.cheiron.seven.config*"/>
                        <group title="Seven XML Configuration Plugin" packages="org.cheiron.seven.plugins.config.xml*"/>
                        <group title="Example JSC services/clients" packages="org.cheiron.seven.examples*"/>

                        <link href="http://java.sun.com/j2se/1.4.1/docs/api/"/>
                        <link href="http://java.sun.com/products/javamail/1.3/docs/javadocs/"/>
                        <link href="http://docs.virgil.nl/javadoc/ext/jaxb/"/>
                        <link href="http://docs.virgil.nl/javadoc/party/sun/davis/"/>
                        <link href="http://www.cheiron.org/jsc/nightly/api/"/>
                        <link href="http://www.cheiron.org/utils/nightly/api/"/>
                        <link href="http://www.artima.com/jini/serviceui/doc11/"/>
                </javadoc>
        </target>

        <!--
                clean environment
        -->
        <target
                name="clean"
                description="removes all the end products of the build process">

                <delete dir="${classes}"/>
                <mkdir dir="${classes}"/>
                <delete dir="${distr}"/>
                <mkdir dir="${distr}"/>
                <delete dir="${base}/docs/api"/>
                <mkdir dir="${base}/docs/api"/>
                <delete>
                        <fileset
                                dir="${lib}"
                                includes="boot.jar,preferred.jar"/>
                        <fileset
                                dir="${seven.service}/lib"
                                includes="seven.jar,jsc-descriptor.jar,
                                          plugins/xmlconfig.jar,plugins/config-model.jar,
                                          plugins/jdbmdb.jar"/>
                </delete>
                <delete dir="${seven.service}/lib-dl"/>
                <mkdir dir="${seven.service}/lib-dl"/>
                <mkdir dir="${base}/data"/>
                <mkdir dir="${base}/logs"/>
                <delete includeEmptyDirs="true" quiet="true">
                        <fileset dir="${base}/src/org/cheiron/seven/plugins/config/xml/model" excludes="package.html"/>
                        <fileset dir="${base}/src/org/cheiron/jsc/model" excludes="package.html"/>
                </delete>
        </target>

        <!--
                manuals and other documentation
        -->
        <target
                name="manual-html"
                description="create HTML manuals">

                <copy todir="${base}/docs/manual/html/installation">
                        <fileset dir="${base}/docs/manual">
                                <include name="manual.css"/>
                                <include name="images/**"/>
                        </fileset>
                </copy>
                <xslt in="${base}/docs/manual/installation.xml"
                          out="${base}/docs/manual/html/installation/index.html"
                          style="${base}/docs/manual/manual-html.xsl"/>
        </target>

        <target name="manual-pdf">
                <xslt in="${base}/docs/manual/installation.xml"
                          out="${base}/docs/manual/installation.fo"
                          style="${base}/docs/manual/manual-fo.xsl"/>
<!--
                <java classname="com.renderx.xep.Driver" fork="yes">
                        <classpath>
                                <fileset dir="${base}/../xep/lib">
                                        <include name="**/*.jar"/>
                                </fileset>
                        </classpath>

                        <arg value="-Dcom.renderx.xep.ROOT=${base}/../xep"/>
                        <arg file="${base}/docs/manual/installation.fo"/>
                </java>
-->
                <java classname="org.apache.fop.apps.Fop" fork="yes">
                        <classpath>
                                <pathelement location="${base}/../fop/build/fop.jar"/>
                                <fileset dir="${base}/../fop/lib">
                                        <include name="*.jar"/>
                                </fileset>
                        </classpath>

                        <arg value="-fo"/>
                        <arg file="${base}/docs/manual/installation.fo"/>
                        <arg file="${base}/docs/manual/installation.pdf"/>
                </java>

        </target>

        <!--
                upload of various distributions to the Cheiron site
        -->
        <target name="upload-dev" if="upload.passwd">
                <tstamp>
                        <format property="date" pattern="yyyy-MM-dd" locale="en"/>
                </tstamp>
                <ftp
                        action="mkdir"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/nightly/seven/${date}"
                        ignoreNoncriticalErrors="true"/>
                <ftp
                        action="put"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/nightly/seven/${date}"
                        ignoreNoncriticalErrors="true">

                        <fileset dir="${base}" includes="seven-${version}-dev-*.zip"/>
                </ftp>
        </target>

        <target name="upload-rel" if="upload.passwd">
                <ftp
                        action="mkdir"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/binaries/seven/v${version.major}.${version.minor}"
                        ignoreNoncriticalErrors="true"/>
                <ftp
                        action="mkdir"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/source/seven/v${version.major}.${version.minor}"
                        ignoreNoncriticalErrors="true"/>
                <ftp
                        action="put"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/binaries/seven/v${version.major}.${version.minor}"
                        ignoreNoncriticalErrors="true">

                        <fileset dir="${base}" includes="seven-${version}-bin.zip"/>
                </ftp>
                <ftp
                        action="put"
                        server="www.cheiron.org"
                        passive="yes"
                        userid="ftpuser"
                        password="${upload.passwd}"
                        remotedir="${docsite}/download/source/seven/v${version.major}.${version.minor}"
                        ignoreNoncriticalErrors="true">

                        <fileset dir="${base}" includes="seven-${version}-src.zip"/>
                </ftp>
        </target>
</project>

