<?xml version="1.0" encoding="UTF-8"?>
<project name="org.springframework.oxm" xmlns:ivy="antlib:org.apache.ivy.ant">
	<property file="${basedir}/../build.properties"/>
	<import file="${basedir}/../build-spring-framework/package-bundle.xml"/>
	<import file="${basedir}/../spring-build/standard/default.xml"/>

	<property name="flightSchema" value="${basedir}/src/test/resources/org/springframework/oxm/flight.xsd"/>
	<property name="orderSchema" value="${basedir}/src/test/resources/org/springframework/oxm/order.xsd"/>
	<property name="castorBuilderProperties" value="${basedir}/src/test/castor/castorbuilder.properties"/>
	<property name="test.castor.dir" value="${target.dir}/castor/test"/>
	<property name="test.jaxb.dir" value="${target.dir}/jaxb/test"/>

	<macrodef name="test-compile">
		<attribute name="classpath.id"/>
		<attribute name="input.dir"/>
		<attribute name="output.dir"/>
		<attribute name="resources.dir"/>
		<sequential>
			<delete quiet="true" dir="@{output.dir}"/>
			<mkdir dir="@{output.dir}"/>

			<!-- Castor -->
			<ivy:cachepath resolveId="castor.classpath" pathid="castor.classpath" organisation="org.codehaus.castor"
					module="com.springsource.org.castor.anttask" revision="1.2.0" conf="runtime" type="jar"
					inline="true" log="download-only"/>
			<taskdef name="castor" classname="org.castor.anttask.CastorCodeGenTask" classpathref="castor.classpath"/>

			<delete quiet="true" dir="${test.castor.dir}" />
			<mkdir dir="${test.castor.dir}" />

			<castor types="j2" warnings="false" file="${flightSchema}" todir="${test.castor.dir}"
					package="org.springframework.oxm.castor" properties="${castorBuilderProperties}"/>
			<castor types="j2" warnings="false" file="${orderSchema}" todir="${test.castor.dir}"
					package="org.springframework.oxm.castor" properties="${castorBuilderProperties}"/>
			<do-compile classpath.id="@{classpath.id}" input.dir="${test.castor.dir}" output.dir="@{output.dir}"
					resources.dir="${test.castor.dir}"/>
            <copy todir="@{output.dir}">
                <fileset dir="${test.castor.dir}">
                    <exclude name="**/*.java"/>
                </fileset>
            </copy>

			<!-- JAXB2 -->
		    <ivy:cachepath resolveId="jaxb.classpath" pathid="jaxb.classpath" organisation="com.sun.xml"
					module="com.springsource.com.sun.tools.xjc" revision="2.1.7" conf="runtime" type="jar" inline="true"
					log="download-only"/>
			<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask" classpathref="jaxb.classpath"/>

			<delete quiet="true" dir="${test.jaxb.dir}" />
			<mkdir dir="${test.jaxb.dir}" />

			<xjc destdir="${test.jaxb.dir}" package="org.springframework.oxm.jaxb.test" schema="${flightSchema}">
				<produces dir="${test.jaxb.dir}" includes="**/*.java"/>
			</xjc>
			<do-compile classpath.id="@{classpath.id}" input.dir="${test.jaxb.dir}" output.dir="@{output.dir}"
					resources.dir="${test.jaxb.dir}"/>

			<!-- Standard Compile -->
			<test-pre-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
					resources.dir="@{resources.dir}"/>
			<do-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
					resources.dir="@{resources.dir}"/>
			<test-post-compile classpath.id="@{classpath.id}" input.dir="@{input.dir}" output.dir="@{output.dir}"
					resources.dir="@{resources.dir}"/>
		</sequential>
	</macrodef>

	<macrodef name="test-pre-compile">
		<attribute name="classpath.id"/>
		<attribute name="input.dir"/>
		<attribute name="output.dir"/>
		<attribute name="resources.dir"/>
		<sequential>
			<!-- XMLBeans -->
			<ivy:cachepath resolveId="xmlbeans.classpath" pathid="xmlbeans.classpath" organisation="org.apache.xmlbeans"
					module="com.springsource.org.apache.xmlbeans" revision="2.4.0"
					conf="runtime" type="jar" inline="true" log="download-only"/>
			<taskdef name="xmlbeans" classname="org.apache.xmlbeans.impl.tool.XMLBean" classpathref="xmlbeans.classpath"/>
			<xmlbeans schema="${flightSchema}" classgendir="@{output.dir}" classpathref="xmlbeans.classpath" compiler="modern"
					  verbose="false"/>
		</sequential>

	</macrodef>

	<macrodef name="test-post-compile">
		<attribute name="classpath.id"/>
		<attribute name="input.dir"/>
		<attribute name="output.dir"/>
		<attribute name="resources.dir"/>
		<sequential>
			<!-- JiBX -->
			<ivy:cachepath resolveId="jibx.classpath" pathid="jibx.classpath" organisation="net.sourceforge.jibx"
					module="com.springsource.org.jibx.binding" revision="1.1.5"
					conf="runtime" type="jar" inline="true" log="download-only"/>
			<taskdef name="jibx-bind" classname="org.jibx.binding.ant.CompileTask" classpathref="jibx.classpath"/>
			<jibx-bind load="true" binding="${basedir}/src/test/resources/org/springframework/oxm/jibx/binding.xml">
				<classpathset dir="@{output.dir}">
					<include name="**/jibx/**/*"/>
				</classpathset>
			</jibx-bind>
		</sequential>
	</macrodef>

</project>
