<?xml version="1.0"?>
<!--
This file contains tasks that can be resused by component projects and J2EE projects.  

Some of the tasks are simply reusable code that can be called directly from the calling
script.  Other tasks require an external version of ANT, so they run the external ANT by calling
the executable and passing the name of the script to run, the target, and any properties needed.

-->
<project name="Common ANT Script" default="javadoc">
	<!-- ant related -->	
    <property name = "ext.ant.home" 	value = "Z:\vob_devtools\ant\jakarta-ant"/>
	<property name = "ext.ant" 		    value = "${ext.ant.home}\bin\ant.bat"/>
	<property name = "script.root.dir"	value = "Z:\vob_devtools\ant\scripts"/>
	<property name = "ext.ant.params" 	value = "-buildfile &apos;${script.root.dir}\common-external-build.xml&apos; -Dext.ant.home=&apos;${ext.ant.home}&apos;"/>

	<property name = "ext.ant.client.jre" 		    value = "${ext.ant.home}\bin\ant-client-jre.bat"/>

    <property name = "jaxb.ant.home" 	value = "Z:\vob_devtools\jaxb-1.0\jakarta-ant-1.5.1"/>
    <property name = "jaxb.ant" 	    value = "${jaxb.ant.home}\bin\ant.bat"/>
	<property name = "jaxb.ant.params" 	value = "-buildfile &apos;${script.root.dir}\common-external-build.xml&apos; -Djaxb.ant.home=&apos;${jaxb.ant.home}&apos;"/>
    
    <!-- Set up the task to get the J2EE classpath from this environment -->
    <taskdef name="getJ2EEclasspath" classname="com.deaded.ant.J2EEClasspathTask"
        classpath="Z:\vob_devtools\ant\lib\commonAntTasks.jar"/>

    <taskdef name="serialver" classname="com.deaded.ant.SerialVerTask"
        classpath="Z:\vob_devtools\ant\lib\commonAntTasks.jar"/>

    <taskdef name="list-project-files" classname="com.deaded.ant.ListAllJavaFilesTask"
        classpath="Z:\vob_devtools\ant\lib\commonAntTasks.jar"/>

    <target name="List.All.Project.Java.Files">
        <list-project-files filename="${project.filelist}"/>
    </target>

    <!-- Set up the task to fix the correct drive letter to paths used by a UCM view -->
    <taskdef name="applyDriveLetter" classname="com.deaded.ant.CurrentDriveLetterTask" classpath="Z:\vob_devtools\ant\lib\commonAntTasks.jar"/>

    <!-- ClearCase UCM: make a baseline -->
    <target name="cc.make.baseline">
        <property name="pvob.projects" value="\pvob_projects"/>
        <applyDriveLetter propertyName="pvob.projects" projectName="${cc.workspace.project}"/>

        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>

        <exec dir="${pvob.projects}" executable="cmd">
            <arg line="/c cleartool mkbl -ide -full -comp ${component.to.baseline} ${cc.label}"/>
        </exec>
    </target>

    <!-- ClearCase: create a label -->
    <target name="cc.create.label">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>

	    <exec dir="${vob.root}" executable="cmd">
		    <arg line="/c cleartool mklbtype -nc ${cc.label}"/>
        </exec>
    </target>

    <target name="cc.create.label.no.apply">
        <exec dir="${vob.root}" executable="cmd">
	    <arg line="/c cleartool mklbtype -nc ${cc.label}"/>
        </exec>
    </target>

    <!-- ClearCase: apply a label to a single file -->
    <target name="cc.apply.label.to.file">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="vob.dir" projectName="${cc.workspace.project}"/>

	    <exec dir="${vob.dir}" executable="cmd">
		    <arg line="/c cleartool mklabel ${cc.label} ${cc.file.to.label}"/>
        </exec>
    </target>

    <target name="cc.apply.label.to.file.no.apply">
        <exec dir="${vob.dir}" executable="cmd">
	    <arg line="/c cleartool mklabel ${cc.label} ${cc.file.to.label}"/>
        </exec>
    </target>

    <!-- ClearCase: apply a given label to a directory and all files and dirs under it -->
    <target name="cc.apply.label.to.dir">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="vob.dir" projectName="${cc.workspace.project}"/>

	    <exec dir="${vob.dir}" executable="cmd">
		    <arg line="/c cleartool mklabel -recurse ${cc.label} ${cc.dir.to.label}"/>
	    </exec>
    </target>

    <target name="cc.apply.label.to.dir.no.apply">
        <exec dir="${vob.dir}" executable="cmd">
	    <arg line="/c cleartool mklabel -recurse ${cc.label} ${cc.dir.to.label}"/>
	</exec>
    </target>

    <target name="CC.Show.My.Checkouts.and.Private.View.Files">
        <applyDriveLetter propertyName="cc.check.root.dir" projectName="${cc.workspace.project}"/>
		<exec dir="${cc.check.root.dir}" executable="cmd">
			<arg line="/c cleartool ls -r -view_only"/>
			<arg line=" | find /v "/>
			<arg value='&quot;\bin&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;\_&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;.class&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;.keep&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;webApplication\WEB-INF\classes&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;Web Content\WEB-INF\classes&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;WebContent\WEB-INF\classes&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;ejbModule\org&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;ejbModule\com&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;EJSRemoteStateless&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;EJSStateless&quot;'/>
			<arg line=" | find /v "/>
			<arg value='&quot;\xmlbinding&quot;'/>
		</exec>
    </target>

    <target name="update.manifest">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
        <exec executable="${ext.ant}" failonerror="true">
            <arg line="${ext.ant.params}"/>
            <arg line="update.manifest"/>
	    <arg line='-Droot.dir=&quot;${root.dir}&quot;'/>
            <arg line="-Dpackage.name=${package.name}"/>
            <arg line="-Dmanifest.version=${manifest.version}"/>
        </exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <!-- pre-pend text to a file -->
    <target name="prepend.text.to.file">
		<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
        <exec executable="${ext.ant}" failonerror="true">
            <arg line="${ext.ant.params}"/>
            <arg line="prepend.text.to.file"/>
            <arg line="-Dtext.to.prepend=${text.to.prepend}"/>
            <arg value="-Dfile.to.prepend="/>
            <arg file="${file.to.prepend}"/>
        </exec>
		<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <!-- build the guides -->
    <target name="guide.transformer">
	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="guide.transformer"/>
		<arg value="-Dgt.basedir="/>
		<arg path="${gt.basedir}"/>
		<arg value="-Dgt.destdir="/>
            	<arg path="${gt.destdir}"/>
		<arg value="-Dgt.extension=${gt.extension}"/>
		<arg value="-Dgt.stylesheet="/>
		<arg file="${gt.stylesheet}"/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>	

    <!-- Build the JavaDocs -->
    <target name="javadoc">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>

	<mkdir dir="${javadoc.dir}"/>
	<property name = "javadoc.packagenames" value = "com.deaded.*"/>	
	<javadoc destdir="${javadoc.dir}" public="true" use="true"
		notree="false" nonavbar="false" noindex="false"
		splitindex="true" author="true" version="true"
		nodeprecatedlist="false" nodeprecated="false"
		sourcepath="${source.dir}"
		packagenames="${javadoc.packagenames}"
		classpath="${classes.dir}" 
		doctitle="${html.title}"/>
    </target>

    <target name="jdepend">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="jdepend"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dclasses.dir=&quot;${classes.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="jdepend-for-graphviz">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="jdepend-for-graphviz"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dclasses.dir=&quot;${classes.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="checkstyle">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="checkstyle"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>
	
    <target name="pmd">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant.client.jre}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant.client.jre}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="pmd"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant.client.jre}" keepcopy="false"/>
    </target>

    <target name="cpd">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="cpd"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="javancss">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="javancss"/>
		<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="junit" depends="run.junit, check.junit.fail, junit.remove.xmls">
    </target>

    <target name="run.junit">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="test.source.dir" projectName="${cc.workspace.project}"/>

	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>

	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="junit"/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
		<arg line='-Dclasses.dir=&quot;${classes.dir}&quot;'/>
		<arg line='-Dtest.source.dir=&quot;${test.source.dir}&quot;'/>
		<arg line="-Dproject.classpath="/>
		<arg value='&quot;${project.classpath}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>

        <available file="${report.dir}/junitfailed.txt" property="junit.failed"/>
    </target>

    <target name="check.junit.fail" if="junit.failed">
        <antcall target="junit.report.if.not.deploying"/>
        
        <delete file="${report.dir}/junitfailed.txt"/>
	<antcall target="junit.remove.xmls"/>
	<fail>JUnit test failed</fail>
    </target>

    <!-- we do want the error reports created when not deploying -->
    <target name="junit.report.if.not.deploying" unless="deploy.on">
	<cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
	<exec executable="${ext.ant}" failonerror="true">
		<arg line="${ext.ant.params}"/>
		<arg line="junit.report"/>
		<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
	</exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>
    
    <target name="junit.remove.xmls">
    	<delete>
            <fileset dir="${report.dir}/junit" includes="*.xml"/>
        </delete>
    </target>

    <target name="serialver">
        <property name="serialver.class" value=""/>
        <property name="serialver.package" value=""/>

        <getJ2EEclasspath ProjectName="${project.name}" 
		ProjectClasspathProperty="project.classpath"/>

        <serialver classPath="${project.classpath}" packageName="${serialver.package}" className="${serialver.class}"/>
    </target>
	
    <target name="CloverJ2EE">
        <getJ2EEclasspath ProjectName="${project.name}" 
		ProjectClasspathProperty="project.classpath"/>
	<antcall target="clover"/>
    </target>
	
    <target name="clover">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="test.source.dir" projectName="${cc.workspace.project}"/>

        <cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>
    	<exec executable="${ext.ant}" failonerror="true">
			<arg line="${ext.ant.params}"/>
			<arg line="clover"/>
			<arg line='-Dhtml.title=&quot;${html.title}&quot;'/>
			<arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
			<arg line='-Dclasses.dir=&quot;${classes.dir}&quot;'/>
			<arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
			<arg line='-Dtest.source.dir=&quot;${test.source.dir}&quot;'/>
			<arg line="-Dproject.classpath="/>
            <arg value='&quot;${project.classpath}&quot;'/>
        </exec>
	<ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="jaxb">
		<cccheckout viewpath="${jaxb.ant}" reserved="false" nowarn="false"/>
		<exec executable="${jaxb.ant}" failonerror="true">
			<arg line="${jaxb.ant.params}"/>
			<arg line="jaxb"/>
			<arg line='-Djaxb.package=&quot;${jaxb.package}&quot;'/>
			<arg line='-Djaxb.schema=&quot;${jaxb.schema}&quot;'/>
			<arg line='-Djaxb.target=&quot;${jaxb.target}&quot;'/>
		</exec>
		<ccuncheckout viewpath="${jaxb.ant}" keepcopy="false"/>
    </target>
   
    <target name="jaxb.with.classpath">
		<cccheckout viewpath="${jaxb.ant}" reserved="false" nowarn="false"/>
		<exec executable="${jaxb.ant}" failonerror="true">
			<arg line="${jaxb.ant.params}"/>
			<arg line="jaxb-with-classpath"/>
			<arg line='-Djaxb.package=&quot;${jaxb.package}&quot;'/>
			<arg line='-Djaxb.schema=&quot;${jaxb.schema}&quot;'/>
			<arg line='-Djaxb.target=&quot;${jaxb.target}&quot;'/>
			<arg line='-Djaxb.classpath=&quot;${jaxb.classpath}&quot;'/>
		</exec>
		<ccuncheckout viewpath="${jaxb.ant}" keepcopy="false"/>
    </target>

	<!-- Compiles JAXB bindings without globally enforced package -->
    <target name="jaxb.with.classpath.nopackage">
		<cccheckout viewpath="${jaxb.ant}" reserved="false" nowarn="false"/>
		<exec executable="${jaxb.ant}" failonerror="true">
			<arg line="${jaxb.ant.params}"/>
			<arg line="jaxb-with-classpath-nopackage"/>
			<arg line='-Djaxb.schema=&quot;${jaxb.schema}&quot;'/>
			<arg line='-Djaxb.target=&quot;${jaxb.target}&quot;'/>
			<arg line='-Djaxb.classpath=&quot;${jaxb.classpath}&quot;'/>
		</exec>
		<ccuncheckout viewpath="${jaxb.ant}" keepcopy="false"/>
    </target>

    <target name="FindBugsJ2EE">
        <getJ2EEclasspath ProjectName="${project.name}" 
		ProjectClasspathProperty="project.classpath"/>
	<antcall target="FindBugs"/>
    </target>

    <target name="FindBugs">
        <applyDriveLetter propertyName="vob.root" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="root.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="source.dir" projectName="${cc.workspace.project}"/>
        <applyDriveLetter propertyName="classes.dir" projectName="${cc.workspace.project}"/>

    	<cccheckout viewpath="${ext.ant.client.jre}" reserved="false" nowarn="false"/> 
    	<exec executable="${ext.ant.client.jre}" failonerror="true">
			<arg line="${ext.ant.params}"/>
			<arg line="FindBugs"/>
            <arg line='-Dproject.classpath=&quot;${project.classpath}&quot;'/>
            <arg line='-Dsource.dir=&quot;${source.dir}&quot;'/>
            <arg line='-Dclasses.dir=&quot;${classes.dir}&quot;'/>
            <arg line='-Dreport.dir=&quot;${report.dir}&quot;'/>
        </exec>
	<ccuncheckout viewpath="${ext.ant.client.jre}" keepcopy="false"/>         
    </target>

    <target name="xmltask.replace.text">
        <cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>

        <exec executable="${ext.ant}" failonerror="true">
            <arg line="${ext.ant.params}"/>
            <arg line="xmltask.replace.text"/>
            <arg line='-Dxml.source=&quot;${xml.source}&quot;'/>
            <arg line='-Dxml.dest=&quot;${xml.dest}&quot;'/>
            <arg line='-Dxml.xpath=&quot;${xml.xpath}&quot;'/>
            <arg line='-Dxml.replace.text=&quot;${xml.replace.text}&quot;'/>
        </exec>

        <ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>

    <target name="xmltask.attr.value">
        <cccheckout viewpath="${ext.ant}" reserved="false" nowarn="false"/>

        <exec executable="${ext.ant}" failonerror="true">
            <arg line="${ext.ant.params}"/>
            <arg line="xmltask.attr.value"/>
            <arg line='-Dxml.source=&quot;${xml.source}&quot;'/>
            <arg line='-Dxml.dest=&quot;${xml.dest}&quot;'/>
            <arg line='-Dxml.xpath=&quot;${xml.xpath}&quot;'/>
            <arg line='-Dxml.attr=&quot;${xml.attr}&quot;'/>
	    <arg line='-Dxml.value=&quot;${xml.value}&quot;'/>
        </exec>

        <ccuncheckout viewpath="${ext.ant}" keepcopy="false"/>
    </target>
   
    <target name="NNTP">
      <taskdef name="nntp" classname="com.deaded.ant.NNTPTask" classpath="Z:\vob_devtools\ant\lib\commonAntTasks.jar"/>

      <nntp server="${nntp.server}" group="${nntp.group}" email="${nntp.email}"
        author="${nntp.author}" subject="${nntp.subject}" text="${nntp.text}"/>
    </target>
</project>
