<!--
 * 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.    
-->
<!DOCTYPE project [
<!ENTITY buildDependency SYSTEM "build-dependency.xml">
]>

<project name="alert-aggregator-webapp" default="package">
	&buildDependency;
	
    <property name="settings.localRepository" value="./target/repo" />
    <property name="artifactId" value="demo-alert-aggregator" />
	
    <target name="init">
        <mkdir dir="target/classes"/>
    	<mkdir dir="target/sdo-source"/>
    </target>
	
    <target name="generate" depends="init">
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator"
              fork="true">
        	<arg value="-targetDirectory"/>
        	<arg value="target/sdo-source"/>
        	<arg value="-javaPackage"/>
        	<arg value="org.apache.tuscany.sca.demos.aggregator.service"/>
        	<arg value="-schemaNamespace"/>
        	<arg value="http://tuscany.apache.org/sca/demos/aggregator/service"/>
        	<arg value="-noNotification"/>
        	<arg value="-noContainment"/>
        	<arg value="-noUnsettable"/>
        	<arg value="src/main/resources/Alerts.wsdl"/>
        	
            <classpath>
                <pathelement path="target/classes"/>
            	<pathelement location="../../lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </java>
    	
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator"
              fork="true">
        	<arg value="-targetDirectory"/>
        	<arg value="target/sdo-source"/>
        	<arg value="-javaPackage"/>
        	<arg value="org.apache.tuscany.sca.demos.aggregator.sources"/>
        	<arg value="-schemaNamespace"/>
        	<arg value="http://tuscany.apache.org/sca/demos/aggregator/sources"/>
        	<arg value="-noNotification"/>
        	<arg value="-noContainment"/>
        	<arg value="-noUnsettable"/>
        	<arg value="src/main/resources/AlertsSources.wsdl"/>
     	
            <classpath>
                <pathelement path="target/classes"/>
            	<pathelement location="../../lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </java>   
    	
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator"
              fork="true">
        	<arg value="-targetDirectory"/>
        	<arg value="target/sdo-source"/>
        	<arg value="-javaPackage"/>
        	<arg value="org.apache.tuscany.sca.demos.aggregator.types"/>
        	<arg value="-schemaNamespace"/>
        	<arg value="http://tuscany.apache.org/sca/demos/aggregator/types"/>
        	<arg value="-noNotification"/>
        	<arg value="-noContainment"/>
        	<arg value="-noUnsettable"/>
        	<arg value="src/main/resources/Alerts.xsd"/>
     	
            <classpath>
                <pathelement path="target/sdo-source"/>
            	<pathelement location="../../lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </java>     	
    </target>
	
    <target name="compile" depends="generate">
        <javac srcdir="target/sdo-source"
               destdir="target/classes"
               debug="on"
               source="1.5"
               target="1.5">
            <classpath>
            	<pathelement path="target/classes"/>
            	<pathelement location="../../lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </javac>
        <javac srcdir="src/main/java"
               destdir="target/classes"
               debug="on"
               source="1.5"
               target="1.5">
            <classpath>
            	<pathelement path="target/classes"/>
            	<pathelement location="../../lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </javac> 
        <copy todir="target/classes">
            <fileset dir="src/main/resources"/>
        </copy>
    </target>	
	
    <target name="package" depends="compile">
        <ant antfile="./build-dojo.xml" target="install-dojo-nomaven">
          <property name="localRepository" value="${settings.localRepository}"/>
        </ant>
        
        <ant antfile="./build-dojo.xml" target="unpack-dojo-files-nomaven">
          <property name="localRepository" value="${settings.localRepository}"/>
          <property name="artifactId" value="${artifactId}"/>
        </ant>   

        <war destfile="target/demo-alert-aggregator-webapp.war" 
             webxml="src/main/webapp/WEB-INF/web.xml">
            <fileset dir="src/main/webapp"/>
            <lib refid="tuscany.jars"/>
            <lib refid="3rdparty.jars"/>
            <classes dir="target/classes"/>
        </war>

        <ant antfile="./build-dojo.xml" target="clean-dojo-files">
          <property name="localRepository" value="${settings.localRepository}"/>
          <property name="artifactId" value="${artifactId}"/>
        </ant> 
     </target>
		
    <target name="clean">
        <delete dir="target" includeemptydirs="true"/>
    </target>
</project>
