<project name="samples-common">
  <property name="gwt.root" location="../.." />
  <property name="project.tail" value="samples/${sample.root}" />
  <import file="${gwt.root}/common.ant.xml" />

  <!--
    Number of localworkers for sample compilation.  This depends on your
    hardware, so it's a good candidate to specify in local.ant.properties
    if this default isn't good for you.  Ideally, it should approximate
    the number of CPU cores in your machine.
  -->
  <property name="gwt.samples.localworkers" value="2" />

  <property name="sample.lower" value="${sample.root}" />
  <property name="sample.upper" value="${sample.module}" />

  <property.ensure name="gwt.user.jar" location="${gwt.build.lib}/gwt-user.jar" />
  <property.ensure name="gwt.dev.jar" location="${gwt.build.lib}/gwt-dev.jar" />
  <property.ensure name="gwt.codeserver.jar" location="${gwt.build.lib}/gwt-codeserver.jar" />

  <!-- Mirror directory for scripts; makes building distro easier -->
  <property name="samples.scripts" value="${gwt.build.out}/samples-scripts" />
  <!-- Use the uppercase name rather than the lowercase name -->
  <property name="sample.build" value="${gwt.build.out}/samples/${sample.upper}" />

  <path id="gae.extraclasspath">
    <pathelement location="${gwt.tools.lib}/appengine/appengine-api-1.0-sdk-1.3.4.jar"/>
    <pathelement location="${gwt.tools.lib}/appengine/geronimo-jpa_3.0_spec-1.1.1.jar"/>
    <pathelement location="${gwt.tools.lib}/appengine/datanucleus-appengine-1.0.7.final.jar"/>
  </path>

  <!-- The libraries required by the server that will be copied into WEB-INF/lib. -->
  <fileset id="sample.server.libs" dir="${gwt.tools.lib}">
    <include name="" />
  </fileset>

  <target name="source" description="Copy source to the output folder">
    <mkdir dir="${sample.build}/src" />
    <copy todir="${sample.build}/src">
      <fileset dir="src" />
    </copy>
    <if>
      <available file="war" type="dir" />
      <then>
        <mkdir dir="${sample.build}/war" />
        <copy todir="${sample.build}/war">
          <fileset dir="war" excludes="WEB-INF/classes/**"/>
        </copy>
      </then>
    </if>
    <if>
      <available file="pom.xml"/>
      <then>
        <copy tofile="${sample.build}/pom.xml" file="pom.xml"/>
      </then>
    </if>
    <if>
      <available file="README-MAVEN.txt"/>
      <then>
        <copy tofile="${sample.build}/README-MAVEN.txt" file="README-MAVEN.txt"/>
      </then>
    </if>
    <if>
      <available file="README.txt"/>
      <then>
        <copy tofile="${sample.build}/README.txt" file="README.txt"/>
      </then>
    </if>
    <if>
      <available file="user-build.xml"/>
      <then>
        <copy tofile="${sample.build}/build.xml" file="user-build.xml"/>
      </then>
    </if>
    <if>
      <available file="user-project"/>
      <then>
        <copy tofile="${sample.build}/.project" file="user-project"/>
      </then>
    </if>
    <if>
      <available file="user-classpath"/>
      <then>
        <copy tofile="${sample.build}/.classpath" file="user-classpath"/>
      </then>
    </if>
    <if>
      <available file="user-settings"/>
      <then>
        <copy todir="${sample.build}/.settings">
          <fileset dir="user-settings"/>
        </copy>
      </then>
    </if>
  </target>

  <target name="serverlibs" description="Copy server libs to the output folder">
    <mkdir dir="${sample.build}/war/WEB-INF/lib" />
    <copy todir="${sample.build}/war/WEB-INF/lib/" flatten="true">
      <fileset refid="sample.server.libs" />
    </copy>
  </target>

  <target name="compile" description="Compile all java files">
    <mkdir dir="${sample.build}/war/WEB-INF/classes" />
    <gwt.javac destdir="${sample.build}/war/WEB-INF/classes"
               excludes="**/super/**">
      <classpath>
        <pathelement location="${gwt.user.jar}" />
        <pathelement location="${gwt.dev.jar}" />
        <path refid="sample.extraclasspath" />
        <path refid="gae.extraclasspath" />
      </classpath>
    </gwt.javac>
  </target>

  <target name="gwtc" description="Compile to JavaScript">
    <outofdate>
      <sourcefiles>
        <fileset dir="${sample.path}" />
        <fileset dir="${sample.build}/war/WEB-INF/classes" />
        <fileset file="${gwt.user.jar}" />
        <fileset file="${gwt.dev.jar}" />
        <path refid="sample.extraclasspath" />
      </sourcefiles>
      <targetfiles path="${sample.build}/war/${sample.lower}/${sample.lower}.nocache.js" />
      <sequential>
        <mkdir dir="${sample.build}/war" />
        <java dir="${sample.build}" classname="com.google.gwt.dev.Compiler"
            fork="yes" failonerror="true">
          <classpath>
            <pathelement path="${sample.path}" />
            <path refid="sample.extraclasspath" />
            <pathelement location="${sample.build}/war/WEB-INF/classes" />
            <pathelement location="${gwt.user.jar}" />
            <pathelement location="${gwt.dev.jar}" />
            <pathelement location="${gwt.tools.lib}/javax/validation/validation-api-1.0.0.GA.jar" />
            <pathelement location="${gwt.tools.lib}/javax/validation/validation-api-1.0.0.GA-sources.jar" />
          </classpath>
          <jvmarg value="-Xmx384M" />
          <arg value="-localWorkers" />
          <arg value="${gwt.samples.localworkers}" />
          <arg value="-war" />
          <arg file="${sample.build}/war" />
          <arg value="com.google.gwt.sample.${sample.lower}.${sample.upper}" />
        </java>
        <length property="sample.size">
          <fileset dir="${sample.build}/war/${sample.lower}" includes="*.cache.html,*.cache.js"/>
        </length>
        <echo message="output size for ${sample.upper} is ${sample.size} bytes"/>
      </sequential>
    </outofdate>
  </target>

  <macrodef name="webAppCreator">
    <attribute name="platform" />
    <attribute name="extension" default="" />
    <sequential>
      <outofdate>
        <sourcefiles />
        <targetfiles>
          <pathelement location="${samples.scripts}/${sample.upper}/build.xml" />
        </targetfiles>
        <sequential>
          <mkdir dir="${samples.scripts}/${sample.upper}" />
          <java classname="com.google.gwt.user.tools.WebAppCreator" classpath="${gwt.user.jar}:${gwt.dev.jar}" failonerror="true">
            <!-- Relative path is important! Paths will be relative in final distro -->
            <sysproperty key="gwt.devjar" value="../../gwt-dev.jar" />
            <arg value="-XnoEclipse" />
            <arg value="-overwrite" />
            <arg value="-out" />
            <arg file="${samples.scripts}/${sample.upper}" />
            <arg value="com.google.gwt.sample.${sample.lower}.${sample.upper}" />
          </java>
        </sequential>
      </outofdate>
    </sequential>
  </macrodef>

  <target name="scripts" description="Create launch scripts">
    <webAppCreator platform="linux" />
    <webAppCreator platform="windows" extension=".cmd" />
    <webAppCreator platform="mac" />
  </target>

  <target name="build" depends="source, serverlibs, compile, gwtc, scripts" description="Build and package this project" />

  <target name="checkstyle" description="Static analysis of source">
    <gwt.checkstyle outputdirectory="${sample.build}">
      <fileset dir="src" >
        <!-- ValidationMessages is generated and has funny method names -->
        <exclude name="main/java/com/google/gwt/sample/validation*/**/ValidationMessages.java" />
      </fileset>
    </gwt.checkstyle>
  </target>

  <target name="clean" description="Cleans this project's intermediate and output files">
    <delete dir="${sample.build}" />
    <delete includeemptydirs="true">
      <fileset dir="${samples.scripts}">
        <include name="*/${sample.upper}/**" />
      </fileset>
    </delete>
  </target>
</project>
