<!--
 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.
-->
<project>

	<target name="samples:setup">
		<mkdir dir="target/aars" />
		<mkdir dir="target/jars" />
		<mkdir dir="target/temp" />
	</target>
	<target name="sample:userguide:create" depends="samples:setup">

		<property name="dir.sample.userguide.temp" value="target/temp/userguide" />
		<property name="dir.sample.userguide.clients.temp" value="target/temp/userguideclients" />	
		<property name="dir.sample.userguide.clients.temp" value="target/temp/userguideclients" />	
		<property name="userguide.service.aar.name" value="RMSampleService.aar" />
		<property name="userguide.client.jar.name" value="UserguideSampleClients.jar" />
        <property name="build.samples.clients.dir" value="target/sampleClients" />
		
		<mkdir dir="${dir.sample.userguide.temp}/META-INF" />
		
        <copy file="src/main/resources/userguide/services.xml" todir="${dir.sample.userguide.temp}/META-INF" /> 
        <!-- <copy file="src/main/resources/userguide/RMSampleService.wsdl" todir="${dir.sample.userguide.temp}" /> -->
        <copy todir="${dir.sample.userguide.temp}" >
            <fileset dir="target/classes">
                <include name="sandesha2/samples/userguide/**/*Service*.class" />
            </fileset>
        </copy>
		
        <mkdir dir="${dir.sample.userguide.clients.temp}" /> 
        <copy todir="${dir.sample.userguide.clients.temp}" >
            <fileset dir="target/classes">
                <include name="sandesha2/samples/userguide/**/*Client*.class" />
            </fileset>
        </copy>
        
        <jar jarfile="target/aars/${userguide.service.aar.name}" basedir="${dir.sample.userguide.temp}" />
    	<jar jarfile="target/jars/${userguide.client.jar.name}" basedir="${dir.sample.userguide.clients.temp}" />
    	 
		<mkdir dir="${build.samples.clients.dir}" />
    	<copy todir="${build.samples.clients.dir}" >
            <fileset dir="src/main/resources/userguide">
                <include name="*.bat" />
                <include name="*.sh" />
                <include name="*.html" />
            </fileset>
        </copy>
		
	</target>

</project>
