You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2014/06/08 16:04:09 UTC

svn commit: r1601222 [2/5] - in /oodt/trunk/tools: ./ pdi_plugin/ pdi_plugin/build-res/ pdi_plugin/build/ pdi_plugin/dev-lib/ pdi_plugin/eclipse/ pdi_plugin/out/ pdi_plugin/package-res/ pdi_plugin/src/ pdi_plugin/src/org/ pdi_plugin/src/org/apache/ pdi...

Added: oodt/trunk/tools/pdi_plugin/build-res/subfloor.xml
URL: http://svn.apache.org/viewvc/oodt/trunk/tools/pdi_plugin/build-res/subfloor.xml?rev=1601222&view=auto
==============================================================================
--- oodt/trunk/tools/pdi_plugin/build-res/subfloor.xml (added)
+++ oodt/trunk/tools/pdi_plugin/build-res/subfloor.xml Sun Jun  8 14:04:07 2014
@@ -0,0 +1,2026 @@
+<!--===========================================================================
+Copyright (c) 2008-2009, Pentaho Engineering Team
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of the Pentaho Corporation nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY Pentaho Engineering Team ''AS IS'' AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+============================================================================-->
+<!--===========================================================================
+    == SUBFLOOR ==
+    
+    $Date: Wed Nov  6 16:13:57 UTC 2013 $
+    Project Home: https://github.com/pentaho/subfloor/
+    
+    This file contains the default implementation of the ant tasks to 
+    perform a build. This file should be included by the build.xml file 
+    for your particular project. That build file should redefine any task 
+    that is defined in subfloor.xml IF AND ONLY IF the function of the 
+    task needs to be customized.
+    
+    FORMATTING: 
+      ALIGNMENT: indent=2 spaces and wrap lines longer than 120 chars
+      NAMING: targets intended for execution by a user are named single-word
+              or hyphenated.  Internal targets use '.' notation.
+    
+    TO GET STARTED with your project, you will need this file in 
+          your project's root directory along with three additional files:
+          1. build.xml 
+          2. build.properties
+          3. ivy_settings.xml
+          4. ivy.xml
+          
+          Below are some templates:
+          
+      === build.xml
+    <project name="MyProject" basedir="." default="jar" xmlns:ivy="antlib:org.apache.ivy.ant" >
+      <description>
+        This build file is used to create the MyProject project and works with the subfloor.xml file.
+      </description>
+
+      <import file="subfloor.xml"/>
+    </project>
+  
+    === build.properties
+    project.revision=1.0-SNAPSHOT  #the version of your project.  This will appear in jar META-INF, dist artifact filenames and IVY revision metadata. 
+    ivy.artifact.id=my-project   #IVY metadata describing the name of the artifact
+    impl.title=My Project #English language version of your project name
+    
+============================================================================-->
+
+
+<project name="subfloor" basedir="." default="default" xmlns:ivy="antlib:org.apache.ivy.ant">
+  <description>
+-------------------------------------------------------------------------------
+     subfloor.xml provides tasks needed to perform a project build. 
+     It is typically not used directly but imported by each project's build.xml
+     file.  The build.xml file can override tasks when customization is required. 
+      
+MAIN TARGETS
+============
+  * clean / clean-all : 
+    remove all artifacts of the build, clean-all adds the removal
+    of any library or jar dependencies downloaded as part of the build
+    
+  * resolve :
+    download/refresh library or jar dependencies needed for the build (uses Apache IVY)
+    
+  * compile :
+    run javac on the project's source
+    
+  * jar :
+    creates a jar file
+    
+  * dist :
+    creates all project distributables
+    
+  * test :
+    runs JUnit tests from your project's test source
+    
+SPECIAL TARGETS
+============
+  * publish-local :
+    builds a jar for your project and registers it with the local artifact repository isolated 
+    to your machine at $HOME/.ivy2/local.  Further executions of the the resolve target by this
+    or other projects will find your published jar.
+    
+  * ivy-clean* :
+    this family of targets helps reset your IVY environment in the event that you are having
+    difficulty resolving dependencies
+    
+TYPICAL TARGET SEQUENCE
+============    
+  * clean-all resolve dist :
+    a good start to build all project distributables from scratch.  Note that jar dependencies
+    will not be downloaded unless you explicitly run the resolve target.  We made the resolution
+    and retrieval completely discretionary since there are many situations in which
+    you will not want to get or refresh dependencies, e.g. if you are offline with no Internet
+    access.  In such case, you could just run "dist" if the set of jars you already have are 
+    sufficient.
+    
+  </description>
+
+  <!-- Load the properties files in the proper order -->
+  <property file="override.properties"
+            description="Properties customized for your development environment belong in this file.  This file will never be checked into the SCM." />
+  <property file="build.properties"
+            description="Properties customized for your particular project belong in this file." />
+
+  <!-- =================================================================================
+       Property Defaults
+       Any of these properties can be overridden in either build.properties or override.properties
+       =================================================================================-->
+
+  <!-- Project meta properties -->
+  <property name="impl.vendor" value="Pentaho Corporation" description="Jar file metadata describing the jar's vendor" />
+  <property name="impl.productID"
+            value=""
+            description="Jar file metadata indicating the product ID (this is not the revision)" />
+
+  <!-- Compile properties -->
+  <property name="src.dir" value="${basedir}/src" description="Project source code directory" />
+  <property name="bin.dir" value="${basedir}/bin" description="Base directory for all non-dist build output" />
+  <property name="classes.dir"
+            value="${bin.dir}/classes"
+            description="Classes compiled from project source code are placed here" />
+  <property name="lib.dir"
+            value="${basedir}/lib"
+            description="Directory that hosts Jar files required to compile project source.  (IVY will populate this directory with required jars)" />
+  <property name="devlib.dir"
+            value="${basedir}/dev-lib"
+            description="Directory for developer to place development Jar files (not affected by clean targets)" />
+
+  <!-- Compiler properties (passed directly to javac ant target) -->
+  <property name="javac.debug"
+            value="true"
+            description="Indicates whether source should be compiled with debug information (passed to javac ant task)." />
+  <property name="javac.deprecation"
+            value="true"
+            description="Indicates whether source should be compiled with deprecation information" />
+  <property name="javac.source" value="6" description="Provide source compatibility with specified release" />
+  <property name="javac.target" value="6" description="Generate class files for specific VM version" />
+  <property name="javac.maxmemory" value="256M" description="Max memory alloted to java compile" />
+  <property name="javac.xlint" value="-Xlint:all" />
+
+  <!-- Third party Ant tasks and tools properties -->
+  <property name="subfloor.resources.dir"
+            value="${user.home}/.subfloor"
+            description="Base dir for runtime jars that are required exclusively by the build process" />
+  <property name="subfloor.tmp.dir"
+            value="${subfloor.resources.dir}/tmp"
+            description="Temporary space where files are prepared for installation" />
+  <property name="antcontrib.build.cache.dir"
+            value="${subfloor.resources.dir}/ant-contrib"
+            description="Directory where the Ant-Contrib jar (and dependencies) is placed after it is auto-downloaded by the build" />
+  <property name="svnant.use-javahl"
+            value="false"
+            description="Prefer JNI JavaHL binding over the command line client for native svn support" />
+  <property name="svnant.use-svnkit"
+            value="true"
+            description="Prefer SVNKit binding over the command line client for native svn support (defaults to true)" />
+  <property name="ivy.url"
+            value="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar"
+            description="The URL to the current release of Apache IVY" />
+	
+  <!-- Enunciate properties -->
+  <property name="enunciate.home" value="${basedir}/enunciate" />
+  <property name="enunciate.bin.dir" value="${bin.dir}/enunciate" />
+
+
+  <!-- Test properties -->
+  <property name="junit.base.dir" value="${basedir}" description="Directory in which the junit test VM will be invoked" />
+  <property name="testsrc.dir" value="${basedir}/test-src" description="Directory that hosts the test source files" />
+  <property name="testlib.dir"
+            value="${basedir}/test-lib"
+            description="Directory for jar files needed during unit testing" />
+  <property name="testbin.dir"
+            value="${bin.dir}/test"
+            description="Base directory for all compiler generated test output" />
+  <property name="testclasses.dir"
+            value="${testbin.dir}/classes"
+            description="Classes compiled from project test code are placed here" />
+  <property name="testreports.dir"
+            value="${bin.dir}/reports/test"
+            description="Base directory that holds all unit test report files" />
+  <property name="testreports.xml.dir"
+            value="${testreports.dir}/xml"
+            description="Unit test xml reports are placed here" />
+  <property name="testreports.html.dir"
+            value="${testreports.dir}/html"
+            description="Unit test html reports are placed here" />
+  <property name="junit.haltonfailure" value="no" description="Fail the build if a test fails" />
+  <property name="junit.haltonerror" value="no" description="Fail the build if a error occurs" />
+  <property name="junit.maxmemory" value="256M" description="Heap size when Junit is run in fork mode" />
+  <property name="junit.forkmode" 
+            value="perTest" 
+            description="Defines whether JUnit forks a new JVM for each test. Use 'once' for faster test runs, and 'perTest' for complete tests."/>
+  <property name="headless.unittest" value="true" description="Runs the unit tests in headless mode" />
+
+  <!-- Code Coverage properties -->
+  <property name="instrumented.classes.dir"
+            value="${testbin.dir}/instrumented-classes"
+            description="Directory where instrumented project classes are placed for use by code coverage utility" />
+  <property name="cobertura.version"
+            value="1.9.4.1"
+            description="The version of cobertura to use for code coverage" />
+  <property name="cobertura.data.dir"
+            value="${testbin.dir}/cobertura-bin"
+            description="Temporary data directory used by Cobertura" />
+  <property name="coberturareports.dir"
+            value="${bin.dir}/reports/cobertura"
+            description="Base directory for all generated Cobertura code coverage reports" />
+  <property name="coberturareports.xml.dir"
+            value="${coberturareports.dir}/xml"
+            description="Cobertura xml reports are placed here" />
+  <property name="coberturareports.html.dir"
+            value="${coberturareports.dir}/html"
+            description="Cobertura html reports are placed here" />
+
+  <!-- Javadoc properties -->
+  <property name="javadoc.dir"
+            value="${bin.dir}/javadoc"
+            description="Directory where generated javadoc will be placed" />
+  <property name="javadoc.packagenames"
+            value="org.mypackagename.*"
+            description="This property is passed to the packagenames property of the javadoc ant task.  You should customize this for your project." />
+  <property name="javadoc.zip.filename" value="${ivy.artifact.id}-${project.revision}-javadoc.zip" />
+  <property name="javadoc.tar.filename" value="${ivy.artifact.id}-${project.revision}-javadoc.tar.gz" />
+
+  <!-- Distribution and Assembly properties -->
+  <property name="dist.dir"
+            value="${basedir}/dist"
+            description="Base directory for all project artifacts (jar, zip, tar.gz, etc...)" />
+  <property name="license.dir"
+            value="${basedir}"
+            description="Base directory where this project's license files reside" />
+  <property name="res.dir"
+            value="${basedir}/res"
+            description="Directory that holds resources not included in the source tree" />
+  <property name="source.zip.filename" value="${ivy.artifact.id}-${project.revision}-sources.zip" />
+  <property name="source.tar.filename" value="${ivy.artifact.id}-${project.revision}-sources.tar.gz" />
+  <property name="source.publish" value="true" />
+  
+  <!-- Ivy properties -->
+  <property name="ivy.settingsurl"
+            value="file:${basedir}/ivysettings.xml"
+            description="URL to the (common) ivysettings.xml.  This file is required by the build to configure IVY.  Note you must escape the ':' if this property exists in a .properties file" />
+  <property name="ivyfile"
+            value="ivy.xml"
+            description="The name of the IVY xml file defining your project's dependencies" />
+  <property name="ivy.artifact.group"
+            value="mycompanyname"
+            description="IVY metadata describing the originating company or organization" />
+  <property name="ivy.artifact.pomfile"
+            value="${dist.dir}/pom.xml"
+            description="The path to the Maven pom file to deploy with the artifact" />
+  <property name="ivy.artifact.ivyfilename"
+            value="ivy.xml"
+            description="The name of the IVY xml file to deploy with the artifact" />
+  <property name="ivy.artifact.ivypathname"
+            value="${dist.dir}/ivy.xml"
+            description="The full path to the IVY xml file to deploy with the artifact" />
+  <property name="ivy.reports.dir"
+            value="${bin.dir}/reports/ivy"
+            description="Base directory that holds all IVY dependency report files" />
+  <property name="ivy.configs" value="*" description="Set of configs used for IVY reporting and checking operations" />
+  <property name="ivy.use.symlinks" value="true" description="Flag indicating if Ivy should create symlinks when retrieving artifacts."/>
+
+  <!-- Tattletale properties -->
+  <property name="tattletale.url"
+            value="http://repo.pentaho.org/artifactory/repo/jboss/tattletale/1.1.2.Final/tattletale-1.1.2.Final.zip"
+            description="The URL from which to download tattletale" />
+  <property name="tattletale.classname"
+            value="org.jboss.tattletale.ant.ReportTask"
+            description="The name of the class which will run the tattletale reports" />
+  <property name="tattletale.reports.dir"
+            value="${bin.dir}/reports/tattletale"
+            description="Base directory that holds the output of the tattletale reports" />
+  <property name="tattletale.configfile"
+            value=""
+            description="The configuration file for the tattletale report" />
+
+  <!-- Sonar properties -->
+  <property name="sonar.url"
+            value="http://repo1.maven.org/maven2/org/codehaus/sonar-plugins/sonar-ant-task/1.2/sonar-ant-task-1.2.jar"/>
+  <property name="sonar.classname"
+          value="org.sonar.ant.SonarTask"/>
+
+  <!-- Load the manifest file (if any) as a properties file -->
+  <property name="dist.manifest.file"
+            value="${dist.dir}/MANIFEST.MF"
+            description="The manifest file that will be generated as part of the build" />
+  <property name="manifest.file"
+            value="${res.dir}/META-INF/MANIFEST.MF"
+            description="The location of the MANIFEST.MF file for this application." />
+  <property file="${manifest.file}"
+            description="Loads the manifest information from the manifest file as a properties file." />
+
+  <!-- Set the project revision number to the value in the manifest file (if it has not
+       been specified in the properties file -->
+  <property name="project.revision"
+            value="${Implementation-Version}"
+            description="Sets the version number of the project based on the Implementation-Version found in the manifest file (if one is supplied and nothing is specified in the build.properties)" />
+  <fail message="A project revision number has not been determined!">
+    <condition>
+      <matches string="${project.revision}" pattern="\$\{.*\}" />
+    </condition>
+  </fail>
+
+  <!-- Set the project title to the value in the manifest file (if it has not
+       been specified in the properties file -->
+  <property name="impl.title"
+            value="${Implementation-Title}"
+            description="Sets the title of the project based on the Implementation-Title found in the manifest file (if one is supplied and nothing is specified in the build.properties)" />
+  <fail message="A project title has not been determined!">
+    <condition>
+      <matches string="${impl.title}" pattern="\$\{.*\}" />
+    </condition>
+  </fail>
+
+  <!-- Build Mode properties -->
+  <property name="release" value="false" description="Set this to true if you want to generate a release artifact" />
+
+  <!-- Ivy should only use symlinks if we're not in release mode -->
+  <condition property="ivy.use.symlinks.internal">
+    <and>
+      <isfalse value="${release}"/>
+      <istrue value="${ivy.use.symlinks}"/>
+    </and>
+  </condition>
+
+  <!-- Set the os property -->
+  <condition property="isLinux">
+    <os family="unix" />
+  </condition>
+  <condition property="isWindows">
+    <os family="windows" />
+  </condition>
+  <condition property="isMac">
+    <os family="mac" />
+  </condition>
+
+  <condition property="os.classifier" value="win">
+    <os family="windows" />
+  </condition>
+  <condition property="os.classifier" value="mac">
+    <os family="mac" />
+  </condition>
+  <condition property="os.classifier" value="linux">
+    <os family="unix" />
+  </condition>
+  <property name="os.classifier" value="unsupported" />
+
+  <!-- Setup the compile classpath -->
+  <path id="classpath">
+    <fileset dir="${devlib.dir}">
+      <include name="**/*.jar" />
+    </fileset>
+    <fileset dir="${lib.dir}">
+      <include name="**/*.jar" />
+    </fileset>
+  </path>
+
+  <!-- Setup the classpath used for testing -->
+  <path id="test.classpath">
+    <pathelement path="${testclasses.dir}" />
+    <pathelement path="${classes.dir}" />
+    <fileset dir="${devlib.dir}">
+      <include name="**/*.jar" />
+    </fileset>
+    <fileset dir="${testlib.dir}">
+      <include name="**/*.jar" />
+    </fileset>
+    <fileset dir="${lib.dir}">
+      <include name="**/*.jar" />
+    </fileset>
+  </path>
+
+
+  <!--=======================================================================
+      default
+      
+      The target that is run if no target is given
+      ====================================================================-->
+  <target name="default" depends="build" />
+
+
+  <!--=======================================================================
+      build
+      
+      Runs a typical build process to create the project locally
+      ====================================================================-->
+  <target name="build" depends="clean-all,resolve,cobertura,dist-source,dist" />
+
+
+  <!--=======================================================================
+      build-testless
+      
+      Runs a typical build process to create the project locally (no testing)
+      ====================================================================-->
+  <target name="build-testless" depends="clean-all,resolve,dist-source,dist" />
+
+
+  <!--=======================================================================
+      continuous
+      
+      Runs a typical continuous integration build including project dist,
+      test, and coverage artifacts
+      ====================================================================-->
+  <target name="continuous" depends="build,publish" />
+
+
+  <!--=======================================================================
+      continuous-testless
+      
+      Runs a typical continuous integration build including project dist,
+      and coverage artifacts
+      ====================================================================-->
+  <target name="continuous-testless" depends="build-testless,publish" />
+
+
+  <!--=======================================================================
+      install-antcontrib
+      
+      (Fetches and) installs ant-contrib tasks.
+      ====================================================================-->
+  <target name="install-antcontrib" depends="antcontrib.download-check">
+    <taskdef resource="net/sf/antcontrib/antlib.xml">
+      <classpath>
+        <fileset dir="${antcontrib.build.cache.dir}">
+          <include name="*.jar" />
+        </fileset>
+      </classpath>
+    </taskdef>
+  </target>
+
+
+  <!--=======================================================================
+      antcontrib.download-check
+      
+      Fetches ant-contrib from sourceforge if it is not already present
+      ====================================================================-->
+  <target name="antcontrib.download-check">
+    <condition property="antcontrib.available">
+      <and>
+        <available file="${antcontrib.build.cache.dir}" />
+        <available classname="net.sf.antcontrib.logic.IfTask">
+          <classpath>
+            <fileset dir="${antcontrib.build.cache.dir}">
+              <include name="*.jar" />
+            </fileset>
+          </classpath>
+        </available>
+      </and>
+    </condition>
+    <antcall target="antcontrib.download" />
+  </target>
+
+
+  <!--=======================================================================
+      antcontrib.download
+      
+      Fetches ant-contrib from sourceforge
+      ====================================================================-->
+  <target name="antcontrib.download" unless="antcontrib.available">
+    <mkdir dir="${subfloor.tmp.dir}" />
+    <get src="http://downloads.sourceforge.net/ant-contrib/ant-contrib-1.0b3-bin.zip"
+         dest="${subfloor.tmp.dir}/antcontrib.zip"
+         usetimestamp="true" />
+    <unzip src="${subfloor.tmp.dir}/antcontrib.zip" dest="${subfloor.tmp.dir}">
+      <patternset>
+        <include name="**/*.jar" />
+      </patternset>
+    </unzip>
+    <copy todir="${antcontrib.build.cache.dir}">
+      <fileset dir="${subfloor.tmp.dir}/ant-contrib">
+        <include name="**/*.jar" />
+      </fileset>
+    </copy>
+  </target>
+
+
+  <!--=======================================================================
+      init
+      
+      Ensures that all the required directories exist before processing
+      a build.
+      ====================================================================-->
+  <target name="init">
+    <mkdir dir="${classes.dir}" />
+    <mkdir dir="${dist.dir}" />
+    <mkdir dir="${lib.dir}" />
+    <mkdir dir="${devlib.dir}" />
+    <mkdir dir="${testlib.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+    install-svnant
+    
+    (Fetches and) installs the SVN ANT for use by this ant script
+    ====================================================================-->
+  <target name="install-svnant" depends="install-ivy">
+    <if>
+      <istrue value="${svnant.isinstalled}" />
+      <then>
+        <echo message="Skipping SVN ANT install.  SVN ANT has already been configured by the build" />
+      </then>
+      <else>
+        <taskdef-with-ivy organisation="tigris"
+                          module="svnant"
+                          revision="1.3.0"
+                          resource="org/tigris/subversion/svnant/svnantlib.xml"
+                          classname="org.tigris.subversion.svnant.SvnTask" />
+        <property name="svnant.isinstalled" value="true" />
+      </else>
+    </if>
+  </target>
+
+
+  <!--=======================================================================
+        test-svnant
+    
+        Tests SVN by printing out the repository
+        ====================================================================-->
+  <target name="test-svnant" depends="install-svnant">
+    <svn javahl="${svnant.use-javahl}" svnkit="${svnant.use-svnkit}">
+      <wcVersion path="." />
+    </svn>
+    <echo message="Subversion repository url: ${repository.url}" />
+  </target>
+
+
+  <!--=======================================================================
+        svn-revision
+    
+        Prints and sets the SVN revision for the repository at the current dir (if svn.revision is not set)
+        ====================================================================-->
+  <target name="svn-revision" depends="install-svnant">
+
+    <svn javahl="${svnant.use-javahl}" svnkit="${svnant.use-svnkit}">
+      <status path="." revisionProperty="svn.revision" />
+    </svn>
+    <echo message="Subversion repository revision: ${svn.revision}" />
+  </target>
+
+
+  <!--=======================================================================
+        set-build.id
+    
+        Sets a property build.id to the either "development" or the svn revision
+        if in release mode
+        ====================================================================-->
+  <target name="set-build.id" unless="build.id" depends="install-antcontrib">
+    <if>
+      <istrue value="${release}" />
+      <then>
+        <antcallback target="svn-revision" return="svn.revision" />
+        <property name="build.id" value="${svn.revision}" />
+      </then>
+      <else>
+        <property name="build.id" value="development" />
+      </else>
+    </if>
+  </target>
+
+  <!--=================================================================================
+       version-properties: common Ant driven version file generation.  Projects that produce
+       a package or packages should run this target.  Projects that produce
+       jars only should NOT.
+   ===================================================================================-->
+  <target name="version-properties" depends="set-build.id">
+    <tstamp>
+      <format property="build.time" pattern="yyyy/MM/dd hh:mm aa" />
+    </tstamp>
+    <propertyfile file="version.properties" comment="Release Build version info">
+      <entry key="release.major.number" value="${release.major.number}" />
+      <entry key="release.minor.number" value="${release.minor.number}" />
+      <entry key="release.milestone.number" value="${release.milestone.number}" />
+      <entry key="release.candidate.token" value="${release.candidate.token}" />
+      <entry key="impl.vendor" value="${impl.vendor}" />
+      <entry key="impl.version"
+             value="${release.major.number}.${release.minor.number}.${release.milestone.number}.${build.id}" />
+      <entry key="impl.title" value="${impl.title}" />
+      <entry key="buildDate" value="${build.time}" />
+      <entry key="svn.revision" value="${build.id}" />
+      <entry key="release.build.number" default="0" type="int" operation="+" value="1" pattern="0000" />
+    </propertyfile>
+    <property file="${basedir}/version.properties" />
+  </target>
+
+
+  <!--=======================================================================
+      install-ivy 
+      
+      Fetches and installs IVY ant tasks if not already installed 
+      ====================================================================-->
+  <target name="install-ivy" depends="install-antcontrib">
+    <if>
+      <istrue value="${ivy.isinstalled}" />
+      <then>
+        <echo message="Skipping IVY install.  IVY has already been configured by the build" />
+      </then>
+      <else>
+        <download-antlib name="ivy" url="${ivy.url}" classname="org.apache.ivy.ant.IvyTask" extension="jar" />
+        <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant">
+          <classpath>
+            <fileset dir="${subfloor.resources.dir}/ivy">
+              <include name="*.jar" />
+            </fileset>
+          </classpath>
+        </taskdef>
+        <ivy:settings url="${ivy.settingsurl}" />
+        <property name="ivy.isinstalled" value="true" />
+      </else>
+    </if>
+  </target>
+
+
+  <!--=======================================================================
+      ivy.check-releasable
+      
+      Verifies that there are no SNAPSHOT dependencies defined in the ivy xml.
+      If there are SNAPSHOTS, fail the release build.
+      ====================================================================-->
+  <target name="ivy.check-releasable" depends="install-ivy, install-antcontrib">
+    <if>
+      <istrue value="${release}" />
+      <then>
+        <sequential>
+          <ivy:artifactproperty conf="${ivy.configs}" name="dep.[module]/[artifact]-[revision]" value="[revision]" />
+
+          <propertyselector property="violators" match="dep\..*SNAPSHOT.*" select="\0" casesensitive="false" />
+
+          <fail if="violators"
+                message="Release not possible, you have dependencies on non-released artifacts: ${violators}" />
+        </sequential>
+      </then>
+    </if>
+  </target>
+
+
+  <!--=======================================================================
+      resolve
+      
+      Using ivy and the dependencies for the project (defined in the ivy.xml
+      file), this task will retrieve the needed files and place them into 
+      the defined directories.
+      ====================================================================-->
+  <target name="resolve"
+          depends="resolve-default, resolve-test, ivy.check-releasable"
+          description="Retrieves all the dependent libraries" />
+
+  <target name="resolve-init" unless="resolve-init.skip" depends="install-ivy">
+    <!-- If this is the 1st time through resolve-init, then we need to clean up the jars
+-->
+    <antcall target="clean-jars" />
+    <property name="resolve-init.skip" value="" />
+  </target>
+
+  <target name="resolve-default" depends="resolve-default.default,resolve-default.composite"/>
+
+  <!-- 
+  This target resolves the default IVY configuration as a composite of child configurations.
+  You should set ivy.default.sub-configs in your build.properties only if you want your default
+  configuration to be treated as a composite of two or more child configurations.
+  To turn this on, set ivy.default.sub-configs property in your build.properties, e.g.
+  ivy.default.sub-configs=external,internal
+  Note: the parent config "default" proper will not be resolved
+  -->
+  <target name="resolve-default.composite" depends="install-antcontrib,resolve-init" if="ivy.default.sub-configs">
+    <for list="${ivy.default.sub-configs}" param="conf">
+      <sequential>
+        <ivy:resolve file="${ivyfile}" conf="default_@{conf}" />
+        <ivy:retrieve conf="default_@{conf}" pattern="${lib.dir}/@{conf}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" />
+      </sequential>
+    </for>
+  </target>
+
+  <target name="resolve-default.default" depends="resolve-init" unless="ivy.default.sub-configs">
+    <ivy:resolve file="${ivyfile}" conf="default" />
+    <ivy:retrieve conf="default" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" />
+  </target>
+
+  <target name="resolve-test" depends="resolve-init">
+    <ivy:resolve file="${ivyfile}" conf="test" />
+    <ivy:retrieve conf="test" pattern="${testlib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" />
+  </target>
+
+  <target name="resolve-enunciate" depends="resolve-init">
+    <ivy:resolve file="${ivyfile}" conf="enunciate" />
+    <ivy:retrieve conf="enunciate" pattern="${basedir}/enunciate/lib/[module]-[revision](-[classifier]).[ext]" />
+  </target>
+
+  <target name="resolve-codegen" depends="resolve-init">
+    <ivy:resolve file="${ivyfile}" conf="codegen" />
+    <ivy:retrieve conf="codegen" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" />
+  </target>
+
+  <target name="resolve-runtime" depends="resolve-init">
+    <ivy:resolve file="${ivyfile}" conf="runtime" />
+    <ivy:retrieve conf="runtime" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" />
+  </target>
+
+
+  <!--=======================================================================
+      ivy-clean-cache
+      
+      Cleans the IVY cache.  You are erasing IVY's memory.  Run this if you 
+      want to force IVY to go fetch all your project dependencies from scratch.
+      WARNING: this will affect all IVY projects, not just the current workspace
+      ====================================================================-->
+  <target name="ivy-clean-cache" depends="install-ivy">
+    <ivy:cleancache />
+  </target>
+
+
+  <!--=======================================================================
+      ivy-clean-local
+      
+      Completely cleans your local repository of any files published locally
+      by way of publish-local.
+      WARNING: this is a global action and will affect other IVY projects
+      currently referencing a locally published dependency
+      ====================================================================-->
+  <target name="ivy-clean-local" depends="install-ivy">
+    <delete dir="${ivy.local.default.root}/" />
+  </target>
+
+
+  <!--=======================================================================
+      ivy-clean-by-name
+      
+      Cleans your IVY cache and local repository of specific files.
+      WARNING: this is a global action and will affect other IVY projects
+      currently referencing a locally published dependency
+      ====================================================================-->
+  <target name="ivy-clean-pentaho" depends="install-ivy">
+    <mkdir dir="${ivy.local.default.root}" />
+    <!-- just in case it doesn't exist -->
+    <for param="dir">
+      <path>
+        <dirset dir="${ivy.local.default.root}" includes="*${ivy.clean.pattern}*" />
+        <dirset dir="${ivy.default.ivy.user.dir}/cache" includes="*${ivy.clean.pattern}*" />
+      </path>
+      <sequential>
+        <delete dir="@{dir}" includeemptydirs="true" />
+      </sequential>
+    </for>
+    <for param="file">
+      <path>
+        <fileset dir="${ivy.local.default.root}" includes="*${ivy.clean.pattern}*" />
+        <fileset dir="${ivy.default.ivy.user.dir}/cache" includes="*${ivy.clean.pattern}*" />
+      </path>
+      <sequential>
+        <delete file="@{file}" />
+      </sequential>
+    </for>
+  </target>
+
+
+  <!--=======================================================================
+      ivy-report
+      
+      Generates an IVY dependency report for this project. 
+      ====================================================================-->
+  <target name="ivy-report" depends="install-ivy">
+    <ivy:resolve file="${ivyfile}" conf="${ivy.configs}" />
+    <ivy:report xml="true" todir="${ivy.reports.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      publish-local-nojar
+      
+      Publishes the jar file for this project to the user's local repository
+      for download by other projects currently being executed on the user's
+      system.
+      ====================================================================-->
+  <target name="publish-local-nojar" depends="install-ivy,publish-local-nojar.internal">
+    <if>
+      <equals arg1="${tests.publish}" arg2="true" />
+      <then>
+        <antcall target="publish-local-nojar.internal">
+          <param name="ivy.artifact.id" value="${ivy.artifact.id}-test"/>
+        </antcall>
+      </then>
+    </if>
+    <antcall target="publish-local-nojar.post"/>
+  </target>
+
+  <!--=======================================================================
+      publish-local-nojar.post this target is invoked after the normal set of publish-local-nojar
+      is completed, override this to perform additional publishing in extensions of subfloor, etc
+      ====================================================================-->
+  <target name="publish-local-nojar.post">
+  </target>
+  
+  <target name="publish-local-nojar.internal" depends="install-ivy">
+    <ivy:resolve file="${ivy.artifact.ivyfilename}" />
+    <ivy:publish resolver="local" pubrevision="${project.revision}" overwrite="true" forcedeliver="true" warnonmissing="yes" haltonmissing="no">
+      <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]" />
+    </ivy:publish>
+  </target>
+
+  <!--=======================================================================
+      publish-local
+      
+      Builds and publishes the jar file for this project to the user's 
+      local repository for download by other projects currently being 
+      executed on the user's system.
+      ====================================================================-->
+  <target name="publish-local"
+          depends="dist, dist-source, publish-local-nojar"
+          description="Builds and publishes the jar file to the local repository" />
+
+
+  <!--=======================================================================
+        publish
+    
+        Creates and publishes the jar file for this project to a Maven2 
+        repository. 
+        ====================================================================-->
+  <target name="publish" depends="dist, dist-source, publish-nojar">
+  </target>
+
+
+  <!--=======================================================================
+      publish-nojar
+      
+      Publishes the jar file for this project to a Maven2 repository.
+      ====================================================================-->
+  <target name="publish-nojar" depends="install-antcontrib,create-pom,ivy.deliver,publish-nojar.internal">
+    <if>
+      <equals arg1="${tests.publish}" arg2="true" />
+      <then>
+        <antcall target="publish-nojar.internal">
+          <param name="ivy.artifact.id" value="${ivy.artifact.id}-test"/>
+        </antcall>
+      </then>
+    </if>
+  </target>
+
+  <target name="publish-nojar.internal" depends="install-antcontrib,create-pom,ivy.deliver">
+    <antcall target="maven-publish-dependencies">
+      <param name="publish.groupId" value="${ivy.artifact.group}" />
+      <param name="publish.artifactId" value="${ivy.artifact.id}" />
+      <param name="publish.version" value="${project.revision}" />
+      <param name="publish.file" value="${ivy.artifact.ivypathname}" />
+    </antcall>
+
+    <if>
+      <equals arg1="${source.publish}" arg2="true" />
+        <then>
+          <antcall target="maven-publish-sources">
+            <param name="publish.groupId" value="${ivy.artifact.group}" />
+            <param name="publish.artifactId" value="${ivy.artifact.id}" />
+            <param name="publish.version" value="${project.revision}" />
+            <param name="publish.file" value="${dist.dir}/${ivy.artifact.id}-${project.revision}-sources.jar" />
+          </antcall>
+        </then>
+    </if>
+
+    <antcall target="maven-publish-artifact">
+      <param name="publish.pomFile" value="${ivy.artifact.pomfile}" />
+      <param name="publish.file" value="${dist.dir}/${ivy.artifact.id}-${project.revision}.jar" />
+    </antcall>
+
+    <antcall target="maven-publish.post"/>
+    
+  </target>
+
+  <!-- Override this if anything is needed to be done after the standard parts of publish are completed -->
+  <!-- Such as:  publishing non-standard/extended artifacts, etc -->
+  <target name="maven-publish.post"/>
+  
+  <!--=======================================================================
+        ivy.deliver
+    
+        Creates a publishable version of the ivy dependencies file, ivy.xml
+        ====================================================================-->
+  <target name="ivy.deliver" depends="resolve">
+    <ivy:deliver conf="*(public)" deliverpattern="${dist.dir}/ivy.xml" />
+  </target>
+
+
+  <!--=======================================================================
+      maven-publish-dependencies
+      
+      A function that deploys an ivy.xml file to a maven repository
+      ====================================================================-->
+  <target name="maven-publish-dependencies" depends="install-antcontrib">
+    <sequential>
+      <fail message="No file found at: ${publish.file}">
+        <condition>
+          <not>
+            <available file="${publish.file}" />
+          </not>
+        </condition>
+      </fail>
+      <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." />
+      <if>
+        <isset property="isWindows" />
+        <then>
+          <exec executable="cmd" failonerror="true">
+            <arg value="/c" />
+            <arg value="mvn.bat" />
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DgroupId=${publish.groupId}" />
+            <arg value="-DartifactId=${publish.artifactId}" />
+            <arg value="-Dversion=${publish.version}" />
+            <arg value="-Dpackaging=ivy.xml" />
+            <arg value="-Dfile=${publish.file}" />
+          </exec>
+        </then>
+        <else>
+          <exec executable="mvn" failonerror="true">
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DgroupId=${publish.groupId}" />
+            <arg value="-DartifactId=${publish.artifactId}" />
+            <arg value="-Dversion=${publish.version}" />
+            <arg value="-Dpackaging=ivy.xml" />
+            <arg value="-Dfile=${publish.file}" />
+            <arg value="-e" />
+          </exec>
+        </else>
+      </if>
+    </sequential>
+  </target>
+
+
+  <!--=======================================================================
+      maven-publish-artifact
+      
+      A function that deploys an artifact to a maven repository
+      ====================================================================-->
+  <target name="maven-publish-artifact" depends="install-antcontrib">
+    <sequential>
+      <fail message="No file found at: ${publish.file}">
+        <condition>
+          <not>
+            <available file="${publish.file}" />
+          </not>
+        </condition>
+      </fail>
+      <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." />
+      <if>
+        <isset property="isWindows" />
+        <then>
+          <exec executable="cmd" failonerror="true">
+            <arg value="/c" />
+            <arg value="mvn.bat" />
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DpomFile=${publish.pomFile}" />
+            <arg value="-Dfile=${publish.file}" />
+          </exec>
+        </then>
+        <else>
+          <exec executable="mvn" failonerror="true">
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DpomFile=${publish.pomFile}" />
+            <arg value="-Dfile=${publish.file}" />
+          </exec>
+        </else>
+      </if>
+    </sequential>
+  </target>
+
+
+  <!--=======================================================================
+      maven-publish-sources
+      
+      A function that deploys a java-sources artifact to a maven repository
+      ====================================================================-->
+  <target name="maven-publish-sources" depends="install-antcontrib">
+    <sequential>
+      <fail message="No file found at: ${publish.file}">
+        <condition>
+          <not>
+            <available file="${publish.file}" />
+          </not>
+        </condition>
+      </fail>
+      <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." />
+      <if>
+        <isset property="isWindows" />
+        <then>
+          <exec executable="cmd" failonerror="true">
+            <arg value="/c" />
+            <arg value="mvn.bat" />
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DgroupId=${publish.groupId}" />
+            <arg value="-DartifactId=${publish.artifactId}" />
+            <arg value="-Dversion=${publish.version}" />
+            <arg value="-DgeneratePom=true" />
+            <arg value="-Dpackaging=java-source" />
+            <arg value="-Dfile=${publish.file}" />
+          </exec>
+        </then>
+        <else>
+          <exec executable="mvn" failonerror="true">
+            <arg value="deploy:deploy-file" />
+            <arg value="-DrepositoryId=${ivy.repository.id}" />
+            <arg value="-Durl=${ivy.repository.publish}" />
+            <arg value="-DgroupId=${publish.groupId}" />
+            <arg value="-DartifactId=${publish.artifactId}" />
+            <arg value="-Dversion=${publish.version}" />
+            <arg value="-DgeneratePom=true" />
+            <arg value="-Dpackaging=java-source" />
+            <arg value="-Dfile=${publish.file}" />
+          </exec>
+        </else>
+      </if>
+    </sequential>
+  </target>
+
+
+  <!--=======================================================================
+      create-pom
+      
+      Creates the POM file for publishing the jar file to a Maven2 repository.
+      ====================================================================-->
+  <target name="create-pom" depends="install-ivy">
+    <ivy:makepom ivyfile="${ivyfile}" pomfile="${dist.dir}/pom.xml">
+      <mapping conf="default" scope="compile" />
+      <mapping conf="runtime" scope="runtime" />
+    </ivy:makepom>
+  </target>
+
+
+  <!--=======================================================================
+      clean-jars
+      
+      Removes all the libraries that have been downloaded for this project
+      using the ivy dependencies.
+      ====================================================================-->
+  <target name="clean-jars">
+    <delete dir="${lib.dir}" />
+    <delete dir="${testlib.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      clean
+      
+      Removes all the files generated from the build process.
+      ====================================================================-->
+  <target name="clean"
+          description="Cleans all the files generated from a build with the exception of IVY-downloaded jars (see clean-all)"
+          depends="clean-tests, clean-cobertura, clean-sonar, clean-javadoc, clean-dist">
+    <delete dir="${classes.dir}" />
+    <delete dir="${bin.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      clean-dist
+      
+      Removes all dist artifacts
+      ====================================================================-->
+  <target name="clean-dist">
+    <delete dir="${dist.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      clean-all
+      
+      Removes all the libraries that have been downloaded for this project
+      in the workspace's lib dirs as well as all the files 
+      generated from the build process.
+      ====================================================================-->
+  <target name="clean-all" depends="clean,clean-jars" description="Cleans all the generated and dependency files" />
+
+
+  <!--=======================================================================
+      copy-license-lgpl
+      
+      Copies the LGPL license file into the binary directory.
+      ====================================================================-->
+  <target name="copy-license-lgpl" if="lgpl-license-avail">
+    <copy todir="${classes.dir}/META-INF">
+      <fileset dir="${license.dir}" includes="lgpl-2.1.txt" />
+    </copy>
+  </target>
+
+
+  <!--=======================================================================
+      copy-license-gpl-parent
+      
+      Copies the GPL license file from the parent directory into the 
+      binary directory.
+      ====================================================================-->
+  <target name="copy-license-gpl" if="gpl-license-avail">
+    <copy todir="${classes.dir}/META-INF">
+      <fileset dir="${license.dir}" includes="gpl-2.0.txt" />
+    </copy>
+  </target>
+
+
+  <!--=======================================================================
+      compile
+      
+      Compiles the source code (using the specified options) into the 
+      binary directory.
+      
+      NOTE: This contains multiple sub-tasks which will occur in the 
+            following order (this is provided for easier overriding by
+            the build.xml which will include this file)...
+        - compile.pre      : anything needed to prep for compile
+        - compile.compile  : the actual compilation step
+        - compile.src_copy : copying the source into the bin directory
+        - compile.res_copy : copying the resources into the bin directory
+        - compile.lic_copy : copying the license information into the bin directory
+        - compile.post     : anything needed after the compile is done 
+      ====================================================================-->
+  <target name="compile"
+          depends="init, compile.pre, compile.compile, compile.src_copy, compile.res_copy, compile.lic_copy, compile.post"
+          description="Performs all the steps to prepare the bin directory with a complete compilation" />
+
+
+  <!--=======================================================================
+      compile.pre
+      
+      Prepares to perform the compile.
+      ====================================================================-->
+  <target name="compile.pre" />
+
+
+  <!--=======================================================================
+      compile.compile
+      
+      Performs the actual compile
+      ====================================================================-->
+  <target name="compile.compile" depends="init">
+    <javac destdir="${classes.dir}"
+           debug="${javac.debug}"
+           deprecation="${javac.deprecation}"
+           fork="true"
+           memorymaximumsize="${javac.maxmemory}"
+           source="${javac.source}"
+           target="${javac.target}">
+      <classpath>
+        <path refid="classpath" />
+      </classpath>
+      <src path="${src.dir}" />
+      <compilerarg value="${javac.xlint}" />
+    </javac>
+  </target>
+
+
+  <!--=======================================================================
+      compile.res_copy
+      
+      Copies any needed resources into the classes directory.  Will not
+      duplicate copying of resources from src tree (handled by compile.src_copy
+      if jar.include.source is set.
+      ====================================================================-->
+  <target name="compile.res_copy" depends="install-antcontrib">
+    <if>
+      <available file="${res.dir}" />
+      <then>
+        <copy todir="${classes.dir}">
+          <fileset dir="${res.dir}" />
+        </copy>
+      </then>
+    </if>
+
+    <if>
+      <not>
+        <isset property="jar.include.source" />
+      </not>
+      <then>
+        <copy todir="${classes.dir}" flatten="false">
+          <fileset dir="${src.dir}" excludes="**/*.java" />
+        </copy>
+      </then>
+    </if>
+  </target>
+
+
+  <!--=======================================================================
+      compile.src_copy
+      
+      Copies the source files to the bin directory
+      NOTE: if the dont.copy.source variable exists, this step will be
+            skipped!
+      ====================================================================-->
+  <target name="compile.src_copy" depends="init" if="jar.include.source">
+    <copy todir="${classes.dir}" flatten="false">
+      <fileset dir="${src.dir}" />
+    </copy>
+  </target>
+
+
+  <!--=======================================================================
+      compile.lic_copy
+      
+      Copies the license file(s) into the bin directory
+      ====================================================================-->
+  <target name="compile.lic_copy" depends="init">
+    <condition property="lgpl-license-avail">
+      <available file="${license.dir}/lgpl-2.1.txt" />
+    </condition>
+    <antcall target="copy-license-lgpl" />
+    <condition property="gpl-license-avail">
+      <available file="${license.dir}/gpl-2.0.txt" />
+    </condition>
+    <antcall target="copy-license-gpl" />
+  </target>
+
+
+  <!--=======================================================================
+      compile.post
+      
+      Performs any needed post-compile tasks
+      ====================================================================-->
+  <target name="compile.post" />
+
+
+  <!--=======================================================================
+      jar
+      
+      Creates a jar file from the bin directory
+      ====================================================================-->
+  <target name="jar"
+          depends="jar.main,jar.test"
+          description="Jars up the bin directory after a compile">
+  </target>
+
+  <!-- jar the tests ONLY IF tests.publish it true -->
+  <!-- if the compile-tests target is in the dependency list for this target, -->
+  <!-- it will get executed no matter what the value of tests.publish is      -->
+  <target name="jar.test"
+          if="tests.publish">
+    <antcall target="compile-tests" />
+    <jar destfile="${dist.dir}/${ivy.artifact.id}-test-${project.revision}.jar" manifest="${dist.manifest.file}">
+      <fileset dir="${testclasses.dir}"/>
+    </jar>
+  </target>
+
+  <target name="jar.main"
+          depends="compile,set-build.id,generate.manifest">
+    <jar destfile="${dist.dir}/${ivy.artifact.id}-${project.revision}.jar" manifest="${dist.manifest.file}">
+      <fileset dir="${classes.dir}" />
+    </jar>
+  </target>
+
+  <!--=======================================================================
+      generate.manifest
+      
+      Creates a new manifest file if one is not specified, or updates
+      an existing manifest file if one is specified.
+      ====================================================================-->
+  <target name="generate.manifest" depends="init,set-build.id">
+    <delete file="${dist.manifest.file}" />
+    <touch file="${dist.manifest.file}" />
+    <copy file="${manifest.file}" tofile="${dist.manifest.file}" overwrite="true" failonerror="false" />
+
+    <manifest file="${dist.manifest.file}" mode="update">
+      <attribute name="Implementation-Title" value="${impl.title}" />
+      <attribute name="Implementation-Version" value="${project.revision}.${build.id}" />
+      <attribute name="Implementation-Vendor" value="${impl.vendor}" />
+      <attribute name="Implementation-ProductID" value="${impl.productID}" />
+    </manifest>
+  </target>
+
+
+  <!--=======================================================================
+      dist-source
+      
+      Generates zip and targz distributions of the javadoc
+      ====================================================================-->
+  <target name="dist-source" depends="source.jar, source.zip, source.targz" />
+
+
+  <!--=======================================================================
+      source.jar
+      
+      Creates a jar of the project source for distribution
+      ====================================================================-->
+  <target name="source.jar" depends="init,install-antcontrib">
+    <jar jarfile="${dist.dir}/${ivy.artifact.id}-${project.revision}-sources.jar" basedir="${src.dir}" />
+    <if>
+      <equals arg1="${tests.publish}" arg2="true" />
+      <then>
+        <jar jarfile="${dist.dir}/${ivy.artifact.id}-test-${project.revision}-sources.jar" basedir="${src.dir}" />
+      </then>
+    </if>
+  </target>
+
+  <!--=======================================================================
+      source.zip
+      
+      Creates a zip of the project source for distribution
+      ====================================================================-->
+  <target name="source.zip" depends="init">
+    <jar jarfile="${dist.dir}/${source.zip.filename}" basedir="${src.dir}" />
+  </target>
+
+  <!--=======================================================================
+      source.targz
+      
+      Creates a gzipped tar of the project source for distribution
+      ====================================================================-->
+  <target name="source.targz" depends="init">
+    <tar compression="gzip" destfile="${dist.dir}/${source.tar.filename}" basedir="${src.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      clean-tests
+      
+      Removes all files related to tests
+      ====================================================================-->
+  <target name="clean-tests">
+    <delete dir="${testbin.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      init-tests
+      
+      Compiles project test source
+      ====================================================================-->
+  <target name="init-tests" depends="clean-tests">
+    <mkdir dir="${testclasses.dir}" />
+    <mkdir dir="${testsrc.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      compile-tests
+      
+      Compiles project test source
+      ====================================================================-->
+  <target name="compile-tests" depends="init-tests">
+    <javac destdir="${testclasses.dir}"
+           debug="true"
+           optimize="false"
+           source="${javac.source}"
+           target="${javac.target}"
+           fork="true">
+      <src path="${testsrc.dir}" />
+      <classpath refid="test.classpath" />
+    </javac>
+
+    <!-- Copy the non-java files from the source directory to the test classes directory
+-->
+    <copy todir="${testclasses.dir}">
+      <fileset dir="${testsrc.dir}">
+        <exclude name="**/*.java" />
+      </fileset>
+    </copy>
+  </target>
+
+
+  <!--=======================================================================
+      test
+      
+      Compiles and runs all the tests for the project
+      ====================================================================-->
+  <target name="test" depends="compile,compile-tests, init-test-reports" description="Compiles and runs unit tests">
+    <junit maxmemory="${junit.maxmemory}"
+           dir="${junit.base.dir}"
+           fork="yes"
+           forkmode="${junit.forkmode}"
+           failureProperty="test.failed"
+           haltonfailure="${junit.haltonfailure}"
+           haltonerror="${junit.haltonerror}"
+           printsummary="yes">
+      <sysproperty key="java.awt.headless" value="${headless.unittest}" />
+      
+      <syspropertyset>
+        <propertyref prefix="junit.sysprop." />
+        <mapper type="glob" from="junit.sysprop.*" to="*"/>
+      </syspropertyset>
+      
+      <classpath refid="test.classpath" />
+      <formatter type="xml" />
+      <test name="${testcase}" todir="${testreports.xml.dir}" if="testcase" />
+      <batchtest fork="yes" todir="${testreports.xml.dir}" unless="testcase">
+        <fileset dir="${testsrc.dir}" casesensitive="yes">
+          <include name="**/*Test.java" />
+        </fileset>
+      </batchtest>
+    </junit>
+
+    <junitreport todir="${testreports.html.dir}">
+      <fileset dir="${testreports.xml.dir}">
+        <include name="TEST-*.xml" />
+      </fileset>
+      <report format="frames" todir="${testreports.html.dir}" />
+    </junitreport>
+  </target>
+
+
+  <!--=======================================================================
+    clean-test-reports
+
+    Remove all xml and html JUnit test reports
+    ====================================================================-->
+  <target name="clean-test-reports">
+    <delete dir="${testreports.xml.dir}" />
+    <delete dir="${testreports.html.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+    init-test-reports
+
+    Prepare directories for JUnit test reports
+    ====================================================================-->
+  <target name="init-test-reports" depends="clean-test-reports">
+    <mkdir dir="${testreports.xml.dir}" />
+    <mkdir dir="${testreports.html.dir}" />
+  </target>
+
+  <!--=======================================================================
+      dist
+      
+      Creates a distribution of this project
+      ====================================================================-->
+  <target name="dist" depends="jar" description="Creates a distribution" />
+
+
+  <!--=======================================================================
+      dist-full
+      
+      Creates a distribution of this project including all sources needed
+      to build as well as the resultant jar
+      ====================================================================-->
+  <target name="dist-full" depends="jar"
+          description="Creates all the distributable items for this project">
+    <!-- Create the required zip distribution which contains the entire project -->
+    <zip destfile="${dist.dir}/${ivy.artifact.id}-${project.revision}.zip">
+      <fileset dir="${basedir}">
+        <exclude name="bin/"/>
+        <exclude name="dist/"/>
+        <exclude name="eclipse-bin/"/>
+      </fileset>
+      <zipfileset dir="${dist.dir}" includes="**/*.jar"/>
+    </zip>
+  </target>
+
+
+  <!--=======================================================================
+      javadoc
+      
+      Generates javadoc source documentation for this project
+      ====================================================================-->
+  <target name="javadoc" depends="javadoc.init, compile">
+    <javadoc destdir="${javadoc.dir}/docs/api"
+             access="public"
+             source="6"
+             use="true"
+             notree="false"
+             nonavbar="false"
+             noindex="false"
+             splitindex="true"
+             author="true"
+             version="true"
+             maxmemory="256M"
+             nodeprecatedlist="false"
+             nodeprecated="false"
+             packagenames="${javadoc.packagenames}"
+             sourcepath="${src.dir}"
+             doctitle="${impl.title} documentation">
+      <link href="http://docs.oracle.com/javase/6/docs/api/" />
+      <classpath refid="classpath" />
+    </javadoc>
+  </target>
+
+  	
+  <!--=======================================================================
+	enunciate
+        
+	Generates enunciate documentation for the resoruce 
+	classes comprising the BIServer REST api
+  ====================================================================-->
+  <target name="enunciate" depends="resolve-enunciate">
+    <path id="enunciate.classpath">
+      <fileset dir="${lib.dir}">
+        <include name="*.jar" />
+      	<exclude name="saxon*.jar" />
+      </fileset>
+      <dirset dir="${classes.dir}" />
+      <fileset dir="${dist.dir}">
+        <include name="*.jar" />
+      </fileset>
+      <fileset dir="${enunciate.home}/lib">
+        <include name="*.jar" />
+      </fileset>
+    </path>
+
+    <taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
+      <classpath refid="enunciate.classpath" />
+    </taskdef>
+
+    <enunciate dir="${basedir}/src" 
+               configFile="${basedir}/enunciate.xml" 
+               generateDir="${enunciate.bin.dir}/generate" 
+               compileDir="${enunciate.bin.dir}/compile" 
+               buildDir="${enunciate.bin.dir}/build" 
+               packageDir="${enunciate.bin.dir}/package" 
+               verbose="true">
+      <include name="**/*.java" />
+      <!-- have to exclude class that contains jersey multipart endpoint until http://jira.codehaus.org/browse/ENUNCIATE-537 is fixed -->
+      
+      <classpath refid="enunciate.classpath" />
+      <export artifactId="docs" destination="${dist.dir}/${enunciate.packagename}.zip" />
+    </enunciate>
+  </target>
+
+  <!--=======================================================================
+      dist-javadoc
+      
+      Generates zip and targz distributions of the javadoc
+      ====================================================================-->
+  <target name="dist-javadoc" depends="javadoc.zip, javadoc.targz" />
+
+
+  <!--=======================================================================
+      clean-javadoc
+      
+      Removes generated javadoc files (note, this does not remove javadoc distributions.
+      Use clean-dist to remove artifacts from the dist.dir.
+      ====================================================================-->
+  <target name="clean-javadoc">
+    <delete dir="${javadoc.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      javadoc.init
+      
+      Creates directories for javadoc process
+      ====================================================================-->
+  <target name="javadoc.init" depends="clean-javadoc">
+    <mkdir dir="${javadoc.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      javadoc.zip
+      
+      Creates a zip of the javadoc for distribution
+      ====================================================================-->
+  <target name="javadoc.zip" depends="javadoc">
+    <jar jarfile="${dist.dir}/${javadoc.zip.filename}"
+         basedir="${javadoc.dir}"
+         includes="**/*"
+         excludes="**/Thumbs.db" />
+  </target>
+
+
+  <!--=======================================================================
+      javadoc.targz
+      
+      Creates a gzipped tar of the javadoc for distribution
+      ====================================================================-->
+  <target name="javadoc.targz" depends="javadoc">
+    <tar compression="gzip"
+         destfile="${dist.dir}/${javadoc.tar.filename}"
+         basedir="${javadoc.dir}"
+         includes="**/*"
+         excludes="**/Thumbs.db" />
+  </target>
+
+
+  <!--=======================================================================
+      cobertura
+      
+      Runs tests in an instrumented environment and produces Cobertura test coverage reports
+      ====================================================================-->
+  <target name="cobertura"
+          description="Runs tests in an instrumented environment and produces Cobertura test coverage reports"
+          depends="clean-cobertura,install-cobertura,compile,compile-tests,cobertura.instrument-classes,cobertura.test-instrumented,cobertura.xml-report,cobertura.html-report" />
+
+
+  <!--=======================================================================
+      cobertura.instrument-classes
+      
+      Instruments the application classes used by Cobertura during cobertura.test-instrumented
+      ====================================================================-->
+  <target name="cobertura.instrument-classes" depends="cobertura.clean-instrumented-classes,install-cobertura,compile">
+    <cobertura-instrument todir="${instrumented.classes.dir}" datafile="${cobertura.data.dir}/cobertura.ser">
+      <ignore regex="org.apache.log4j.*" />
+      <fileset dir="${classes.dir}">
+        <!--
+          Instrument all the application classes, but
+          don't instrument the test classes.
+        -->
+        <include name="**/*.class" />
+        <exclude name="**/*Test.class" />
+      </fileset>
+
+    </cobertura-instrument>
+  </target>
+
+
+
+  <!--=======================================================================
+      install-cobertura
+      
+      Downloads and installs Cobertura ant tasks
+      ====================================================================-->
+  <target name="install-cobertura" depends="install-ivy">
+    <taskdef-with-ivy organisation="net.sourceforge.cobertura" module="cobertura" revision="${cobertura.version}" resource="tasks.properties" classname="net.sourceforge.cobertura.ant.InstrumentTask"/>
+  </target>
+
+
+  <!--=======================================================================
+      clean-cobertura
+      
+      Removes all files created by Cobertura code coverage utility
+      ====================================================================-->
+  <target name="clean-cobertura" depends="cobertura.clean-instrumented-classes,cobertura.clean-coverage-reports">
+    <delete dir="${cobertura.data.dir}" />
+  </target>
+
+  <!--=======================================================================
+      clean-sonar
+      
+      Removes the temporary file location for sonar files
+      ====================================================================-->
+  <target name="clean-sonar">
+    <delete dir="${basedir}/.sonar" />
+  </target>
+
+
+  <!--=======================================================================
+    cobertura.clean-instrumented-classes
+
+    Remove the instrumented classes used by Cobertura
+    ====================================================================-->
+  <target name="cobertura.clean-instrumented-classes">
+    <delete dir="${instrumented.classes.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+    cobertura.clean-coverage-reports
+
+    Remove all xml and html Cobertura coverage reports
+    ====================================================================-->
+  <target name="cobertura.clean-coverage-reports">
+    <delete dir="${coberturareports.xml.dir}" />
+    <delete dir="${coberturareports.html.dir}" />
+    <delete dir="${coberturareports.dir}" />
+  </target>
+
+
+  <!--=======================================================================
+      cobertura.test-instrumented
+      
+      Runs tests against instrumented classes and generates xml and html JUnit test reports
+      ====================================================================-->
+  <target name="cobertura.test-instrumented"
+          depends="init-test-reports,install-cobertura,compile,compile-tests,cobertura.instrument-classes">
+    <mkdir dir="${instrumented.classes.dir}" />
+    <path id="cobertura.classpath">
+      <fileset dir="${subfloor.resources.dir}/cobertura-${cobertura.version}">
+        <include name="*.jar" />
+      </fileset>
+    </path>
+    <junit fork="yes"
+           forkmode="${junit.forkmode}"
+           dir="${junit.base.dir}"
+           maxmemory="${junit.maxmemory}"
+           failureProperty="test.failed"
+           haltonerror="${junit.haltonerror}"
+           haltonfailure="${junit.haltonfailure}">
+      <sysproperty key="java.awt.headless" value="${headless.unittest}" />
+
+      <!-- Specify the name of the coverage data file to use. -->
+      <sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.data.dir}/cobertura.ser" />
+
+      <syspropertyset>
+        <propertyref prefix="junit.sysprop." />
+        <mapper type="glob" from="junit.sysprop.*" to="*"/>
+      </syspropertyset>
+      
+      <!--
+        Note the classpath order: instrumented classes are before the
+        original (uninstrumented) classes.  This is important.
+      -->
+      <classpath location="${instrumented.classes.dir}" />
+      <classpath refid="test.classpath" />
+      <classpath refid="cobertura.classpath" />
+
+      <formatter type="xml" />
+      <test name="${testcase}" todir="${testreports.xml.dir}" if="testcase" />
+      <batchtest todir="${testreports.xml.dir}" unless="testcase">
+        <fileset dir="${testsrc.dir}" casesensitive="yes">
+          <include name="**/*Test.java" />
+        </fileset>
+      </batchtest>
+    </junit>
+
+    <junitreport todir="${testreports.html.dir}">
+      <fileset dir="${testreports.xml.dir}">
+        <include name="TEST-*.xml" />
+      </fileset>
+      <report format="frames" todir="${testreports.html.dir}" />
+    </junitreport>
+  </target>
+
+
+  <!--=======================================================================
+      cobertura.xml-report
+      
+      Produces machine-readable xml Cobertura coverage report from results of instrumented tests
+      ====================================================================-->
+  <target name="cobertura.xml-report" depends="cobertura.test-instrumented">
+    <cobertura-report destdir="${coberturareports.xml.dir}" datafile="${cobertura.data.dir}/cobertura.ser" format="xml">
+      <fileset dir="${src.dir}">
+        <include name="**/*.java" />
+      </fileset>
+    </cobertura-report>
+  </target>
+
+
+  <!--=======================================================================
+      cobertura.html-report
+      
+      Produces human-readable html Cobertura coverage report from results of instrumented tests
+      ====================================================================-->
+  <target name="cobertura.html-report" depends="cobertura.test-instrumented">
+    <cobertura-report destdir="${coberturareports.html.dir}"
+                      datafile="${cobertura.data.dir}/cobertura.ser"
+                      format="html">
+      <fileset dir="${src.dir}">
+        <include name="**/*.java" />
+      </fileset>
+    </cobertura-report>
+  </target>
+
+  <!--=======================================================================
+        install-pentaho-ant-tasks
+ 
+        Fetches and installs Pentaho Ant tasks
+      ====================================================================-->
+  <target name="install-pentaho-ant-tasks" depends="install-ivy">
+    <taskdef-with-ivy task-name="dot-classpath" classname="org.pentaho.anttasks.DotClasspath" organisation="pentaho" module="pentaho-ant-tasks" revision="1.1" />
+  </target>
+
+  <!--=======================================================================
+        create-dot-classpath
+ 
+        Creates the Eclipse .classpath file from the resolved
+        classpath from Ant.
+      ====================================================================-->
+  <target name="create-dot-classpath" depends="install-pentaho-ant-tasks,init">
+    <dot-classpath>
+      <!-- Include all lib dirs -->
+      <classpath>
+        <fileset dir="${devlib.dir}">
+          <include name="*.jar" />
+        </fileset>
+        <fileset dir="${testlib.dir}">
+          <include name="*.jar" />
+        </fileset>
+        <fileset dir="${lib.dir}">
+          <include name="*.jar" />
+        </fileset>
+      </classpath>
+    </dot-classpath>
+  </target>
+
+
+  <!--=======================================================================
+        MACRO: taskdef-with-ivy
+        Downloads (using IVY) and defines new Ant tasks
+      
+      NOTE: any task using this macro must depend on "install-antcontrib"
+      
+      parameters:
+      task-name    - Name to give the new Ant task (only used if resource is not set)
+      organisation - Artifact organization (for artifact resolution with IVY)
+      module       - Artifact module (for artifact resolution with IVY)
+      revision     - Artifact revision (for artifact resolution with IVY)
+      classname    - Classname for the Ant task.  Used during taskdef and to check 
+                     if we already have the libraries
+      resource     - (optional) Resource defining the Ant task.  Used during taskdef
+      ====================================================================-->
+  <macrodef name="taskdef-with-ivy">
+    <attribute name="task-name"
+               description="Name to give the new Ant task (only used if resource is not set)"
+               default="unset" />
+    <attribute name="organisation" description="Artifact organization" />
+    <attribute name="module" description="Artifact module" />
+    <attribute name="revision" description="Artifact revision" />
+    <attribute name="classname"
+               description="Classname for the Ant task.  Used during taskdef and to check if we already have the libraries." />
+    <attribute name="resource"
+               description="(optional) Resource defining the Ant task.  Used during taskdef"
+               default="unset" />
+    <sequential>
+      <mkdir dir="${subfloor.resources.dir}/@{module}-@{revision}/" />
+      <!-- if the library does not exist, we must download it -->
+      <if>
+        <not>
+          <and>
+            <available file="${subfloor.resources.dir}/@{module}-@{revision}" />
+            <available classname="@{classname}">
+              <classpath>
+                <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}">
+                  <include name="*.jar" />
+                </fileset>
+              </classpath>
+            </available>
+          </and>
+        </not>
+        <then>
+          <ivy:retrieve inline="true"
+              conf="default"
+                        organisation="@{organisation}"
+                        module="@{module}"
+                        revision="@{revision}"
+                        pattern="${subfloor.resources.dir}/@{module}-@{revision}/[module]-__-[revision](-[classifier]).[ext]" />
+          <!-- in case the artifact pulls in an ant jar, remove it. they cause runtime conflicts -->
+          <delete>
+            <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}">
+              <include name="ant-__-*.jar" />
+              <include name="ant-launcher-__-*.jar" />
+            </fileset>
+          </delete>
+        </then>
+      </if>
+      <path id="taskdef.classpath">
+        <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}">
+          <include name="*.jar" />
+        </fileset>
+      </path>
+      <if>
+        <equals arg1="@{resource}" arg2="unset" />
+        <then>
+          <taskdef classpathref="taskdef.classpath" name="@{task-name}" classname="@{classname}" />
+        </then>
+        <else>
+          <taskdef classpathref="taskdef.classpath" resource="@{resource}" />
+        </else>
+      </if>
+    </sequential>
+  </macrodef>
+
+
+  <!--=======================================================================
+      Macro which will download the specified library. 
+      
+      NOTE: any task using this macro must depend on "install-antcontrib"
+      
+      parameters:
+      name      - The name of the library (the filename w/o extension)
+      url       - The URL from which the library will be downloaded
+      resource  - The name of the resource which should be loaded
+                  as a task definition 
+      classname - A class file name which can be used to detect if the
+                  property library exists
+      extension - The extension of the library being downloaded 
+                  (defaults to zip)
+      ====================================================================-->
+  <macrodef name="download-antlib">
+    <attribute name="name" />
+    <attribute name="url" />
+    <attribute name="classname" />
+    <attribute name="extension" default="zip" />
+    <sequential>
+      <mkdir dir="${subfloor.resources.dir}/@{name}/" />
+      <!-- if the library does not exist, we must download it -->
+      <if>
+        <not>
+          <and>
+            <available file="${subfloor.resources.dir}/@{name}" />
+            <available classname="@{classname}">
+              <classpath>
+                <fileset dir="${subfloor.resources.dir}/@{name}">
+                  <include name="**/*.jar" />
+                </fileset>
+              </classpath>
+            </available>
+          </and>
+        </not>
+        <then>
+          <!-- if it is a zip file, unzip it ... otherwise if a jar, just download it -->
+          <if>
+            <equals arg1="zip" arg2="@{extension}" />
+            <then>
+              <!-- download the source file to a temp directory -->
+              <echo message="downloading library @{name} [@{name}.@{extension} from @{url}]" />
+              <mkdir dir="${subfloor.tmp.dir}" />
+              <get src="@{url}" dest="${subfloor.tmp.dir}/@{name}.@{extension}" usetimestamp="true" />
+              <unzip src="${subfloor.tmp.dir}/@{name}.@{extension}"
+                     dest="${subfloor.resources.dir}/@{name}"
+                     overwrite="true" />
+            </then>
+            <else>
+              <get src="@{url}" dest="${subfloor.resources.dir}/@{name}/@{name}.@{extension}" usetimestamp="true" />
+            </else>
+          </if>
+        </then>
+      </if>
+    </sequential>
+  </macrodef>
+
+  <!--=======================================================================
+    install-tattletale
+    
+    (Fetches and) installs TATTLETALE for use by this ant script
+    ====================================================================-->
+  <target name="install-tattletale" depends="install-antcontrib">
+    <if>
+      <istrue value="${tattletale.isinstalled}" />
+      <then>
+        <echo message="Skipping TATTLETALE install.  TATTLETALE has already been configured by the build" />
+      </then>
+      <else>
+        <download-antlib name="tattletale"
+                         url="${tattletale.url}"
+                         classname="${tattletale.classname}" 
+                         extension="zip"/>
+                          
+        <taskdef name="tattletale.report" classname="${tattletale.classname}">
+          <classpath>
+            <fileset dir="${subfloor.resources.dir}/tattletale">
+              <include name="*.jar" />
+            </fileset>
+          </classpath>
+        </taskdef>
+
+        <property name="tattletale.isinstalled" value="true" />
+      </else>
+    </if>
+  </target>
+  
+  <!--=======================================================================
+    tattletale-report
+    
+    Generates a tattletale report for this project
+    ====================================================================-->
+  <target name="tattletale-report" depends="install-tattletale,jar">
+    <tattletale.report source="${basedir}" destination="${tattletale.reports.dir}"/>
+  </target>
+  
+<!--=======================================================================
+    install-sonar
+    
+    (Fetches and) installs SONAR ant plugin for use by this ant script
+    ====================================================================-->
+  <target name="install-sonar" depends="install-antcontrib">
+    <if>
+      <istrue value="${sonar.isinstalled}" />
+      <then>
+        <echo message="Skipping SONAR install.  SONAR has already been configured by the build" />
+      </then>
+      <else>
+        <download-antlib name="sonar"
+                         url="${sonar.url}"
+                         classname="${sonar.classname}" 
+                         extension="jar"/>
+                          
+        <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
+            <classpath>
+              <fileset dir="${subfloor.resources.dir}/sonar">
+                  <include name="*.jar" />
+              </fileset>
+            </classpath> 
+        </taskdef>
+
+        <property name="sonar.isinstalled" value="true" />
+      </else>
+    </if>
+  </target>
+
+  <!--=======================================================================
+    sonar
+      
+    Execute the sonar analysis and publish to a sonar server specified by:
+    sonar.jdbc.url
+    sonar.jdbc.driverClassName
+    sonar.jdbc.username
+    sonar.jdbc.password
+    sonar.host.url
+    ====================================================================-->
+  <target name="sonar" depends="install-sonar, compile, test, cobertura">
+    <property name="sonar.sources" value="${src.dir}" />
+    <property name="sonar.binaries" value="${classes.dir}" />
+    <property name="sonar.tests" value="${testsrc.dir}" />
+    <property name="sonar.libraries" value="${lib.dir}" />
+
+    <property name="sonar.dynamicAnalysis" value="reuseReports" />
+    <property name="sonar.cobertura.reportPath" value="${coberturareports.xml.dir}/coverage.xml" />
+    <property name="sonar.surefire.reportsPath" value="${testreports.xml.dir}" />
+    
+    <sonar:sonar key="${ivy.artifact.group}:${ivy.artifact.id}" version="${project.revision}" xmlns:sonar="antlib:org.sonar.ant"/>
+  </target>
+  
+</project>

Added: oodt/trunk/tools/pdi_plugin/build.properties
URL: http://svn.apache.org/viewvc/oodt/trunk/tools/pdi_plugin/build.properties?rev=1601222&view=auto
==============================================================================
--- oodt/trunk/tools/pdi_plugin/build.properties (added)
+++ oodt/trunk/tools/pdi_plugin/build.properties Sun Jun  8 14:04:07 2014
@@ -0,0 +1,13 @@
+impl.title=Apache OODT filemgr file get
+impl.productID=OODT_FILEMGR_GET
+impl.vendor=Apache Foundation
+
+ivy.artifact.group=oodt-filemgr
+ivy.artifact.id=filemgr-fileget-plugin
+
+project.revision=TRUNK-SNAPSHOT
+dependency.pentaho-metadata.revision=TRUNK-SNAPSHOT
+src.dir=${basedir}/src
+testsrc.dir=${basedir}/test-src
+project.use-full-dist=true
+javadoc.packagenames=org.apache.oodt.*