<project name="Struts Web Applications" default="compile" basedir=".">


<!--
        This is a build file that creates all of the web applications included
        in a Struts distribution, using the generic "build-webapp.xml" script
        for the details
-->


<!-- ========== Prerequisite Properties =================================== -->


<!--
        These properties MUST be set on the "ant" command line, the "antrc"
        properties file in your home directory, or from settings in a superior
        build.xml script.

        build.home                    Base directory into which we are building
                                      the Struts components.

        compile.classpath             If specified, contains a set of JAR files
                                      and/or directories to be added to the
                                      compilation classpath.

        servlet.jar                   The pathname of the servlet API classes
                                      that you wish to compile against.

        struts.libs                   The directory containing struts.jar and
                                      the associated TLD files.

        webapp.libs                   If specified, must be the pathname of a
                                      directory from which all available
                                      "*.jar" files are copied to the web
                                      application's WEB-INF/lib directory.
-->

<property name="build.home"           value="${basedir}/target"/>
<property name="servlet.jar"          value="../jakarta-servletapi/lib/servlet.jar"/>
<property name="struts.libs"          value="${build.home}/library"/>



<!-- ========== Initialization Properties ================================= -->


<!--
        These property values may optionally be overridden with property
        settings from an "ant" command line, the "antrc" properties file
        in your home directory, or from settings in a superior build.xml
        script.
-->


<!-- Should Java compilations set the debug compiler option? -->
<property name="compile.debug"         value="true" />

<!-- Should Java compilations set the deprecation compiler option? -->
<property name="compile.deprecation"   value="false" />

<!-- Should Java compilations set the optimize compiler option? -->
<property name="compile.optimize"      value="true" />

<!-- The base directory for distribution targets -->
<property name="dist.home"             value="${basedir}/dist" />

<!-- The directory into which Struts JAR and TLD files have been created -->
<property name="struts.home"           value="${build.home}/library" />

<!-- Directory where core struts library configurations files are stored -->
<property name="conf.share.dir" value="${basedir}/conf/share"/>

<!-- Doc directory -->
<property name="doc.dir" value="doc"/>


<!-- ========== Executable Targets ======================================== -->


<!--
        The "static.generic" target causes the "static" target of each
        individual web application to be executed.
-->
<target name="static.generic">
  <ant  antfile="build-webapp.xml"    target="static">
    <property name="webapp.name"      value="blank"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="static">
    <property name="webapp.name"      value="documentation"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="static">
    <property name="webapp.name"      value="example"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="static">
    <property name="webapp.name"      value="examples"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="static">
    <property name="webapp.name"      value="tiles-documentation"/>
  </ant>
    <!--ant  antfile="build-webapp.xml"    target="static">
      <property name="webapp.name"      value="test"/>
    </ant-->
</target>


<!--
        The "static" target causes non-generic static activity required
        for specific tag libraries to be executed.
-->
<target name="static" depends="static.generic"
        description="Copy static resources for individual web applications">
    <!-- Copy DTDs for Struts constructs -->
    <copy  todir="${build.home}/documentation/dtds">
      <fileset dir="${conf.share.dir}" includes="**/*.dtd"/>
    </copy>
    <!-- Copy required image for the Struts example application -->
    <copy tofile="${build.home}/example/struts-power.gif"
            file="${doc.dir}/images/struts-power.gif"/>
    <!-- Copy validator-rules.xml for the Struts example application -->
    <copy tofile="${build.home}/example/WEB-INF/validator-rules.xml"
            file="${basedir}/conf/share/validator-rules.xml"/>
    <!-- Copy validator-rules.xml for the Struts blank application -->
    <copy tofile="${build.home}/blank/WEB-INF/validator-rules.xml"
            file="${basedir}/conf/share/validator-rules.xml"/>
    <!-- Copy validator-rules.xml for the Struts examples application -->
    <copy tofile="${build.home}/examples/WEB-INF/validator-rules.xml"
            file="${basedir}/conf/share/validator-rules.xml"/>
     <!-- Copy required image for the Struts examples exercise module -->
    <copy tofile="${build.home}/examples/exercise/struts-power.gif"
            file="${doc.dir}/images/struts-power.gif"/>
     <!-- Copy required image for the Struts examples validator module -->
    <copy tofile="${build.home}/examples/validator/struts-power.gif"
            file="${doc.dir}/images/struts-power.gif"/>
    <copy todir="${build.home}/blank/WEB-INF/classes"
            file="${basedir}/web/blank/WEB-INF/src/java/MessageResources.properties"/>
</target>


<!--
        The "compile.generic" target causes the "compile" target of each
        individual web application to be executed.
-->
<target name="compile.generic">
  <ant  antfile="build-webapp.xml"    target="compile">
    <property name="webapp.name"      value="blank"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="compile">
    <property name="webapp.name"      value="documentation"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="compile">
    <property name="webapp.name"      value="example"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="compile">
    <property name="webapp.name"      value="examples"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="compile">
    <property name="webapp.name"      value="tiles-documentation"/>
  </ant>
    <!--ant  antfile="build-webapp.xml"    target="compile">
      <property name="webapp.name"      value="test"/>
    </ant-->
</target>


<!--
        The "compile" target causes non-generic compile activity required
        for specific tag libraries to be executed.
-->
<target name="compile" depends="compile.generic,compile.docs, validate.docs"
        description="Compile individual web applications">

    <!-- Create the Tiles documentation -->
    <style   basedir="${doc.dir}/tiles"
             destdir="${build.home}/tiles-documentation"
           extension=".html" style="${doc.dir}/stylesheets/struts.xsl"
            includes="*.xml"
            excludes="project.xml">
      <param name="relative-path" expression="."/>
      <param name="project-path" expression="../tiles/project.xml"/>
    </style>            

    <!-- Copy the tiles documentation files -->
    <copy      todir="${build.home}/tiles-documentation">
      <fileset   dir="${doc.dir}">
        <include name="*.css"/>
        <include name="images/*.gif"/>
        <include name="images/*.jpg"/>
      </fileset>
    </copy>

    <!-- Validate tiles docs -->
    <xmlvalidate warn="yes" failonerror="yes" lenient="no">
       <fileset dir="${build.home}/tiles-documentation" includes="**/*.html"/>

      <!-- Reference local DTDS to avoid network lookup -->
      <dtd publicId="-//W3C//DTD XHTML 1.0 Strict//EN"
       location="${doc.dir}/dtds/xhtml1-strict.dtd"/>
      <dtd publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
       location="${doc.dir}/dtds/xhtml1-transitional.dtd"/>

   </xmlvalidate>
    
</target>


<!--
        The "compile.docs" target transforms the documentation using XSLT
-->
<target name="compile.docs" 
        description="Perform XSLT transformations">
    <!-- Create the taglib documentation -->
    <style   basedir="${doc.dir}" destdir="${build.home}/documentation"
           extension=".html" style="${doc.dir}/stylesheets/struts.xsl"
            includes="*.xml"
            excludes="project.xml"
            reloadstylesheet="true">
      <param name="relative-path" expression="."/>
    </style>            
    <!-- Create the FAQs -->
    <style   basedir="${doc.dir}/faqs"
             destdir="${build.home}/documentation/faqs"
           extension=".html" style="${doc.dir}/stylesheets/struts.xsl"
            includes="*.xml"
            excludes="project.xml"
            reloadstylesheet="true">
      <param name="project-path" expression="../faqs/project.xml"/>
    </style>            
    <!-- Create the proposals -->
    <style   basedir="${doc.dir}/proposals"
             destdir="${build.home}/documentation/proposals"
           extension=".html" style="${doc.dir}/stylesheets/struts.xsl"
            includes="*.xml"
            excludes="project.xml"
            reloadstylesheet="true">
      <param name="project-path" expression="../proposals/project.xml"/>
    </style>            
    <!-- Create the user guide -->
    <style   basedir="${doc.dir}/userGuide"
             destdir="${build.home}/documentation/userGuide"
           extension=".html" style="${doc.dir}/stylesheets/struts.xsl"
            includes="*.xml"
            excludes="project.xml"
            reloadstylesheet="true">
      <param name="project-path" expression="../userGuide/project.xml"/>
    </style>  

    <!-- Copy the basic documentation files -->
    <copy      todir="${build.home}/documentation">
      <fileset   dir="${doc.dir}">
        <include name="**/*.cgi"/>
        <include name="**/*.css"/>
        <include name="**/*.gif"/>
        <include name="**/*.html"/>
        <include name="**/*.jpg"/>
        <include name="**/*.js"/>
      </fileset>
    </copy>
    <!-- Copy the basic user guide files -->
    <copy      todir="${build.home}/documentation/userGuide">
      <fileset   dir="${doc.dir}/userGuide">
        <include name="**/*.css"/>
        <include name="**/*.gif"/>
        <include name="**/*.html"/>
        <include name="**/*.jpg"/>
        <include name="**/*.js"/>
      </fileset>
    </copy>
    <!-- Copy the proposal files -->
    <copy      todir="${build.home}/documentation/proposals">
      <fileset   dir="${doc.dir}/proposals">
        <include name="**/*.css"/>
        <include name="**/*.gif"/>
        <include name="**/*.html"/>
        <include name="**/*.jpg"/>
        <include name="**/*.js"/>
      </fileset>
    </copy>
    <!-- Copy the FAQ files -->
    <copy      todir="${build.home}/documentation/faqs">
      <fileset   dir="${doc.dir}/faqs">
        <include name="**/*.zip"/>
      </fileset>
    </copy>

</target>


<!--
        The "validate.docs" target validates the generated XHTML 
        documentation against the DTDs
-->
<target name="validate.docs" description="Validate generated XHTML documents">
    <xmlvalidate warn="yes" failonerror="yes" lenient="no">
       <fileset dir="${build.home}/documentation">
        <include name="**/*.html"/>
        <exclude name="download.html"/>
        <exclude name="api/**"/>
      </fileset>
       
      <!-- Reference local DTDS to avoid network lookup -->
      <dtd publicId="-//W3C//DTD XHTML 1.0 Strict//EN"
       location="${doc.dir}/dtds/xhtml1-strict.dtd"/>
      <dtd publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
       location="${doc.dir}/dtds/xhtml1-transitional.dtd"/>

   </xmlvalidate>
</target>


<!--
        The "dist.generic" target causes the "dist" target of each
        individual web application to be executed.
-->
<target name="dist.generic">
  <ant  antfile="build-webapp.xml"    target="dist">
    <property name="webapp.name"      value="blank"/>
    <property name="webapp.war"       value="struts-blank.war"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="dist">
    <property name="webapp.name"      value="documentation"/>
    <property name="webapp.war"       value="struts-documentation.war"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="dist">
    <property name="webapp.name"      value="example"/>
    <property name="webapp.war"       value="struts-mailreader.war"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="dist">
    <property name="webapp.name"      value="examples"/>
    <property name="webapp.war"       value="struts-examples.war"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="dist">
    <property name="webapp.name"      value="tiles-documentation"/>
    <property name="webapp.war"       value="tiles-documentation.war"/>
  </ant>
    <!--ant  antfile="build-webapp.xml"    target="dist">
      <property name="webapp.name"      value="test"/>
      <property name="webapp.war"       value="struts-test.war"/>
    </ant-->
</target>


<!--
        The "dist" target causes non-generic dist activity required
        for specific tag libraries to be executed.
-->
<target name="dist" depends="dist.generic"
        description="Create distribution output of web applications">
        
    <!-- Compile Tiles dist -->
<!--
    <ant  antFile="build.xml"  dir="contrib/tiles"  target="dist.for.struts">
      <property name="struts.home"      value="${struts.home}"/>
      <property name="struts.libs"      value="${struts.libs}"/>
      <property name="build.home"       value="${build.home}/tiles"/>
      <property name="dist.home"        value="${dist.home}"/>
      <property name="app.name"         value="tiles"/>
      <property name="project.name"     value="Tiles"/>
    </ant>
-->

</target>


<!--
        The "clean.generic" target causes the "clean" target of each
        individual web application to be executed.
-->
<target name="clean.generic">
  <ant  antfile="build-webapp.xml"    target="clean">
    <property name="webapp.name"      value="blank"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="clean">
    <property name="webapp.name"      value="documentation"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="clean">
    <property name="webapp.name"      value="example"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="clean">
    <property name="webapp.name"      value="examples"/>
  </ant>
  <ant  antfile="build-webapp.xml"    target="clean">
    <property name="webapp.name"      value="tiles-documentation"/>
  </ant>
    <!--ant  antfile="build-webapp.xml"    target="clean">
      <property name="webapp.name"      value="test"/>
    </ant-->
</target>


<!--
        The "clean" target causes non-generic clean activity required
        for specific tag libraries to be executed.
-->
<target name="clean" depends="clean.generic"
        description="Clean output for individual web applications">
</target>


</project>
