<?xml version="1.0"?>

<project name="pushTest" default="deploy" basedir=".">

    <!-- Give user a chance to override without editing this file or typing -D -->
    <property file="${basedir}/build.properties" />

    <property name="profile" value="dev" />
    <property file="build-${profile}.properties" />

    <!-- set global properties for this build -->
    <property name="project.name" value="pushTest"/>
    <property name="dist.dir" value="dist" />
    <property name="src.model.dir" value="src/model" />
    <property name="src.action.dir" value="src/action" />
    <property name="src.test.dir" value="src/test" />
    <property name="lib.dir" value="lib" />
    <property name="war.dir" value="exploded-archives/${project.name}.war" />
    <property name="classes.model.dir" value="${war.dir}/WEB-INF/classes" />
    <property name="action.dir" value="WEB-INF/classes" />
    <property name="classes.action.dir" value="${war.dir}/${action.dir}" />
    <property name="test.dir" value="test-build" />
    <property name="bootstrap.dir" value="${basedir}/bootstrap" />
    <property name="deploy.dir" value="${jboss.home}/server/default/deploy" />
    <property name="war.deploy.dir" value="${deploy.dir}/${project.name}.war" />
    <property name="testng.jar" value="${basedir}/lib/testng.jar" />
    <property name="javac.debug" value="true" />
    <property name="javac.deprecation" value="false" />
    <property name="debug" value="false" />
    
    <fileset id="lib" dir="${lib.dir}">
        <include name="*.jar" />
    </fileset>
    
    <path id="build.classpath">
        <fileset refid="lib" />
    </path>

    <taskdef name ="groovyc"
        classname ="org.codehaus.groovy.ant.Groovyc"
        classpathref="build.classpath"/> <!-- really only the groovy jar is necessary -->

    <target name="init" description="Initialize the build">
        <mkdir dir="${classes.model.dir}" />
        <mkdir dir="${classes.action.dir}" />
        <mkdir dir="${dist.dir}" />
        <!-- if a .groovy file is in model or action, set groovy.present -->
        <available property="groovy.present" value="true" file="">
          <filepath>
            <fileset dir="${src.action.dir}">
              <include name="**/*.groovy"/>
            </fileset>
          </filepath>
        </available>
        <condition property="groovy.dynamic" value="true">
            <and>
                <isset property="groovy.present"/>
                <istrue value="${debug}"/>
            </and>
        </condition>
        <condition property="groovy.static" value="true">
            <and>
                <isset property="groovy.present"/>
                <isfalse value="${debug}"/>
            </and>
        </condition>
    </target>
    
    <target name="compilemodel" depends="init,groovy.compilemodel"
            description="Compile the Java source code"
            unless="eclipse.running">
        <javac classpathref="build.classpath" 
               destdir="${classes.model.dir}" 
               debug="${javac.debug}" 
               deprecation="${javac.deprecation}" 
               nowarn="on">
            <src path="${src.model.dir}" />
        </javac>
    </target>

    <target name="groovy.compilemodel" if="groovy.present">
        <!-- model is always compiled -->
        <groovyc classpathref="build.classpath"
               destdir="${classes.model.dir}"
               srcdir="${src.model.dir}" >
        </groovyc>
    </target>
    
    <target name="compileactions" depends="init,groovy.compileactions,groovy.copyactions"
            description="Compile the Java source code"
            unless="eclipse.running">
        <javac classpathref="build.classpath" 
               destdir="${classes.action.dir}"
               debug="${javac.debug}" 
               deprecation="${javac.deprecation}" 
               nowarn="on">
            <classpath path="${classes.model.dir}"/>
            <src path="${src.action.dir}" />
        </javac>
    </target>

    <target name="groovy.compileactions" if="groovy.static">
        <path id="groovy.action.classpath">
            <path refid="build.classpath"/>
            <dirset dir="${classes.model.dir}"/>
        </path>
        <groovyc classpathref="groovy.action.classpath"
               destdir="${classes.action.dir}"
               srcdir="${src.action.dir}" >
        </groovyc>
    </target>

    <target name="groovy.copyactions" if="groovy.dynamic">
        <!-- copy the action groovy files into action if not compiled -->
        <copy todir="${classes.action.dir}">
            <fileset dir="${src.action.dir}">
                <include name="**/*.groovy"/>
            </fileset>
        </copy>
    </target>
    
    <target name="copyclasses" depends="init,groovy.copyactions"
            description="Copy the classes that were compiled by eclipse"
            if="eclipse.running">
        <!-- TODO check how the groovy eclipse plugin works, does it compile? -->
        <copy todir="${classes.model.dir}">
            <fileset dir="classes/model">
                <include name="**/*.class"/>
            </fileset>
        </copy>
        <copy todir="${classes.action.dir}">
            <fileset dir="classes/action">
                <include name="**/*.class"/>
            </fileset>
        </copy>
    </target>
    
    <target name="war" depends="compilemodel,compileactions,copyclasses" 
            description="Build the distribution .war file">
        
        <copy todir="${war.dir}/WEB-INF/classes">
            <fileset dir="${basedir}/resources">
                <include name="seam.properties" />
                <include name="*.drl" />
            </fileset>
        </copy>
        
        <copy tofile="${war.dir}/WEB-INF/classes/META-INF/persistence.xml" 
              file="${basedir}/resources/META-INF/persistence-${profile}-war.xml"
              overwrite="true"/>
        
        <copy tofile="${war.dir}/WEB-INF/classes/import.sql" 
              file="${basedir}/resources/import-${profile}.sql"
              overwrite="true"/>
        
        <copy todir="${war.dir}">
            <fileset dir="${basedir}/view" />
        </copy>
        
        <copy todir="${war.dir}/WEB-INF">
            <fileset dir="${basedir}/resources/WEB-INF">
                <include name="*.*"/>
                <include name="classes/**/*.*"/>
                <exclude name="classes/**/*.class"/>
                <exclude name="classes/**/*.groovy"/>
            </fileset>
            <filterset>
                <filter token="debug"       value="${debug}" />
                <filter token="jndiPattern" value="${project.name}/#{ejbName}/local"/>
            </filterset>
        </copy>
        
        <copy todir="${war.dir}/WEB-INF">
            <fileset dir="${basedir}/resources/WEB-INF">
                <include name="lib/*.*"/>
                <include name="classes/**/*.class"/>
            </fileset>
        </copy>
        
		<copy todir="${war.dir}/WEB-INF/lib">
			<fileset dir="${lib.dir}">
                <includesfile name="deployed-jars.list"/>
                <exclude name="jboss-seam-gen.jar" />
                <exclude name="icefaces-ahs.jar"/>
                <include name="groovy-*.jar" if="groovy.present"/>
            </fileset>
        </copy>
        
        <copy todir="${war.dir}/WEB-INF/classes">
            <fileset dir="${basedir}/resources"> 
                <include name="messages*.properties"/>
            </fileset>
        </copy>
        
        <copy todir="${war.dir}/WEB-INF/classes">
            <fileset dir="${basedir}/resources">
                <include name="*jpdl.xml" />
                <include name="hibernate.cfg.xml" />
                <include name="jbpm.cfg.xml" />
            </fileset>
        </copy>
        
    </target>
    
    <target name="archive" depends="war" 
            description="Package the archives">
        <jar jarfile="${dist.dir}/${project.name}.war" basedir="${war.dir}"/>
    </target>
    
    <target name="datasource">
        <fail unless="jboss.home">jboss.home not set</fail>
        <copy todir="${deploy.dir}">
            <fileset dir="${basedir}/resources">
                <include name="${project.name}-${profile}-ds.xml" />
            </fileset>
        </copy>
    </target>
    
    <target name="explode" depends="war,datasource" 
            description="Deploy the exploded archive">
        <fail unless="jboss.home">jboss.home not set</fail>
        
        <mkdir dir="${war.deploy.dir}"/>
        <copy todir="${war.deploy.dir}">
            <fileset dir="${war.dir}"/>
        </copy>
    </target>
    
    <target name="unexplode" description="Undeploy the exploded archive">
        <delete failonerror="no">
            <fileset dir="${war.deploy.dir}">
                <exclude name="**/*.jar"/>
            </fileset>
        </delete>
        <delete file="${deploy.dir}/${project.name}-${profile}-ds.xml" failonerror="no"/>
        <delete dir="${war.deploy.dir}" failonerror="no"/>
    </target>
    
    <target name="restart" depends="explode" description="Restart the exploded archive">
        <touch file="${war.deploy.dir}/WEB-INF/web.xml"/>
    </target>
    
    <target name="deploy" depends="archive,datasource" description="Deploy to JBoss AS">
        <fail unless="jboss.home">jboss.home not set</fail>
        <copy todir="${deploy.dir}" file="${dist.dir}/${project.name}.war" />
    </target>
    
    <target name="undeploy" description="Undeploy the example from JBoss">
        <delete file="${deploy.dir}/${project.name}.war" />
        <delete file="${deploy.dir}/${project.name}-dev-ds.xml" />
        <delete file="${deploy.dir}/${project.name}-prod-ds.xml" />
    </target>
    
    <target name="clean" description="Cleans up the build directory">
        <delete dir="${dist.dir}"/>
        <delete dir="${war.dir}"/>
        <delete dir="${basedir}/test-report"/>
        <delete dir="${basedir}/test-output"/>
        <delete failonerror="no">
            <fileset dir="${test.dir}">
                <exclude name="**/*.class" if="eclipse.running"/>
            </fileset>
        </delete>
    </target>
    
    <target name="compiletest" unless="eclipse.running" description="Compile the Java source code for the tests">
        <mkdir dir="${test.dir}"/>
        <javac classpathref="build.classpath"
               destdir="${test.dir}"
               debug="${javac.debug}"
               deprecation="${javac.deprecation}"
               nowarn="on">
            <src path="${src.action.dir}" />
            <src path="${src.model.dir}" />
            <src path="${src.test.dir}" />
        </javac>
    </target>
    
    <target name="copytestclasses" if="eclipse.running" description="Copy classes compiled by eclipse to the test dir">
        <mkdir dir="${test.dir}"/>
        <copy todir="${test.dir}">
            <fileset dir="classes/model">
                <include name="**/*.class"/>
            </fileset>
        </copy>
        <copy todir="${test.dir}">
            <fileset dir="classes/action">
                <include name="**/*.class"/>
            </fileset>
        </copy>
        <copy todir="${test.dir}">
            <fileset dir="classes/test">
                <include name="**/*.class"/>
            </fileset>
        </copy>
    </target>
    
    <target name="buildtest" depends="compiletest,copytestclasses" description="Build the tests">
        <copy todir="${test.dir}">
            <fileset dir="${basedir}/resources">
                <exclude name="META-INF/persistence*.xml"/>
                <exclude name="import*.sql"/>
                <exclude name="${project.name}-*-ds.xml"/>
            </fileset>
        </copy>
        <copy tofile="${test.dir}/META-INF/persistence.xml" 
              file="${basedir}/resources/META-INF/persistence-test-war.xml"
              overwrite="true"/>
        <copy tofile="${test.dir}/import.sql" 
              file="${basedir}/resources/import-test.sql"
              overwrite="true"/>
        <copy todir="${test.dir}" flatten="true">
            <fileset dir="${src.test.dir}">
                <include name="**/*Test.xml" />
            </fileset>
        </copy>
    </target>
    
    <target name="test" depends="buildtest" description="Run the tests">            
        <taskdef resource="testngtasks" classpath="${testng.jar}" />
		<path id="test.path">
			<path path="${test.dir}" />
			<fileset dir="${lib.dir}/test">
				<include name="*.jar" />
			</fileset>
			<path path="${bootstrap.dir}" />
			<path refid="build.classpath" />
		</path>
		<testng outputdir="${basedir}/test-report">
			<classpath refid="test.path" />
			<xmlfileset dir="${test.dir}" includes="*Test.xml" />
		</testng>
    </target>
    
	<target name="freshen" description="grab fresh icefaces jars">
	<copy todir="${lib.dir}">
	    <fileset dir="${icefaces.home}/lib">
		    <include name="icefaces*.jar" />
            <include name="backport-util-concurrent.jar" />	
            <include name="commons-fileupload.jar"/> 	
            <include name="commons-digester.jar"/>
            <exclude name="icefaces-ahs.jar"/>
  	    </fileset>
	</copy>
	</target>

	<target name="purge" depends="undeploy" description="clean out jboss deployments of crashing applications"> 
	  <delete dir="${jboss.home}/server/default/tmp/deploy" />
	  <mkdir dir="${jboss.home}/server/default/tmp/deploy/" />
	  <delete dir="${jboss.home}/server/default/tmp/sessions" />
	  <mkdir dir="${jboss.home}/server/default/tmp/sessions" />
  	  <delete dir="${jboss.home}/server/default/work/jboss.web/localhost/${project.name}" />
	</target>
	<target name="clear-libs" description="clear libs so as to try various other sets">
		<delete defaultexcludes="false">
			   <fileset dir="${lib.dir}" includes="**.jar" excludes="activation.jar"/>
			</delete>
	</target>
	<target name="copy-libs" description="copy over new ICEfaces and Seam libraries">
		<copy todir="${lib.dir}">
			    <fileset dir="${icefaces.home}/lib">
		             <include name="icefaces*.jar" />
			         <exclude name="icefaces-ahs.jar"/>
		             <include name="backport-util-concurrent.jar" />	
			         <include name="commons-fileupload.jar"/> 
		             <include name="commons-logging*.jar"/>
		             <include name="krysalis-*.jar"/>
		             <include name="commons-digester*.jar"/>
		             <include name="commons-el.jar"/>
		             <include name="commons-discovery.jar"/>
		             <include name="xercesImpl.jar"/>
		             <include name="xml-apis.jar"/>
		             <include name="el-*.jar"/>
		           	 <include name="portlet.jar"/>
		        	 <include name="servlet-api.jar"/>
		        	 <include name="common-beanutils.jar"/>
			    	 <exclude name="activation.jar"/>
	                 <exclude name="commons-collections.jar"/>
		  	    </fileset>
			</copy>
		<copy todir="${lib.dir}">
		       <fileset dir="${jboss.seam.home}/lib">
		       	    <include name="groovy*.jar"/>
		            <include name="jboss-seam.jar"/>
		       	   <include name="drool*.jar"/>
		            <include name="cglib.jar"/>
	                <include name="cglib-nodep.jar"/>
		            <include name="dom4j.jar"/>
		             <include name="jboss-seam-debug.jar"/>
		             <include name="jboss-el.jar"/>
		             <include name="hibernate*.jar"/>
	                 <include name="asm.jar"/>
		              <include name="jsf*.jar"/>
		              <include name="antlr.jar"/>
		              <include name="jboss-seam-ui.jar"/>
		              <include name="javassist.jar"/>
		              <include name="jbpm*.jar"/>
		              <include name="jboss-el.jar" />
		              <include name="antlr*.jar"/>
		              <include name="servlet-api.jar"/>
		              <include name="jsf-api.jar"/>
		              <include name="jsf-impl.jar"/>
		              <include name="jstl.jar"/>
		              <include name="persistence-api.jar"/>
		              <include name="jta.jar"/>
		              <include name="jboss-archive-browsing.jar"/>
		              <include name="log4j.jar"/>
	                  <include name="commons-collections.jar"/>
		              <include name="commons-beanutils.jar"/>
		              <include name="commons-lang.jar"/>
		              <include name="el-*.jar"/>
		       	      <include name="jboss-common-core.jar"/>
		       	     <include name="persistence*.jar"/>
		       	<include name="mvel14.jar"/>
		       	 <include name="core.jar"/>
		       	  <include name="ejb-api.jar"/>
		       	   <include name="hsqldb.jar"/>
		       	   <include name="janino.jar"/>
		       	   <include name="jboss-cache.jar"/>
		       	   <include name="jboss-embedded-*.jar"/>
		       	   <include name="jgroups.jar"/>
		       	   <include name="jsr250-api.jar"/>
		       	   <include name="testng.jar"/>
		       	   <include name="mail.jar"/>
		        </fileset>

			</copy>
	</target>
</project>
