<!--
 * 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 name="common">
    <!-- Set the distro path based on the existence of the pom.xml -->
    <condition property="distro.path" value="../../distribution/all/target" else="../..">
        <available file="../../distribution/pom.xml"/> 
    </condition>

    <!-- Convert the path to an absolute location -->
    <property name="distro.root" location="${distro.path}"/> 
    <echo>Distribution: ${distro.root}</echo>

    <!-- @file is relative to the enclosing file -->
    <import file="${distro.root}/features/build-path.xml"/>

    <target name="common-init">
        <delete quiet="true" includeemptydirs="true"> 
            <fileset dir="target"/> 
        </delete> 
        <mkdir dir="${sample.root}/target/classes"/>
    </target>

    <target name="common-jar-compile" depends="common-init">
        <javac srcdir="${sample.root}/src/main/java"
               destdir="${sample.root}/target/classes"
               debug="on"
               source="1.5"
               target="1.5">
            <classpath refid="tuscany.path"/>
        </javac> 
        <copy todir="${sample.root}/target/classes">
            <fileset dir="${sample.root}/src/main/resources"/>
        </copy>
        <jar destfile="${sample.jar}" basedir="${sample.root}/target/classes">
        </jar>    	
    </target>

    <target name="common-war-compile" depends="common-init">
        <javac srcdir="${sample.root}/src/main/java"
               destdir="${sample.root}/target/classes"
               debug="on"
               source="1.5"
               target="1.5">
            <classpath refid="tuscany.path"/>
        </javac> 
        <copy todir="${sample.root}/target/classes">
            <fileset dir="${sample.root}/src/main/resources"/>
        </copy>
        <war destfile="${sample.war}" webxml="${sample.root}/src/main/webapp/WEB-INF/web.xml">
            <fileset dir="${sample.root}/src/main/webapp"/>
        	<lib refid="tuscany.path"/>
            <classes dir="${sample.root}/target/classes"/>
        </war>    	
    </target>	
	
    <target name="common-run-jse" depends="compile">
        <java jar="${distro.root}/modules/tuscany-node-launcher-2.0-M2-SNAPSHOT.jar"
              fork="true"
        	  inputstring="q">
            <jvmarg value="-Djava.util.logging.config.file=${sample.root}/../../logging.properties"/>
            <arg value="${sample.composite}"/> 
        	 <!-- would be good to have the node launcher run the first deployable 
        	      composite if this is not specified so I don't have to put it here -->
            <arg value="${sample.jar}"/>
        </java>    	
    </target>
	
    <target name="common-run-equinox" depends="compile">
        <java jar="${distro.root}/modules/tuscany-node-launcher-equinox-2.0-M2-SNAPSHOT.jar"
              fork="true"
        	  inputstring="q">
            <jvmarg value="-Djava.util.logging.config.file=${sample.root}/../../logging.properties"/>
            <arg value="${sample.composite}"/> 
        	 <!-- would be good to have the node launcher run the first deplyable 
        	      composite if this is not specified so I don't have to put it here -->
            <arg value="${sample.jar}"/>
        </java>    	
    </target>
	
    <target name="common-clean">
        <delete quiet="true" includeemptydirs="true">
            <fileset dir="target"/>
        </delete>
    </target>
</project>
