<?xml version="1.0" encoding="utf-8" ?>
<project name="ADL-Test-App" default="build"
         xmlns="http://nant.sf.net/release/0.85-rc4/nant.xsd"
         xmlns:nant="http://nant.sf.net/release/0.85-rc4/nant.xsd"
         >
	<property name="build.revision" value="$Revision: 1.5 $"/>

	<property name="adl" value="."/>
	<property name="adl-transforms" value="${adl}/transforms"/>
	<property name="testapp" value="testapp"/>
	<property name="rootns" value="Cygnet.ADL.TestApp"/>
	<property name="entityns" value="${rootns}.Entities"/>
	<property name="controllerns" value="${rootns}.Controllers"/>

	<property name="controllers" value="testapp/Web/Controllers"/>
	<property name="views" value="testapp/Web/Views" />

	<property name="formcontroller" value="testapp/Web/Controllers/Form"/>
	<property name="formview" value="testapp/Web/Views/Form"/>
	<property name="bindir" value="testapp/Web/bin"/>
	<property name="tmpdir" value="tmp"/>

	<property name="adl-src" value="${testapp}/testapp.adl.xml" />
	<property name="canonical" value="${tmpdir}/testapp.adl.xml" />
	<property name="area-name" value="test"/>
	<property name="nant-tasks" value="${tmpdir}/NantTasks.dll"/>
	<property name="nant-contrib-dll" value="C:\Program Files\nantcontrib-0.85\bin\NAnt.Contrib.Tasks.dll"/>


	<target name="fetchtasks" depends="prepare"
		  description="fetches our NantTaks library from the well known place where it resides">
		<get src="http://libs.cygnets.co.uk/NantTasks.dll" dest="${nant-tasks}"/>
	</target>

	<target name="canonicalise" description="generates adl for testapp entities">
		<!-- adl2canonical.xslt -->
		<style verbose="true" style="${adl-transforms}/adl2canonical.xslt"
			   in="${adl-src}"
			   out="${canonical}">
			<parameters>
				<parameter name="abstract-key-name-convention" value="Name_Id"/>
			</parameters>
		</style>
	</target>

	<target name="analyse">
		<loadtasks assembly="${nant-contrib-dll}" />
		<fxcop directOutputToConsole="true" projectFile="${testapp}/TestApp.fxcop">
		</fxcop>
	</target>

	<target name="hbm" description="generates adl for testapp database NHibernate mapping"
			depends="canonicalise">
		<style verbose="true" style="${adl-transforms}/adl2hibernate.xslt"
			   in="${canonical}"
			   out="${tmpdir}/testapp.hbm.xml">
			<parameters>
				<parameter name="namespace" value="${entityns}"/>
				<parameter name="assembly" value="${rootns}"/>
			</parameters>
		</style>
	</target>

	<target name="sql" description="Generates testapp database initialisation script"
			depends="canonicalise">
		<style verbose="true" style="${adl-transforms}/adl2mssql.xslt"
			   in="${canonical}"
			   out="${testapp}/testapp.auto.sql">
			<parameters>
				<parameter name="abstract-key-name-convention" value="Name_Id"/>
				<parameter name="database" value="ADL_TestApp"/>
			</parameters>
		</style>
	</target>

	<target name="entities" description="creates C# classes for entities in the database"
			depends="fetchtasks canonicalise">
		<loadtasks assembly="${nant-tasks}" />

		<style verbose="true" style="${adl-transforms}/adl2entityclass.xslt"
			   in="${canonical}"
			   out="${tmpdir}/classes.auto.cs">
			<parameters>
				<parameter name="locale" value="en-UK"/>
				<parameter name="controllerns" value="${controllerns}"/>
				<parameter name="entityns" value="${entityns}"/>
			</parameters>
		</style>
		<exec program="c:\Program Files\astyle\bin\astyle.exe"
			basedir="."
			commandline="--style=java --indent=tab=4 --indent-namespaces ${tmpdir}/classes.auto.cs"/>
		<split-regex in="${tmpdir}/classes.auto.cs"
					 destdir="${testapp}/Auto"
									 pattern="cut here: next file '([a-zA-Z0-9_.]*)'"/>
	</target>

	<target name="views" description="creates Velocity templates"
			depends="fetchtasks canonicalise">
		<loadtasks assembly="${nant-tasks}" />

		<style verbose="true" style="${adl-transforms}/adl2views.xslt"
			   in="${canonical}"
			   out="${tmpdir}/views.auto.vm">
			<parameters>
				<parameter name="layout-name" value="default"/>
				<parameter name="locale" value="en-UK"/>
				<parameter name="controllerns" value="${controllerns}"/>
				<parameter name="entityns" value="${entityns}"/>
				<parameter name="generate-site-navigation" value="false"/>
				<parameter name="permissions-group" value="partsbookeditors"/>
				<parameter name="area-name" value="${area-name}"/>
				<parameter name="show-messages" value="true"/>
			</parameters>
		</style>
		<split-regex in="${tmpdir}/views.auto.vm"
					 destdir="${views}/Auto/${area-name}" pattern="cut here: next file '([a-zA-Z0-9_./]*)'"/>
	</target>

	<target name="controllers" description="creates C# controller classes" depends="fetchtasks canonicalise">
		<loadtasks assembly="${nant-tasks}" />
		<style verbose="true" style="${adl-transforms}/adl2controllerclasses.xslt"
			   in="${canonical}"
			   out="${tmpdir}/controllers.auto.cs">

			<parameters>
				<parameter name="locale" value="en-UK"/>
				<parameter name="controllerns" value="${controllerns}"/>
				<parameter name="entityns" value="${entityns}"/>
				<parameter name="layout-name" value="default"/>
				<parameter name="rescue-name" value="generalerror"/>
				<parameter name="area-name" value="${area-name}"/>
			</parameters>
		</style>
		<exec program="c:\Program Files\astyle\bin\astyle.exe"
			basedir="."
			commandline="--style=java --indent=tab=4 --indent-namespaces ${tmpdir}/controllers.auto.cs"/>
		<split-regex in="${tmpdir}/controllers.auto.cs"
				   destdir="${controllers}/Auto" pattern="cut here: next file '([a-zA-Z0-9_.]*)'"/>
	</target>


	<target name="prepare" description="prepare directories used during the build">
		<mkdir dir="${bindir}" failonerror="false"/>
		<mkdir dir="${tmpdir}" failonerror="false"/>
	</target>

	<target name="clean" description="removes all products of the build process except the xml-ised database schema">
		<delete>
			<fileset>
				<include name="**/*.auto.*"/>
			</fileset>
		</delete>
		<delete failonerror="false" dir="${bindir}"/>
		<delete failonerror="false" dir="${tmpdir}"/>
	</target>

	<target name="build" depends="prepare entities controllers views sql hbm"
			description="compiles Visual Studio solution using msbuild">
		<exec program="msbuild.exe"
			  basedir="c:\windows\microsoft.net\framework\v3.5\"
			  commandline="ADL.sln"/>
	</target>
	<target name="deploy" depends="clean build"/>

</project>