<?xml version="1.0" encoding="UTF-8"?>

<!--
	Licensed to the Apache Software Foundation (ASF) under one
	or more contributor license agreements.  See the NOTICE file
	distributed with this work for additional information
	regarding copyright ownership.  The ASF licenses this file
	to you 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.    
-->

<!-- set the basedir value to point to the top level of the project -->

<project name="SimpleServer Config XML" default="all" basedir=".">

	<property name="class.path" value="./lib/xbean.jar:./lib/jsr173_1.0_api.jar">
	</property>

	<property name="src.gen.dir" value="./target/xbeans-src" />

	<property name="bin.gen.dir" value="./target/xbeans-bin" />


	<taskdef name="xmlbean" classname="org.apache.xmlbeans.impl.tool.XMLBean" 
		classpath="lib/xbean.jar:lib/jsr173_1.0_api.jar" />

	<target name="all">

	    <!-- Historical note: I had this all set up to check in the generated xbeans code so there
	         would be only one simple server jar.  However, xbeans creates a .class file as part
	         of its output, and I was unable to figure out how to get Eclipse to deal with this.
	         Checking in a .class file in a source folder works fine for maven, but not for
	         Eclipse.  And maybe it's not such a good idea after all.  So, back to a separate jar
	         for the xbean stuff.  -->
		
		<!-- Bean generation into target dir -->
		<xmlbean classpath="${class.path}" failonerror="true" javasource="1.5" 
			srcgendir="${src.gen.dir}" classgendir="${bin.gen.dir}" 
			schema="./src/main/resources/SimpleServerConfig.xsd" destfile="./lib/uima-simple-server-xbean.jar">
		</xmlbean>

        <!-- Delete temporary bin dir -->
        <delete dir="${bin.gen.dir}" />

        <!-- Delete temporary src dir -->
        <delete dir="${src.gen.dir}" />


		
	</target>

</project>





