<?xml version="1.0"?>
<!--
		* Copyright 2001-2010 The Apache Software Foundation. * * Licensed
		under the Apache License, Version 2.0 (the "License"); * you may not
		use this file except in compliance with the License. * You may obtain
		a copy of the License at * *
		http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by
		applicable law or agreed to in writing, software * distributed under
		the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES
		OR CONDITIONS OF ANY KIND, either express or implied. * See the
		License for the specific language governing permissions and *
		limitations under the License. * */
	-->
<project default="setup" basedir=".">
	
	<target name="setup">
		<mkdir dir="xlt"/>
		<get src="https://lab.xceptance.de/releases/xlt/3.3.0/xlt-3.3.0-r3088.zip"
			 dest="${basedir}/xlt/xlt-3.3.0-r3088.zip" verbose="true" usetimestamp="true" />
		<unzip src="${basedir}/xlt/xlt-3.3.0-r3088.zip" dest="${basedir}/target" overwrite="false"/>
    </target>
	
	<target name="configure" depends="setup">
		<copy file="${basedir}/xlt/license.xml.donotcheckin" tofile="${basedir}/target/xlt-3.3.0-r3088/config/license.xml"/>
		<replace file="${basedir}/target/xlt-3.3.0-r3088/config/mastercontroller.properties"
		   token="com.xceptance.xlt.mastercontroller.agentfiles = samples/testsuite"
		   value="com.xceptance.xlt.mastercontroller.agentfiles = ${basedir}/juddi-xlt" />
		<chmod dir="target/xlt-3.3.0-r3088/bin" perm="ugo+rx" includes="**/*.sh"/>
	</target>
	
	<target name="loadtest" depends="configure">
	   <ant antfile="build.xml" target="loadtest" dir="${basedir}/juddi-xlt" />
	</target>
	
</project>
