Hi Folks,

in order integrate Ant with VAJ 3.0 to automate our nightly JUnit
tests I had to make a few changes to the VAJ tasks of Ant 1.5.1.

I think these changes might be useful to other people as well, so I
submit this patchset (patches are against CVS). In addition to the
source code patches I've also included a patch for the corresponding
page of the manual to reflect the new attributes, etc.

The patchset contains the following (independent) changes:

1. New "haltonerror" attribute for all three tasks
   Affected Files: VAJExport.java, VAJImport.java, VAJLoad.java,
                   VAJTask.java, VAJAntTool.html

   The haltonerror attribute works similar to the attribute
   supported by the <junit> task. Using this attribute you
   can control if a failed execution of a vaj task should
   stop the build (BuildException) or only log the
   errors and let the build continue. This feature is useful
   when exporting large codebases, as VAJ responds even to
   "minor" errors (like the seemingly ever existing class having
   syntax errors or unmet dependencies ;) with an exception,
   bringing down the build although only a few classes could
   not be exported (p.ex. in vendor supplied packages, etc).

2. Fix for bogus urlencoding in VAJRemoteUtil
   Affected Files: VAJRemoteUtil.java

   In order to make a path sent to a VAJ tool servlet
   "URL compliant" VAJRemoteUtil replaces all backslashes
   by slashes, ruining DOS/Windows style paths.
   This breaks the <vajexport> task (at least with
   VAJ 3.0 and Win2000) and probably also has an
   impact on the <vajimport> task (not verified).
   I wonder why this bug hasn't shown up earlier...
   probably it isn't a problem in newer VAJ versions anymore.
   I've replaced this with real urlencoding (URLEncoder)
   and it works nice here.

3. Support for dynamic version specifiers in <vajload>
   Affected Files: VAJLocalUtil.java, VAJAntTool.html
   Related Bugs:   #2236

   As stated in "Bug" #2236 the <vajload> task only is
   able to load project versions based on the version
   name/id. I've added the ability to use "*" and "**"
   as version qualifiers in order to load the
   latest editions available.
   "*" loads the latest _versioned_ edition of the project
   that is available, "**" loads the latest edition
   regardless if versioned or not (thus including scratch
   and open editions).
   I guess I don't have to explain why this is useful
   in conjunction with automated JUnit testing ;-)

4. Base classes for Servlets changed to IBM VAJ classes
   Affected Files: VAJToolsServlet.java
   Related Bugs:   #10016

   This "fix" surely is problematic (see Bug)
   In order to work with the VAJ Remote Tool API it seems the
   Servlets must be extending the IBM Servlet classes
   (com.ibm.ivj.toolserver.servletclasses.servlet.*)
   instead of the usual javax.servlet.* classes.

   This also _is_ true for Version 3.0 (not sure about 3.02
   though) which I've got here. This contradicts the
   issues considered in the Bug (p.ex. by Stefan, etc.):
   Modifying these imports doesn't break support for
   version 3.0, it makes it! (Making me wonder if there
   is any version that works with javax.servlet.* derived
   classes...)

   I've modified the import statements to reflect this,
   causing the obvious problem that the servlet classes
   won't compile anymore without the IBM libraries
   (but VAJLocalUtil.java won't do that either...)
   I see three ways to solve this problem:

   1. Come up with mock classes (same interface,
      no-op methods) to make the compiler happy and
      use them during the build (I'd prefer this way)
   2. Ship compiled .class files supplied by someone
      that has VAJ available
      (I'd be willing to do that _for this version_)
   3. Leave it alone and let people figure it out...
      (surely the easiest way, but probably gives a
       few people - like me - a hard time...)

   If 3 is the chosen solution the VAJ page in the manual
   cries for an update :-)

I hope the patch helps the people plagued by the VAJ Repository... ;-)


Okay, here goes:

Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java,v
retrieving revision 1.9
diff -u -r1.9 VAJExport.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java  25 Jul 
2002 15:21:15 -0000      1.9
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java  16 Jan 
2003 18:27:42 -0000
@@ -77,14 +77,68 @@
  * 'org.foo.subsystem1' except of these starting with
  * 'org.foo.subsystem1.test'.
  *
- * There are flags to choose which items to export:
- * exportSources:   export Java sources
- * exportResources: export project resources
- * exportClasses:   export class files
- * exportDebugInfo: export class files with debug info (use with exportClasses)
- * default is exporting Java files and resources.
+ * <p>Parameters:
+ * <table border="1" cellpadding="2" cellspacing="0">
+ * <tr>
+ *   <td valign="top"><b>Attribute</b></td>
+ *   <td valign="top"><b>Description</b></td>
+ *   <td align="center" valign="top"><b>Required</b></td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">destdir</td>
+ *   <td valign="top">location to store the exported files</td>
+ *   <td align="center" valign="top">Yes</td>
+ * <tr>
+ *   <td valign="top">exportSources</td>
+ *   <td valign="top">export Java sources, defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">exportResources</td>
+ *   <td valign="top">export resource files, defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">exportClasses</td>
+ *   <td valign="top">export class files, defaults to "no"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">exportDebugInfo</td>
+ *   <td valign="top">include debug info in exported class files,
+ *                    defaults to "no"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">defaultexcludes</td>
+ *   <td valign="top">use default excludes when exporting,
+ *                    defaults to "yes".
+ *                    Default excludes are: IBM/**,
+ *                    Java class libraries/**, Sun class libraries/**,
+ *                    JSP Page Compile Generated Code/**, Visual Age*/**</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">overwrite</td>
+ *   <td valign="top">overwrite existing files, defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">remote</td>
+ *   <td valign="top">remote tool server to run this command against
+ *                    (format: &lt;servername&gt; : &lt;port no&gt;)</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">haltonerror</td>
+ *   <td valign="top">stop the build process if an error occurs,
+ *                    defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * </table>
  *
  * @author Wolf Siberski, TUI Infotec GmbH
+ * @author Martin Landers, Beck et al. projects
  */

 public class VAJExport extends VAJTask {
@@ -123,12 +177,20 @@
         }

         // delegate the export to the VAJUtil object.
-        getUtil().exportPackages(destDir,
-            patternSet.getIncludePatterns(getProject()),
-            patternSet.getExcludePatterns(getProject()),
-            exportClasses, exportDebugInfo,
-            exportResources, exportSources,
-            useDefaultExcludes, overwrite);
+        try {
+            getUtil().exportPackages(destDir,
+                patternSet.getIncludePatterns(getProject()),
+                patternSet.getExcludePatterns(getProject()),
+                exportClasses, exportDebugInfo,
+                exportResources, exportSources,
+                useDefaultExcludes, overwrite);
+        } catch (BuildException ex) {
+            if (haltOnError) {
+                throw ex;
+            } else {
+                log(ex.toString());
+            }
+        }
     }

     /**
Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java,v
retrieving revision 1.17
diff -u -r1.17 VAJImport.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java  25 Jul 
2002 15:21:15 -0000      1.17
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java  16 Jan 
2003 18:27:42 -0000
@@ -82,7 +82,7 @@
  * created in the repository and automatically loaded into the Workspace.
  * There has to be at least one nested FileSet element.
  * </p>
- * <p>There are attributes to choose which items to export:
+ * <p>Parameters:
  * <table border="1" cellpadding="2" cellspacing="0">
  * <tr>
  *   <td valign="top"><b>Attribute</b></td>
@@ -110,9 +110,22 @@
  *   <td valign="top">import class files, defaults to "no"</td>
  *   <td align="center" valign="top">No</td>
  * </tr>
+ * <tr>
+ *   <td valign="top">remote</td>
+ *   <td valign="top">remote tool server to run this command against
+ *                    (format: &lt;servername&gt; : &lt;port no&gt;)</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">haltonerror</td>
+ *   <td valign="top">stop the build process if an error occurs,
+ *                    defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
  * </table>
  *
  * @author Glenn McAllister, inspired by a similar task written by Peter Kelley
+ * @author Martin Landers, Beck et al. projects
  */
 public class VAJImport extends VAJTask {
     protected Vector filesets = new Vector();
@@ -124,6 +137,25 @@


     /**
+     * Extended DirectoryScanner that has accessors for the
+     * includes and excludes fields.
+     *
+     * This is kindof a hack to get includes and excludes
+     * from the directory scanner. In order to keep
+     * the URLs short we only want to send the patterns to the
+     * remote tool server and let him figure out the files.
+     *
+     * This replaces the former reflection hack that
+     * didn't compile for old JDKs.
+     *
+     * @see VAJImport#importFileSet(FileSet)
+     */
+    private static class LocalDirectoryScanner extends DirectoryScanner {
+        public String[] getIncludes() { return includes; }
+        public String[] getExcludes() { return excludes; }
+    }
+
+    /**
      * The VisualAge for Java Project name to import into.
      */
     public void setProject(String projectName) {
@@ -182,9 +214,17 @@
             throw new BuildException("The VisualAge for Java Project name is 
required!");
         }

-        for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
-            importFileset((FileSet) e.nextElement());
-        }
+        try {
+            for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
+                importFileset((FileSet) e.nextElement());
+            }
+        } catch (BuildException ex) {
+            if (haltOnError) {
+                throw ex;
+            } else {
+                log(ex.toString());
+            }
+        }
     }

     /**
@@ -192,35 +232,14 @@
      * Workspace.
      */
     protected void importFileset(FileSet fileset) {
-        DirectoryScanner ds = fileset.getDirectoryScanner(this.getProject());
+        LocalDirectoryScanner ds = new LocalDirectoryScanner();
+        fileset.setupDirectoryScanner(ds, this.getProject());
         if (ds.getIncludedFiles().length == 0) {
             return;
         }

-        String[] includes = null;
-        String[] excludes = null;
-
-        // Hack to get includes and excludes. We could also use 
getIncludedFiles,
-        // but that would result in very long HTTP-requests.
-        // Therefore we want to send the patterns only to the remote tool 
server
-        // and let him figure out the files.
-        try {
-            Class directoryScanner = ds.getClass();
-
-            Field includesField = 
directoryScanner.getDeclaredField("includes");
-            includesField.setAccessible(true);
-            includes = (String[]) includesField.get(ds);
-
-            Field excludesField = 
directoryScanner.getDeclaredField("excludes");
-            excludesField.setAccessible(true);
-            excludes = (String[]) excludesField.get(ds);
-        } catch (NoSuchFieldException nsfe) {
-            throw new BuildException(
-                "DirectoryScanner.includes or .excludes missing" + 
nsfe.getMessage());
-        } catch (IllegalAccessException iae) {
-            throw new BuildException(
-                "Access to DirectoryScanner.includes or .excludes not 
allowed");
-        }
+        String[] includes = ds.getIncludes();
+        String[] excludes = ds.getExcludes();

         getUtil().importFiles(importProject, ds.getBasedir(),
                 includes, excludes,
Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java,v
retrieving revision 1.4
diff -u -r1.4 VAJLoad.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java    14 Apr 
2002 11:16:18 -0000      1.4
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLoad.java    16 Jan 
2003 18:27:42 -0000
@@ -56,19 +56,50 @@


 import java.util.Vector;
+import org.apache.tools.ant.BuildException;

 /**
- * Load specific project versions into the Visual Age for Java workspace.
- * Each project and version name has to be specified completely.
+ * Load project versions into the Visual Age for Java workspace.
+ * Each project is identified by its name and a version qualifier.
+ * Allowed qualifiers are:
+ * <ul>
+ * <li>Any valid Visual Age version name</li>
+ * <li>* (loads the latest <b>versioned</b> edition)</li>
+ * <li>** (loads the latest edition, including open editions)</li>
+ * </ul>
  * Example:
  * <blockquote>
  * &lt;vajload>
- * &nbsp;&lt;project name="MyVAProject" version="2.1"/>
+ * &nbsp;&lt;project name="MyVAProject" version="*"/>
  * &nbsp;&lt;project name="Apache Xerces" version="1.2.0"/>
+ * &nbsp;&lt;project name="Brand New Stuff" version="**"/>
  * &lt;/vajload>
  * </blockquote>
  *
+ * <p>Parameters:
+ * <table border="1" cellpadding="2" cellspacing="0">
+ * <tr>
+ *   <td valign="top"><b>Attribute</b></td>
+ *   <td valign="top"><b>Description</b></td>
+ *   <td align="center" valign="top"><b>Required</b></td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">remote</td>
+ *   <td valign="top">remote tool server to run this command against
+ *                    (format: &lt;servername&gt; : &lt;port no&gt;)</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * <tr>
+ *   <td valign="top">haltonerror</td>
+ *   <td valign="top">stop the build process if an error occurs,
+                      defaults to "yes"</td>
+ *   <td align="center" valign="top">No</td>
+ * </tr>
+ * </table>
+ * </p>
+ *
  * @author Wolf Siberski, TUI Infotec GmbH
+ * @author Martin Landers, Beck et al. projects
  */

 public class VAJLoad extends VAJTask {
@@ -78,7 +109,15 @@
      * Load specified projects.
      */
     public void execute() {
-        getUtil().loadProjects(projectDescriptions);
+        try {
+            getUtil().loadProjects(projectDescriptions);
+        } catch (BuildException ex) {
+            if (haltOnError) {
+                throw ex;
+            } else {
+                log(ex.toString());
+            }
+        }
     }

     /**
Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java,v
retrieving revision 1.10
diff -u -r1.10 VAJLocalUtil.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java       
31 Oct 2002 15:12:52 -0000      1.10
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java       
16 Jan 2003 18:27:42 -0000
@@ -64,6 +64,7 @@
 import com.ibm.ivj.util.base.Type;
 import com.ibm.ivj.util.base.Workspace;
 import java.io.File;
+import java.util.Date;
 import java.util.Enumeration;
 import java.util.Vector;
 import org.apache.tools.ant.BuildException;
@@ -75,6 +76,7 @@
  * wraps IvjExceptions into BuildExceptions
  *
  * @author Wolf Siberski, TUI Infotec GmbH
+ * @author Martin Landers, Beck et al. projects
  */
 abstract class VAJLocalUtil implements VAJUtil{
     // singleton containing the VAJ workspace
@@ -194,10 +196,17 @@
              e.hasMoreElements();) {
             VAJProjectDescription d = (VAJProjectDescription) e.nextElement();

-            ProjectEdition pe = findProjectEdition(d.getName(), 
d.getVersion());
+            ProjectEdition pe;
+            if (d.getVersion().equals("*"))
+                pe = findLatestProjectEdition(d.getName(), false);
+            else if (d.getVersion().equals("**"))
+                pe = findLatestProjectEdition(d.getName(), true);
+            else
+                pe = findProjectEdition(d.getName(), d.getVersion());
             try {
-                log("Loading '" + d.getName() + "', Version '" + d.getVersion()
-                    + "', into Workspace", MSG_VERBOSE);
+                log("Loading '" + pe.getName() + "', Version '" +
+                    ((pe.getVersionName() != 
null)?pe.getVersionName():"("+pe.getVersionStamp()+ ")")+
+                    "' into Workspace", MSG_VERBOSE);
                 pe.loadIntoWorkspace();
             } catch (IvjException ex) {
                 throw createBuildException("Project '" + d.getName()
@@ -264,6 +273,47 @@
             }
             return pe;

+        } catch (IvjException e) {
+            throw createBuildException("VA Exception occured: ", e);
+        }
+
+    }
+
+    /**
+     * Finds the latest project edition in the repository.
+     *
+     * @param name project name
+     * @param includeOpenEditions include open/scratch editions in the search?
+     * @return com.ibm.ivj.util.base.ProjectEdition the specified edition
+     */
+    private ProjectEdition findLatestProjectEdition(
+                                              String name,
+                                              boolean includeOpenEditions) {
+        try {
+            ProjectEdition[] editions = null;
+            editions = getWorkspace().getRepository().getProjectEditions(name);
+            if (editions == null) {
+                throw new BuildException("Project " + name + " doesn't exist");
+            }
+
+            // find latest (versioned) project edition by date
+            ProjectEdition pe = null;
+            Date latestStamp = new Date(0); // Let's hope there are no 
projects older than the epoch ;-)
+            for (int i = 0; i < editions.length; i++) {
+                if (!includeOpenEditions && !editions[i].isVersion())
+                    continue;
+                if (latestStamp.before(editions[i].getVersionStamp())) {
+                    latestStamp = editions[i].getVersionStamp();
+                    pe = editions[i];
+                }
+            }
+
+            if (pe == null) {
+                throw new BuildException("Can't determine latest edition for 
project " + name);
+            }
+            log("Using version " + ((pe.getVersionName() != 
null)?pe.getVersionName():"("+pe.getVersionStamp()+ ")") +
+                " of " + pe.getName(), MSG_INFO);
+            return pe;
         } catch (IvjException e) {
             throw createBuildException("VA Exception occured: ", e);
         }
Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java,v
retrieving revision 1.6
diff -u -r1.6 VAJRemoteUtil.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java      
25 Jul 2002 15:21:15 -0000      1.6
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java      
16 Jan 2003 18:27:42 -0000
@@ -61,6 +61,7 @@
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.URLEncoder;
 import java.util.Enumeration;
 import java.util.Vector;
 import org.apache.tools.ant.BuildException;
@@ -71,6 +72,7 @@
  * wraps IvjExceptions into BuildExceptions
  *
  * @author Wolf Siberski, TUI Infotec GmbH
+ * @author Martin Landers, Beck et al. projects
  */
 class VAJRemoteUtil implements VAJUtil{
     // calling task
@@ -139,7 +141,7 @@
                                               boolean includeSources, boolean 
useDefaultExcludes) {
         String result =
             VAJToolsServlet.DIR_PARAM + "="
-            + dir.getAbsolutePath().replace('\\', '/') + "&"
+            + URLEncoder.encode(dir.getAbsolutePath()) + "&"
             + VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&"
             + VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&"
             + VAJToolsServlet.SOURCES_PARAM + "=" + includeSources + "&"
@@ -148,13 +150,13 @@
         if (includePatterns != null) {
             for (int i = 0; i < includePatterns.length; i++){
                 result = result + "&" + VAJExportServlet.INCLUDE_PARAM + "="
-                    + includePatterns[i].replace(' ', '+').replace('\\', '/');
+                    + URLEncoder.encode(includePatterns[i]);
             }
         }
         if (excludePatterns != null) {
             for (int i = 0; i < excludePatterns.length; i++){
                 result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "="
-                    + excludePatterns[i].replace(' ', '+').replace('\\', '/');
+                    + URLEncoder.encode(excludePatterns[i]);
             }
         }

Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java,v
retrieving revision 1.5
diff -u -r1.5 VAJTask.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java    9 Jul 
2002 21:06:06 -0000       1.5
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java    16 Jan 
2003 18:27:43 -0000
@@ -59,6 +59,7 @@
  * attributes (remoteServer) and util methods
  *
  * @author: Wolf Siberski
+ * @author: Martin Landers, Beck et al. projects
  */
 import org.apache.tools.ant.Task;

@@ -79,6 +80,8 @@
     // holds the appropriate VAJUtil implementation
     private VAJUtil util = null;

+    // checks if this task throws BuildException on error
+    protected boolean haltOnError = true;

     /**
      * returns the VAJUtil implementation
@@ -102,5 +105,16 @@
      */
     public void setRemote(String remoteServer) {
         this.remoteServer = remoteServer;
+    }
+
+    /**
+    * Flag to control behaviour in case of VAJ errors.
+    * If this attribute is set errors will be ignored
+    * (no BuildException will be thrown) otherwise
+    * VAJ errors will be wrapped into a BuildException and
+    * stop the build.
+    */
+    public void setHaltonerror(boolean newHaltOnError) {
+        haltOnError = newHaltOnError;
     }
 }
Index: src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java,v
retrieving revision 1.10
diff -u -r1.10 VAJToolsServlet.java
--- src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java    
25 Jul 2002 15:21:15 -0000      1.10
+++ src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java    
16 Jan 2003 18:27:43 -0000
@@ -56,11 +56,11 @@



+import com.ibm.ivj.toolserver.servletclasses.servlet.ServletException;
+import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServlet;
+import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServletRequest;
+import com.ibm.ivj.toolserver.servletclasses.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.util.StringUtils;

Index: docs/manual/Integration/VAJAntTool.html
===================================================================
RCS file: /home/cvspublic/jakarta-ant/docs/manual/Integration/VAJAntTool.html,v
retrieving revision 1.14
diff -u -r1.14 VAJAntTool.html
--- docs/manual/Integration/VAJAntTool.html     25 Nov 2002 12:42:51 -0000      
1.14
+++ docs/manual/Integration/VAJAntTool.html     16 Jan 2003 18:52:41 -0000
@@ -14,8 +14,11 @@
   [EMAIL PROTECTED]</A> )
   <LI>Christoph Wilhelms
       (<A href="mailto:[EMAIL PROTECTED]">
-  [EMAIL PROTECTED]</A>)</LI></UL>
-Version 1.2 - 2001/06/14<br>
+  [EMAIL PROTECTED]</A>)</LI>
+  <LI>Martin Landers
+      (<A href="mailto:[EMAIL PROTECTED]">
+  [EMAIL PROTECTED]</A>)</LI></UL>
+Version 1.2.1 - 2003/01/16<br>
 <hr>
 <h2>Table of Contents</H2>
 <ul>
@@ -99,15 +102,21 @@
        <td valign="top"><b>Attribute</B></TD>
        <td valign="top"><b>Description</B></TD>
        <td align="middle" valign="top"><b>Required</B></TD></TR>
-     <tr>
+    <tr>
        <td valign="top">remote</TD>
        <td valign="top">
       <P>name and port of a remote tool server. (format:
       &lt;servername&gt;:&lt;port no&gt;).<BR>If this
       attribute is set, the tasks will&nbsp;be executed on the specified tool
       server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
+       <td valign="top" align="middle">no</TD></TR>
+     <tr>
+       <td valign="top">haltonerror</B></TD>
+       <td valign="top">
+      <P>Stop the build process if an error occurs,
+         (default: "yes")</P></TD>
+       <td align="middle" valign="top">no</TD></TR></TABLE>
+
 <h3>Parameters specified as nested elements</H3>
 <h4>vajproject</H4>
 <table border="1" cellpadding="2" cellspacing="0">
@@ -123,13 +132,17 @@
        <td valign="top" align="middle">yes</TD></TR>
      <tr>
        <td valign="top">version</TD>
-       <td valign="top">name of the requested version</TD>
+       <td valign="top"><P>name of the requested version,
+       or one of the special qualifiers "*" or "**"<BR>
+       "*" loads the latest <b>versioned</b> edition of the project<BR>
+       "**" will load the latest version (including open editions)</P></TD>
        <td valign="top" align="middle">yes</TD></TR>
      </TABLE>

 <h3>Example</H3>
 <pre>&lt;vajload remote="localhost:32767"&gt;
-    &lt;vajproject name="My Testcases" version="1.7beta"/&gt;
+    &lt;vajproject name="My App" version="*"/&gt;
+    &lt;vajproject name="My Testcases" version="**"/&gt;
     &lt;vajproject name="JUnit" version="3.2"/&gt;
 &lt;/vajload&gt;
 </PRE>
@@ -193,8 +206,14 @@
       &lt;servername&gt;:&lt;port no&gt;).<BR>If this
       attribute is set, the tasks will&nbsp;be executed on the specified tool
       server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
+       <td valign="top" align="middle">no</TD></TR>
+     <tr>
+       <td valign="top">haltonerror</B></TD>
+       <td valign="top">
+      <P>Stop the build process if an error occurs,
+         (default: "yes")</P></TD>
+       <td align="middle" valign="top">no</TD></TR></TABLE>
+
 <h3>Parameters specified as nested elements</H3>

 <h4>include</H4>
@@ -260,7 +279,7 @@
        <td valign="top"><b>Description</B></TD>
        <td align="middle" valign="top"><b>Required</B></TD></TR>
      <tr>
-       <td valign="top">vajProject</TD>
+       <td valign="top">project</TD>
        <td valign="top">imported files are added to this VAJ
       project</TD>
        <td valign="top" align="middle">yes</TD></TR>
@@ -285,8 +304,14 @@
       &lt;servername&gt;:&lt;port no&gt;).<BR>If this
       attribute is set, the tasks will&nbsp;be executed on the specified tool
       server.&nbsp;</P></TD>
-       <td valign="top" align="middle">no</TD></TR></TABLE>
-
+       <td valign="top" align="middle">no</TD></TR>
+     <tr>
+       <td valign="top">haltonerror</B></TD>
+       <td valign="top">
+      <P>Stop the build process if an error occurs,
+         (default: "yes")</P></TD>
+       <td align="middle" valign="top">no</TD></TR></TABLE>
+
 <h3>Parameters specified as nested elements</H3>

 <h4>fileset</H4>
@@ -553,10 +578,14 @@
        <td valign="top">1.2</TD>
        <td valign="top">2001/07/02</TD>
        <td valign="top">
-      <P>Added documentation of new remote feature.<BR>Minor 
corrections.</P></TD></TR></TABLE>
+      <P>Added documentation of new remote feature.<BR>Minor 
corrections.</P></TD></TR>
+     <tr valign="top">
+       <td valign="top">1.2.1</TD>
+       <td valign="top">2003/01/16</TD>
+       <td valign="top">
+      <P>Added documentation for haltonerror, "*" and "**" version 
qualifiers.</P></TD></TR></TABLE>
 <hr>
-<center>Copyright &amp;#copy 2001-2002 Apache Software
+<center>Copyright &copy; 2001-2002 Apache Software
 Foundation. All rights Reserved.</CENTER>
 </body>
 </html>
-




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to