<?xml version="1.0" encoding="UTF-8"?>

<!-- ====================================================================== -->
<!-- Ant build file (http://ant.apache.org/) for Ant 1.6.2 or above.        -->
<!-- ====================================================================== -->

<project name="generate-wadl-with-ant" default="package" basedir=".">

  <!-- ====================================================================== -->
  <!-- Import maven-build.xml into the current project                        -->
  <!-- ====================================================================== -->

  <import file="maven-build.xml"/>
    
  <!-- task definitions -->
    
  <!-- this would be the simple version of the task definition for generatewadl -->
  <!--taskdef name="generatewadl" classname="com.sun.jersey.wadl.GenerateWadlTask">
      <classpath>
        <fileset dir="${maven.repo.local}">
          <include name="com/sun/jersey/contribs/ant-wadl-task/${jersey-release-version}/ant-wadl-task-${jersey-release-version}.jar"/>
          <include name="com/sun/jersey/jersey-server/${jersey-release-version}/jersey-server-${jersey-release-version}.jar"/>
          <include name="com/sun/jersey/jersey-core/${jersey-release-version}/jersey-core-${jersey-release-version}.jar"/>
          <include name="javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
          <include name="xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar"/>
          <include name="asm/asm/3.1/asm-3.1.jar"/>
        </fileset>
      </classpath>
  </taskdef-->
    
  <!--
    however, we want to support both java 1.5 and java 1.6 and have to cope with jaxb,
    therefore we define the generatewadl task with a classpath depending on the java version
  -->
  <target name="_define-generatewadl-task" depends="_define-if-task, get-jaxb-deps" unless="generatewadl-task-defined">
      <if>
          <equals arg1="${ant.java.version}" arg2="1.5" />
          <then>
              <taskdef name="generatewadl" classname="com.sun.jersey.wadl.GenerateWadlTask">
                  <classpath>
                    <fileset dir="${maven.repo.local}">
                      <include name="com/sun/jersey/contribs/ant-wadl-task/${jersey-release-version}/ant-wadl-task-${jersey-release-version}.jar"/>
                      <include name="com/sun/jersey/jersey-server/${jersey-release-version}/jersey-server-${jersey-release-version}.jar"/>
                      <include name="com/sun/jersey/jersey-core/${jersey-release-version}/jersey-core-${jersey-release-version}.jar"/>
                      <include name="javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
                      <include name="xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar"/>
                      <include name="asm/asm/3.1/asm-3.1.jar"/>
                      <include name="javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" />
                    </fileset>
                  </classpath>
              </taskdef>
          </then>
          <else>
              <taskdef name="generatewadl" classname="com.sun.jersey.wadl.GenerateWadlTask">
                  <classpath>
                    <fileset dir="${maven.repo.local}">
                      <include name="com/sun/jersey/contribs/ant-wadl-task/${jersey-release-version}/ant-wadl-task-${jersey-release-version}.jar"/>
                      <include name="com/sun/jersey/jersey-server/${jersey-release-version}/jersey-server-${jersey-release-version}.jar"/>
                      <include name="com/sun/jersey/jersey-core/${jersey-release-version}/jersey-core-${jersey-release-version}.jar"/>
                      <include name="javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
                      <include name="xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar"/>
                      <include name="asm/asm/3.1/asm-3.1.jar"/>
                    </fileset>
                  </classpath>
              </taskdef>
          </else>
      </if>
      <property name="generatewadl-task-defined" value="true" />
  </target>

  <!-- if Task -->
  <target name="_define-if-task" unless="if-task-defined">
      <mkdir dir="${maven.repo.local}/ant-contrib/ant-contrib/1.0b3/"/>
      <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar" 
          dest="${maven.repo.local}/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar" 
          usetimestamp="true" 
          ignoreerrors="true"/>
      <taskdef resource="net/sf/antcontrib/antcontrib.properties">
        <classpath>
          <pathelement location="${maven.repo.local}/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar"/>
        </classpath>
      </taskdef>
      <property name="if-task-defined" value="true" />
  </target>
    
    <!-- jaxb-dependencies for java 1.5 -->
    <target name="get-jaxb-deps" depends="_define-if-task" unless="jaxb-deps-pulled">
        <if>
            <equals arg1="${ant.java.version}" arg2="1.5" />
            <then>
                <!-- jaxb-api -->
                <mkdir dir="${maven.repo.local}/javax/xml/bind/jaxb-api/2.1"/>
                <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" 
                    dest="${maven.repo.local}/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" 
                    usetimestamp="true" 
                    ignoreerrors="true"/>
                <!-- activation (required by jaxb-api) -->
                <mkdir dir="${maven.repo.local}/javax/activation/activation/1.1"/>
                <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/javax/activation/activation/1.1/activation-1.1.jar" 
                    dest="${maven.repo.local}/javax/activation/activation/1.1/activation-1.1.jar" 
                    usetimestamp="true" 
                    ignoreerrors="true"/>
                <!-- jaxb-impl -->
                <mkdir dir="${maven.repo.local}/com/sun/xml/bind/jaxb-impl/2.1.9"/>
                <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar" 
                     dest="${maven.repo.local}/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar" 
                     usetimestamp="true" 
                     ignoreerrors="true"/>
            </then>
        </if>
        <property name="jaxb-deps-pulled" value="true" />
    </target>
    
    <!-- xjc Task -->
    <target name="_define-xjc-task" depends="_define-if-task, get-jaxb-deps" unless="xjc-task-defined">
        <mkdir dir="${maven.repo.local}/com/sun/xml/bind/jaxb-xjc/2.1.9"/>
        <get src="http://mirrors.ibiblio.org/pub/mirrors/maven2/com/sun/xml/bind/jaxb-xjc/2.1.9/jaxb-xjc-2.1.9.jar" 
             dest="${maven.repo.local}/com/sun/xml/bind/jaxb-xjc/2.1.9/jaxb-xjc-2.1.9.jar" 
             usetimestamp="true" 
             ignoreerrors="true"/>
        
        <if>
            <equals arg1="${ant.java.version}" arg2="1.5" />
            <then>
                <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
                    <classpath>
                        <filelist>
                            <file name="${maven.repo.local}/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" />
                            <file name="${maven.repo.local}/javax/activation/activation/1.1/activation-1.1.jar" />
                            <file name="${maven.repo.local}/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar" />
                            <file name="${maven.repo.local}/com/sun/xml/bind/jaxb-xjc/2.1.9/jaxb-xjc-2.1.9.jar" />
                        </filelist>
                    </classpath>
                </taskdef>
            </then>
            <else>
                <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
                    <classpath>
                        <filelist>
                            <file name="${maven.repo.local}/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar" />
                            <file name="${maven.repo.local}/com/sun/xml/bind/jaxb-xjc/2.1.9/jaxb-xjc-2.1.9.jar" />
                        </filelist>
                    </classpath>
                </taskdef>
            </else>
        </if>
        <property name="xjc-task-defined" value="true" />
    </target>
    
    <target name="_fix-build.classpath" depends="_define-if-task, get-jaxb-deps">
        <!-- For java 1.5 extend the build.classpath with jaxb-api -->
        <if>
            <equals arg1="${ant.java.version}" arg2="1.5" />
            <then>
                <mkdir dir="${maven.repo.local}/com/sun/net/httpserver/http/20070405"/>
                <get src="http://download.java.net/maven/2/com/sun/net/httpserver/http/20070405/http-20070405.jar" 
                     dest="${maven.repo.local}/com/sun/net/httpserver/http/20070405/http-20070405.jar" 
                     usetimestamp="true" 
                     ignoreerrors="true"/>
                <path id="build.classpath.fixed">
                    <path refid="build.classpath"/>
                    <filelist>
                        <file name="${maven.repo.local}/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" />
                        <file name="${maven.repo.local}/javax/activation/activation/1.1/activation-1.1.jar" />
                        <file name="${maven.repo.local}/com/sun/xml/bind/jaxb-impl/2.1.9/jaxb-impl-2.1.9.jar" />
                        <file name="${maven.repo.local}/com/sun/net/httpserver/http/20070405/http-20070405.jar" />
                    </filelist>
                </path>
            </then>
            <else>
                <path id="build.classpath.fixed">
                    <path refid="build.classpath"/>
                </path>
            </else>
        </if>
    </target>
    
  <target name="generate-sources" depends="_define-xjc-task" description="Generate jaxb java beans from schema">
      <mkdir dir="${maven.build.srcDir.generated.xjc}"/>
      <xjc destdir="${maven.build.srcDir.generated.xjc}" package="com.sun.jersey.samples.generatewadl.model">
          <schema dir="src/main/xsd" includes="*.xsd" />
      </xjc>
  </target>

    <target name="compile" depends="get-deps, generate-sources, _fix-build.classpath" description="Compile the code">
      <mkdir dir="${maven.build.outputDir}"/>
      <javac destdir="${maven.build.outputDir}" 
             nowarn="false" 
             debug="true" 
             optimize="false" 
             deprecation="true" 
             target="1.5" 
             verbose="false" 
             fork="false" 
             source="1.5">
        <src>
          <pathelement location="${maven.build.srcDir.0}"/>
          <pathelement location="${maven.build.srcDir.generated.xjc}"/>
        </src>
        <classpath refid="build.classpath.fixed"/>
      </javac>
    </target>
    
  <target name="resourcedoc" depends="compile, _define-if-task, _fix-build.classpath" description="Generate the resourcedoc file">
      <if>
          <equals arg1="${ant.java.version}" arg2="1.5" />
          <then>
              <javadoc access="public">
                  <classpath>
                      <path refid="build.classpath.fixed" />
                      <pathelement location="${maven.build.outputDir}" />
                  </classpath>
                  <fileset dir="${maven.build.srcDir.0}" defaultexcludes="yes">
                      <include name="**/*Resource.java" />
                  </fileset>
                  <doclet name="com.sun.jersey.wadl.resourcedoc.ResourceDoclet">
                      <path>
                          <fileset dir="${maven.repo.local}">
                            <include name="com/sun/jersey/contribs/wadl-resourcedoc-doclet/${jersey-release-version}/wadl-resourcedoc-doclet-${jersey-release-version}.jar"/>
                            <include name="com/sun/jersey/jersey-server/${jersey-release-version}/jersey-server-${jersey-release-version}.jar"/>
                            <include name="com/sun/jersey/jersey-core/${jersey-release-version}/jersey-core-${jersey-release-version}.jar"/>
                            <include name="javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
                            <include name="xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar"/>
                            <include name="javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar" />
                          </fileset>
                      </path>
                      <param name="-output" value="${maven.build.dir}/resourcedoc.xml" />
                  </doclet>
              </javadoc>
          </then>
          <else>
              <javadoc access="public">
                  <classpath>
                      <path refid="build.classpath" />
                      <pathelement location="${maven.build.outputDir}" />
                  </classpath>
                  <fileset dir="${maven.build.srcDir.0}" defaultexcludes="yes">
                      <include name="**/*Resource.java" />
                  </fileset>
                  <doclet name="com.sun.jersey.wadl.resourcedoc.ResourceDoclet">
                      <path>
                          <fileset dir="${maven.repo.local}">
                            <include name="com/sun/jersey/contribs/wadl-resourcedoc-doclet/${jersey-release-version}/wadl-resourcedoc-doclet-${jersey-release-version}.jar"/>
                            <include name="com/sun/jersey/jersey-server/${jersey-release-version}/jersey-server-${jersey-release-version}.jar"/>
                            <include name="com/sun/jersey/jersey-core/${jersey-release-version}/jersey-core-${jersey-release-version}.jar"/>
                            <include name="javax/ws/rs/jsr311-api/1.0/jsr311-api-1.0.jar"/>
                            <include name="xerces/xercesImpl/2.6.1/xercesImpl-2.6.1.jar"/>
                          </fileset>
                      </path>
                      <param name="-output" value="${maven.build.dir}/resourcedoc.xml" />
                  </doclet>
              </javadoc>
           </else>
      </if>
  </target>
    
    <target name="wadl" depends="compile, resourcedoc, _fix-build.classpath, _define-generatewadl-task" description="Generate wadl doc">
       <mkdir dir="${maven.build.dir}" />
       <generatewadl wadlFile="${maven.build.dir}/application.wadl" formatWadlFile="true" baseUri="http://www.example.org"> 
           <classpath>
               <!-- have to add the path to your compiled resources as well! -->
               <pathelement location="${maven.build.outputDir}" />
               <path refid="build.classpath.fixed" />
           </classpath>
           <packages>
               <package name="com.sun.jersey.samples.generatewadl.resources" />
           </packages>
           <wadlGenerators>
               <wadlGeneratorDescription name="com.sun.jersey.server.wadl.generators.resourcedoc.WadlGeneratorResourceDocSupport">
                   <param name="resourceDocFile" value="${maven.build.dir}/resourcedoc.xml" />
               </wadlGeneratorDescription>
           </wadlGenerators>
       </generatewadl>
    </target>

    
  
  <!-- ====================================================================== -->
  <!-- Help target                                                            -->
  <!-- ====================================================================== -->

  <target name="help">
    <echo message="Please run: $ant -projecthelp, version: ${jersey-release-version}"/>
    <echo message="JVM OK - ${ant.java.version}"/>
  </target>

</project>
