<?xml version="1.0"?>
<!--
  ~ 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="samples-spring" default="package">

    <property name="root.base.dir" value="../.."/>
    <property name="module.name" value="samples-spring"/>
    <import file="${root.base.dir}/common.ant.xml"/>
    <property name="dist.jarName" value="${project.name}-${module.name}-${version}"/>
    <property name="dist.jar" value="${dist.dir}/samples/${dist.jarName}.jar"/>
    <property name="dist.warName" value="${project.name}-${module.name}-${version}"/>
    <property name="dist.war" value="${dist.dir}/samples/${dist.warName}.war"/>

    <path id="compile.path">
        <fileset dir="${lib.dir}/samples">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${dist.dir}/modules">
            <include name="${project.name}-core-${version}.jar"/>
            <include name="${project.name}-web-${version}.jar"/>
        </fileset>
    </path>

    <!-- ===================================================================
         clean - clean all build remnants from this submodule
         ==================================================================== -->
    <target name="clean-deploy-dir" description="Removes the deployed war directory">
        <echo message="cleaning ${dist.warName} module from ${deploy.dir}"/>
        <delete file="${deploy.dir}/${dist.warName}.war"/>
        <delete dir="${deploy.dir}/${dist.warName}"/>
    </target>
    <target name="clean" depends="clean-deploy-dir" description="Cleans the Spring sample webapp build">
        <echo message="cleaning ${module.name} module"/>
        <delete file="${dist.jar}"/>
        <delete file="${dist.war}"/>
        <delete dir="${build.dir}"/>
    </target>

    <target name="grabLogo" description="Ensures the Apache Ki logo is available to the jar task for inclusion in the jar">
        <copy todir="${classes.dir}">
            <fileset dir="webroot">
                <include name="logo.png"/>
            </fileset>
        </copy>
    </target>

    <target name="compile" depends="compile.src"/> <!-- no test classes, no need to depend on compile.test -->


    <target name="jar" depends="compile,grabLogo,jar.jdk15,jar.retroweaver"
            description="Creates a .jar of the Spring sample app classes"/>

    <target name="war">
        <property name="webstart.lib.dir" value="${build.dir}/webstart"/>
        <mkdir dir="${webstart.lib.dir}"/>
        <copy todir="${webstart.lib.dir}" preservelastmodified="true" flatten="true">
            <fileset dir="${dist.dir}" includes="${dist.jarName}.jar"/>
            <fileset dir="${dist.dir}" includes="${project.name}-${version}.jar"/>
            <fileset dir="${lib.dir}/samples" includes="spring-*.jar" excludes="spring-webmvc-*.jar"/>
            <fileset dir="${lib.dir}/samples" includes="commons-*.jar"/>
        </copy>
        <signjar keystore="${etc.dir}/jsecurity-sample.jks"
                 alias="jsecurity"
                 keypass="jsecurity"
                 storepass="jsecurity">
            <fileset dir="${webstart.lib.dir}" includes="*.jar"/>
        </signjar>

        <war warfile="${dist.war}" webxml="webroot/WEB-INF/web.xml">
            <lib dir="${lib.dir}/samples">
                <exclude name="servlet-api-*.jar"/>
            </lib>
            <lib dir="${lib.dir}/samples" includes="*.jar" excludes="servlet-api-*.jar"/>
            <lib dir="${root.dist.dir}" includes="${project.name}-${version}.jar"/>
            <webinf dir="${basedir}" includes="resources/**"/>
            <fileset dir="webroot" includes="**" excludes="**/web.xml"/>

            <lib dir="${dist.dir}" includes="*.jar"/>

            <!-- Jar for webstart application -->
            <fileset dir="${webstart.lib.dir}" includes="*.jar"/>
        </war>

    </target>

    <target name="package" depends="jar,war"/>

    <target name="quick-deploy" description="Blindly deploys the sample Spring .war to Tomcat">
        <echo>Deploying application to Tomcat...</echo>
        <unzip src="${dist.war}" dest="${env.CATALINA_HOME}/webapps/${project.name}-${module.name}"/>
        <touch file="${env.CATALINA_HOME}/webapps/${project.name}-${module.name}/WEB-INF/web.xml"/>
    </target>

    <target name="deploy" depends="package,quick-deploy"
            description="Creates and deploys the sample Spring .war to Tomcat"/>


</project>
