Browse Source

Convert tabs to spaces...

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270031 13f79535-47bb-0310-9956-ffa450edef68
master
Magesh Umasankar 23 years ago
parent
commit
17e5ca8721
38 changed files with 2868 additions and 2875 deletions
  1. +4
    -4
      src/main/org/apache/tools/ant/RuntimeConfigurable.java
  2. +37
    -37
      src/main/org/apache/tools/ant/taskdefs/Deltree.java
  3. +13
    -13
      src/main/org/apache/tools/ant/taskdefs/ExecTask.java
  4. +136
    -143
      src/main/org/apache/tools/ant/taskdefs/Get.java
  5. +19
    -19
      src/main/org/apache/tools/ant/taskdefs/Javac.java
  6. +57
    -57
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  7. +17
    -17
      src/main/org/apache/tools/ant/taskdefs/Mkdir.java
  8. +15
    -15
      src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java
  9. +52
    -52
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java
  10. +1170
    -1171
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java
  11. +155
    -155
      src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java
  12. +14
    -14
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java
  13. +39
    -39
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java
  14. +26
    -27
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJBuildInfo.java
  15. +133
    -133
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java
  16. +121
    -121
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java
  17. +3
    -3
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.java
  18. +46
    -46
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java
  19. +11
    -11
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJProjectDescription.java
  20. +21
    -21
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java
  21. +9
    -9
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java
  22. +12
    -12
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java
  23. +36
    -36
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJUtil.java
  24. +19
    -19
      src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJWorkspaceScanner.java
  25. +21
    -21
      src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java
  26. +4
    -4
      src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java
  27. +6
    -6
      src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
  28. +28
    -28
      src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java
  29. +46
    -46
      src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java
  30. +13
    -13
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java
  31. +7
    -7
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java
  32. +49
    -49
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java
  33. +19
    -17
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java
  34. +23
    -23
      src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java
  35. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java
  36. +246
    -246
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassPathLoader.java
  37. +207
    -207
      src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/Utils.java
  38. +33
    -33
      src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java

+ 4
- 4
src/main/org/apache/tools/ant/RuntimeConfigurable.java View File

@@ -132,14 +132,14 @@ public class RuntimeConfigurable {
public String getElementTag() { public String getElementTag() {
return elementTag; return elementTag;
} }
/** /**
* Configure the wrapped element and all children. * Configure the wrapped element and all children.
*/ */
public void maybeConfigure(Project p) throws BuildException { public void maybeConfigure(Project p) throws BuildException {
String id = null;
String id = null;
if (attributes != null) { if (attributes != null) {
ProjectHelper.configure(wrappedObject, attributes, p); ProjectHelper.configure(wrappedObject, attributes, p);
id = attributes.getValue("id"); id = attributes.getValue("id");


+ 37
- 37
src/main/org/apache/tools/ant/taskdefs/Deltree.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -72,28 +72,28 @@ public class Deltree extends Task {
private File dir; private File dir;


public void setDir(File dir) { public void setDir(File dir) {
this.dir = dir;
this.dir = dir;
} }
public void execute() throws BuildException { public void execute() throws BuildException {
log("DEPRECATED - The deltree task is deprecated. Use delete instead."); log("DEPRECATED - The deltree task is deprecated. Use delete instead.");


if (dir == null) { if (dir == null) {
throw new BuildException("dir attribute must be set!", location); throw new BuildException("dir attribute must be set!", location);
}
}


if (dir.exists()) {
if (!dir.isDirectory()) {
if (!dir.delete()) {
throw new BuildException("Unable to delete directory "
if (dir.exists()) {
if (!dir.isDirectory()) {
if (!dir.delete()) {
throw new BuildException("Unable to delete directory "
+ dir.getAbsolutePath(), + dir.getAbsolutePath(),
location); location);
}
return;
// String msg = "Given dir: " + dir.getAbsolutePath() +
// " is not a dir";
// throw new BuildException(msg);
}
}
return;
// String msg = "Given dir: " + dir.getAbsolutePath() +
// " is not a dir";
// throw new BuildException(msg);
}


log("Deleting: " + dir.getAbsolutePath()); log("Deleting: " + dir.getAbsolutePath());


@@ -105,31 +105,31 @@ public class Deltree extends Task {
} }
} }
} }
private void removeDir(File dir) throws IOException { private void removeDir(File dir) throws IOException {


// check to make sure that the given dir isn't a symlink // check to make sure that the given dir isn't a symlink
// the comparison of absolute path and canonical path // the comparison of absolute path and canonical path
// catches this // catches this
// if (dir.getCanonicalPath().equals(dir.getAbsolutePath())) {
// (costin) It will not work if /home/costin is symlink to /da0/home/costin ( taz
// for example )
String[] list = dir.list();
for (int i = 0; i < list.length; i++) {
String s = list[i];
File f = new File(dir, s);
if (f.isDirectory()) {
removeDir(f);
} else {
if (!f.delete()) {
throw new BuildException("Unable to delete file " + f.getAbsolutePath());
}
}
}
// if (dir.getCanonicalPath().equals(dir.getAbsolutePath())) {
// (costin) It will not work if /home/costin is symlink to /da0/home/costin ( taz
// for example )
String[] list = dir.list();
for (int i = 0; i < list.length; i++) {
String s = list[i];
File f = new File(dir, s);
if (f.isDirectory()) {
removeDir(f);
} else {
if (!f.delete()) {
throw new BuildException("Unable to delete file " + f.getAbsolutePath());
}
}
}
if (!dir.delete()) { if (!dir.delete()) {
throw new BuildException("Unable to delete directory " + dir.getAbsolutePath());
}
throw new BuildException("Unable to delete directory " + dir.getAbsolutePath());
}
} }
} }



+ 13
- 13
src/main/org/apache/tools/ant/taskdefs/ExecTask.java View File

@@ -75,7 +75,7 @@ import java.io.FileNotFoundException;
* @author rubys@us.ibm.com * @author rubys@us.ibm.com
* @author thomas.haas@softwired-inc.com * @author thomas.haas@softwired-inc.com
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:mariusz@rakiura.org">Mariusz Nowostawski</a>
* @author <a href="mailto:mariusz@rakiura.org">Mariusz Nowostawski</a>
*/ */
public class ExecTask extends Task { public class ExecTask extends Task {


@@ -95,7 +95,7 @@ public class ExecTask extends Task {


/** Controls whether the VM (1.3 and above) is used to execute the command */ /** Controls whether the VM (1.3 and above) is used to execute the command */
private boolean vmLauncher = true; private boolean vmLauncher = true;
/** /**
* Timeout in milliseconds after which the process will be killed. * Timeout in milliseconds after which the process will be killed.
*/ */
@@ -146,7 +146,7 @@ public class ExecTask extends Task {
* the process * the process
*/ */
public void setOutputproperty(String outputprop) { public void setOutputproperty(String outputprop) {
this.outputprop = outputprop;
this.outputprop = outputprop;
} }


/** /**
@@ -195,10 +195,10 @@ public class ExecTask extends Task {
throw new BuildException("no executable specified", location); throw new BuildException("no executable specified", location);
} }
if (dir != null && !dir.exists()) { if (dir != null && !dir.exists()) {
throw new BuildException("The directory you specified does not exist");
throw new BuildException("The directory you specified does not exist");
} }
if (dir != null && !dir.isDirectory()) { if (dir != null && !dir.isDirectory()) {
throw new BuildException("The directory you specified is not a directory");
throw new BuildException("The directory you specified is not a directory");
} }
} }


@@ -224,7 +224,7 @@ public class ExecTask extends Task {
public void setVMLauncher(boolean vmLauncher) { public void setVMLauncher(boolean vmLauncher) {
this.vmLauncher = vmLauncher; this.vmLauncher = vmLauncher;
} }
/** /**
* Create an Execute instance with the correct working directory set. * Create an Execute instance with the correct working directory set.
*/ */
@@ -233,7 +233,7 @@ public class ExecTask extends Task {
if (dir == null) dir = project.getBaseDir(); if (dir == null) dir = project.getBaseDir();
// show the command // show the command
log(cmdl.toString(), Project.MSG_VERBOSE); log(cmdl.toString(), Project.MSG_VERBOSE);
Execute exe = new Execute(createHandler(), createWatchdog()); Execute exe = new Execute(createHandler(), createWatchdog());
exe.setAntRun(project); exe.setAntRun(project);
exe.setWorkingDirectory(dir); exe.setWorkingDirectory(dir);
@@ -265,7 +265,7 @@ public class ExecTask extends Task {
} }
} }
if (baos != null) { if (baos != null) {
BufferedReader in =
BufferedReader in =
new BufferedReader(new StringReader(baos.toString())); new BufferedReader(new StringReader(baos.toString()));
String line = null; String line = null;
StringBuffer val = new StringBuffer(); StringBuffer val = new StringBuffer();
@@ -278,7 +278,7 @@ public class ExecTask extends Task {
project.setProperty(outputprop, val.toString()); project.setProperty(outputprop, val.toString());
} }
} }
/** /**
* Run the command using the given Execute instance. This may be overidden by subclasses * Run the command using the given Execute instance. This may be overidden by subclasses
*/ */
@@ -309,10 +309,10 @@ public class ExecTask extends Task {
throw new BuildException("Cannot write to "+out, ioe, location); throw new BuildException("Cannot write to "+out, ioe, location);
} }
} else if (outputprop != null) { } else if (outputprop != null) {
// try {
baos = new ByteArrayOutputStream();
log("Output redirected to ByteArray", Project.MSG_VERBOSE);
return new PumpStreamHandler(baos);
// try {
baos = new ByteArrayOutputStream();
log("Output redirected to ByteArray", Project.MSG_VERBOSE);
return new PumpStreamHandler(baos);
} else { } else {
return new LogStreamHandler(this, return new LogStreamHandler(this,
Project.MSG_INFO, Project.MSG_WARN); Project.MSG_INFO, Project.MSG_WARN);


+ 136
- 143
src/main/org/apache/tools/ant/taskdefs/Get.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -67,9 +67,9 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;


/** /**
* Get a particular file from a URL source.
* Options include verbose reporting, timestamp based fetches and controlling
* actions on failures. NB: access through a firewall only works if the whole
* Get a particular file from a URL source.
* Options include verbose reporting, timestamp based fetches and controlling
* actions on failures. NB: access through a firewall only works if the whole
* Java runtime is correctly configured. * Java runtime is correctly configured.
* *
* @author costin@dnt.ro * @author costin@dnt.ro
@@ -84,7 +84,7 @@ public class Get extends Task {
private String uname = null; private String uname = null;
private String pword = null; private String pword = null;


/** /**
* Does the work. * Does the work.
* *
@@ -99,12 +99,12 @@ public class Get extends Task {
throw new BuildException("dest attribute is required", location); throw new BuildException("dest attribute is required", location);
} }


if (dest.exists() && dest.isDirectory()) {
if (dest.exists() && dest.isDirectory()) {
throw new BuildException("The specified destination is a directory", throw new BuildException("The specified destination is a directory",
location); location);
} }


if (dest.exists() && !dest.canWrite()) {
if (dest.exists() && !dest.canWrite()) {
throw new BuildException("Can't write to " + dest.getAbsolutePath(), throw new BuildException("Can't write to " + dest.getAbsolutePath(),
location); location);
} }
@@ -123,10 +123,10 @@ public class Get extends Task {
Date t=new Date(timestamp); Date t=new Date(timestamp);
log("local file date : "+t.toString()); log("local file date : "+t.toString());
} }
hasTimestamp=true; hasTimestamp=true;
} }
//set up the URL connection //set up the URL connection
URLConnection connection=source.openConnection(); URLConnection connection=source.openConnection();
//modify the headers //modify the headers
@@ -134,24 +134,23 @@ public class Get extends Task {
if(useTimestamp && hasTimestamp) { if(useTimestamp && hasTimestamp) {
connection.setIfModifiedSince(timestamp); connection.setIfModifiedSince(timestamp);
} }
// prepare Java 1.1 style credentials
if (uname != null || pword != null) {
String up = uname + ":" + pword;
String encoding;
// check to see if sun's Base64 encoder is available.
try {
sun.misc.BASE64Encoder encoder =
(sun.misc.BASE64Encoder) Class.forName("sun.misc.BASE64Encoder").newInstance();
encoding = encoder.encode (up.getBytes());

}
catch (Exception ex) { // sun's base64 encoder isn't available
Base64Converter encoder = new Base64Converter();
encoding = encoder.encode(up.getBytes());
}
connection.setRequestProperty ("Authorization", "Basic " + encoding);

}
// prepare Java 1.1 style credentials
if (uname != null || pword != null) {
String up = uname + ":" + pword;
String encoding;
// check to see if sun's Base64 encoder is available.
try {
sun.misc.BASE64Encoder encoder =
(sun.misc.BASE64Encoder) Class.forName("sun.misc.BASE64Encoder").newInstance();
encoding = encoder.encode (up.getBytes());

}
catch (Exception ex) { // sun's base64 encoder isn't available
Base64Converter encoder = new Base64Converter();
encoding = encoder.encode(up.getBytes());
}
connection.setRequestProperty ("Authorization", "Basic " + encoding);
}


//connect to the remote site (may take some time) //connect to the remote site (may take some time)
connection.connect(); connection.connect();
@@ -160,23 +159,23 @@ public class Get extends Task {
HttpURLConnection httpConnection=(HttpURLConnection)connection; HttpURLConnection httpConnection=(HttpURLConnection)connection;
if(httpConnection.getResponseCode()==HttpURLConnection.HTTP_NOT_MODIFIED) { if(httpConnection.getResponseCode()==HttpURLConnection.HTTP_NOT_MODIFIED) {
//not modified so no file download. just return instead //not modified so no file download. just return instead
//and trace out something so the user doesn't think that the
//and trace out something so the user doesn't think that the
//download happened when it didnt //download happened when it didnt
log("Not modified - so not downloaded"); log("Not modified - so not downloaded");
return;
return;
} }
// test for 401 result (HTTP only)
// test for 401 result (HTTP only)
if(httpConnection.getResponseCode()==HttpURLConnection.HTTP_UNAUTHORIZED) { if(httpConnection.getResponseCode()==HttpURLConnection.HTTP_UNAUTHORIZED) {
log("Not authorized - check " + dest + " for details"); log("Not authorized - check " + dest + " for details");
return;
return;
} }


} }


//REVISIT: at this point even non HTTP connections may support the if-modified-since //REVISIT: at this point even non HTTP connections may support the if-modified-since
//behaviour -we just check the date of the content and skip the write if it is not //behaviour -we just check the date of the content and skip the write if it is not
//newer. Some protocols (FTP) dont include dates, of course.
//newer. Some protocols (FTP) dont include dates, of course.
FileOutputStream fos = new FileOutputStream(dest); FileOutputStream fos = new FileOutputStream(dest);


InputStream is=null; InputStream is=null;
@@ -190,15 +189,15 @@ public class Get extends Task {
} }
if( is==null ) { if( is==null ) {
log( "Can't get " + source + " to " + dest); log( "Can't get " + source + " to " + dest);
if(ignoreErrors)
if(ignoreErrors)
return; return;
throw new BuildException( "Can't get " + source + " to " + dest, throw new BuildException( "Can't get " + source + " to " + dest,
location); location);
} }
byte[] buffer = new byte[100 * 1024]; byte[] buffer = new byte[100 * 1024];
int length; int length;
while ((length = is.read(buffer)) >= 0) { while ((length = is.read(buffer)) >= 0) {
fos.write(buffer, 0, length); fos.write(buffer, 0, length);
if (verbose) System.out.print("."); if (verbose) System.out.print(".");
@@ -206,8 +205,8 @@ public class Get extends Task {
if(verbose) System.out.println(); if(verbose) System.out.println();
fos.close(); fos.close();
is.close(); is.close();
//if (and only if) the use file time option is set, then the
//if (and only if) the use file time option is set, then the
//saved file now has its timestamp set to that of the downloaded file //saved file now has its timestamp set to that of the downloaded file
if(useTimestamp) { if(useTimestamp) {
long remoteTimestamp=connection.getLastModified(); long remoteTimestamp=connection.getLastModified();
@@ -219,18 +218,15 @@ public class Get extends Task {
if(remoteTimestamp!=0) if(remoteTimestamp!=0)
touchFile(dest,remoteTimestamp); touchFile(dest,remoteTimestamp);
} }


} catch (IOException ioe) { } catch (IOException ioe) {
log("Error getting " + source + " to " + dest ); log("Error getting " + source + " to " + dest );
if(ignoreErrors)
if(ignoreErrors)
return; return;
throw new BuildException(ioe, location); throw new BuildException(ioe, location);
} }
} }
/**
/**
* set the timestamp of a named file to a specified time. * set the timestamp of a named file to a specified time.
* *
* @param filename * @param filename
@@ -240,7 +236,7 @@ public class Get extends Task {
*@exception BuildException Thrown in unrecoverable error. Likely *@exception BuildException Thrown in unrecoverable error. Likely
*this comes from file access failures. *this comes from file access failures.
*/ */
protected boolean touchFile(File file, long timemillis)
protected boolean touchFile(File file, long timemillis)
throws BuildException { throws BuildException {


if (project.getJavaVersion() != Project.JAVA_1_1) { if (project.getJavaVersion() != Project.JAVA_1_1) {
@@ -252,11 +248,11 @@ public class Get extends Task {
touch.setMillis(timemillis); touch.setMillis(timemillis);
touch.touch(); touch.touch();
return true; return true;
} else { } else {
return false; return false;
} }
}
}


/** /**
* Set the URL. * Set the URL.
@@ -300,13 +296,13 @@ public class Get extends Task {
* <p>In this situation, the if-modified-since header is set so that the file is * <p>In this situation, the if-modified-since header is set so that the file is
* only fetched if it is newer than the local file (or there is no local file) * only fetched if it is newer than the local file (or there is no local file)
* This flag is only valid on HTTP connections, it is ignored in other cases. * This flag is only valid on HTTP connections, it is ignored in other cases.
* When the flag is set, the local copy of the downloaded file will also
* have its timestamp set to the remote file time.
* When the flag is set, the local copy of the downloaded file will also
* have its timestamp set to the remote file time.
* <br> * <br>
* Note that remote files of date 1/1/1970 (GMT) are treated as 'no timestamp', and * Note that remote files of date 1/1/1970 (GMT) are treated as 'no timestamp', and
* web servers often serve files with a timestamp in the future by replacing their timestamp * web servers often serve files with a timestamp in the future by replacing their timestamp
* with that of the current time. Also, inter-computer clock differences can cause no end of
* grief.
* with that of the current time. Also, inter-computer clock differences can cause no end of
* grief.
* @param v "true" to enable file time fetching * @param v "true" to enable file time fetching
*/ */
public void setUseTimestamp(boolean v) { public void setUseTimestamp(boolean v) {
@@ -334,95 +330,92 @@ public class Get extends Task {
this.pword = p; this.pword = p;
} }


/*********************************************************************
* BASE 64 encoding of a String or an array of bytes.
*
* Based on RFC 1421.
*
* @author
* Unknown
* @author
* <a HREF="gg@grtmail.com">Gautam Guliani</a>
*********************************************************************/

class Base64Converter
{

public final char [ ] alphabet = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 to 7
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 8 to 15
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 16 to 23
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 24 to 31
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 32 to 39
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 40 to 47
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 48 to 55
'4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63


public String encode ( String s )
{
return encode ( s.getBytes ( ) );
}

public String encode ( byte [ ] octetString )
{
int bits24;
int bits6;

char [ ] out
= new char [ ( ( octetString.length - 1 ) / 3 + 1 ) * 4 ];

int outIndex = 0;
int i = 0;

while ( ( i + 3 ) <= octetString.length ) {
// store the octets
bits24=( octetString [ i++ ] & 0xFF ) << 16;
bits24 |=( octetString [ i++ ] & 0xFF ) << 8;

bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x00000FC0 ) >> 6;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0000003F );
out [ outIndex++ ] = alphabet [ bits6 ];
}

if ( octetString.length - i == 2 )
{
// store the octets
bits24 = ( octetString [ i ] & 0xFF ) << 16;
bits24 |=( octetString [ i + 1 ] & 0xFF ) << 8;
bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x00000FC0 ) >> 6;
out [ outIndex++ ] = alphabet [ bits6 ];

// padding
out [ outIndex++ ] = '=';
}
else if ( octetString.length - i == 1 )
{
// store the octets
bits24 = ( octetString [ i ] & 0xFF ) << 16;
bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];

// padding
out [ outIndex++ ] = '=';
out [ outIndex++ ] = '=';
}

return new String ( out );
}
/*********************************************************************
* BASE 64 encoding of a String or an array of bytes.
*
* Based on RFC 1421.
*
* @author
* Unknown
* @author
* <a HREF="gg@grtmail.com">Gautam Guliani</a>
*********************************************************************/

class Base64Converter
{

public final char [ ] alphabet = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', // 0 to 7
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', // 8 to 15
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', // 16 to 23
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', // 24 to 31
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', // 32 to 39
'o', 'p', 'q', 'r', 's', 't', 'u', 'v', // 40 to 47
'w', 'x', 'y', 'z', '0', '1', '2', '3', // 48 to 55
'4', '5', '6', '7', '8', '9', '+', '/' }; // 56 to 63


public String encode ( String s )
{
return encode ( s.getBytes ( ) );
}


}
public String encode ( byte [ ] octetString )
{
int bits24;
int bits6;

char [ ] out
= new char [ ( ( octetString.length - 1 ) / 3 + 1 ) * 4 ];

int outIndex = 0;
int i = 0;

while ( ( i + 3 ) <= octetString.length ) {
// store the octets
bits24=( octetString [ i++ ] & 0xFF ) << 16;
bits24 |=( octetString [ i++ ] & 0xFF ) << 8;

bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x00000FC0 ) >> 6;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0000003F );
out [ outIndex++ ] = alphabet [ bits6 ];
}


if ( octetString.length - i == 2 )
{
// store the octets
bits24 = ( octetString [ i ] & 0xFF ) << 16;
bits24 |=( octetString [ i + 1 ] & 0xFF ) << 8;
bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x00000FC0 ) >> 6;
out [ outIndex++ ] = alphabet [ bits6 ];

// padding
out [ outIndex++ ] = '=';
}
else if ( octetString.length - i == 1 )
{
// store the octets
bits24 = ( octetString [ i ] & 0xFF ) << 16;
bits6=( bits24 & 0x00FC0000 )>> 18;
out [ outIndex++ ] = alphabet [ bits6 ];
bits6 = ( bits24 & 0x0003F000 ) >> 12;
out [ outIndex++ ] = alphabet [ bits6 ];

// padding
out [ outIndex++ ] = '=';
out [ outIndex++ ] = '=';
}


return new String ( out );
}
}
} }

+ 19
- 19
src/main/org/apache/tools/ant/taskdefs/Javac.java View File

@@ -134,7 +134,7 @@ public class Javac extends MatchingTask {


private String source; private String source;
private String debugLevel; private String debugLevel;
/** /**
* Get the value of debugLevel. * Get the value of debugLevel.
* @return value of debugLevel. * @return value of debugLevel.
@@ -158,7 +158,7 @@ public class Javac extends MatchingTask {
public String getSource() { public String getSource() {
return source; return source;
} }
/** /**
* Set the value of source. * Set the value of source.
* @param v Value to assign to source. * @param v Value to assign to source.
@@ -500,7 +500,7 @@ public class Javac extends MatchingTask {
* Is this a forked invocation of JDK's javac? * Is this a forked invocation of JDK's javac?
*/ */
public boolean isForkedJavac() { public boolean isForkedJavac() {
return !"false".equals(fork) ||
return !"false".equals(fork) ||
"extJavac".equals(project.getProperty("build.compiler")); "extJavac".equals(project.getProperty("build.compiler"));
} }


@@ -534,7 +534,7 @@ public class Javac extends MatchingTask {
* Adds an implementation specific command line argument. * Adds an implementation specific command line argument.
*/ */
public ImplementationSpecificArgument createCompilerArg() { public ImplementationSpecificArgument createCompilerArg() {
ImplementationSpecificArgument arg =
ImplementationSpecificArgument arg =
new ImplementationSpecificArgument(); new ImplementationSpecificArgument();
implementationSpecificArgs.addElement(arg); implementationSpecificArgs.addElement(arg);
return arg; return arg;
@@ -546,10 +546,10 @@ public class Javac extends MatchingTask {
*/ */
public String[] getCurrentCompilerArgs() { public String[] getCurrentCompilerArgs() {
Vector args = new Vector(); Vector args = new Vector();
for (Enumeration enum = implementationSpecificArgs.elements();
for (Enumeration enum = implementationSpecificArgs.elements();
enum.hasMoreElements(); enum.hasMoreElements();
) { ) {
String[] curr =
String[] curr =
((ImplementationSpecificArgument) enum.nextElement()).getParts(); ((ImplementationSpecificArgument) enum.nextElement()).getParts();
for (int i=0; i<curr.length; i++) { for (int i=0; i<curr.length; i++) {
args.addElement(curr[i]); args.addElement(curr[i]);
@@ -666,25 +666,25 @@ public class Javac extends MatchingTask {
} }


protected String getSystemJavac() { protected String getSystemJavac() {
// This is the most common extension case - exe for windows and OS/2,
// This is the most common extension case - exe for windows and OS/2,
// nothing for *nix. // nothing for *nix.
String extension = Os.isFamily("dos") ? ".exe" : "";
String extension = Os.isFamily("dos") ? ".exe" : "";


// Look for java in the java.home/../bin directory. Unfortunately
// on Windows java.home doesn't always refer to the correct location,
// so we need to fall back to assuming java is somewhere on the
// PATH.
java.io.File jExecutable =
// Look for java in the java.home/../bin directory. Unfortunately
// on Windows java.home doesn't always refer to the correct location,
// so we need to fall back to assuming java is somewhere on the
// PATH.
java.io.File jExecutable =
new java.io.File(System.getProperty("java.home") + new java.io.File(System.getProperty("java.home") +
"/../bin/javac" + extension ); "/../bin/javac" + extension );


if (jExecutable.exists() && !Os.isFamily("netware")) {
return jExecutable.getAbsolutePath();
} else {
return "javac";
}
if (jExecutable.exists() && !Os.isFamily("netware")) {
return jExecutable.getAbsolutePath();
} else {
return "javac";
}
} }
private String determineCompiler() { private String determineCompiler() {
String compiler = project.getProperty("build.compiler"); String compiler = project.getProperty("build.compiler");




+ 57
- 57
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -107,15 +107,15 @@ public class Javadoc extends Task {
public class DocletParam { public class DocletParam {
private String name; private String name;
private String value; private String value;
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setValue(String value) { public void setValue(String value) {
this.value = value; this.value = value;
} }
@@ -128,17 +128,17 @@ public class Javadoc extends Task {
public class DocletInfo { public class DocletInfo {
private String name; private String name;
private Path path; private Path path;
private Vector params = new Vector(); private Vector params = new Vector();


public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public String getName() { public String getName() {
return name; return name;
} }
public void setPath(Path path) { public void setPath(Path path) {
if (this.path == null) { if (this.path == null) {
this.path = path; this.path = path;
@@ -150,7 +150,7 @@ public class Javadoc extends Task {
public Path getPath() { public Path getPath() {
return path; return path;
} }
public Path createPath() { public Path createPath() {
if (path == null) { if (path == null) {
path = new Path(getProject()); path = new Path(getProject());
@@ -168,10 +168,10 @@ public class Javadoc extends Task {
public DocletParam createParam() { public DocletParam createParam() {
DocletParam param = new DocletParam(); DocletParam param = new DocletParam();
params.addElement(param); params.addElement(param);
return param; return param;
} }
public Enumeration getParams() { public Enumeration getParams() {
return params.elements(); return params.elements();
} }
@@ -219,7 +219,7 @@ public class Javadoc extends Task {
} }


private Commandline cmd = new Commandline(); private Commandline cmd = new Commandline();
private static boolean javadoc1 =
private static boolean javadoc1 =
(Project.getJavaVersion() == Project.JAVA_1_1); (Project.getJavaVersion() == Project.JAVA_1_1);




@@ -235,11 +235,11 @@ public class Javadoc extends Task {
cmd.createArgument().setValue(key); cmd.createArgument().setValue(key);
cmd.createArgument().setValue(value); cmd.createArgument().setValue(value);
} else { } else {
project.log(this,
"Warning: Leaving out empty argument '" + key + "'",
project.log(this,
"Warning: Leaving out empty argument '" + key + "'",
Project.MSG_WARN); Project.MSG_WARN);
} }
}
}
} }


private void add11ArgIf(boolean b, String arg) { private void add11ArgIf(boolean b, String arg) {
@@ -294,7 +294,7 @@ public class Javadoc extends Task {
/** /**
* Sets whether default exclusions should be used or not. * Sets whether default exclusions should be used or not.
* *
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they * should be used, "false"|"off"|"no" when they
* shouldn't be used. * shouldn't be used.
*/ */
@@ -313,7 +313,7 @@ public class Javadoc extends Task {
public void setAdditionalparam(String add){ public void setAdditionalparam(String add){
cmd.createArgument().setLine(add); cmd.createArgument().setLine(add);
} }
public void setSourcepath(Path src) { public void setSourcepath(Path src) {
if (sourcePath == null) { if (sourcePath == null) {
sourcePath = src; sourcePath = src;
@@ -405,7 +405,7 @@ public class Javadoc extends Task {
} }
doclet.setName(src); doclet.setName(src);
} }
public void setDocletPath(Path src) { public void setDocletPath(Path src) {
if (doclet == null) { if (doclet == null) {
doclet = new DocletInfo(); doclet = new DocletInfo();
@@ -551,17 +551,17 @@ public class Javadoc extends Task {
if (!javadoc1) { if (!javadoc1) {
LinkArgument le = createLink(); LinkArgument le = createLink();
le.setOffline(true); le.setOffline(true);
String linkOfflineError = "The linkoffline attribute must include a URL and " +
String linkOfflineError = "The linkoffline attribute must include a URL and " +
"a package-list file location separated by a space"; "a package-list file location separated by a space";
if (src.trim().length() == 0) { if (src.trim().length() == 0) {
throw new BuildException(linkOfflineError); throw new BuildException(linkOfflineError);
}
}
StringTokenizer tok = new StringTokenizer(src, " ", false); StringTokenizer tok = new StringTokenizer(src, " ", false);
le.setHref(tok.nextToken()); le.setHref(tok.nextToken());


if (!tok.hasMoreTokens()) { if (!tok.hasMoreTokens()) {
throw new BuildException(linkOfflineError); throw new BuildException(linkOfflineError);
}
}
le.setPackagelistLoc(project.resolveFile(tok.nextToken())); le.setPackagelistLoc(project.resolveFile(tok.nextToken()));
} }
} }
@@ -613,46 +613,46 @@ public class Javadoc extends Task {
public void setPackageList(String src) { public void setPackageList(String src) {
packageList = src; packageList = src;
} }
public LinkArgument createLink() { public LinkArgument createLink() {
LinkArgument la = new LinkArgument(); LinkArgument la = new LinkArgument();
links.addElement(la); links.addElement(la);
return la; return la;
} }
public class LinkArgument { public class LinkArgument {
private String href; private String href;
private boolean offline = false; private boolean offline = false;
private File packagelistLoc; private File packagelistLoc;
public LinkArgument() { public LinkArgument() {
} }


public void setHref(String hr) { public void setHref(String hr) {
href = hr; href = hr;
} }
public String getHref() { public String getHref() {
return href; return href;
} }
public void setPackagelistLoc(File src) { public void setPackagelistLoc(File src) {
packagelistLoc = src; packagelistLoc = src;
} }
public File getPackagelistLoc() { public File getPackagelistLoc() {
return packagelistLoc; return packagelistLoc;
} }
public void setOffline(boolean offline) { public void setOffline(boolean offline) {
this.offline = offline; this.offline = offline;
} }
public boolean isLinkOffline() { public boolean isLinkOffline() {
return offline; return offline;
} }
} }
public GroupArgument createGroup() { public GroupArgument createGroup() {
GroupArgument ga = new GroupArgument(); GroupArgument ga = new GroupArgument();
groups.addElement(ga); groups.addElement(ga);
@@ -703,7 +703,7 @@ public class Javadoc extends Task {
return p.toString(); return p.toString();
} }
} }
public void setCharset(String src) { public void setCharset(String src) {
this.add12ArgIfNotEmpty("-charset", src); this.add12ArgIfNotEmpty("-charset", src);
} }
@@ -778,7 +778,7 @@ public class Javadoc extends Task {
throw new BuildException(msg); throw new BuildException(msg);
} }
} }


// --------------------------------- javadoc2 arguments for default doclet // --------------------------------- javadoc2 arguments for default doclet


@@ -789,7 +789,7 @@ public class Javadoc extends Task {
if (doclet.getName() == null) { if (doclet.getName() == null) {
throw new BuildException("The doclet name must be specified.", location); throw new BuildException("The doclet name must be specified.", location);
} }
else {
else {
toExecute.createArgument().setValue("-doclet"); toExecute.createArgument().setValue("-doclet");
toExecute.createArgument().setValue(doclet.getName()); toExecute.createArgument().setValue(doclet.getName());
if (doclet.getPath() != null) { if (doclet.getPath() != null) {
@@ -801,28 +801,28 @@ public class Javadoc extends Task {
if (param.getName() == null) { if (param.getName() == null) {
throw new BuildException("Doclet parameters must have a name"); throw new BuildException("Doclet parameters must have a name");
} }
toExecute.createArgument().setValue(param.getName()); toExecute.createArgument().setValue(param.getName());
if (param.getValue() != null) { if (param.getValue() != null) {
toExecute.createArgument().setValue(param.getValue()); toExecute.createArgument().setValue(param.getValue());
} }
}
}
} }
}
}
if (bootclasspath != null) { if (bootclasspath != null) {
toExecute.createArgument().setValue("-bootclasspath"); toExecute.createArgument().setValue("-bootclasspath");
toExecute.createArgument().setPath(bootclasspath); toExecute.createArgument().setPath(bootclasspath);
} }
// add the links arguments // add the links arguments
if (links.size() != 0) { if (links.size() != 0) {
for (Enumeration e = links.elements(); e.hasMoreElements(); ) { for (Enumeration e = links.elements(); e.hasMoreElements(); ) {
LinkArgument la = (LinkArgument)e.nextElement(); LinkArgument la = (LinkArgument)e.nextElement();
if (la.getHref() == null) { if (la.getHref() == null) {
throw new BuildException("Links must provide the URL to the external class documentation."); throw new BuildException("Links must provide the URL to the external class documentation.");
} }
if (la.isLinkOffline()) { if (la.isLinkOffline()) {
File packageListLocation = la.getPackagelistLoc(); File packageListLocation = la.getPackagelistLoc();
if (packageListLocation == null) { if (packageListLocation == null) {
@@ -836,7 +836,7 @@ public class Javadoc extends Task {
toExecute.createArgument().setValue(packageListLocation.getAbsolutePath()); toExecute.createArgument().setValue(packageListLocation.getAbsolutePath());
} }
else { else {
log("Warning: No package list was found at " + packageListLocation,
log("Warning: No package list was found at " + packageListLocation,
Project.MSG_VERBOSE); Project.MSG_VERBOSE);
} }
} }
@@ -845,8 +845,8 @@ public class Javadoc extends Task {
toExecute.createArgument().setValue(la.getHref()); toExecute.createArgument().setValue(la.getHref());
} }
} }
}
}
// add the single group arguments // add the single group arguments
// Javadoc 1.2 rules: // Javadoc 1.2 rules:
// Multiple -group args allowed. // Multiple -group args allowed.
@@ -872,7 +872,7 @@ public class Javadoc extends Task {
} }
} }
} }
// add the group arguments // add the group arguments
if (groups.size() != 0) { if (groups.size() != 0) {
for (Enumeration e = groups.elements(); e.hasMoreElements(); ) { for (Enumeration e = groups.elements(); e.hasMoreElements(); ) {
@@ -929,10 +929,10 @@ public class Javadoc extends Task {
tmpList = fileUtils.createTempFile("javadoc", "", null); tmpList = fileUtils.createTempFile("javadoc", "", null);
toExecute.createArgument().setValue("@" + tmpList.getAbsolutePath()); toExecute.createArgument().setValue("@" + tmpList.getAbsolutePath());
} }
srcListWriter = new PrintWriter(new FileWriter(tmpList.getAbsolutePath(),
srcListWriter = new PrintWriter(new FileWriter(tmpList.getAbsolutePath(),
true)); true));
} }
Enumeration enum = sourceFiles.elements(); Enumeration enum = sourceFiles.elements();
while (enum.hasMoreElements()) { while (enum.hasMoreElements()) {
SourceFile sf = (SourceFile) enum.nextElement(); SourceFile sf = (SourceFile) enum.nextElement();
@@ -945,7 +945,7 @@ public class Javadoc extends Task {
} }


} catch (IOException e) { } catch (IOException e) {
throw new BuildException("Error creating temporary file",
throw new BuildException("Error creating temporary file",
e, location); e, location);
} finally { } finally {
if (srcListWriter != null) { if (srcListWriter != null) {
@@ -965,7 +965,7 @@ public class Javadoc extends Task {
JavadocOutputStream err = new JavadocOutputStream(Project.MSG_WARN); JavadocOutputStream err = new JavadocOutputStream(Project.MSG_WARN);
Execute exe = new Execute(new PumpStreamHandler(out, err)); Execute exe = new Execute(new PumpStreamHandler(out, err));
exe.setAntRun(project); exe.setAntRun(project);
/* /*
* No reason to change the working directory as all filenames and * No reason to change the working directory as all filenames and
* path components have been resolved already. * path components have been resolved already.
@@ -987,7 +987,7 @@ public class Javadoc extends Task {
tmpList.delete(); tmpList.delete();
tmpList = null; tmpList = null;
} }
out.logFlush(); out.logFlush();
err.logFlush(); err.logFlush();
try { try {
@@ -1002,7 +1002,7 @@ public class Javadoc extends Task {
* with the packages found in that path subdirs matching one of the given * with the packages found in that path subdirs matching one of the given
* patterns. * patterns.
*/ */
private void evaluatePackages(Commandline toExecute, Path sourcePath,
private void evaluatePackages(Commandline toExecute, Path sourcePath,
Vector packages, Vector excludePackages) { Vector packages, Vector excludePackages) {
log("Source path = " + sourcePath.toString(), Project.MSG_VERBOSE); log("Source path = " + sourcePath.toString(), Project.MSG_VERBOSE);
StringBuffer msg = new StringBuffer("Packages = "); StringBuffer msg = new StringBuffer("Packages = ");
@@ -1050,10 +1050,10 @@ public class Javadoc extends Task {
if (pkg.endsWith("*")) { if (pkg.endsWith("*")) {
pkg += "*"; pkg += "*";
} }
fs.createExclude().setName(pkg); fs.createExclude().setName(pkg);
} }
PrintWriter packageListWriter = null; PrintWriter packageListWriter = null;
try { try {
if (useExternalFile) { if (useExternalFile) {
@@ -1066,10 +1066,10 @@ public class Javadoc extends Task {
for (int j=0; j<list.length; j++) { for (int j=0; j<list.length; j++) {
File source = project.resolveFile(list[j]); File source = project.resolveFile(list[j]);
fs.setDir(source); fs.setDir(source);
DirectoryScanner ds = fs.getDirectoryScanner(project); DirectoryScanner ds = fs.getDirectoryScanner(project);
String[] packageDirs = ds.getIncludedDirectories(); String[] packageDirs = ds.getIncludedDirectories();
for (int i=0; i<packageDirs.length; i++) { for (int i=0; i<packageDirs.length; i++) {
File pd = new File(source, packageDirs[i]); File pd = new File(source, packageDirs[i]);
String[] files = pd.list(new FilenameFilter () { String[] files = pd.list(new FilenameFilter () {
@@ -1080,7 +1080,7 @@ public class Javadoc extends Task {
return false; // ignore dirs return false; // ignore dirs
} }
}); });
if (files.length > 0) { if (files.length > 0) {
String pkgDir = packageDirs[i].replace('/','.').replace('\\','.'); String pkgDir = packageDirs[i].replace('/','.').replace('\\','.');
if (!addedPackages.contains(pkgDir)) { if (!addedPackages.contains(pkgDir)) {
@@ -1095,7 +1095,7 @@ public class Javadoc extends Task {
} }
} }
} catch (IOException ioex) { } catch (IOException ioex) {
throw new BuildException("Error creating temporary file",
throw new BuildException("Error creating temporary file",
ioex, location); ioex, location);
} finally { } finally {
if (packageListWriter != null) { if (packageListWriter != null) {
@@ -1133,7 +1133,7 @@ public class Javadoc extends Task {
} }
} }


protected void logFlush() { protected void logFlush() {
if (queuedLine != null) { if (queuedLine != null) {
super.processLine(queuedLine, Project.MSG_VERBOSE); super.processLine(queuedLine, Project.MSG_VERBOSE);
@@ -1146,15 +1146,15 @@ public class Javadoc extends Task {
* Convenience method to expand properties. * Convenience method to expand properties.
*/ */
protected String expand(String content) { protected String expand(String content) {
return ProjectHelper.replaceProperties(project, content,
return ProjectHelper.replaceProperties(project, content,
project.getProperties()); project.getProperties());
} }


private String getJavadocExecutableName() private String getJavadocExecutableName()
{ {
// This is the most common extension case - exe for windows and OS/2,
// This is the most common extension case - exe for windows and OS/2,
// nothing for *nix. // nothing for *nix.
String extension = Os.isFamily("dos") ? ".exe" : "";
String extension = Os.isFamily("dos") ? ".exe" : "";


// Look for javadoc in the java.home/../bin directory. Unfortunately // Look for javadoc in the java.home/../bin directory. Unfortunately
// on Windows java.home doesn't always refer to the correct location, // on Windows java.home doesn't always refer to the correct location,


+ 17
- 17
src/main/org/apache/tools/ant/taskdefs/Mkdir.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -50,7 +50,7 @@
* individuals on behalf of the Apache Software Foundation. For more * individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see * information on the Apache Software Foundation, please see
* <http://www.apache.org/>. * <http://www.apache.org/>.
*/
*/


package org.apache.tools.ant.taskdefs; package org.apache.tools.ant.taskdefs;


@@ -68,7 +68,7 @@ import java.io.File;
public class Mkdir extends Task { public class Mkdir extends Task {


private File dir; private File dir;
public void execute() throws BuildException { public void execute() throws BuildException {
if (dir == null) { if (dir == null) {
throw new BuildException("dir attribute is required", location); throw new BuildException("dir attribute is required", location);
@@ -77,19 +77,19 @@ public class Mkdir extends Task {
if (dir.isFile()) { if (dir.isFile()) {
throw new BuildException("Unable to create directory as a file already exists with that name: " + dir.getAbsolutePath()); throw new BuildException("Unable to create directory as a file already exists with that name: " + dir.getAbsolutePath());
} }
if (!dir.exists()) { if (!dir.exists()) {
boolean result = dir.mkdirs();
if (result == false) {
String msg = "Directory " + dir.getAbsolutePath() + " creation was not " +
"successful for an unknown reason";
throw new BuildException(msg, location);
}
log("Created dir: " + dir.getAbsolutePath());
}
boolean result = dir.mkdirs();
if (result == false) {
String msg = "Directory " + dir.getAbsolutePath() + " creation was not " +
"successful for an unknown reason";
throw new BuildException(msg, location);
}
log("Created dir: " + dir.getAbsolutePath());
}
} }


public void setDir(File dir) { public void setDir(File dir) {
this.dir = dir;
this.dir = dir;
} }
} }

+ 15
- 15
src/main/org/apache/tools/ant/taskdefs/compilers/Kjc.java View File

@@ -80,9 +80,9 @@ public class Kjc extends DefaultCompilerAdapter {
Class c = Class.forName("at.dms.kjc.Main"); Class c = Class.forName("at.dms.kjc.Main");


// Call the compile() method // Call the compile() method
Method compile = c.getMethod("compile",
Method compile = c.getMethod("compile",
new Class [] { String [].class }); new Class [] { String [].class });
Boolean ok = (Boolean)compile.invoke(null,
Boolean ok = (Boolean)compile.invoke(null,
new Object[] {cmd.getArguments()}); new Object[] {cmd.getArguments()});
return ok.booleanValue(); return ok.booleanValue();
} }
@@ -105,8 +105,8 @@ public class Kjc extends DefaultCompilerAdapter {
*/ */
protected Commandline setupKjcCommand() { protected Commandline setupKjcCommand() {
Commandline cmd = new Commandline(); Commandline cmd = new Commandline();
// generate classpath, because kjc does't support sourcepath.
// generate classpath, because kjc does't support sourcepath.
Path classpath = getCompileClasspath(); Path classpath = getCompileClasspath();


if (deprecation == true) { if (deprecation == true) {
@@ -118,26 +118,26 @@ public class Kjc extends DefaultCompilerAdapter {
cmd.createArgument().setFile(destDir); cmd.createArgument().setFile(destDir);
} }


// generate the clsspath
// generate the clsspath
cmd.createArgument().setValue("-classpath"); cmd.createArgument().setValue("-classpath");


Path cp = new Path(project);
Path cp = new Path(project);


// kjc don't have bootclasspath option.
if (bootclasspath != null) {
// kjc don't have bootclasspath option.
if (bootclasspath != null) {
cp.append(bootclasspath); cp.append(bootclasspath);
}
}


if (extdirs != null) {
if (extdirs != null) {
cp.addExtdirs(extdirs); cp.addExtdirs(extdirs);
}
}


cp.append(classpath);
cp.append(src);
cp.append(classpath);
cp.append(src);


cmd.createArgument().setPath(cp);
cmd.createArgument().setPath(cp);


// kjc-1.5A doesn't support -encoding option now.
// kjc-1.5A doesn't support -encoding option now.
// but it will be supported near the feature. // but it will be supported near the feature.
if (encoding != null) { if (encoding != null) {
cmd.createArgument().setValue("-encoding"); cmd.createArgument().setValue("-encoding");


+ 52
- 52
src/main/org/apache/tools/ant/taskdefs/optional/ejb/EjbJar.java View File

@@ -89,7 +89,7 @@ import org.apache.tools.ant.types.FileSet;
* </p> * </p>
* *
* <p>Functionality is currently provided for standard EJB1.1 jars and Weblogic * <p>Functionality is currently provided for standard EJB1.1 jars and Weblogic
* 5.1 jars. The weblogic deployment descriptors, used in constructing the
* 5.1 jars. The weblogic deployment descriptors, used in constructing the
* Weblogic jar, are located based on a simple naming convention. The name of the * Weblogic jar, are located based on a simple naming convention. The name of the
* standard deployment descriptor is taken upto the first instance of a String, * standard deployment descriptor is taken upto the first instance of a String,
* specified by the attribute baseNameTerminator, and then the regular Weblogic * specified by the attribute baseNameTerminator, and then the regular Weblogic
@@ -106,23 +106,23 @@ import org.apache.tools.ant.types.FileSet;
* @author <a href="mailto:tfennell@sapient.com">Tim Fennell</a> * @author <a href="mailto:tfennell@sapient.com">Tim Fennell</a>
*/ */
public class EjbJar extends MatchingTask { public class EjbJar extends MatchingTask {
public static class DTDLocation { public static class DTDLocation {
private String publicId = null; private String publicId = null;
private String location = null; private String location = null;
public void setPublicId(String publicId) { public void setPublicId(String publicId) {
this.publicId = publicId; this.publicId = publicId;
} }
public void setLocation(String location) { public void setLocation(String location) {
this.location = location; this.location = location;
} }
public String getPublicId() { public String getPublicId() {
return publicId; return publicId;
} }
public String getLocation() { public String getLocation() {
return location; return location;
} }
@@ -138,7 +138,7 @@ public class EjbJar extends MatchingTask {


/** Stores a handle to the directory under which to search for deployment descriptors */ /** Stores a handle to the directory under which to search for deployment descriptors */
public File descriptorDir; public File descriptorDir;
/** Instance variable that marks the end of the 'basename' */ /** Instance variable that marks the end of the 'basename' */
public String baseNameTerminator = "-"; public String baseNameTerminator = "-";


@@ -150,28 +150,28 @@ public class EjbJar extends MatchingTask {
* of a flat directory as the destination for the jar files. * of a flat directory as the destination for the jar files.
*/ */
public boolean flatDestDir = false; public boolean flatDestDir = false;
/** /**
* The classpath to use when loading classes * The classpath to use when loading classes
*/ */
public Path classpath; public Path classpath;
/** /**
* A Fileset of support classes * A Fileset of support classes
*/ */
public List supportFileSets = new ArrayList(); public List supportFileSets = new ArrayList();
/** /**
* The list of configured DTD locations * The list of configured DTD locations
*/ */
public ArrayList dtdLocations = new ArrayList(); public ArrayList dtdLocations = new ArrayList();
/** /**
* The naming scheme used to determine the generated jar name * The naming scheme used to determine the generated jar name
* from the descriptor information * from the descriptor information
*/ */
public NamingScheme namingScheme; public NamingScheme namingScheme;
/** /**
* The Manifest file * The Manifest file
*/ */
@@ -196,7 +196,7 @@ public class EjbJar extends MatchingTask {
deployment descriptor tools are provided. Normally each deployment tool deployment descriptor tools are provided. Normally each deployment tool
will specify the desitination dir itself. */ will specify the desitination dir itself. */
private File destDir; private File destDir;
/** Instance variable that stores the suffix for the generated jarfile. */ /** Instance variable that stores the suffix for the generated jarfile. */
private String genericJarSuffix = "-generic.jar"; private String genericJarSuffix = "-generic.jar";


@@ -235,7 +235,7 @@ public class EjbJar extends MatchingTask {


/** /**
* Create a nested element used to configure a deployment tool for iPlanet * Create a nested element used to configure a deployment tool for iPlanet
* Application Server.
* Application Server.
* *
* @return the deployment tool instance to be configured. * @return the deployment tool instance to be configured.
*/ */
@@ -279,7 +279,7 @@ public class EjbJar extends MatchingTask {
* *
* This classpath is used to locate the super classes and interfaces * This classpath is used to locate the super classes and interfaces
* of the classes that will make up the EJB jar. * of the classes that will make up the EJB jar.
*
*
* @return the path to be configured. * @return the path to be configured.
*/ */
public Path createClasspath() { public Path createClasspath() {
@@ -296,7 +296,7 @@ public class EjbJar extends MatchingTask {
public DTDLocation createDTD() { public DTDLocation createDTD() {
DTDLocation dtdLocation = new DTDLocation(); DTDLocation dtdLocation = new DTDLocation();
config.dtdLocations.add(dtdLocation); config.dtdLocations.add(dtdLocation);
return dtdLocation; return dtdLocation;
} }


@@ -310,7 +310,7 @@ public class EjbJar extends MatchingTask {
config.supportFileSets.add(supportFileSet); config.supportFileSets.add(supportFileSet);
return supportFileSet; return supportFileSet;
} }


/** /**
* Set the Manifest file to use when jarring. * Set the Manifest file to use when jarring.
@@ -327,7 +327,7 @@ public class EjbJar extends MatchingTask {


/** /**
* Set the srcdir attribute. The source directory is the directory that contains * Set the srcdir attribute. The source directory is the directory that contains
* the classes that will be added to the EJB jar. Typically this will include the
* the classes that will be added to the EJB jar. Typically this will include the
* home and remote interfaces and the bean class. * home and remote interfaces and the bean class.
* *
* @param inDir the source directory. * @param inDir the source directory.
@@ -342,7 +342,7 @@ public class EjbJar extends MatchingTask {
* The descriptor directory contains the EJB deployment descriptors. These are XML * The descriptor directory contains the EJB deployment descriptors. These are XML
* files that declare the properties of a bean in a particular deployment scenario. Such * files that declare the properties of a bean in a particular deployment scenario. Such
* properties include, for example, the transactional nature of the bean and the security * properties include, for example, the transactional nature of the bean and the security
* access control to the bean's methods.
* access control to the bean's methods.
* *
* @param inDir the directory containing the deployment descriptors. * @param inDir the directory containing the deployment descriptors.
*/ */
@@ -352,8 +352,8 @@ public class EjbJar extends MatchingTask {


/** /**
* Set the base name of the EJB jar that is to be created if it is not to be * Set the base name of the EJB jar that is to be created if it is not to be
* determined from the name of the deployment descriptor files.
*
* determined from the name of the deployment descriptor files.
*
* @param inValue the basename that will be used when writing the jar file containing * @param inValue the basename that will be used when writing the jar file containing
* the EJB * the EJB
*/ */
@@ -364,9 +364,9 @@ public class EjbJar extends MatchingTask {
config.namingScheme.setValue(NamingScheme.BASEJARNAME); config.namingScheme.setValue(NamingScheme.BASEJARNAME);
} }
else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) { else if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME)) {
throw new BuildException("The basejarname attribute is not compatible with the " +
throw new BuildException("The basejarname attribute is not compatible with the " +
config.namingScheme.getValue() + " naming scheme"); config.namingScheme.getValue() + " naming scheme");
}
}
} }


/** /**
@@ -379,22 +379,22 @@ public class EjbJar extends MatchingTask {
config.namingScheme = namingScheme; config.namingScheme = namingScheme;
if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) && if (!config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) &&
config.baseJarName != null) { config.baseJarName != null) {
throw new BuildException("The basejarname attribute is not compatible with the " +
throw new BuildException("The basejarname attribute is not compatible with the " +
config.namingScheme.getValue() + " naming scheme"); config.namingScheme.getValue() + " naming scheme");
}
}
} }


/** /**
* Set the destination directory. * Set the destination directory.
*
*
* The EJB jar files will be written into this directory. The jar files that exist in * The EJB jar files will be written into this directory. The jar files that exist in
* this directory are also used when determining if the contents of the jar file
* this directory are also used when determining if the contents of the jar file
* have changed. * have changed.
* *
* Note that this parameter is only used if no deployment tools are specified. Typically * Note that this parameter is only used if no deployment tools are specified. Typically
* each deployment tool will specify its own destination directory. * each deployment tool will specify its own destination directory.
*
*
* @param inFile the destination directory. * @param inFile the destination directory.
*/ */
public void setDestdir(File inDir) { public void setDestdir(File inDir) {
@@ -402,7 +402,7 @@ public class EjbJar extends MatchingTask {
} }


/** /**
* Set the classpath to use when resolving classes for inclusion in the jar.
* Set the classpath to use when resolving classes for inclusion in the jar.
* *
* @param classpath the classpath to use. * @param classpath the classpath to use.
*/ */
@@ -413,26 +413,26 @@ public class EjbJar extends MatchingTask {
/** /**
* Set the flat dest dir flag. * Set the flat dest dir flag.
* *
* This flag controls whether the destination jars are written out in the
* destination directory with the same hierarchal structure from which
* the deployment descriptors have been read. If this is set to true the
* This flag controls whether the destination jars are written out in the
* destination directory with the same hierarchal structure from which
* the deployment descriptors have been read. If this is set to true the
* generated EJB jars are written into the root of the destination directory, * generated EJB jars are written into the root of the destination directory,
* otherwise they are written out in the same relative position as the deployment * otherwise they are written out in the same relative position as the deployment
* descriptors in the descriptor directory. * descriptors in the descriptor directory.
*
*
* @param inValue the new value of the flatdestdir flag. * @param inValue the new value of the flatdestdir flag.
*/ */
public void setFlatdestdir(boolean inValue) { public void setFlatdestdir(boolean inValue) {
config.flatDestDir = inValue; config.flatDestDir = inValue;
} }
/** /**
* Set the suffix for the generated jar file. * Set the suffix for the generated jar file.
* When generic jars are generated, they have a suffix which is appended to the * When generic jars are generated, they have a suffix which is appended to the
* the bean name to create the name of the jar file. Note that this suffix includes * the bean name to create the name of the jar file. Note that this suffix includes
* the extension fo te jar file and should therefore end with an appropriate
* the extension fo te jar file and should therefore end with an appropriate
* extension such as .jar or .ear * extension such as .jar or .ear
*
*
* @param inString the string to use as the suffix. * @param inString the string to use as the suffix.
*/ */
public void setGenericjarsuffix(String inString) { public void setGenericjarsuffix(String inString) {
@@ -443,7 +443,7 @@ public class EjbJar extends MatchingTask {
* Set the baseNameTerminator. * Set the baseNameTerminator.
* *
* The basename terminator is the string which terminates the bean name. The convention * The basename terminator is the string which terminates the bean name. The convention
* used by this task is that bean descriptors are named as the BeanName with some suffix.
* used by this task is that bean descriptors are named as the BeanName with some suffix.
* The baseNameTerminator string separates the bean name and the suffix and is used to * The baseNameTerminator string separates the bean name and the suffix and is used to
* determine the bean name. * determine the bean name.
* *
@@ -468,19 +468,19 @@ public class EjbJar extends MatchingTask {
} }
else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) && else if (config.namingScheme.getValue().equals(NamingScheme.BASEJARNAME) &&
config.baseJarName == null) { config.baseJarName == null) {
throw new BuildException("The basejarname attribute must be specified " +
throw new BuildException("The basejarname attribute must be specified " +
"with the basejarname naming scheme"); "with the basejarname naming scheme");
} }
}
}


/** /**
* Invoked by Ant after the task is prepared, when it is ready to execute * Invoked by Ant after the task is prepared, when it is ready to execute
* this task.
* this task.
* *
* This will configure all of the nested deployment tools to allow them to
* process the jar. If no deployment tools have been configured a generic
* This will configure all of the nested deployment tools to allow them to
* process the jar. If no deployment tools have been configured a generic
* tool is created to handle the jar. * tool is created to handle the jar.
*
*
* A parser is configured and then each descriptor found is passed to all * A parser is configured and then each descriptor found is passed to all
* the deployment tool elements for processing. * the deployment tool elements for processing.
* *
@@ -490,7 +490,7 @@ public class EjbJar extends MatchingTask {
*/ */
public void execute() throws BuildException { public void execute() throws BuildException {
validateConfig(); validateConfig();
if (deploymentTools.size() == 0) { if (deploymentTools.size() == 0) {
GenericDeploymentTool genericTool = new GenericDeploymentTool(); GenericDeploymentTool genericTool = new GenericDeploymentTool();
genericTool.setTask(this); genericTool.setTask(this);
@@ -498,27 +498,27 @@ public class EjbJar extends MatchingTask {
genericTool.setGenericJarSuffix(genericJarSuffix); genericTool.setGenericJarSuffix(genericJarSuffix);
deploymentTools.add(genericTool); deploymentTools.add(genericTool);
} }
for (Iterator i = deploymentTools.iterator(); i.hasNext(); ) { for (Iterator i = deploymentTools.iterator(); i.hasNext(); ) {
EJBDeploymentTool tool = (EJBDeploymentTool)i.next(); EJBDeploymentTool tool = (EJBDeploymentTool)i.next();
tool.configure(config); tool.configure(config);
tool.validateConfigured(); tool.validateConfigured();
} }
try { try {
// Create the parser using whatever parser the system dictates // Create the parser using whatever parser the system dictates
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setValidating(true); saxParserFactory.setValidating(true);
SAXParser saxParser = saxParserFactory.newSAXParser(); SAXParser saxParser = saxParserFactory.newSAXParser();
DirectoryScanner ds = getDirectoryScanner(config.descriptorDir); DirectoryScanner ds = getDirectoryScanner(config.descriptorDir);
ds.scan(); ds.scan();
String[] files = ds.getIncludedFiles(); String[] files = ds.getIncludedFiles();
log(files.length + " deployment descriptors located.", log(files.length + " deployment descriptors located.",
Project.MSG_VERBOSE); Project.MSG_VERBOSE);
// Loop through the files. Each file represents one deployment // Loop through the files. Each file represents one deployment
// descriptor, and hence one bean in our model. // descriptor, and hence one bean in our model.
for (int index = 0; index < files.length; ++index) { for (int index = 0; index < files.length; ++index) {
@@ -527,7 +527,7 @@ public class EjbJar extends MatchingTask {
EJBDeploymentTool tool = (EJBDeploymentTool)i.next(); EJBDeploymentTool tool = (EJBDeploymentTool)i.next();
tool.processDescriptor(files[index], saxParser); tool.processDescriptor(files[index], saxParser);
} }
}
}
} }
catch (SAXException se) { catch (SAXException se) {
String msg = "SAXException while creating parser." String msg = "SAXException while creating parser."


+ 1170
- 1171
src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbc.java
File diff suppressed because it is too large
View File


+ 155
- 155
src/main/org/apache/tools/ant/taskdefs/optional/ejb/IPlanetEjbcTask.java View File

@@ -67,34 +67,34 @@ import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;


/** /**
* Task to compile EJB stubs and skeletons for the iPlanet Application Server.
* Task to compile EJB stubs and skeletons for the iPlanet Application Server.
* The EJBs to be processed are specified by the EJB 1.1 standard XML * The EJBs to be processed are specified by the EJB 1.1 standard XML
* descriptor, and additional attributes are obtained from the iPlanet Application
* Server-specific XML descriptor. Since the XML descriptors can include
* multiple EJBs, this is a convenient way of specifying many EJBs in a single
* descriptor, and additional attributes are obtained from the iPlanet Application
* Server-specific XML descriptor. Since the XML descriptors can include
* multiple EJBs, this is a convenient way of specifying many EJBs in a single
* Ant task. The following attributes are allowed: * Ant task. The following attributes are allowed:
* <ul> * <ul>
* <li><i>ejbdescriptor</i> -- Standard EJB 1.1 XML descriptor (typically * <li><i>ejbdescriptor</i> -- Standard EJB 1.1 XML descriptor (typically
* titled "ejb-jar.xml"). This attribute is
* titled "ejb-jar.xml"). This attribute is
* required. * required.
* <li><i>iasdescriptor</i> -- EJB XML descriptor for iPlanet Application * <li><i>iasdescriptor</i> -- EJB XML descriptor for iPlanet Application
* Server (typically titled "ias-ejb-jar.xml).
* Server (typically titled "ias-ejb-jar.xml).
* This attribute is required. * This attribute is required.
* <li><i>dest</i> -- The is the base directory where the RMI stubs and
* <li><i>dest</i> -- The is the base directory where the RMI stubs and
* skeletons are written. In addition, the class files * skeletons are written. In addition, the class files
* for each bean (home interface, remote interface, and * for each bean (home interface, remote interface, and
* EJB implementation) must be found in this directory. * EJB implementation) must be found in this directory.
* This attribute is required. * This attribute is required.
* <li><i>classpath</i> -- The classpath used when generating EJB stubs and * <li><i>classpath</i> -- The classpath used when generating EJB stubs and
* skeletons. This is an optional attribute (if
* omitted, the classpath specified when Ant was
* started will be used). Nested "classpath"
* skeletons. This is an optional attribute (if
* omitted, the classpath specified when Ant was
* started will be used). Nested "classpath"
* elements may also be used. * elements may also be used.
* <li><i>keepgenerated</i> -- Indicates whether or not the Java source
* files which are generated by ejbc will be
* saved or automatically deleted. If "yes",
* the source files will be retained. This is
* an optional attribute (if omitted, it
* <li><i>keepgenerated</i> -- Indicates whether or not the Java source
* files which are generated by ejbc will be
* saved or automatically deleted. If "yes",
* the source files will be retained. This is
* an optional attribute (if omitted, it
* defaults to "no"). * defaults to "no").
* <li><i>debug</i> -- Indicates whether or not the ejbc utility should * <li><i>debug</i> -- Indicates whether or not the ejbc utility should
* log additional debugging statements to the standard * log additional debugging statements to the standard
@@ -102,18 +102,18 @@ import org.apache.tools.ant.BuildException;
* will be generated (if omitted, it defaults to "no"). * will be generated (if omitted, it defaults to "no").
* <li><i>iashome</i> -- May be used to specify the "home" directory for * <li><i>iashome</i> -- May be used to specify the "home" directory for
* this iPlanet Application Server installation. This * this iPlanet Application Server installation. This
* is used to find the ejbc utility if it isn't
* included in the user's system path. This is an
* optional attribute (if specified, it should refer
* is used to find the ejbc utility if it isn't
* included in the user's system path. This is an
* optional attribute (if specified, it should refer
* to the <code>[install-location]/iplanet/ias6/ias * to the <code>[install-location]/iplanet/ias6/ias
* </code> directory). If omitted, the ejbc utility
* </code> directory). If omitted, the ejbc utility
* must be on the user's system path. * must be on the user's system path.
* </ul> * </ul>
* <p> * <p>
* For each EJB specified, this task will locate the three classes that comprise * For each EJB specified, this task will locate the three classes that comprise
* the EJB. If these class files cannot be located in the <code>dest</code> * the EJB. If these class files cannot be located in the <code>dest</code>
* directory, the task will fail. The task will also attempt to locate the EJB
* stubs and skeletons in this directory. If found, the timestamps on the
* directory, the task will fail. The task will also attempt to locate the EJB
* stubs and skeletons in this directory. If found, the timestamps on the
* stubs and skeletons will be checked to ensure they are up to date. Only if * stubs and skeletons will be checked to ensure they are up to date. Only if
* these files cannot be found or if they are out of date will ejbc be called * these files cannot be found or if they are out of date will ejbc be called
* to generate new stubs and skeletons. * to generate new stubs and skeletons.
@@ -123,42 +123,42 @@ import org.apache.tools.ant.BuildException;
*/ */
public class IPlanetEjbcTask extends Task { public class IPlanetEjbcTask extends Task {


/* Attributes set by the Ant build file */
private File ejbdescriptor;
private File iasdescriptor;
private File dest;
private Path classpath;
private boolean keepgenerated = false;
private boolean debug = false;
private File iashome;
/* Attributes set by the Ant build file */
private File ejbdescriptor;
private File iasdescriptor;
private File dest;
private Path classpath;
private boolean keepgenerated = false;
private boolean debug = false;
private File iashome;


/** /**
* Sets the location of the standard XML EJB descriptor. Typically, this * Sets the location of the standard XML EJB descriptor. Typically, this
* file is named "ejb-jar.xml".
*
* @param ejbdescriptor The name and location of the EJB descriptor.
* file is named "ejb-jar.xml".
*
* @param ejbdescriptor The name and location of the EJB descriptor.
*/ */
public void setEjbdescriptor(File ejbdescriptor) {
this.ejbdescriptor = ejbdescriptor;
}
public void setEjbdescriptor(File ejbdescriptor) {
this.ejbdescriptor = ejbdescriptor;
}


/** /**
* Sets the location of the iAS-specific XML EJB descriptor. Typically,
* this file is named "ias-ejb-jar.xml".
*
* @param iasdescriptor The name and location of the iAS-specific EJB
* descriptor.
* Sets the location of the iAS-specific XML EJB descriptor. Typically,
* this file is named "ias-ejb-jar.xml".
*
* @param iasdescriptor The name and location of the iAS-specific EJB
* descriptor.
*/ */
public void setIasdescriptor (File iasdescriptor) {
this.iasdescriptor = iasdescriptor;
}
public void setIasdescriptor (File iasdescriptor) {
this.iasdescriptor = iasdescriptor;
}


/** /**
* Sets the destination directory where the EJB "source" classes must exist * Sets the destination directory where the EJB "source" classes must exist
* and where the stubs and skeletons will be written. The destination
* directory must exist before this task is executed.
*
* @param dest The directory where the compiled classes will be written.
* and where the stubs and skeletons will be written. The destination
* directory must exist before this task is executed.
*
* @param dest The directory where the compiled classes will be written.
*/ */
public void setDest(File dest) { public void setDest(File dest) {
this.dest = dest; this.dest = dest;
@@ -166,8 +166,8 @@ public class IPlanetEjbcTask extends Task {


/** /**
* Sets the classpath to be used when compiling the EJB stubs and skeletons. * Sets the classpath to be used when compiling the EJB stubs and skeletons.
*
* @param classpath The classpath to be used.
*
* @param classpath The classpath to be used.
*/ */
public void setClasspath(Path classpath) { public void setClasspath(Path classpath) {
if (this.classpath == null) { if (this.classpath == null) {
@@ -188,107 +188,107 @@ public class IPlanetEjbcTask extends Task {
} }


/** /**
* Sets whether or not the Java source files which are generated by the
* ejbc process should be retained or automatically deleted.
*
* @param keepgenerated A boolean indicating if the Java source files for
* the stubs and skeletons should be retained.
* Sets whether or not the Java source files which are generated by the
* ejbc process should be retained or automatically deleted.
*
* @param keepgenerated A boolean indicating if the Java source files for
* the stubs and skeletons should be retained.
*/ */
public void setKeepgenerated(boolean keepgenerated) {
this.keepgenerated = keepgenerated;
}
public void setKeepgenerated(boolean keepgenerated) {
this.keepgenerated = keepgenerated;
}


/** /**
* Sets whether or not debugging output will be generated when ejbc is * Sets whether or not debugging output will be generated when ejbc is
* executed.
*
* @param debug A boolean indicating if debugging output should be generated
* executed.
*
* @param debug A boolean indicating if debugging output should be generated
*/ */
public void setDebug(boolean debug) {
this.debug = debug;
}
public void setDebug(boolean debug) {
this.debug = debug;
}
/** /**
* Setter method used to store the "home" directory of the user's iAS * Setter method used to store the "home" directory of the user's iAS
* installation. The directory specified should typically be
* <code>[install-location]/iplanet/ias6/ias</code>.
*
* installation. The directory specified should typically be
* <code>[install-location]/iplanet/ias6/ias</code>.
*
* @param iashome The home directory for the user's iAS installation. * @param iashome The home directory for the user's iAS installation.
*/ */
public void setIashome(File iashome) {
this.iashome = iashome;
}
public void setIashome(File iashome) {
this.iashome = iashome;
}


/** /**
* Does the work. * Does the work.
*/ */
public void execute() throws BuildException { public void execute() throws BuildException {
checkConfiguration();
checkConfiguration();

executeEjbc(getParser());
}


executeEjbc(getParser());
}
/** /**
* Verifies that the user selections are valid. * Verifies that the user selections are valid.
*
* @throws BuildException If the user selections are invalid.
*
* @throws BuildException If the user selections are invalid.
*/ */
private void checkConfiguration() throws BuildException {
private void checkConfiguration() throws BuildException {


if (ejbdescriptor == null) {
String msg = "The standard EJB descriptor must be specified using "
+ "the \"ejbdescriptor\" attribute.";
throw new BuildException(msg, location);
}
if ((!ejbdescriptor.exists()) || (!ejbdescriptor.isFile())) {
String msg = "The standard EJB descriptor (" + ejbdescriptor
+ ") was not found or isn't a file.";
throw new BuildException(msg, location);
}
if (ejbdescriptor == null) {
String msg = "The standard EJB descriptor must be specified using "
+ "the \"ejbdescriptor\" attribute.";
throw new BuildException(msg, location);
}
if ((!ejbdescriptor.exists()) || (!ejbdescriptor.isFile())) {
String msg = "The standard EJB descriptor (" + ejbdescriptor
+ ") was not found or isn't a file.";
throw new BuildException(msg, location);
}


if (iasdescriptor == null) {
String msg = "The iAS-speific XML descriptor must be specified using"
+ " the \"iasdescriptor\" attribute.";
throw new BuildException(msg, location);
}
if ((!iasdescriptor.exists()) || (!iasdescriptor.isFile())) {
String msg = "The iAS-specific XML descriptor (" + iasdescriptor
+ ") was not found or isn't a file.";
throw new BuildException(msg, location);
}
if (iasdescriptor == null) {
String msg = "The iAS-speific XML descriptor must be specified using"
+ " the \"iasdescriptor\" attribute.";
throw new BuildException(msg, location);
}
if ((!iasdescriptor.exists()) || (!iasdescriptor.isFile())) {
String msg = "The iAS-specific XML descriptor (" + iasdescriptor
+ ") was not found or isn't a file.";
throw new BuildException(msg, location);
}


if (dest == null) {
String msg = "The destination directory must be specified using "
+ "the \"dest\" attribute.";
throw new BuildException(msg, location);
}
if ((!dest.exists()) || (!dest.isDirectory())) {
String msg = "The destination directory (" + dest + ") was not "
+ "found or isn't a directory.";
throw new BuildException(msg, location);
}
if (dest == null) {
String msg = "The destination directory must be specified using "
+ "the \"dest\" attribute.";
throw new BuildException(msg, location);
}
if ((!dest.exists()) || (!dest.isDirectory())) {
String msg = "The destination directory (" + dest + ") was not "
+ "found or isn't a directory.";
throw new BuildException(msg, location);
}


if ((iashome != null) && (!iashome.isDirectory())) {
String msg = "If \"iashome\" is specified, it must be a valid "
+ "directory (it was set to " + iashome + ").";
throw new BuildException(msg, getLocation());
}
}
if ((iashome != null) && (!iashome.isDirectory())) {
String msg = "If \"iashome\" is specified, it must be a valid "
+ "directory (it was set to " + iashome + ").";
throw new BuildException(msg, getLocation());
}
}


/** /**
* Returns a SAXParser that may be used to process the XML descriptors. * Returns a SAXParser that may be used to process the XML descriptors.
*
* @return Parser which may be used to process the EJB descriptors.
* @throws BuildException If the parser cannot be created or configured.
*
* @return Parser which may be used to process the EJB descriptors.
* @throws BuildException If the parser cannot be created or configured.
*/ */
private SAXParser getParser() throws BuildException {
private SAXParser getParser() throws BuildException {


SAXParser saxParser = null;
try {
SAXParser saxParser = null;
try {
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
saxParserFactory.setValidating(true); saxParserFactory.setValidating(true);
saxParser = saxParserFactory.newSAXParser(); saxParser = saxParserFactory.newSAXParser();
} catch (SAXException e) {
} catch (SAXException e) {
String msg = "Unable to create a SAXParser: " + e.getMessage(); String msg = "Unable to create a SAXParser: " + e.getMessage();
throw new BuildException(msg, e, location); throw new BuildException(msg, e, location);
} }
@@ -297,57 +297,57 @@ public class IPlanetEjbcTask extends Task {
throw new BuildException(msg, e, location); throw new BuildException(msg, e, location);
} }


return saxParser;
}
return saxParser;
}


/** /**
* Executes the EJBc utility using the SAXParser provided. * Executes the EJBc utility using the SAXParser provided.
*
* @param saxParser SAXParser that may be used to process the EJB
* descriptors
* @throws BuildException If there is an error reading or parsing the XML
* descriptors
*
* @param saxParser SAXParser that may be used to process the EJB
* descriptors
* @throws BuildException If there is an error reading or parsing the XML
* descriptors
*/ */
private void executeEjbc(SAXParser saxParser) throws BuildException {
IPlanetEjbc ejbc = new IPlanetEjbc(ejbdescriptor,
iasdescriptor,
dest,
getClasspath().toString(),
saxParser);
ejbc.setRetainSource(keepgenerated);
ejbc.setDebugOutput(debug);
if (iashome != null) {
ejbc.setIasHomeDir(iashome);
}
private void executeEjbc(SAXParser saxParser) throws BuildException {
IPlanetEjbc ejbc = new IPlanetEjbc(ejbdescriptor,
iasdescriptor,
dest,
getClasspath().toString(),
saxParser);
ejbc.setRetainSource(keepgenerated);
ejbc.setDebugOutput(debug);
if (iashome != null) {
ejbc.setIasHomeDir(iashome);
}


try {
ejbc.execute();
} catch (IOException e) {
try {
ejbc.execute();
} catch (IOException e) {
String msg = "An IOException occurred while trying to read the XML " String msg = "An IOException occurred while trying to read the XML "
+ "descriptor file: " + e.getMessage();
+ "descriptor file: " + e.getMessage();
throw new BuildException(msg, e, location); throw new BuildException(msg, e, location);
} catch (SAXException e) { } catch (SAXException e) {
String msg = "A SAXException occurred while trying to read the XML " String msg = "A SAXException occurred while trying to read the XML "
+ "descriptor file: " + e.getMessage();
+ "descriptor file: " + e.getMessage();
throw new BuildException(msg, e, location); throw new BuildException(msg, e, location);
} catch (IPlanetEjbc.EjbcException e) { } catch (IPlanetEjbc.EjbcException e) {
String msg = "An exception occurred while trying to run the ejbc " String msg = "An exception occurred while trying to run the ejbc "
+ "utility: " + e.getMessage();
+ "utility: " + e.getMessage();
throw new BuildException(msg, e, location); throw new BuildException(msg, e, location);
} }
}
}


/** /**
* Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH * Returns the CLASSPATH to be used when calling EJBc. If no user CLASSPATH
* is specified, the System classpath is returned instead.
*
* @return Path The classpath to be used for EJBc.
*/
private Path getClasspath() {
if (classpath == null) {
classpath = Path.systemClasspath;
}
* is specified, the System classpath is returned instead.
*
* @return Path The classpath to be used for EJBc.
*/
private Path getClasspath() {
if (classpath == null) {
classpath = Path.systemClasspath;
}


return classpath;
}
return classpath;
}
} }

+ 14
- 14
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntTool.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -73,20 +73,20 @@ import org.apache.tools.ant.BuildException;
public class VAJAntTool { public class VAJAntTool {
private final static String TOOL_DATA_KEY = "AntTool"; private final static String TOOL_DATA_KEY = "AntTool";


/** /**
* Loads the BuildInfo for the specified VAJ project from the * Loads the BuildInfo for the specified VAJ project from the
* tool data for this project. * tool data for this project.
* If there is no build info stored for that project, a new * If there is no build info stored for that project, a new
* default BuildInfo is returned * default BuildInfo is returned
*
*
* @return BuildInfo buildInfo build info for the specified project * @return BuildInfo buildInfo build info for the specified project
* @param projectName String project name * @param projectName String project name
*/ */
public static VAJBuildInfo loadBuildData(String projectName) { public static VAJBuildInfo loadBuildData(String projectName) {
VAJBuildInfo result = null; VAJBuildInfo result = null;
try { try {
Project project =
Project project =
VAJLocalUtil.getWorkspace().loadedProjectNamed( projectName ); VAJLocalUtil.getWorkspace().loadedProjectNamed( projectName );
if ( project.testToolRepositoryData(TOOL_DATA_KEY) ) { if ( project.testToolRepositoryData(TOOL_DATA_KEY) ) {
ToolData td = project.getToolRepositoryData(TOOL_DATA_KEY); ToolData td = project.getToolRepositoryData(TOOL_DATA_KEY);
@@ -97,7 +97,7 @@ public class VAJAntTool {
} }
result.setVAJProjectName( projectName ); result.setVAJProjectName( projectName );
} catch (Throwable t) { } catch (Throwable t) {
throw new BuildException("BuildInfo for Project "
throw new BuildException("BuildInfo for Project "
+ projectName + " could not be loaded" + t); + projectName + " could not be loaded" + t);
} }
return result; return result;
@@ -108,7 +108,7 @@ public class VAJAntTool {
* Starts the application. * Starts the application.
* *
* @param args an array of command-line arguments. VAJ puts the * @param args an array of command-line arguments. VAJ puts the
* VAJ project name into args[1] when starting the
* VAJ project name into args[1] when starting the
* tool from the project context menu * tool from the project context menu
*/ */
public static void main(java.lang.String[] args) { public static void main(java.lang.String[] args) {
@@ -117,11 +117,11 @@ public class VAJAntTool {
if ( args.length >= 2 && args[1] instanceof String ) { if ( args.length >= 2 && args[1] instanceof String ) {
String projectName = (String)args[1]; String projectName = (String)args[1];
info = loadBuildData( projectName ); info = loadBuildData( projectName );
}
}
else { else {
info = new VAJBuildInfo(); info = new VAJBuildInfo();
} }
VAJAntToolGUI mainFrame = new VAJAntToolGUI( info ); VAJAntToolGUI mainFrame = new VAJAntToolGUI( info );
mainFrame.show(); mainFrame.show();
} catch ( Throwable t ) { } catch ( Throwable t ) {
@@ -141,10 +141,10 @@ public class VAJAntTool {
String data = info.asDataString(); String data = info.asDataString();
try { try {
ToolData td = new ToolData( TOOL_DATA_KEY, data ); ToolData td = new ToolData( TOOL_DATA_KEY, data );
VAJLocalUtil.getWorkspace().loadedProjectNamed(
VAJLocalUtil.getWorkspace().loadedProjectNamed(
info.getVAJProjectName() ).setToolRepositoryData( td ); info.getVAJProjectName() ).setToolRepositoryData( td );
} catch (Throwable t) { } catch (Throwable t) {
throw new BuildException("BuildInfo for Project "
throw new BuildException("BuildInfo for Project "
+ info.getVAJProjectName() + " could not be saved", t); + info.getVAJProjectName() + " could not be saved", t);
} }
} }


+ 39
- 39
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJAntToolGUI.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -95,14 +95,14 @@ import org.apache.tools.ant.BuildEvent;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;


/** /**
* This is a simple grafical user interface to provide the information needed
* This is a simple grafical user interface to provide the information needed
* by ANT and to start the build-process within IBM VisualAge for Java. * by ANT and to start the build-process within IBM VisualAge for Java.
* <p> * <p>
* I was using AWT to make it independent from the JDK-version. Please don't
* ask me for a Swing-version:I am very familiar with Swing and I really think
* I was using AWT to make it independent from the JDK-version. Please don't
* ask me for a Swing-version:I am very familiar with Swing and I really think
* that it's not necessary for such a simple gui! * that it's not necessary for such a simple gui!
* <p> * <p>
* It is completely developed in VAJ using the visual composition editor.
* It is completely developed in VAJ using the visual composition editor.
* About 90% of the code is generated by VAJ, * About 90% of the code is generated by VAJ,
* but in fact I did a lot of <i>code-beautification</i> ;-). * but in fact I did a lot of <i>code-beautification</i> ;-).
* <p> * <p>
@@ -111,7 +111,7 @@ import org.apache.tools.ant.Project;
*/ */
public class VAJAntToolGUI extends Frame { public class VAJAntToolGUI extends Frame {
/** /**
* Members
* Members
*/ */
private VAJBuildLogger logger = new VAJBuildLogger(); private VAJBuildLogger logger = new VAJBuildLogger();
private String lineSeparator = "\r\n"; private String lineSeparator = "\r\n";
@@ -138,7 +138,7 @@ public class VAJAntToolGUI extends Frame {
// Project name // Project name
private Label iProjectLabel = null; private Label iProjectLabel = null;
private Label iProjectText = null; private Label iProjectText = null;
// XML-file
// XML-file
private Label iBuildFileLabel = null; private Label iBuildFileLabel = null;
private TextField iBuildFileTextField = null; private TextField iBuildFileTextField = null;
private boolean iConnPtoP2Aligning = false; private boolean iConnPtoP2Aligning = false;
@@ -151,7 +151,7 @@ public class VAJAntToolGUI extends Frame {
private List iTargetList = null; private List iTargetList = null;
// Command-buttons // Command-buttons
private Button iBuildButton = null; private Button iBuildButton = null;
private Button iReloadButton = null;
private Button iReloadButton = null;
private Button iCloseButton = null; private Button iCloseButton = null;
/** /**
* log-Window * log-Window
@@ -180,7 +180,7 @@ public class VAJAntToolGUI extends Frame {
private Button iAboutOkButton = null; private Button iAboutOkButton = null;


/** /**
* This internal BuildLogger, to be honest, is just a BuildListener.
* This internal BuildLogger, to be honest, is just a BuildListener.
* It does nearly the same as the DefaultLogger, but uses the Loggin-Window for output. * It does nearly the same as the DefaultLogger, but uses the Loggin-Window for output.
*/ */
private class VAJBuildLogger implements BuildListener { private class VAJBuildLogger implements BuildListener {
@@ -203,7 +203,7 @@ public class VAJAntToolGUI extends Frame {
getStopButton().setEnabled(false); getStopButton().setEnabled(false);
getBuildButton().setEnabled(true); getBuildButton().setEnabled(true);
getBuildButton().requestFocus(); getBuildButton().requestFocus();
Throwable error = event.getException(); Throwable error = event.getException();


if (error == null) { if (error == null) {
@@ -235,7 +235,7 @@ public class VAJAntToolGUI extends Frame {
error.printStackTrace(System.err); error.printStackTrace(System.err);
} }
} }
/** /**
* Fired before any targets are started. * Fired before any targets are started.
*/ */
@@ -300,7 +300,7 @@ public class VAJAntToolGUI extends Frame {
public void taskStarted(BuildEvent event) { public void taskStarted(BuildEvent event) {
} }
} }
/** /**
* Eventhandler to handle all AWT-events * Eventhandler to handle all AWT-events
*/ */
@@ -320,7 +320,7 @@ public class VAJAntToolGUI extends Frame {
getBuildFileTextField().setText(getFileDialog().getDirectory() + getFileDialog().getFile()); getBuildFileTextField().setText(getFileDialog().getDirectory() + getFileDialog().getFile());
} }
} }
// dispose and exit application
// dispose and exit application
if (e.getSource() == VAJAntToolGUI.this.getCloseButton()) { if (e.getSource() == VAJAntToolGUI.this.getCloseButton()) {
dispose(); dispose();
System.exit(0); System.exit(0);
@@ -344,21 +344,21 @@ public class VAJAntToolGUI extends Frame {
} }
} }
// MenuItems // MenuItems
if (e.getSource() == VAJAntToolGUI.this.getSaveMenuItem())
if (e.getSource() == VAJAntToolGUI.this.getSaveMenuItem())
saveBuildInfo(); saveBuildInfo();
if (e.getSource() == VAJAntToolGUI.this.getAboutMenuItem())
if (e.getSource() == VAJAntToolGUI.this.getAboutMenuItem())
getAboutDialog().show(); getAboutDialog().show();
if (e.getSource() == VAJAntToolGUI.this.getShowLogMenuItem())
if (e.getSource() == VAJAntToolGUI.this.getShowLogMenuItem())
getMessageFrame().show(); getMessageFrame().show();
/* #### About dialog #### */ /* #### About dialog #### */
if (e.getSource() == VAJAntToolGUI.this.getAboutOkButton())
if (e.getSource() == VAJAntToolGUI.this.getAboutOkButton())
getAboutDialog().dispose(); getAboutDialog().dispose();
/* #### Log frame #### */ /* #### Log frame #### */
if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton()) if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton())
getMessageFrame().dispose(); getMessageFrame().dispose();
if (e.getSource() == VAJAntToolGUI.this.getMessageClearLogButton())
if (e.getSource() == VAJAntToolGUI.this.getMessageClearLogButton())
getMessageTextArea().setText(""); getMessageTextArea().setText("");
if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton())
if (e.getSource() == VAJAntToolGUI.this.getMessageOkButton())
getMessageFrame().dispose(); getMessageFrame().dispose();
} }
catch (Throwable exc) { catch (Throwable exc) {
@@ -371,36 +371,36 @@ public class VAJAntToolGUI extends Frame {
*/ */
public void itemStateChanged(ItemEvent e) { public void itemStateChanged(ItemEvent e) {
try { try {
if (e.getSource() == VAJAntToolGUI.this.getTargetList())
if (e.getSource() == VAJAntToolGUI.this.getTargetList())
getBuildButton().setEnabled(true); getBuildButton().setEnabled(true);
if (e.getSource() == VAJAntToolGUI.this.getMessageOutputLevelChoice())
if (e.getSource() == VAJAntToolGUI.this.getMessageOutputLevelChoice())
getBuildInfo().setOutputMessageLevel(getMessageOutputLevelChoice().getSelectedIndex()); getBuildInfo().setOutputMessageLevel(getMessageOutputLevelChoice().getSelectedIndex());
if (e.getSource() == VAJAntToolGUI.this.getTargetList())
if (e.getSource() == VAJAntToolGUI.this.getTargetList())
getBuildInfo().setTarget(getTargetList().getSelectedItem()); getBuildInfo().setTarget(getTargetList().getSelectedItem());
} }
catch (Throwable exc) { catch (Throwable exc) {
handleException(exc); handleException(exc);
} }
} }
/** /**
* PropertyChangeListener method * PropertyChangeListener method
*/ */
public void propertyChange(java.beans.PropertyChangeEvent evt) { public void propertyChange(java.beans.PropertyChangeEvent evt) {
if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("projectName")))
if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("projectName")))
connectProjectNameToLabel(); connectProjectNameToLabel();
if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("buildFileName")))
if (evt.getSource() == VAJAntToolGUI.this.getBuildInfo() && (evt.getPropertyName().equals("buildFileName")))
connectBuildFileNameToTextField(); connectBuildFileNameToTextField();
} }
/** /**
* TextListener method * TextListener method
*/ */
public void textValueChanged(TextEvent e) { public void textValueChanged(TextEvent e) {
if (e.getSource() == VAJAntToolGUI.this.getBuildFileTextField())
if (e.getSource() == VAJAntToolGUI.this.getBuildFileTextField())
connectTextFieldToBuildFileName(); connectTextFieldToBuildFileName();
} }
/** /**
* WindowListener methods * WindowListener methods
*/ */
@@ -410,9 +410,9 @@ public class VAJAntToolGUI extends Frame {
dispose(); dispose();
System.exit(0); System.exit(0);
} }
if (e.getSource() == VAJAntToolGUI.this.getAboutDialog())
if (e.getSource() == VAJAntToolGUI.this.getAboutDialog())
getAboutDialog().dispose(); getAboutDialog().dispose();
if (e.getSource() == VAJAntToolGUI.this.getMessageFrame())
if (e.getSource() == VAJAntToolGUI.this.getMessageFrame())
getMessageFrame().dispose(); getMessageFrame().dispose();
} }
catch (Throwable exc) { catch (Throwable exc) {
@@ -426,7 +426,7 @@ public class VAJAntToolGUI extends Frame {
public void windowIconified(WindowEvent e) {}; public void windowIconified(WindowEvent e) {};
public void windowOpened(WindowEvent e) {}; public void windowOpened(WindowEvent e) {};
} }
/** /**
* AntMake default-constructor. * AntMake default-constructor.
*/ */
@@ -438,7 +438,7 @@ public class VAJAntToolGUI extends Frame {
* AntMake constructor called by VAJAntTool integration. * AntMake constructor called by VAJAntTool integration.
* @param buildInfo VAJBuildInfo * @param buildInfo VAJBuildInfo
*/ */
public VAJAntToolGUI(VAJBuildInfo newBuildInfo) { public VAJAntToolGUI(VAJBuildInfo newBuildInfo) {
super(); super();
setBuildInfo(newBuildInfo); setBuildInfo(newBuildInfo);
@@ -503,12 +503,12 @@ public class VAJAntToolGUI extends Frame {
* external build of a .jar-file * external build of a .jar-file
*/ */
private void executeTarget() { private void executeTarget() {
try {
try {
getMessageFrame().show(); getMessageFrame().show();
getBuildInfo().executeProject(logger); getBuildInfo().executeProject(logger);
} }
catch (Throwable exc) { catch (Throwable exc) {
logger.logException( exc );
logger.logException( exc );
} }
return; return;
} }
@@ -1293,7 +1293,7 @@ public class VAJAntToolGUI extends Frame {


getMessageTextArea().append(lineSeparator + lineSeparator + trace); getMessageTextArea().append(lineSeparator + lineSeparator + trace);
getMessageFrame().show(); getMessageFrame().show();
} }
/** /**
* Initializes connections * Initializes connections


+ 26
- 27
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJBuildInfo.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -54,7 +54,7 @@


package org.apache.tools.ant.taskdefs.optional.ide; package org.apache.tools.ant.taskdefs.optional.ide;


import java.util.Vector; import java.util.Vector;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.StringTokenizer; import java.util.StringTokenizer;
@@ -80,7 +80,7 @@ import org.apache.tools.ant.BuildEvent;
* execute target) * execute target)
* - manages a seperate thread for Ant project execution * - manages a seperate thread for Ant project execution
* this allows interrupting a running build from a GUI * this allows interrupting a running build from a GUI
*
*
* @author Wolf Siberski, TUI Infotec GmbH * @author Wolf Siberski, TUI Infotec GmbH
*/ */


@@ -102,7 +102,7 @@ class VAJBuildInfo implements Runnable {
private class InterruptedChecker implements BuildListener { private class InterruptedChecker implements BuildListener {
// the real listener // the real listener
BuildListener wrappedListener; BuildListener wrappedListener;
/** /**
* Can only be constructed as wrapper around a real listener * Can only be constructed as wrapper around a real listener
* @param listener the real listener * @param listener the real listener
@@ -182,11 +182,10 @@ class VAJBuildInfo implements Runnable {
checkInterrupted(); checkInterrupted();
} }
} }

// name of the VA project this BuildInfo belongs to // name of the VA project this BuildInfo belongs to
private String vajProjectName = ""; private String vajProjectName = "";
// name of the Ant build file // name of the Ant build file
private String buildFileName = ""; private String buildFileName = "";


@@ -208,30 +207,30 @@ class VAJBuildInfo implements Runnable {
// Support for bound properties // Support for bound properties
protected transient PropertyChangeSupport propertyChange; protected transient PropertyChangeSupport propertyChange;


// thread for Ant build execution
// thread for Ant build execution
private Thread buildThread; private Thread buildThread;


// the listener used to log output. // the listener used to log output.
private BuildListener projectLogger; private BuildListener projectLogger;


/** /**
* The addPropertyChangeListener method was generated to support the
* The addPropertyChangeListener method was generated to support the
* propertyChange field. * propertyChange field.
*/ */
public synchronized void addPropertyChangeListener(PropertyChangeListener listener) { public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
getPropertyChange().addPropertyChangeListener(listener); getPropertyChange().addPropertyChangeListener(listener);
} }
/** /**
* Returns the BuildInfo information as String. The BuildInfo can * Returns the BuildInfo information as String. The BuildInfo can
* be rebuilt from that String by calling parse(). * be rebuilt from that String by calling parse().
* @return java.lang.String * @return java.lang.String
*/ */
public String asDataString() { public String asDataString() {
String result = getOutputMessageLevel() + "|" + getBuildFileName()
String result = getOutputMessageLevel() + "|" + getBuildFileName()
+ "|" + getTarget(); + "|" + getTarget();
for ( Enumeration e = getProjectTargets().elements();
for ( Enumeration e = getProjectTargets().elements();
e.hasMoreElements(); ) { e.hasMoreElements(); ) {
result = result + "|" + e.nextElement(); result = result + "|" + e.nextElement();
} }
@@ -286,14 +285,14 @@ class VAJBuildInfo implements Runnable {
} }
return project; return project;
} }
/** /**
* return a list of all targets in the current buildfile * return a list of all targets in the current buildfile
*/ */
public Vector getProjectTargets() { public Vector getProjectTargets() {
return projectTargets; return projectTargets;
} }
/** /**
* Accessor for the propertyChange field. * Accessor for the propertyChange field.
*/ */
@@ -373,13 +372,13 @@ class VAJBuildInfo implements Runnable {
} }


/** /**
* The removePropertyChangeListener method was generated
* The removePropertyChangeListener method was generated
* to support the propertyChange field. * to support the propertyChange field.
*/ */
public synchronized void removePropertyChangeListener(PropertyChangeListener listener) { public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
getPropertyChange().removePropertyChangeListener(listener); getPropertyChange().removePropertyChangeListener(listener);
} }
/** /**
* Sets the build file name * Sets the build file name
* @param buildFileName build file name * @param buildFileName build file name
@@ -390,7 +389,7 @@ class VAJBuildInfo implements Runnable {
setProjectInitialized(false); setProjectInitialized(false);
firePropertyChange("buildFileName", oldValue, buildFileName); firePropertyChange("buildFileName", oldValue, buildFileName);
} }
/** /**
* Sets the log level (value must be one of the constants in Project) * Sets the log level (value must be one of the constants in Project)
* @param outputMessageLevel log level. * @param outputMessageLevel log level.
@@ -398,7 +397,7 @@ class VAJBuildInfo implements Runnable {
public void setOutputMessageLevel(int newOutputMessageLevel) { public void setOutputMessageLevel(int newOutputMessageLevel) {
int oldValue = outputMessageLevel; int oldValue = outputMessageLevel;
outputMessageLevel = newOutputMessageLevel; outputMessageLevel = newOutputMessageLevel;
firePropertyChange("outputMessageLevel",
firePropertyChange("outputMessageLevel",
new Integer(oldValue), new Integer(outputMessageLevel)); new Integer(oldValue), new Integer(outputMessageLevel));
} }


@@ -410,7 +409,7 @@ class VAJBuildInfo implements Runnable {
int level = Integer.parseInt( outputMessageLevel ); int level = Integer.parseInt( outputMessageLevel );
setOutputMessageLevel( level ); setOutputMessageLevel( level );
} }
/** /**
* sets the initialized flag * sets the initialized flag
*/ */
@@ -461,7 +460,7 @@ class VAJBuildInfo implements Runnable {




/** /**
* cancels a build.
* cancels a build.
*/ */
public void cancelBuild() { public void cancelBuild() {
buildThread.interrupt(); buildThread.interrupt();
@@ -484,7 +483,7 @@ class VAJBuildInfo implements Runnable {
} catch (Error err) { } catch (Error err) {
error = err; error = err;
throw err; throw err;
}
}
} }


/** /**
@@ -501,7 +500,7 @@ class VAJBuildInfo implements Runnable {
if (!isProjectInitialized()) { if (!isProjectInitialized()) {
initProject(); initProject();
} }
project.addBuildListener( ic ); project.addBuildListener( ic );
project.executeTarget(target); project.executeTarget(target);




+ 133
- 133
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJExport.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -51,7 +51,7 @@
* information on the Apache Software Foundation, please see * information on the Apache Software Foundation, please see
* <http://www.apache.org/>. * <http://www.apache.org/>.
*/ */
package org.apache.tools.ant.taskdefs.optional.ide; package org.apache.tools.ant.taskdefs.optional.ide;




@@ -61,21 +61,21 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.PatternSet; import org.apache.tools.ant.types.PatternSet;


/** /**
* Export packages from the Visual Age for Java workspace.
* The packages are specified similar to all other MatchingTasks.
* Since the VA Workspace is not file based, this task is simulating
* Export packages from the Visual Age for Java workspace.
* The packages are specified similar to all other MatchingTasks.
* Since the VA Workspace is not file based, this task is simulating
* a directory hierarchy for the workspace: * a directory hierarchy for the workspace:
* The 'root' contains all project 'dir's, and the projects contain
* The 'root' contains all project 'dir's, and the projects contain
* their respective package 'dir's. * their respective package 'dir's.
* Example:
* <blockquote>
* Example:
* <blockquote>
* &lt;vajexport destdir="C:/builddir/source"> * &lt;vajexport destdir="C:/builddir/source">
* &nbsp;&lt;include name="/MyVAProject/org/foo/subsystem1/**" /> * &nbsp;&lt;include name="/MyVAProject/org/foo/subsystem1/**" />
* &nbsp;&lt;exclude name="/MyVAProject/org/foo/subsystem1/test/**"/> * &nbsp;&lt;exclude name="/MyVAProject/org/foo/subsystem1/test/**"/>
* &lt;/vajexport> * &lt;/vajexport>
* </blockquote> * </blockquote>
* exports all packages in the project MyVAProject which start with * exports all packages in the project MyVAProject which start with
* 'org.foo.subsystem1' except of these starting with
* 'org.foo.subsystem1' except of these starting with
* 'org.foo.subsystem1.test'. * 'org.foo.subsystem1.test'.
* *
* There are flags to choose which items to export: * There are flags to choose which items to export:
@@ -89,124 +89,124 @@ import org.apache.tools.ant.types.PatternSet;
*/ */


public class VAJExport extends VAJTask { public class VAJExport extends VAJTask {
//set set... method comments for description
protected File destDir;
protected boolean exportSources = true;
protected boolean exportResources = true;
protected boolean exportClasses = false;
protected boolean exportDebugInfo = false;
protected boolean useDefaultExcludes = true;
protected boolean overwrite = true;
protected PatternSet patternSet = new PatternSet();
/**
* add a name entry on the exclude list
*/
public PatternSet.NameEntry createExclude() {
return patternSet.createExclude();
}
/**
* add a name entry on the include list
*/
public PatternSet.NameEntry createInclude() {
return patternSet.createInclude();
}
/**
* do the export
*/
public void execute() throws BuildException {
// first off, make sure that we've got a destdir
if (destDir == null) {
throw new BuildException("destdir attribute must be set!");
}
// delegate the export to the VAJUtil object.
getUtil().exportPackages(destDir,
patternSet.getIncludePatterns(getProject()),
patternSet.getExcludePatterns(getProject()),
exportClasses, exportDebugInfo,
exportResources, exportSources,
useDefaultExcludes, overwrite);
}
/**
* Sets whether default exclusions should be used or not.
*
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they
* shouldn't be used.
*/
public void setDefaultexcludes(boolean useDefaultExcludes) {
this.useDefaultExcludes = useDefaultExcludes;
}
/**
* Set the destination directory into which the selected
* items should be exported
*/
public void setDestdir(File destDir) {
this.destDir = destDir;
}
/**
* Sets the set of exclude patterns. Patterns may be separated by a comma
* or a space. Currently only patterns denoting packages are
* supported
*
* @param excludes the string containing the exclude patterns
*/
public void setExcludes(String excludes) {
patternSet.setExcludes(excludes);
}
/**
* if exportClasses is set, class files are exported
*/
public void setExportClasses(boolean doExport) {
exportClasses = doExport;
}
/**
* if exportDebugInfo is set, the exported class files contain
* debug info
*/
public void setExportDebugInfo(boolean doExport) {
exportDebugInfo = doExport;
}
/**
* if exportResources is set, resource file will be exported
*/
public void setExportResources(boolean doExport) {
exportResources = doExport;
}
/**
* if exportSources is set, java files will be exported
*/
public void setExportSources(boolean doExport) {
exportSources = doExport;
}
/**
* Sets the set of include patterns. Patterns may be separated by a comma
* or a space.Currently only patterns denoting packages are
* supported
*
* @param includes the string containing the include patterns
*/
public void setIncludes(String includes) {
patternSet.setIncludes(includes);
}
/**
* if Overwrite is set, files will be overwritten during export
*/
public void setOverwrite(boolean doOverwrite) {
overwrite = doOverwrite;
}
//set set... method comments for description
protected File destDir;
protected boolean exportSources = true;
protected boolean exportResources = true;
protected boolean exportClasses = false;
protected boolean exportDebugInfo = false;
protected boolean useDefaultExcludes = true;
protected boolean overwrite = true;
protected PatternSet patternSet = new PatternSet();
/**
* add a name entry on the exclude list
*/
public PatternSet.NameEntry createExclude() {
return patternSet.createExclude();
}
/**
* add a name entry on the include list
*/
public PatternSet.NameEntry createInclude() {
return patternSet.createInclude();
}
/**
* do the export
*/
public void execute() throws BuildException {
// first off, make sure that we've got a destdir
if (destDir == null) {
throw new BuildException("destdir attribute must be set!");
}
// delegate the export to the VAJUtil object.
getUtil().exportPackages(destDir,
patternSet.getIncludePatterns(getProject()),
patternSet.getExcludePatterns(getProject()),
exportClasses, exportDebugInfo,
exportResources, exportSources,
useDefaultExcludes, overwrite);
}
/**
* Sets whether default exclusions should be used or not.
*
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they
* shouldn't be used.
*/
public void setDefaultexcludes(boolean useDefaultExcludes) {
this.useDefaultExcludes = useDefaultExcludes;
}
/**
* Set the destination directory into which the selected
* items should be exported
*/
public void setDestdir(File destDir) {
this.destDir = destDir;
}
/**
* Sets the set of exclude patterns. Patterns may be separated by a comma
* or a space. Currently only patterns denoting packages are
* supported
*
* @param excludes the string containing the exclude patterns
*/
public void setExcludes(String excludes) {
patternSet.setExcludes(excludes);
}
/**
* if exportClasses is set, class files are exported
*/
public void setExportClasses(boolean doExport) {
exportClasses = doExport;
}
/**
* if exportDebugInfo is set, the exported class files contain
* debug info
*/
public void setExportDebugInfo(boolean doExport) {
exportDebugInfo = doExport;
}
/**
* if exportResources is set, resource file will be exported
*/
public void setExportResources(boolean doExport) {
exportResources = doExport;
}
/**
* if exportSources is set, java files will be exported
*/
public void setExportSources(boolean doExport) {
exportSources = doExport;
}
/**
* Sets the set of include patterns. Patterns may be separated by a comma
* or a space.Currently only patterns denoting packages are
* supported
*
* @param includes the string containing the include patterns
*/
public void setIncludes(String includes) {
patternSet.setIncludes(includes);
}
/**
* if Overwrite is set, files will be overwritten during export
*/
public void setOverwrite(boolean doOverwrite) {
overwrite = doOverwrite;
}
} }

+ 121
- 121
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImport.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -64,11 +64,11 @@ import org.apache.tools.ant.types.FileSet;
import java.lang.reflect.Field; import java.lang.reflect.Field;


/** /**
* Import source, class files, and resources to the Visual Age for Java
* Import source, class files, and resources to the Visual Age for Java
* workspace using FileSets. * workspace using FileSets.
* <p> * <p>
* Example:
* <pre>
* Example:
* <pre>
* &lt;vajimport project="MyVAProject"&gt; * &lt;vajimport project="MyVAProject"&gt;
* &lt;fileset dir="src"&gt; * &lt;fileset dir="src"&gt;
* &lt;include name="org/foo/subsystem1/**" /&gt; * &lt;include name="org/foo/subsystem1/**" /&gt;
@@ -77,7 +77,7 @@ import java.lang.reflect.Field;
* &lt;/vajexport&gt; * &lt;/vajexport&gt;
* </pre> * </pre>
* import all source and resource files from the "src" directory * import all source and resource files from the "src" directory
* which start with 'org.foo.subsystem1', except of these starting with
* which start with 'org.foo.subsystem1', except of these starting with
* 'org.foo.subsystem1.test' into the project MyVAProject. * 'org.foo.subsystem1.test' into the project MyVAProject.
* </p> * </p>
* <p>If MyVAProject isn't loaded into the Workspace, a new edition is * <p>If MyVAProject isn't loaded into the Workspace, a new edition is
@@ -117,116 +117,116 @@ import java.lang.reflect.Field;
* @author: Glenn McAllister, inspired by a similar task written by Peter Kelley * @author: Glenn McAllister, inspired by a similar task written by Peter Kelley
*/ */
public class VAJImport extends VAJTask { public class VAJImport extends VAJTask {
protected Vector filesets = new Vector();
protected boolean importSources = true;
protected boolean importResources = true;
protected boolean importClasses = false;
protected String importProject = null;
protected boolean useDefaultExcludes = true;
/**
* The VisualAge for Java Project name to import into.
*/
public void setProject(String projectName) {
this.importProject = projectName;
}
/**
* Adds a set of files (nested fileset attribute).
*/
public void addFileset(FileSet set) {
filesets.addElement(set);
}
/**
* Import .class files.
*/
public void setImportClasses(boolean importClasses) {
this.importClasses = importClasses;
}
/**
* Import resource files (anything that doesn't end in
* .class or .java)
*/
public void setImportResources(boolean importResources) {
this.importResources = importResources;
}
/**
* Import .java files
*/
public void setImportSources(boolean importSources) {
this.importSources = importSources;
}
/**
* Sets whether default exclusions should be used or not.
*
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they
* shouldn't be used.
*/
public void setDefaultexcludes(boolean useDefaultExcludes) {
this.useDefaultExcludes = useDefaultExcludes;
}
/**
* Do the import.
*/
public void execute() throws BuildException {
if (filesets.size() == 0) {
throw new BuildException("At least one fileset is required!");
}
if (importProject == null || "".equals(importProject)) {
throw new BuildException("The VisualAge for Java Project name is required!");
}
for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
importFileset((FileSet) e.nextElement());
}
}
/**
* Import all files from the fileset into the Project in the
* Workspace.
*/
protected void importFileset(FileSet fileset) {
DirectoryScanner ds = fileset.getDirectoryScanner(this.project);
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");
}
getUtil().importFiles( importProject, ds.getBasedir(),
includes, excludes,
importClasses, importResources, importSources,
useDefaultExcludes);
}
protected Vector filesets = new Vector();
protected boolean importSources = true;
protected boolean importResources = true;
protected boolean importClasses = false;
protected String importProject = null;
protected boolean useDefaultExcludes = true;
/**
* The VisualAge for Java Project name to import into.
*/
public void setProject(String projectName) {
this.importProject = projectName;
}
/**
* Adds a set of files (nested fileset attribute).
*/
public void addFileset(FileSet set) {
filesets.addElement(set);
}
/**
* Import .class files.
*/
public void setImportClasses(boolean importClasses) {
this.importClasses = importClasses;
}
/**
* Import resource files (anything that doesn't end in
* .class or .java)
*/
public void setImportResources(boolean importResources) {
this.importResources = importResources;
}
/**
* Import .java files
*/
public void setImportSources(boolean importSources) {
this.importSources = importSources;
}
/**
* Sets whether default exclusions should be used or not.
*
* @param useDefaultExcludes "true"|"on"|"yes" when default exclusions
* should be used, "false"|"off"|"no" when they
* shouldn't be used.
*/
public void setDefaultexcludes(boolean useDefaultExcludes) {
this.useDefaultExcludes = useDefaultExcludes;
}
/**
* Do the import.
*/
public void execute() throws BuildException {
if (filesets.size() == 0) {
throw new BuildException("At least one fileset is required!");
}
if (importProject == null || "".equals(importProject)) {
throw new BuildException("The VisualAge for Java Project name is required!");
}
for (Enumeration e = filesets.elements(); e.hasMoreElements();) {
importFileset((FileSet) e.nextElement());
}
}
/**
* Import all files from the fileset into the Project in the
* Workspace.
*/
protected void importFileset(FileSet fileset) {
DirectoryScanner ds = fileset.getDirectoryScanner(this.project);
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");
}
getUtil().importFiles( importProject, ds.getBasedir(),
includes, excludes,
importClasses, importResources, importSources,
useDefaultExcludes);
}
} }

+ 3
- 3
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJImportServlet.java View File

@@ -59,7 +59,7 @@ import java.io.File;


/** /**
* A Remote Access to Tools Servlet to import a Project * A Remote Access to Tools Servlet to import a Project
* from files into the Repository. The following
* from files into the Repository. The following
* table describes the servlet parameters. * table describes the servlet parameters.
* *
* <table> * <table>
@@ -95,8 +95,8 @@ public class VAJImportServlet extends VAJToolsServlet {
getBooleanParam(RESOURCES_PARAM, true), getBooleanParam(RESOURCES_PARAM, true),
getBooleanParam(SOURCES_PARAM, true), getBooleanParam(SOURCES_PARAM, true),
false // no default excludes, because they false // no default excludes, because they
// are already added on client side
// getBooleanParam(DEFAULT_EXCLUDES_PARAM, true)
// are already added on client side
// getBooleanParam(DEFAULT_EXCLUDES_PARAM, true)
); );
} }
} }

+ 46
- 46
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJLocalUtil.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 2001 The Apache Software Foundation. All rights
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -81,7 +81,7 @@ import org.apache.tools.ant.DirectoryScanner;
abstract class VAJLocalUtil implements VAJUtil{ abstract class VAJLocalUtil implements VAJUtil{
// singleton containing the VAJ workspace // singleton containing the VAJ workspace
private static Workspace workspace; private static Workspace workspace;
/** /**
* Wraps IvjException into a BuildException * Wraps IvjException into a BuildException
* *
@@ -100,7 +100,7 @@ abstract class VAJLocalUtil implements VAJUtil{
} }
return new BuildException(errMsg, e); return new BuildException(errMsg, e);
} }
/** /**
* returns the current VAJ workspace. * returns the current VAJ workspace.
* @return com.ibm.ivj.util.base.Workspace * @return com.ibm.ivj.util.base.Workspace
@@ -111,7 +111,7 @@ abstract class VAJLocalUtil implements VAJUtil{
if (workspace == null) { if (workspace == null) {
throw new BuildException( throw new BuildException(
"Unable to connect to Workspace! " "Unable to connect to Workspace! "
+ "Make sure you are running in VisualAge for Java.");
+ "Make sure you are running in VisualAge for Java.");
} }
} }


@@ -122,7 +122,7 @@ abstract class VAJLocalUtil implements VAJUtil{
//----------------------------------------------------------- //-----------------------------------------------------------
// export // export
//----------------------------------------------------------- //-----------------------------------------------------------
/** /**
* export packages * export packages
*/ */
@@ -131,7 +131,7 @@ abstract class VAJLocalUtil implements VAJUtil{
String[] includePatterns, String[] excludePatterns, String[] includePatterns, String[] excludePatterns,
boolean exportClasses, boolean exportDebugInfo, boolean exportClasses, boolean exportDebugInfo,
boolean exportResources, boolean exportSources, boolean exportResources, boolean exportSources,
boolean useDefaultExcludes, boolean overwrite) {
boolean useDefaultExcludes, boolean overwrite) {
if (includePatterns == null || includePatterns.length == 0) { if (includePatterns == null || includePatterns.length == 0) {
log( "You must specify at least one include attribute. " log( "You must specify at least one include attribute. "
+ "Not exporting", MSG_ERR); + "Not exporting", MSG_ERR);
@@ -147,7 +147,7 @@ abstract class VAJLocalUtil implements VAJUtil{


Package[] packages = scanner.getIncludedPackages(); Package[] packages = scanner.getIncludedPackages();


log( "Exporting " + packages.length + " package(s) to "
log( "Exporting " + packages.length + " package(s) to "
+ dest, MSG_INFO); + dest, MSG_INFO);
for (int i = 0; i < packages.length; i++) { for (int i = 0; i < packages.length; i++) {
log(" " + packages[i].getName(), MSG_VERBOSE); log(" " + packages[i].getName(), MSG_VERBOSE);
@@ -174,7 +174,7 @@ abstract class VAJLocalUtil implements VAJUtil{
//----------------------------------------------------------- //-----------------------------------------------------------
// load // load
//----------------------------------------------------------- //-----------------------------------------------------------
/** /**
* Load specified projects. * Load specified projects.
*/ */
@@ -188,26 +188,26 @@ abstract class VAJLocalUtil implements VAJUtil{
log("No Projects match the name " + d.getName(), MSG_WARN); log("No Projects match the name " + d.getName(), MSG_WARN);
} }
} }
log( "Loading " + expandedDescs.size()
log( "Loading " + expandedDescs.size()
+ " project(s) into workspace", MSG_INFO); + " project(s) into workspace", MSG_INFO);
for (Enumeration e = expandedDescs.elements();
for (Enumeration e = expandedDescs.elements();
e.hasMoreElements(); ) { e.hasMoreElements(); ) {
VAJProjectDescription d = (VAJProjectDescription) e.nextElement(); VAJProjectDescription d = (VAJProjectDescription) e.nextElement();


ProjectEdition pe = findProjectEdition(d.getName(), d.getVersion()); ProjectEdition pe = findProjectEdition(d.getName(), d.getVersion());
try { try {
log( "Loading '" + d.getName() + "', Version '" + d.getVersion()
+ "', into Workspace", MSG_VERBOSE );
log( "Loading '" + d.getName() + "', Version '" + d.getVersion()
+ "', into Workspace", MSG_VERBOSE );
pe.loadIntoWorkspace(); pe.loadIntoWorkspace();
} catch (IvjException ex) { } catch (IvjException ex) {
throw createBuildException( "Project '" + d.getName()
+ "' could not be loaded.", ex );
throw createBuildException( "Project '" + d.getName()
+ "' could not be loaded.", ex );
} }
} }
} }
/** /**
* returns a list of project names matching the given pattern * returns a list of project names matching the given pattern
*/ */
@@ -237,17 +237,17 @@ abstract class VAJLocalUtil implements VAJUtil{
private Vector getExpandedDescriptions(Vector projectDescs) { private Vector getExpandedDescriptions(Vector projectDescs) {
Vector expandedDescs = new Vector(projectDescs.size()); Vector expandedDescs = new Vector(projectDescs.size());
try { try {
String[] projectNames =
String[] projectNames =
getWorkspace().getRepository().getProjectNames(); getWorkspace().getRepository().getProjectNames();
for (int i = 0; i < projectNames.length; i++) { for (int i = 0; i < projectNames.length; i++) {
for (Enumeration e = projectDescs.elements();
for (Enumeration e = projectDescs.elements();
e.hasMoreElements();) { e.hasMoreElements();) {
VAJProjectDescription d = (VAJProjectDescription) e.nextElement(); VAJProjectDescription d = (VAJProjectDescription) e.nextElement();
String pattern = d.getName(); String pattern = d.getName();
if (VAJWorkspaceScanner.match(pattern, projectNames[i])) { if (VAJWorkspaceScanner.match(pattern, projectNames[i])) {
d.setProjectFound(); d.setProjectFound();
expandedDescs.addElement(new VAJProjectDescription( expandedDescs.addElement(new VAJProjectDescription(
projectNames[i], d.getVersion()));
projectNames[i], d.getVersion()));
break; break;
} }
} }
@@ -283,8 +283,8 @@ abstract class VAJLocalUtil implements VAJUtil{
} }
} }
if (pe == null) { if (pe == null) {
throw new BuildException( "Version " + versionName
+ " of Project " + name + " doesn't exist" );
throw new BuildException( "Version " + versionName
+ " of Project " + name + " doesn't exist" );
} }
return pe; return pe;


@@ -299,18 +299,18 @@ abstract class VAJLocalUtil implements VAJUtil{
//----------------------------------------------------------- //-----------------------------------------------------------
// import // import
//----------------------------------------------------------- //-----------------------------------------------------------


/** /**
* Do the import. * Do the import.
*/ */
public void importFiles( public void importFiles(
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes)
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes)
throws BuildException { throws BuildException {
if (importProject == null || "".equals(importProject)) { if (importProject == null || "".equals(importProject)) {
throw new BuildException("The VisualAge for Java project " throw new BuildException("The VisualAge for Java project "
+ "name is required!"); + "name is required!");
@@ -332,20 +332,20 @@ abstract class VAJLocalUtil implements VAJUtil{
Vector sources = new Vector(); Vector sources = new Vector();
Vector resources = new Vector(); Vector resources = new Vector();


scanForImport( srcDir, ds.getIncludedFiles(), classes, sources, resources);
scanForImport( srcDir, ds.getIncludedFiles(), classes, sources, resources);


StringBuffer summaryLog = new StringBuffer("Importing "); StringBuffer summaryLog = new StringBuffer("Importing ");
addFilesToImport( importSpec, importClasses, classes, "Class", summaryLog ); addFilesToImport( importSpec, importClasses, classes, "Class", summaryLog );
addFilesToImport( importSpec, importSources, sources, "Java", summaryLog ); addFilesToImport( importSpec, importSources, sources, "Java", summaryLog );
addFilesToImport( importSpec, importResources, resources, "Resource", summaryLog ); addFilesToImport( importSpec, importResources, resources, "Resource", summaryLog );
importSpec.setResourcePath(srcDir.getAbsolutePath()); importSpec.setResourcePath(srcDir.getAbsolutePath());
summaryLog.append( " into the project '" ); summaryLog.append( " into the project '" );
summaryLog.append( importProject ); summaryLog.append( importProject );
summaryLog.append( "'." ); summaryLog.append( "'." );


log(summaryLog.toString(), MSG_INFO); log(summaryLog.toString(), MSG_INFO);
try { try {
Type[] importedTypes = getWorkspace().importData(importSpec); Type[] importedTypes = getWorkspace().importData(importSpec);
if (importedTypes == null) { if (importedTypes == null) {
@@ -354,9 +354,9 @@ abstract class VAJLocalUtil implements VAJUtil{
else { else {
log( importedTypes.length + " types imported", MSG_DEBUG); log( importedTypes.length + " types imported", MSG_DEBUG);
for( int i = 0; i < importedTypes.length; i++ ) { for( int i = 0; i < importedTypes.length; i++ ) {
log( importedTypes[i].getPackage().getName()
+ "." + importedTypes[i].getName()
+ " into " + importedTypes[i].getProject().getName(),
log( importedTypes[i].getPackage().getName()
+ "." + importedTypes[i].getName()
+ " into " + importedTypes[i].getProject().getName(),
MSG_DEBUG); MSG_DEBUG);
} }
} }
@@ -387,10 +387,10 @@ abstract class VAJLocalUtil implements VAJUtil{
found = getWorkspace().createProject(importProject, true); found = getWorkspace().createProject(importProject, true);
} catch (IvjException e) { } catch (IvjException e) {
throw createBuildException( "Error while creating Project " throw createBuildException( "Error while creating Project "
+ importProject + ": ", e );
+ importProject + ": ", e );
} }
} }
return found; return found;
} }


@@ -399,10 +399,10 @@ abstract class VAJLocalUtil implements VAJUtil{
* Sort the files into classes, sources, and resources. * Sort the files into classes, sources, and resources.
*/ */
private void scanForImport( private void scanForImport(
File dir,
String[] files,
Vector classes,
Vector sources,
File dir,
String[] files,
Vector classes,
Vector sources,
Vector resources) { Vector resources) {
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
String file = (new File(dir, files[i])).getAbsolutePath(); String file = (new File(dir, files[i])).getAbsolutePath();
@@ -438,11 +438,11 @@ abstract class VAJLocalUtil implements VAJUtil{
String[] fileArr = new String[files.size()]; String[] fileArr = new String[files.size()];
files.copyInto(fileArr); files.copyInto(fileArr);
try { try {
// here it is assumed that fileType is one of the
// here it is assumed that fileType is one of the
// following strings: // "Java", "Class", "Resource" // following strings: // "Java", "Class", "Resource"
String methodName = "set"+fileType+"Files"; String methodName = "set"+fileType+"Files";
Class[] methodParams = new Class[]{fileArr.getClass()}; Class[] methodParams = new Class[]{fileArr.getClass()};
java.lang.reflect.Method method =
java.lang.reflect.Method method =
spec.getClass().getDeclaredMethod( methodName, methodParams); spec.getClass().getDeclaredMethod( methodName, methodParams);
method.invoke(spec, new Object[]{fileArr}); method.invoke(spec, new Object[]{fileArr});
} catch( Exception e ) { } catch( Exception e ) {


+ 11
- 11
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJProjectDescription.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 2001 The Apache Software Foundation. All rights
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -67,31 +67,31 @@ public class VAJProjectDescription {


public VAJProjectDescription() { public VAJProjectDescription() {
} }
public VAJProjectDescription(String n, String v) { public VAJProjectDescription(String n, String v) {
name = n; name = n;
version = v; version = v;
} }
public String getName() { public String getName() {
return name; return name;
} }
public String getVersion() { public String getVersion() {
return version; return version;
} }
public boolean projectFound() { public boolean projectFound() {
return projectFound; return projectFound;
} }
public void setName(String newName) { public void setName(String newName) {
if (newName == null || newName.equals("")) { if (newName == null || newName.equals("")) {
throw new BuildException("name attribute must be set"); throw new BuildException("name attribute must be set");
} }
name = newName; name = newName;
} }
public void setVersion(String newVersion) { public void setVersion(String newVersion) {
if (newVersion == null || newVersion.equals("")) { if (newVersion == null || newVersion.equals("")) {
throw new BuildException("version attribute must be set"); throw new BuildException("version attribute must be set");


+ 21
- 21
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJRemoteUtil.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 2001 The Apache Software Foundation. All rights
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -90,7 +90,7 @@ class VAJRemoteUtil implements VAJUtil{
/** /**
* export the array of Packages * export the array of Packages
*/ */
public void exportPackages(File destDir,
public void exportPackages(File destDir,
String[] includePatterns, String[] excludePatterns, String[] includePatterns, String[] excludePatterns,
boolean exportClasses, boolean exportDebugInfo, boolean exportResources, boolean exportClasses, boolean exportDebugInfo, boolean exportResources,
boolean exportSources, boolean useDefaultExcludes, boolean overwrite ) { boolean exportSources, boolean useDefaultExcludes, boolean overwrite ) {
@@ -112,13 +112,13 @@ class VAJRemoteUtil implements VAJUtil{
* Do the import. * Do the import.
*/ */
public void importFiles( public void importFiles(
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes) { boolean importSources, boolean useDefaultExcludes) {
try { try {
String request = "http://" + remoteServer + "/servlet/vajimport?" String request = "http://" + remoteServer + "/servlet/vajimport?"
+ VAJImportServlet.PROJECT_NAME_PARAM + "="
+ VAJImportServlet.PROJECT_NAME_PARAM + "="
+ importProject + "&" + importProject + "&"
+ assembleImportExportParams( srcDir, + assembleImportExportParams( srcDir,
includePatterns, excludePatterns, includePatterns, excludePatterns,
@@ -128,7 +128,7 @@ class VAJRemoteUtil implements VAJUtil{
} catch (Exception ex) { } catch (Exception ex) {
throw new BuildException(ex); throw new BuildException(ex);
} }
} }


/** /**
@@ -137,11 +137,11 @@ class VAJRemoteUtil implements VAJUtil{
*/ */
private String assembleImportExportParams( private String assembleImportExportParams(
File dir, File dir,
String[] includePatterns, String[] excludePatterns,
boolean includeClasses, boolean includeResources,
String[] includePatterns, String[] excludePatterns,
boolean includeClasses, boolean includeResources,
boolean includeSources, boolean useDefaultExcludes) { boolean includeSources, boolean useDefaultExcludes) {
String result = String result =
VAJToolsServlet.DIR_PARAM + "="
VAJToolsServlet.DIR_PARAM + "="
+ dir.getAbsolutePath().replace('\\', '/') + "&" + dir.getAbsolutePath().replace('\\', '/') + "&"
+ VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&" + VAJToolsServlet.CLASSES_PARAM + "=" + includeClasses + "&"
+ VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&" + VAJToolsServlet.RESOURCES_PARAM + "=" + includeResources + "&"
@@ -156,14 +156,14 @@ class VAJRemoteUtil implements VAJUtil{
} }
if ( excludePatterns != null ) { if ( excludePatterns != null ) {
for ( int i = 0; i < excludePatterns.length; i++ ){ for ( int i = 0; i < excludePatterns.length; i++ ){
result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "="
result = result + "&" + VAJExportServlet.EXCLUDE_PARAM + "="
+ excludePatterns[i].replace(' ', '+').replace('\\', '/'); + excludePatterns[i].replace(' ', '+').replace('\\', '/');
} }
} }


return result; return result;
} }
/** /**
* Load specified projects. * Load specified projects.
*/ */
@@ -173,8 +173,8 @@ class VAJRemoteUtil implements VAJUtil{
String delimiter = ""; String delimiter = "";
for ( Enumeration e = projectDescriptions.elements(); e.hasMoreElements(); ){ for ( Enumeration e = projectDescriptions.elements(); e.hasMoreElements(); ){
VAJProjectDescription pd = (VAJProjectDescription)e.nextElement(); VAJProjectDescription pd = (VAJProjectDescription)e.nextElement();
request = request
+ delimiter + VAJLoadServlet.PROJECT_NAME_PARAM
request = request
+ delimiter + VAJLoadServlet.PROJECT_NAME_PARAM
+ "=" + pd.getName().replace(' ', '+') + "=" + pd.getName().replace(' ', '+')
+ "&" + VAJLoadServlet.VERSION_PARAM + "&" + VAJLoadServlet.VERSION_PARAM
+ "=" + pd.getVersion().replace(' ', '+'); + "=" + pd.getVersion().replace(' ', '+');
@@ -201,10 +201,10 @@ class VAJRemoteUtil implements VAJUtil{
boolean requestFailed = false; boolean requestFailed = false;
try { try {
log("Request: " + request, MSG_DEBUG); log("Request: " + request, MSG_DEBUG);
//must be HTTP connection //must be HTTP connection
URL requestUrl = new URL( request ); URL requestUrl = new URL( request );
HttpURLConnection connection =
HttpURLConnection connection =
(HttpURLConnection) requestUrl.openConnection(); (HttpURLConnection) requestUrl.openConnection();


InputStream is = null; InputStream is = null;
@@ -238,7 +238,7 @@ class VAJRemoteUtil implements VAJUtil{
log( line.substring(2), level ); log( line.substring(2), level );
line = br.readLine(); line = br.readLine();
} }
} catch (IOException ex) { } catch (IOException ex) {
log("Error sending tool request to VAJ" + ex, MSG_ERR); log("Error sending tool request to VAJ" + ex, MSG_ERR);
throw new BuildException("Couldn't execute " + request ); throw new BuildException("Couldn't execute " + request );


+ 9
- 9
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJTask.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 2001 The Apache Software Foundation. All rights
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -57,12 +57,12 @@ package org.apache.tools.ant.taskdefs.optional.ide;
/** /**
* Super class for all VAJ tasks. Contains common * Super class for all VAJ tasks. Contains common
* attributes (remoteServer) and util methods * attributes (remoteServer) and util methods
*
*
* @author: Wolf Siberski * @author: Wolf Siberski
*/ */
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;


public class VAJTask extends Task { public class VAJTask extends Task {
/** /**
* Adaption of VAJLocalUtil to Task context. * Adaption of VAJLocalUtil to Task context.
@@ -79,7 +79,7 @@ public class VAJTask extends Task {
// holds the appropriate VAJUtil implementation // holds the appropriate VAJUtil implementation
private VAJUtil util = null; private VAJUtil util = null;


/** /**
* returns the VAJUtil implementation * returns the VAJUtil implementation
*/ */
@@ -93,7 +93,7 @@ public class VAJTask extends Task {
} }
return util; return util;
} }
/** /**
* Set remote server attribute * Set remote server attribute
*/ */


+ 12
- 12
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJToolsServlet.java View File

@@ -69,7 +69,7 @@ import org.apache.tools.ant.BuildException;


/** /**
* Abstract base class to provide common services for the * Abstract base class to provide common services for the
* VAJ tool API servlets
* VAJ tool API servlets
* *
* @author Wolf Siberski, based on servlets written by Glenn McAllister * @author Wolf Siberski, based on servlets written by Glenn McAllister
*/ */
@@ -88,7 +88,7 @@ public abstract class VAJToolsServlet extends HttpServlet {
if ( nlPos == -1 ) { if ( nlPos == -1 ) {
nlPos = msg.length(); nlPos = msg.length();
} }
response.getWriter().println( Integer.toString(level)
response.getWriter().println( Integer.toString(level)
+ " " + msg.substring( i, nlPos )); + " " + msg.substring( i, nlPos ));
i = nlPos + 1; i = nlPos + 1;
} }
@@ -99,7 +99,7 @@ public abstract class VAJToolsServlet extends HttpServlet {
} }
} }
} }
// constants for servlet param names // constants for servlet param names
public final static String DIR_PARAM = "dir"; public final static String DIR_PARAM = "dir";
public final static String INCLUDE_PARAM = "include"; public final static String INCLUDE_PARAM = "include";
@@ -124,17 +124,17 @@ public abstract class VAJToolsServlet extends HttpServlet {
/** /**
* Execute the request by calling the appropriate * Execute the request by calling the appropriate
* VAJ tool API methods. This method must be implemented * VAJ tool API methods. This method must be implemented
* by the concrete servlets
* by the concrete servlets
*/ */
protected abstract void executeRequest(); protected abstract void executeRequest();
/** /**
* Respond to a HTTP request. This method initializes * Respond to a HTTP request. This method initializes
* the servlet and handles errors.
* The real work is done in the abstract method executeRequest()
* the servlet and handles errors.
* The real work is done in the abstract method executeRequest()
*/ */
public void doGet(HttpServletRequest req, HttpServletResponse res) public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
throws ServletException, IOException {
try { try {
response = res; response = res;
request = req; request = req;
@@ -148,14 +148,14 @@ public abstract class VAJToolsServlet extends HttpServlet {
StringWriter sw = new StringWriter(); StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw)); e.printStackTrace(new PrintWriter(sw));
String trace = new String( sw.getBuffer() ); String trace = new String( sw.getBuffer() );
util.log("Program error in " + this.getClass().getName()
util.log("Program error in " + this.getClass().getName()
+ ":\n" + trace, VAJUtil.MSG_ERR); + ":\n" + trace, VAJUtil.MSG_ERR);
} }
} catch( Throwable t ) { } catch( Throwable t ) {
t.printStackTrace(); t.printStackTrace();
} finally { } finally {
if ( ! (e instanceof BuildException) ) if ( ! (e instanceof BuildException) )
{
{
throw new ServletException( e.getMessage() ); throw new ServletException( e.getMessage() );
} }
} }
@@ -171,7 +171,7 @@ public abstract class VAJToolsServlet extends HttpServlet {
util = new VAJLocalServletUtil(); util = new VAJLocalServletUtil();
} }
} }
/** /**
* Get the VAJUtil implementation * Get the VAJUtil implementation
*/ */
@@ -224,5 +224,5 @@ public abstract class VAJToolsServlet extends HttpServlet {
protected boolean toBoolean(String string) { protected boolean toBoolean(String string) {
String lower = string.toLowerCase(); String lower = string.toLowerCase();
return (lower.equals("yes") || lower.equals("true") || lower.equals("ok")); return (lower.equals("yes") || lower.equals("true") || lower.equals("ok"));
}
}
} }

+ 36
- 36
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJUtil.java View File

@@ -1,7 +1,7 @@
/* /*
* The Apache Software License, Version 1.1 * The Apache Software License, Version 1.1
* *
* Copyright (c) 1999 The Apache Software Foundation. All rights
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved. * reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met: * are met:
* *
* 1. Redistributions of source code must retain the above copyright * 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* notice, this list of conditions and the following disclaimer.
* *
* 2. Redistributions in binary form must reproduce the above copyright * 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in * notice, this list of conditions and the following disclaimer in
@@ -17,15 +17,15 @@
* distribution. * distribution.
* *
* 3. The end-user documentation included with the redistribution, if * 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)." * Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself, * Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear. * if and wherever such third-party acknowlegements normally appear.
* *
* 4. The names "The Jakarta Project", "Ant", and "Apache Software * 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived * Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* from this software without prior written permission. For written
* permission, please contact apache@apache.org. * permission, please contact apache@apache.org.
* *
* 5. Products derived from this software may not be called "Apache" * 5. Products derived from this software may not be called "Apache"
@@ -64,39 +64,39 @@ import java.io.File;
* @author Wolf Siberski, TUI Infotec GmbH * @author Wolf Siberski, TUI Infotec GmbH
*/ */
interface VAJUtil { interface VAJUtil {
// log levels
public static final int MSG_DEBUG = 4;
public static final int MSG_ERR = 0;
public static final int MSG_INFO = 2;
public static final int MSG_VERBOSE = 3;
public static final int MSG_WARN = 1;
// log levels
public static final int MSG_DEBUG = 4;
public static final int MSG_ERR = 0;
public static final int MSG_INFO = 2;
public static final int MSG_VERBOSE = 3;
public static final int MSG_WARN = 1;


/**
* export the array of Packages
*/
void exportPackages(
File dest,
String[] includePatterns, String[] excludePatterns,
boolean exportClasses, boolean exportDebugInfo,
boolean exportResources, boolean exportSources,
boolean useDefaultExcludes, boolean overwrite);
/**
* export the array of Packages
*/
void exportPackages(
File dest,
String[] includePatterns, String[] excludePatterns,
boolean exportClasses, boolean exportDebugInfo,
boolean exportResources, boolean exportSources,
boolean useDefaultExcludes, boolean overwrite);


/**
* Do the import.
*/
void importFiles(
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes);
/**
* Do the import.
*/
void importFiles(
String importProject, File srcDir,
String[] includePatterns, String[] excludePatterns,
boolean importClasses, boolean importResources,
boolean importSources, boolean useDefaultExcludes);


/**
* Load specified projects.
*/
void loadProjects(Vector projectDescriptions);
/**
* Load specified projects.
*/
void loadProjects(Vector projectDescriptions);


/**
* Logs a message with the specified log level.
*/
void log(String msg, int level);
/**
* Logs a message with the specified log level.
*/
void log(String msg, int level);
} }

+ 19
- 19
src/main/org/apache/tools/ant/taskdefs/optional/ide/VAJWorkspaceScanner.java View File

@@ -79,7 +79,7 @@ import org.apache.tools.ant.DirectoryScanner;
* <li>VisualAge*\**</li> * <li>VisualAge*\**</li>
* </ul> * </ul>
* <p> * <p>
* This class works like DirectoryScanner.
* This class works like DirectoryScanner.
* *
* @see org.apache.tools.ant.DirectoryScanner * @see org.apache.tools.ant.DirectoryScanner
* *
@@ -88,19 +88,19 @@ import org.apache.tools.ant.DirectoryScanner;
class VAJWorkspaceScanner extends DirectoryScanner { class VAJWorkspaceScanner extends DirectoryScanner {


// Patterns that should be excluded by default. // Patterns that should be excluded by default.
private final static String[] DEFAULTEXCLUDES =
private final static String[] DEFAULTEXCLUDES =
{ {
"IBM*/**",
"Java class libraries/**",
"Sun class libraries*/**",
"JSP Page Compile Generated Code/**",
"VisualAge*/**",
};
"IBM*/**",
"Java class libraries/**",
"Sun class libraries*/**",
"JSP Page Compile Generated Code/**",
"VisualAge*/**",
};


// The packages that where found and matched at least
// The packages that where found and matched at least
// one includes, and matched no excludes. // one includes, and matched no excludes.
private Vector packagesIncluded = new Vector(); private Vector packagesIncluded = new Vector();
/** /**
* Adds the array with default exclusions to the current exclusions set. * Adds the array with default exclusions to the current exclusions set.
*/ */
@@ -114,11 +114,11 @@ class VAJWorkspaceScanner extends DirectoryScanner {
for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i]. newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i].
replace( '/', File.separatorChar ). replace( '/', File.separatorChar ).
replace( '\\', File.separatorChar );
replace( '\\', File.separatorChar );
} }
excludes = newExcludes; excludes = newExcludes;
} }
/** /**
* Finds all Projects specified in include patterns. * Finds all Projects specified in include patterns.
* *
@@ -133,11 +133,11 @@ class VAJWorkspaceScanner extends DirectoryScanner {
for (int i = 0; i < projects.length; i++) { for (int i = 0; i < projects.length; i++) {
Project project = projects[i]; Project project = projects[i];
for (int j = 0; j < includes.length && !allProjectsMatch; j++) { for (int j = 0; j < includes.length && !allProjectsMatch; j++) {
StringTokenizer tok =
StringTokenizer tok =
new StringTokenizer(includes[j], File.separator); new StringTokenizer(includes[j], File.separator);
String projectNamePattern = tok.nextToken(); String projectNamePattern = tok.nextToken();
if (projectNamePattern.equals("**")) { if (projectNamePattern.equals("**")) {
// if an include pattern starts with '**',
// if an include pattern starts with '**',
// all projects match // all projects match
allProjectsMatch = true; allProjectsMatch = true;
} else } else
@@ -157,7 +157,7 @@ class VAJWorkspaceScanner extends DirectoryScanner {


return matchingProjects; return matchingProjects;
} }
/** /**
* Get the names of the packages that matched at least one of the include * Get the names of the packages that matched at least one of the include
* patterns, and didn't match one of the exclude patterns. * patterns, and didn't match one of the exclude patterns.
@@ -172,7 +172,7 @@ class VAJWorkspaceScanner extends DirectoryScanner {
} }
return packages; return packages;
} }
/** /**
* Matches a string against a pattern. The pattern contains two special * Matches a string against a pattern. The pattern contains two special
* characters: * characters:
@@ -212,7 +212,7 @@ class VAJWorkspaceScanner extends DirectoryScanner {
scanProject(project); scanProject(project);
} }
} }
/** /**
* Scans a project for packages that match at least one include * Scans a project for packages that match at least one include
* pattern, and don't match any exclude patterns. * pattern, and don't match any exclude patterns.
@@ -227,10 +227,10 @@ class VAJWorkspaceScanner extends DirectoryScanner {
// replace '.' by file seperator because the patterns are // replace '.' by file seperator because the patterns are
// using file seperator syntax (and we can use the match // using file seperator syntax (and we can use the match
// methods this way). // methods this way).
String name =
String name =
project.getName() project.getName()
+ File.separator + File.separator
+ item.getName().replace('.', File.separatorChar);
+ item.getName().replace('.', File.separatorChar);
if (isIncluded(name) && !isExcluded(name)) { if (isIncluded(name) && !isExcluded(name)) {
packagesIncluded.addElement(item); packagesIncluded.addElement(item);
} }


+ 21
- 21
src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java View File

@@ -153,7 +153,7 @@ public class JDependTask extends Task {
* @see #setFork(boolean) * @see #setFork(boolean)
*/ */
public void setJvm(String value) { public void setJvm(String value) {
_jvm = value;
_jvm = value;


} }


@@ -230,18 +230,18 @@ public class JDependTask extends Task {


public void setFormat(FormatAttribute ea) public void setFormat(FormatAttribute ea)
{ {
format = ea.getValue();
}
format = ea.getValue();
}


public static class FormatAttribute extends EnumeratedAttribute
{
private String [] formats = new String[]{"xml","text"};
public static class FormatAttribute extends EnumeratedAttribute
{
private String [] formats = new String[]{"xml","text"};


public String[] getValues()
{
return formats;
}
}
public String[] getValues()
{
return formats;
}
}




/** /**
@@ -255,16 +255,16 @@ public class JDependTask extends Task {


public void execute() throws BuildException { public void execute() throws BuildException {


CommandlineJava commandline = new CommandlineJava();
CommandlineJava commandline = new CommandlineJava();


if("text".equals(format))
commandline.setClassname("jdepend.textui.JDepend");
else
if("xml".equals(format))
commandline.setClassname("jdepend.xmlui.JDepend");
if("text".equals(format))
commandline.setClassname("jdepend.textui.JDepend");
else
if("xml".equals(format))
commandline.setClassname("jdepend.xmlui.JDepend");


if(_jvm!=null)
commandline.setVm(_jvm);
if(_jvm!=null)
commandline.setVm(_jvm);


if (getSourcespath() == null) if (getSourcespath() == null)
throw new BuildException("Missing Sourcepath required argument"); throw new BuildException("Missing Sourcepath required argument");
@@ -311,9 +311,9 @@ public class JDependTask extends Task {
jdepend.textui.JDepend jdepend; jdepend.textui.JDepend jdepend;


if("xml".equals(format)) if("xml".equals(format))
jdepend = new jdepend.xmlui.JDepend();
jdepend = new jdepend.xmlui.JDepend();
else else
jdepend = new jdepend.textui.JDepend();
jdepend = new jdepend.textui.JDepend();


if (getOutputFile() != null) { if (getOutputFile() != null) {
FileWriter fw; FileWriter fw;


+ 4
- 4
src/main/org/apache/tools/ant/taskdefs/optional/junit/AggregateTransformer.java View File

@@ -96,10 +96,10 @@ public class AggregateTransformer {
public final static String NOFRAMES = "noframes"; public final static String NOFRAMES = "noframes";


public static class Format extends EnumeratedAttribute { public static class Format extends EnumeratedAttribute {
public String[] getValues(){
return new String[]{FRAMES, NOFRAMES};
}
}
public String[] getValues(){
return new String[]{FRAMES, NOFRAMES};
}
}


/** Task */ /** Task */
protected Task task; protected Task task;


+ 6
- 6
src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java View File

@@ -60,7 +60,7 @@ import java.util.Vector;
/** /**
* Baseclass for BatchTest and JUnitTest. * Baseclass for BatchTest and JUnitTest.
* *
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a> * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
*/ */
public abstract class BaseTest { public abstract class BaseTest {
@@ -116,12 +116,12 @@ public abstract class BaseTest {
* Sets the destination directory. * Sets the destination directory.
*/ */
public void setTodir(File destDir) { public void setTodir(File destDir) {
this.destDir = destDir;
this.destDir = destDir;
} }


/** /**
* @return the destination directory as an absolute path if it exists * @return the destination directory as an absolute path if it exists
* otherwise return <tt>null</tt>
* otherwise return <tt>null</tt>
*/ */
public String getTodir(){ public String getTodir(){
if (destDir != null){ if (destDir != null){
@@ -133,15 +133,15 @@ public abstract class BaseTest {
public java.lang.String getFailureProperty() { public java.lang.String getFailureProperty() {
return failureProperty; return failureProperty;
} }
public void setFailureProperty(String failureProperty) { public void setFailureProperty(String failureProperty) {
this.failureProperty = failureProperty; this.failureProperty = failureProperty;
} }
public java.lang.String getErrorProperty() { public java.lang.String getErrorProperty() {
return errorProperty; return errorProperty;
} }
public void setErrorProperty(String errorProperty) { public void setErrorProperty(String errorProperty) {
this.errorProperty = errorProperty; this.errorProperty = errorProperty;
} }


+ 28
- 28
src/main/org/apache/tools/ant/taskdefs/optional/junit/XMLResultAggregator.java View File

@@ -92,31 +92,31 @@ import org.apache.tools.ant.util.DOMElementWriter;
* @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a> * @author <a href="mailto:sbailliez@imediation.com">Stephane Bailliez</a>
*/ */
public class XMLResultAggregator extends Task implements XMLConstants { public class XMLResultAggregator extends Task implements XMLConstants {
/** the list of all filesets, that should contains the xml to aggregate */ /** the list of all filesets, that should contains the xml to aggregate */
protected Vector filesets = new Vector(); protected Vector filesets = new Vector();
/** the name of the result file */ /** the name of the result file */
protected String toFile; protected String toFile;
/** the directory to write the file to */ /** the directory to write the file to */
protected File toDir; protected File toDir;
protected Vector transformers = new Vector(); protected Vector transformers = new Vector();
/** the default directory: <tt>.</tt>. It is resolved from the project directory */ /** the default directory: <tt>.</tt>. It is resolved from the project directory */
public final static String DEFAULT_DIR = "."; public final static String DEFAULT_DIR = ".";
/** the default file name: <tt>TESTS-TestSuites.xml</tt> */ /** the default file name: <tt>TESTS-TestSuites.xml</tt> */
public final static String DEFAULT_FILENAME = "TESTS-TestSuites.xml"; public final static String DEFAULT_FILENAME = "TESTS-TestSuites.xml";
public AggregateTransformer createReport(){ public AggregateTransformer createReport(){
AggregateTransformer transformer = new AggregateTransformer(this); AggregateTransformer transformer = new AggregateTransformer(this);
transformers.addElement(transformer); transformers.addElement(transformer);
return transformer; return transformer;
} }
/** /**
* Set the name of the file aggregating the results. It must be relative * Set the name of the file aggregating the results. It must be relative
* from the <tt>todir</tt> attribute. If not set it will use {@link #DEFAULT_FILENAME} * from the <tt>todir</tt> attribute. If not set it will use {@link #DEFAULT_FILENAME}
@@ -126,7 +126,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
public void setTofile(String value){ public void setTofile(String value){
toFile = value; toFile = value;
} }
/** /**
* Set the destination directory where the results should be written. If not * Set the destination directory where the results should be written. If not
* set if will use {@link #DEFAULT_DIR}. When given a relative directory * set if will use {@link #DEFAULT_DIR}. When given a relative directory
@@ -137,7 +137,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
public void setTodir(File value){ public void setTodir(File value){
toDir = value; toDir = value;
} }
/** /**
* Add a new fileset containing the xml results to aggregate * Add a new fileset containing the xml results to aggregate
* @param fs the new fileset of xml results. * @param fs the new fileset of xml results.
@@ -145,12 +145,12 @@ public class XMLResultAggregator extends Task implements XMLConstants {
public void addFileSet(FileSet fs) { public void addFileSet(FileSet fs) {
filesets.addElement(fs); filesets.addElement(fs);
} }
/** /**
* Aggregate all testsuites into a single document and write it to the * Aggregate all testsuites into a single document and write it to the
* specified directory and file. * specified directory and file.
* @throws BuildException thrown if there is a serious error while writing
* the document.
* @throws BuildException thrown if there is a serious error while writing
* the document.
*/ */
public void execute() throws BuildException { public void execute() throws BuildException {
Element rootElement = createDocument(); Element rootElement = createDocument();
@@ -170,7 +170,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
transformer.transform(); transformer.transform();
} }
} }
/** /**
* Get the full destination file where to write the result. It is made of * Get the full destination file where to write the result. It is made of
* the <tt>todir</tt> and <tt>tofile</tt> attributes. * the <tt>todir</tt> and <tt>tofile</tt> attributes.
@@ -185,7 +185,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
} }
return new File(toDir, toFile); return new File(toDir, toFile);
} }
/** /**
* Get all <code>.xml</code> files in the fileset. * Get all <code>.xml</code> files in the fileset.
* *
@@ -208,14 +208,14 @@ public class XMLResultAggregator extends Task implements XMLConstants {
} }
} }
} }
File[] files = new File[v.size()]; File[] files = new File[v.size()];
v.copyInto(files); v.copyInto(files);
return files; return files;
} }
//----- from now, the methods are all related to DOM tree manipulation //----- from now, the methods are all related to DOM tree manipulation
/** /**
* Write the DOM tree to a file. * Write the DOM tree to a file.
* @param doc the XML document to dump to disk. * @param doc the XML document to dump to disk.
@@ -234,12 +234,12 @@ public class XMLResultAggregator extends Task implements XMLConstants {
throw new IOException("Error while writing DOM content"); throw new IOException("Error while writing DOM content");
} }
} }
/** /**
* <p> Create a DOM tree.
* <p> Create a DOM tree.
* Has 'testsuites' as firstchild and aggregates all * Has 'testsuites' as firstchild and aggregates all
* testsuite results that exists in the base directory. * testsuite results that exists in the base directory.
* @return the root element of DOM tree that aggregates all testsuites.
* @return the root element of DOM tree that aggregates all testsuites.
*/ */
protected Element createDocument() { protected Element createDocument() {
// create the dom tree // create the dom tree
@@ -247,7 +247,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
Document doc = builder.newDocument(); Document doc = builder.newDocument();
Element rootElement = doc.createElement(TESTSUITES); Element rootElement = doc.createElement(TESTSUITES);
doc.appendChild(rootElement); doc.appendChild(rootElement);
// get all files and add them to the document // get all files and add them to the document
File[] files = getFiles(); File[] files = getFiles();
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
@@ -278,7 +278,7 @@ public class XMLResultAggregator extends Task implements XMLConstants {
} }
return rootElement; return rootElement;
} }
/** /**
* <p> Add a new testsuite node to the document. * <p> Add a new testsuite node to the document.
* The main difference is that it * The main difference is that it
@@ -294,17 +294,17 @@ public class XMLResultAggregator extends Task implements XMLConstants {
protected void addTestSuite(Element root, Element testsuite){ protected void addTestSuite(Element root, Element testsuite){
String fullclassname = testsuite.getAttribute(ATTR_NAME); String fullclassname = testsuite.getAttribute(ATTR_NAME);
int pos = fullclassname.lastIndexOf('.'); int pos = fullclassname.lastIndexOf('.');
// a missing . might imply no package at all. Don't get fooled. // a missing . might imply no package at all. Don't get fooled.
String pkgName = (pos == -1) ? "" : fullclassname.substring(0, pos); String pkgName = (pos == -1) ? "" : fullclassname.substring(0, pos);
String classname = (pos == -1) ? fullclassname : fullclassname.substring(pos + 1); String classname = (pos == -1) ? fullclassname : fullclassname.substring(pos + 1);
Element copy = (Element)DOMUtil.importNode(root, testsuite); Element copy = (Element)DOMUtil.importNode(root, testsuite);
// modify the name attribute and set the package // modify the name attribute and set the package
copy.setAttribute(ATTR_NAME, classname); copy.setAttribute(ATTR_NAME, classname);
copy.setAttribute(ATTR_PACKAGE, pkgName); copy.setAttribute(ATTR_PACKAGE, pkgName);
} }
/** /**
* Create a new document builder. Will issue an <tt>ExceptionInitializerError</tt> * Create a new document builder. Will issue an <tt>ExceptionInitializerError</tt>
* if something is going wrong. It is fatal anyway. * if something is going wrong. It is fatal anyway.
@@ -318,5 +318,5 @@ public class XMLResultAggregator extends Task implements XMLConstants {
throw new ExceptionInInitializerError(exc); throw new ExceptionInInitializerError(exc);
} }
} }
} }

+ 46
- 46
src/main/org/apache/tools/ant/taskdefs/optional/metamata/MMetricsStreamHandler.java View File

@@ -85,7 +85,7 @@ import org.apache.tools.ant.Project;
* A handy metrics handler. Most of this code was done only with the * A handy metrics handler. Most of this code was done only with the
* screenshots on the documentation since the evaluation version as * screenshots on the documentation since the evaluation version as
* of this writing does not allow to save metrics or to run it via * of this writing does not allow to save metrics or to run it via
* command line.
* command line.
* <p> * <p>
* This class can be used to transform a text file or to process the * This class can be used to transform a text file or to process the
* output stream directly. * output stream directly.
@@ -96,23 +96,23 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {


/** CLASS construct, it should be named something like 'MyClass' */ /** CLASS construct, it should be named something like 'MyClass' */
protected final static String CLASS = "class"; protected final static String CLASS = "class";
/** package construct, it should be look like 'com.mycompany.something' */ /** package construct, it should be look like 'com.mycompany.something' */
protected final static String PACKAGE = "package"; protected final static String PACKAGE = "package";
/** FILE construct, it should look like something 'MyClass.java' or 'MyClass.class' */ /** FILE construct, it should look like something 'MyClass.java' or 'MyClass.class' */
protected final static String FILE = "file"; protected final static String FILE = "file";
/** METHOD construct, it should looke like something 'doSomething(...)' or 'doSomething()' */ /** METHOD construct, it should looke like something 'doSomething(...)' or 'doSomething()' */
protected final static String METHOD = "method"; protected final static String METHOD = "method";
protected final static String[] ATTRIBUTES = { "name", "vg", "loc", protected final static String[] ATTRIBUTES = { "name", "vg", "loc",
"dit", "noa", "nrm", "nlm", "wmc", "rfc", "dac", "fanout", "cbo", "lcom", "nocl" "dit", "noa", "nrm", "nlm", "wmc", "rfc", "dac", "fanout", "cbo", "lcom", "nocl"
}; };
/** reader for stdout */ /** reader for stdout */
protected InputStream metricsOutput; protected InputStream metricsOutput;
/** /**
* this is where the XML output will go, should mostly be a file * this is where the XML output will go, should mostly be a file
* the caller is responsible for flushing and closing this stream * the caller is responsible for flushing and closing this stream
@@ -121,7 +121,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {


/** metrics handler */ /** metrics handler */
protected TransformerHandler metricsHandler; protected TransformerHandler metricsHandler;
/** the task */ /** the task */
protected Task task; protected Task task;


@@ -130,7 +130,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
* know if we have to close an element or not. * know if we have to close an element or not.
*/ */
protected Stack stack = new Stack(); protected Stack stack = new Stack();
/** initialize this handler */ /** initialize this handler */
MMetricsStreamHandler(Task task, OutputStream xmlOut){ MMetricsStreamHandler(Task task, OutputStream xmlOut){
this.task = task; this.task = task;
@@ -162,7 +162,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
metricsHandler.setResult( new StreamResult( new OutputStreamWriter(xmlOutputStream, "UTF-8")) ); metricsHandler.setResult( new StreamResult( new OutputStreamWriter(xmlOutputStream, "UTF-8")) );
Transformer transformer = metricsHandler.getTransformer(); Transformer transformer = metricsHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.INDENT, "yes");
// start the document with a 'metrics' root // start the document with a 'metrics' root
metricsHandler.startDocument(); metricsHandler.startDocument();
AttributesImpl attr = new AttributesImpl(); AttributesImpl attr = new AttributesImpl();
@@ -179,7 +179,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
} }


/** /**
* Pretty dangerous business here.
* Pretty dangerous business here.
*/ */
public void stop() { public void stop() {
try { try {
@@ -197,7 +197,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
e.printStackTrace(); e.printStackTrace();
throw new IllegalStateException(e.getMessage()); throw new IllegalStateException(e.getMessage());
} }
}
}


/** read each line and process it */ /** read each line and process it */
protected void parseOutput() throws IOException, SAXException { protected void parseOutput() throws IOException, SAXException {
@@ -221,12 +221,12 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
MetricsElement elem = MetricsElement.parse(line); MetricsElement elem = MetricsElement.parse(line);
startElement(elem); startElement(elem);
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace();
e.printStackTrace();
// invalid lines are sent to the output as information, it might be anything, // invalid lines are sent to the output as information, it might be anything,
task.log(line, Project.MSG_INFO); task.log(line, Project.MSG_INFO);
} }
} }
/** /**
* Start a new construct. Elements are popped until we are on the same * Start a new construct. Elements are popped until we are on the same
* parent node, then the element type is guessed and pushed on the * parent node, then the element type is guessed and pushed on the
@@ -249,7 +249,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
} }
} catch (EmptyStackException ignored){} } catch (EmptyStackException ignored){}
} }
// ok, now start the new construct // ok, now start the new construct
String type = getConstructType(elem); String type = getConstructType(elem);
Attributes attrs = createAttributes(elem); Attributes attrs = createAttributes(elem);
@@ -272,7 +272,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
if ( elem.isCompilationUnit() ){ if ( elem.isCompilationUnit() ){
return FILE; return FILE;
} }
// same, we're sure it's a method // same, we're sure it's a method
if ( elem.isMethod() ){ if ( elem.isMethod() ){
return METHOD; return METHOD;
@@ -282,7 +282,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
if ( stack.size() == 0 ){ if ( stack.size() == 0 ){
return PACKAGE; return PACKAGE;
} }
// ok, this is now black magic time, we will guess the type based on // ok, this is now black magic time, we will guess the type based on
// the previous type and its indent... // the previous type and its indent...
final ElementEntry previous = (ElementEntry)stack.peek(); final ElementEntry previous = (ElementEntry)stack.peek();
@@ -299,16 +299,16 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
if ( prevType.equals(CLASS) && indent >= prevIndent ){ if ( prevType.equals(CLASS) && indent >= prevIndent ){
return CLASS; return CLASS;
} }
// we assume the other are package // we assume the other are package
return PACKAGE; return PACKAGE;
}
}
/** /**
* Create all attributes of a MetricsElement skipping those who have an * Create all attributes of a MetricsElement skipping those who have an
* empty string * empty string
* @param elem
* @param elem
*/ */
protected Attributes createAttributes(MetricsElement elem){ protected Attributes createAttributes(MetricsElement elem){
AttributesImpl impl = new AttributesImpl(); AttributesImpl impl = new AttributesImpl();
@@ -325,7 +325,7 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {
} }
return impl; return impl;
} }
/** /**
* helper class to keep track of elements via its type and indent * helper class to keep track of elements via its type and indent
* that's all we need to guess a type. * that's all we need to guess a type.
@@ -348,35 +348,35 @@ public class MMetricsStreamHandler implements ExecuteStreamHandler {


class MetricsElement { class MetricsElement {


private final static NumberFormat METAMATA_NF;
private final static NumberFormat NEUTRAL_NF;
static {
private final static NumberFormat METAMATA_NF;
private final static NumberFormat NEUTRAL_NF;
static {
METAMATA_NF = NumberFormat.getInstance(); METAMATA_NF = NumberFormat.getInstance();
METAMATA_NF.setMaximumFractionDigits(1); METAMATA_NF.setMaximumFractionDigits(1);
NEUTRAL_NF = NumberFormat.getInstance(); NEUTRAL_NF = NumberFormat.getInstance();
if (NEUTRAL_NF instanceof DecimalFormat) {
((DecimalFormat) NEUTRAL_NF).applyPattern("###0.###;-###0.###");
}
if (NEUTRAL_NF instanceof DecimalFormat) {
((DecimalFormat) NEUTRAL_NF).applyPattern("###0.###;-###0.###");
}
NEUTRAL_NF.setMaximumFractionDigits(1); NEUTRAL_NF.setMaximumFractionDigits(1);
}
}
private int indent; private int indent;
private String construct; private String construct;
private Vector metrics; private Vector metrics;
MetricsElement(int indent, String construct, Vector metrics){ MetricsElement(int indent, String construct, Vector metrics){
this.indent = indent; this.indent = indent;
this.construct = construct; this.construct = construct;
this.metrics = metrics; this.metrics = metrics;
} }
public int getIndent(){ public int getIndent(){
return indent; return indent;
} }
public String getName(){ public String getName(){
return construct; return construct;
} }
@@ -384,38 +384,38 @@ class MetricsElement {
public Enumeration getMetrics(){ public Enumeration getMetrics(){
return metrics.elements(); return metrics.elements();
} }
public boolean isCompilationUnit(){ public boolean isCompilationUnit(){
return ( construct.endsWith(".java") || construct.endsWith(".class") ); return ( construct.endsWith(".java") || construct.endsWith(".class") );
} }
public boolean isMethod(){ public boolean isMethod(){
return ( construct.endsWith("(...)") || construct.endsWith("()") ); return ( construct.endsWith("(...)") || construct.endsWith("()") );
} }
public static MetricsElement parse(String line) throws ParseException { public static MetricsElement parse(String line) throws ParseException {
final Vector metrics = new Vector(); final Vector metrics = new Vector();
int pos; int pos;
// i'm using indexOf since I need to know if there are empty strings // i'm using indexOf since I need to know if there are empty strings
// between tabs and I find it easier than with StringTokenizer // between tabs and I find it easier than with StringTokenizer
while ( (pos = line.indexOf('\t')) != -1 ){ while ( (pos = line.indexOf('\t')) != -1 ){
String token = line.substring(0, pos); String token = line.substring(0, pos);
// only parse what coudl be a valid number. ie not constructs nor no value // only parse what coudl be a valid number. ie not constructs nor no value
/*if (metrics.size() != 0 || token.length() != 0){ /*if (metrics.size() != 0 || token.length() != 0){
Number num = METAMATA_NF.parse(token); // parse with Metamata NF
token = NEUTRAL_NF.format(num.doubleValue()); // and format with a neutral NF
}*/
Number num = METAMATA_NF.parse(token); // parse with Metamata NF
token = NEUTRAL_NF.format(num.doubleValue()); // and format with a neutral NF
}*/
metrics.addElement( token ); metrics.addElement( token );
line = line.substring(pos + 1); line = line.substring(pos + 1);
} }
metrics.addElement( line ); metrics.addElement( line );
// there should be exactly 14 tokens (1 name + 13 metrics), if not, there is a problem ! // there should be exactly 14 tokens (1 name + 13 metrics), if not, there is a problem !
if ( metrics.size() != 14 ){ if ( metrics.size() != 14 ){
throw new ParseException("Could not parse the following line as a metrics: -->" + line +"<--", -1); throw new ParseException("Could not parse the following line as a metrics: -->" + line +"<--", -1);
} }
// remove the first token it's made of the indentation string and the // remove the first token it's made of the indentation string and the
// construct name, we'll need all this to figure out what type of // construct name, we'll need all this to figure out what type of
// construct it is since we lost all semantics :( // construct it is since we lost all semantics :(


+ 13
- 13
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Edit.java View File

@@ -68,18 +68,18 @@ import org.apache.tools.ant.BuildException;
* *
* ToDo: Should call reopen if file is already open in one of our changelists perhaps? * ToDo: Should call reopen if file is already open in one of our changelists perhaps?
*/ */
public class P4Edit extends P4Base { public class P4Edit extends P4Base {
public String change = null;
public void setChange(String change) {
this.change = change;
}
public void execute() throws BuildException {
if(change != null ) P4CmdOpts = "-c "+change;
if(P4View == null) throw new BuildException("No view specified to edit");
execP4Command("-s edit "+P4CmdOpts+" "+P4View, new SimpleP4OutputHandler(this));
}
public String change = null;
public void setChange(String change) {
this.change = change;
}
public void execute() throws BuildException {
if(change != null ) P4CmdOpts = "-c "+change;
if(P4View == null) throw new BuildException("No view specified to edit");
execP4Command("-s edit "+P4CmdOpts+" "+P4View, new SimpleP4OutputHandler(this));
}
} }

+ 7
- 7
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4HandlerAdapter.java View File

@@ -78,7 +78,7 @@ public abstract class P4HandlerAdapter implements P4Handler {
public void start() throws BuildException { public void start() throws BuildException {


try{ try{
//First write any output to P4
//First write any output to P4
if(p4input != null && p4input.length() >0 && os != null) { if(p4input != null && p4input.length() >0 && os != null) {
os.write(p4input.getBytes()); os.write(p4input.getBytes());
os.flush(); os.flush();
@@ -86,17 +86,17 @@ public abstract class P4HandlerAdapter implements P4Handler {
} }


//Now read any input and process //Now read any input and process
BufferedReader input = new BufferedReader( BufferedReader input = new BufferedReader(
new InputStreamReader( new InputStreamReader(
new SequenceInputStream(is,es))); new SequenceInputStream(is,es)));


String line; String line;
while((line = input.readLine()) != null) {
process(line);
}
input.close();
while((line = input.readLine()) != null) {
process(line);
}
input.close();




}catch(Exception e) { }catch(Exception e) {


+ 49
- 49
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Label.java View File

@@ -72,7 +72,7 @@ import java.text.SimpleDateFormat;
* *
* Label name defaults to AntLabel if none set. * Label name defaults to AntLabel if none set.
* *
* Example Usage:
* Example Usage:
* <pre> * <pre>
* &lt;P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /&gt; * &lt;P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /&gt;
* </pre> * </pre>
@@ -84,46 +84,46 @@ public class P4Label extends P4Base {
protected String name; protected String name;
protected String desc; protected String desc;
protected String lock; protected String lock;
public void setName(String name) { public void setName(String name) {
this.name = name; this.name = name;
} }
public void setDesc(String desc) { public void setDesc(String desc) {
this.desc = desc; this.desc = desc;
} }
public void setLock(String lock) {
this.lock = lock;
}
public void setLock(String lock) {
this.lock = lock;
}
public void execute() throws BuildException { public void execute() throws BuildException {
log("P4Label exec:",Project.MSG_INFO); log("P4Label exec:",Project.MSG_INFO);
if(P4View == null || P4View.length() < 1) { if(P4View == null || P4View.length() < 1) {
log("View not set, assuming //depot/...", Project.MSG_WARN); log("View not set, assuming //depot/...", Project.MSG_WARN);
P4View = "//depot/..."; P4View = "//depot/...";
} }
if(desc == null || desc.length() < 1) { if(desc == null || desc.length() < 1) {
log("Label Description not set, assuming 'AntLabel'", Project.MSG_WARN); log("Label Description not set, assuming 'AntLabel'", Project.MSG_WARN);
desc = "AntLabel"; desc = "AntLabel";
} }
if(lock != null && !lock.equalsIgnoreCase("locked")) {
log("lock attribute invalid - ignoring",Project.MSG_WARN);
}
if(lock != null && !lock.equalsIgnoreCase("locked")) {
log("lock attribute invalid - ignoring",Project.MSG_WARN);
}
if(name == null || name.length() < 1) { if(name == null || name.length() < 1) {
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy.MM.dd-hh:mm"); SimpleDateFormat formatter = new SimpleDateFormat ("yyyy.MM.dd-hh:mm");
Date now = new Date(); Date now = new Date();
name = "AntLabel-"+formatter.format(now); name = "AntLabel-"+formatter.format(now);
log("name not set, assuming '"+name+"'", Project.MSG_WARN); log("name not set, assuming '"+name+"'", Project.MSG_WARN);
} }
//We have to create a unlocked label first //We have to create a unlocked label first
String newLabel =
String newLabel =
"Label: "+name+"\n"+ "Label: "+name+"\n"+
"Description: "+desc+"\n"+ "Description: "+desc+"\n"+
"Options: unlocked\n"+ "Options: unlocked\n"+
@@ -138,56 +138,56 @@ public class P4Label extends P4Base {
handler.setOutput(newLabel); handler.setOutput(newLabel);


execP4Command("label -i", handler); execP4Command("label -i", handler);
execP4Command("labelsync -l "+name, new P4HandlerAdapter() { execP4Command("labelsync -l "+name, new P4HandlerAdapter() {
public void process(String line) { public void process(String line) {
log(line, Project.MSG_VERBOSE); log(line, Project.MSG_VERBOSE);
} }
}); });
log("Created Label "+name+" ("+desc+")", Project.MSG_INFO); log("Created Label "+name+" ("+desc+")", Project.MSG_INFO);


//Now lock if required //Now lock if required
if (lock != null && lock.equalsIgnoreCase("locked")) { if (lock != null && lock.equalsIgnoreCase("locked")) {
log("Modifying lock status to 'locked'",Project.MSG_INFO);


final StringBuffer labelSpec = new StringBuffer();
//Read back the label spec from perforce,
log("Modifying lock status to 'locked'",Project.MSG_INFO);

final StringBuffer labelSpec = new StringBuffer();

//Read back the label spec from perforce,
//Replace Options //Replace Options
//Submit back to Perforce //Submit back to Perforce
handler = new P4HandlerAdapter() {
public void process(String line) {
log(line, Project.MSG_VERBOSE);
if(util.match("/^Options:/",line)) {
line = "Options: "+lock;
}
handler = new P4HandlerAdapter() {
public void process(String line) {
log(line, Project.MSG_VERBOSE);
if(util.match("/^Options:/",line)) {
line = "Options: "+lock;
}
labelSpec.append(line+"\n"); labelSpec.append(line+"\n");
}
};
execP4Command("label -o "+name, handler);
}
};
execP4Command("label -o "+name, handler);
log(labelSpec.toString(),Project.MSG_DEBUG); log(labelSpec.toString(),Project.MSG_DEBUG);


log("Now locking label...",Project.MSG_VERBOSE); log("Now locking label...",Project.MSG_VERBOSE);
handler = new P4HandlerAdapter() {
public void process(String line) {
log(line, Project.MSG_VERBOSE);
}
};
handler = new P4HandlerAdapter() {
public void process(String line) {
log(line, Project.MSG_VERBOSE);
}
};


handler.setOutput(labelSpec.toString()); handler.setOutput(labelSpec.toString());
execP4Command("label -i", handler);
execP4Command("label -i", handler);
} }
} }


} }

+ 19
- 17
src/main/org/apache/tools/ant/taskdefs/optional/perforce/P4Submit.java View File

@@ -63,8 +63,8 @@ import org.apache.tools.ant.Project;


/** P4Submit - submit a numbered changelist to Perforce. /** P4Submit - submit a numbered changelist to Perforce.
* *
* <B>Note:</B> P4Submit cannot (yet) submit the default changelist.
* This shouldn't be a problem with the ANT API as the usual flow is
* <B>Note:</B> P4Submit cannot (yet) submit the default changelist.
* This shouldn't be a problem with the ANT API as the usual flow is
* P4Change to create a new numbered change followed by P4Edit then P4Submit. * P4Change to create a new numbered change followed by P4Edit then P4Submit.
* *
* Example Usage:-<br> * Example Usage:-<br>
@@ -75,25 +75,27 @@ import org.apache.tools.ant.Project;
*/ */
public class P4Submit extends P4Base { public class P4Submit extends P4Base {


//ToDo: If dealing with default cl need to parse out <enter description here>
//ToDo: If dealing with default cl need to parse out <enter description here>
public String change; public String change;


public void setChange(String change) { public void setChange(String change) {
this.change = change; this.change = change;
}
}
public void execute() throws BuildException { public void execute() throws BuildException {
if(change != null) { if(change != null) {
execP4Command("submit -c "+change, new P4HandlerAdapter(){
public void process(String line) {
log(line, Project.MSG_VERBOSE);
}
});
} else {
//here we'd parse the output from change -o into submit -i
//in order to support default change.
throw new BuildException("No change specified (no support for default change yet....");
}
}
execP4Command("submit -c "+change,
new P4HandlerAdapter() {
public void process(String line) {
log(line, Project.MSG_VERBOSE);
}
}
);

} else {
//here we'd parse the output from change -o into submit -i
//in order to support default change.
throw new BuildException("No change specified (no support for default change yet....");
}
}

} }

+ 23
- 23
src/main/org/apache/tools/ant/taskdefs/optional/perforce/SimpleP4OutputHandler.java View File

@@ -63,30 +63,30 @@ import org.apache.tools.ant.Project;


public class SimpleP4OutputHandler extends P4HandlerAdapter { public class SimpleP4OutputHandler extends P4HandlerAdapter {


P4Base parent;
public SimpleP4OutputHandler(P4Base parent) {
this.parent = parent;
}
public void process(String line) throws BuildException {
if(parent.util.match("/^exit/",line)) return;
P4Base parent;
public SimpleP4OutputHandler(P4Base parent) {
this.parent = parent;
}


//Throw exception on errors (except up-to-date)
//p4 -s is unpredicatable. For example a server down
//does not return error: markup
//
//Some forms producing commands (p4 -s change -o) do tag the output
//others don't.....
//Others mark errors as info, for example edit a file
//which is already open for edit.....
//Just look for error: - catches most things....
public void process(String line) throws BuildException {
if(parent.util.match("/^exit/",line)) return;


if(parent.util.match("/error:/", line) && !parent.util.match("/up-to-date/", line)) {
throw new BuildException(line);
}
//Throw exception on errors (except up-to-date)
//p4 -s is unpredicatable. For example a server down
//does not return error: markup
//
//Some forms producing commands (p4 -s change -o) do tag the output
//others don't.....
//Others mark errors as info, for example edit a file
//which is already open for edit.....
//Just look for error: - catches most things....


parent.log(parent.util.substitute("s/^.*: //",line), Project.MSG_INFO);
}
if(parent.util.match("/error:/", line) && !parent.util.match("/up-to-date/", line)) {
throw new BuildException(line);

}

parent.log(parent.util.substitute("s/^.*: //",line), Project.MSG_INFO);

}
} }

+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/XMLReport.java View File

@@ -409,7 +409,7 @@ public class XMLReport {
methods.addElement(method); methods.addElement(method);
log("keeping " + signature); log("keeping " + signature);
} else { } else {
// log("discarding " + signature);
// log("discarding " + signature);
} }
} }
return methods; return methods;


+ 246
- 246
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/ClassPathLoader.java View File

@@ -75,155 +75,155 @@ import java.util.zip.ZipEntry;
* @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
*/ */
public class ClassPathLoader { public class ClassPathLoader {
public final static FileLoader NULL_LOADER = new NullLoader();
/** the list of files to look for */
protected File[] files;
/**
* create a new instance with a given classpath. It must be urls
* separated by the platform specific path separator.
* @param classPath the classpath to load all the classes from.
*/
public ClassPathLoader(String classPath){
StringTokenizer st = new StringTokenizer(classPath, File.pathSeparator);
Vector entries = new Vector();
while (st.hasMoreTokens()){
File file = new File(st.nextToken());
entries.addElement(file);
}
files = new File[entries.size()];
entries.copyInto(files);
}
/**
* create a new instance with a given set of urls.
* @param entries valid file urls (either .jar, .zip or directory)
*/
public ClassPathLoader(String[] entries){
files = new File[entries.length];
for (int i = 0; i < entries.length; i++){
files[i] = new File(entries[i]);
}
}
/**
* create a new instance with a given set of urls
* @param entries file urls to look for classes (.jar, .zip or directory)
*/
public ClassPathLoader(File[] entries){
files = entries;
}
/** the interface to implement to look up for specific resources */
public interface FileLoader {
/** the file url that is looked for .class files */
public File getFile();
/** return the set of classes found in the file */
public ClassFile[] getClasses() throws IOException;
}
/**
* @return the set of <tt>FileLoader</tt> loaders matching the given classpath.
*/
public Enumeration loaders(){
return new LoaderEnumeration();
}
/**
* return the whole set of classes in the classpath. Note that this method
* can be very resource demanding since it must load all bytecode from
* all classes in all resources in the classpath at a time.
* To process it in a less resource demanding way, it is maybe better to
* use the <tt>loaders()</tt> that will return loader one by one.
*
* @return the hashtable containing ALL classes that are found in the given
* classpath. Note that the first entry of a given classname will shadow
* classes with the same name (as a classloader does)
*/
public Hashtable getClasses() throws IOException {
Hashtable map = new Hashtable();
Enumeration enum = loaders();
while ( enum.hasMoreElements() ){
FileLoader loader = (FileLoader)enum.nextElement();
System.out.println("Processing " + loader.getFile());
long t0 = System.currentTimeMillis();
ClassFile[] classes = loader.getClasses();
long dt = System.currentTimeMillis() - t0;
System.out.println("" + classes.length + " classes loaded in " + dt + "ms");
for (int j = 0; j < classes.length; j++){
String name = classes[j].getFullName();
// do not allow duplicates entries to preserve 'classpath' behavior
// first class in wins
if ( !map.containsKey(name) ){
map.put(name, classes[j]);
}
}
}
return map;
}
/** the loader enumeration that will return loaders */
protected class LoaderEnumeration implements Enumeration {
protected int index = 0;
public boolean hasMoreElements(){
return index < files.length;
}
public Object nextElement(){
if (index >= files.length){
throw new NoSuchElementException();
}
File file = files[index++];
if ( !file.exists() ){
return new NullLoader(file);
}
if ( file.isDirectory() ){
// it's a directory
return new DirectoryLoader(file);
} else if ( file.getName().endsWith(".zip") || file.getName().endsWith(".jar") ){
// it's a jar/zip file
return new JarLoader(file);
}
return new NullLoader(file);
}
}
/**
* useful methods to read the whole input stream in memory so that
* it can be accessed faster. Processing rt.jar and tools.jar from JDK 1.3.1
* brings time from 50s to 7s.
*/
public final static FileLoader NULL_LOADER = new NullLoader();
/** the list of files to look for */
protected File[] files;
/**
* create a new instance with a given classpath. It must be urls
* separated by the platform specific path separator.
* @param classPath the classpath to load all the classes from.
*/
public ClassPathLoader(String classPath){
StringTokenizer st = new StringTokenizer(classPath, File.pathSeparator);
Vector entries = new Vector();
while (st.hasMoreTokens()){
File file = new File(st.nextToken());
entries.addElement(file);
}
files = new File[entries.size()];
entries.copyInto(files);
}
/**
* create a new instance with a given set of urls.
* @param entries valid file urls (either .jar, .zip or directory)
*/
public ClassPathLoader(String[] entries){
files = new File[entries.length];
for (int i = 0; i < entries.length; i++){
files[i] = new File(entries[i]);
}
}
/**
* create a new instance with a given set of urls
* @param entries file urls to look for classes (.jar, .zip or directory)
*/
public ClassPathLoader(File[] entries){
files = entries;
}
/** the interface to implement to look up for specific resources */
public interface FileLoader {
/** the file url that is looked for .class files */
public File getFile();
/** return the set of classes found in the file */
public ClassFile[] getClasses() throws IOException;
}
/**
* @return the set of <tt>FileLoader</tt> loaders matching the given classpath.
*/
public Enumeration loaders(){
return new LoaderEnumeration();
}
/**
* return the whole set of classes in the classpath. Note that this method
* can be very resource demanding since it must load all bytecode from
* all classes in all resources in the classpath at a time.
* To process it in a less resource demanding way, it is maybe better to
* use the <tt>loaders()</tt> that will return loader one by one.
*
* @return the hashtable containing ALL classes that are found in the given
* classpath. Note that the first entry of a given classname will shadow
* classes with the same name (as a classloader does)
*/
public Hashtable getClasses() throws IOException {
Hashtable map = new Hashtable();
Enumeration enum = loaders();
while ( enum.hasMoreElements() ){
FileLoader loader = (FileLoader)enum.nextElement();
System.out.println("Processing " + loader.getFile());
long t0 = System.currentTimeMillis();
ClassFile[] classes = loader.getClasses();
long dt = System.currentTimeMillis() - t0;
System.out.println("" + classes.length + " classes loaded in " + dt + "ms");
for (int j = 0; j < classes.length; j++){
String name = classes[j].getFullName();
// do not allow duplicates entries to preserve 'classpath' behavior
// first class in wins
if ( !map.containsKey(name) ){
map.put(name, classes[j]);
}
}
}
return map;
}
/** the loader enumeration that will return loaders */
protected class LoaderEnumeration implements Enumeration {
protected int index = 0;
public boolean hasMoreElements(){
return index < files.length;
}
public Object nextElement(){
if (index >= files.length){
throw new NoSuchElementException();
}
File file = files[index++];
if ( !file.exists() ){
return new NullLoader(file);
}
if ( file.isDirectory() ){
// it's a directory
return new DirectoryLoader(file);
} else if ( file.getName().endsWith(".zip") || file.getName().endsWith(".jar") ){
// it's a jar/zip file
return new JarLoader(file);
}
return new NullLoader(file);
}
}
/**
* useful methods to read the whole input stream in memory so that
* it can be accessed faster. Processing rt.jar and tools.jar from JDK 1.3.1
* brings time from 50s to 7s.
*/
public static InputStream getCachedStream(InputStream is) throws IOException { public static InputStream getCachedStream(InputStream is) throws IOException {
is = new BufferedInputStream(is);
byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
int n;
baos.reset();
while ((n = is.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, n);
}
is.close();
return new ByteArrayInputStream(baos.toByteArray());
is = new BufferedInputStream(is);
byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
int n;
baos.reset();
while ((n = is.read(buffer, 0, buffer.length)) != -1) {
baos.write(buffer, 0, n);
}
is.close();
return new ByteArrayInputStream(baos.toByteArray());
} }
} }


/** a null loader to return when the file is not valid */ /** a null loader to return when the file is not valid */
class NullLoader implements ClassPathLoader.FileLoader { class NullLoader implements ClassPathLoader.FileLoader {
private File file;
NullLoader(){
this(null);
}
NullLoader(File file){
this.file = file;
}
public File getFile(){
return file;
}
public ClassFile[] getClasses() throws IOException {
return new ClassFile[0];
}
private File file;
NullLoader(){
this(null);
}
NullLoader(File file){
this.file = file;
}
public File getFile(){
return file;
}
public ClassFile[] getClasses() throws IOException {
return new ClassFile[0];
}
} }


/** /**
@@ -232,30 +232,30 @@ class NullLoader implements ClassPathLoader.FileLoader {
* entry. * entry.
*/ */
class JarLoader implements ClassPathLoader.FileLoader { class JarLoader implements ClassPathLoader.FileLoader {
private File file;
JarLoader(File file){
this.file = file;
}
public File getFile(){
return file;
}
public ClassFile[] getClasses() throws IOException {
ZipFile zipFile = new ZipFile(file);
Vector v = new Vector();
Enumeration entries = zipFile.entries();
while (entries.hasMoreElements()){
ZipEntry entry = (ZipEntry)entries.nextElement();
if (entry.getName().endsWith(".class")){
InputStream is = ClassPathLoader.getCachedStream(zipFile.getInputStream(entry));
ClassFile classFile = new ClassFile(is);
is.close();
v.addElement(classFile);
}
}
ClassFile[] classes = new ClassFile[v.size()];
v.copyInto(classes);
return classes;
}
private File file;
JarLoader(File file){
this.file = file;
}
public File getFile(){
return file;
}
public ClassFile[] getClasses() throws IOException {
ZipFile zipFile = new ZipFile(file);
Vector v = new Vector();
Enumeration entries = zipFile.entries();
while (entries.hasMoreElements()){
ZipEntry entry = (ZipEntry)entries.nextElement();
if (entry.getName().endsWith(".class")){
InputStream is = ClassPathLoader.getCachedStream(zipFile.getInputStream(entry));
ClassFile classFile = new ClassFile(is);
is.close();
v.addElement(classFile);
}
}
ClassFile[] classes = new ClassFile[v.size()];
v.copyInto(classes);
return classes;
}
} }


/** /**
@@ -264,93 +264,93 @@ class JarLoader implements ClassPathLoader.FileLoader {
* match the directory ? * match the directory ?
*/ */
class DirectoryLoader implements ClassPathLoader.FileLoader { class DirectoryLoader implements ClassPathLoader.FileLoader {
private File directory;
DirectoryLoader(File dir){
directory = dir;
}
public File getFile(){
return directory;
}
public ClassFile[] getClasses() throws IOException {
Vector v = new Vector();
Vector files = listFiles( directory, new ClassFilter(), true);
for (int i = 0; i < files.size(); i++){
File file = (File)files.elementAt(i);
InputStream is = null;
try {
is = ClassPathLoader.getCachedStream(new FileInputStream(file));
ClassFile classFile = new ClassFile(is);
is.close();
is = null;
v.addElement(classFile);
} finally {
if (is != null){
try {
is.close();
} catch (IOException ignored){}
}
}
}
ClassFile[] classes = new ClassFile[v.size()];
v.copyInto(classes);
return classes;
}
private File directory;


/**
* List files that obeys to a specific filter recursively from a given base
* directory.
* @param directory the directory where to list the files from.
* @param filter the file filter to apply
* @param recurse tells whether or not the listing is recursive.
* @return the list of <tt>File</tt> objects that applies to the given
* filter.
*/
public static Vector listFiles(File directory, FilenameFilter filter, boolean recurse){
if (!directory.isDirectory()){
throw new IllegalArgumentException(directory + " is not a directory");
}
Vector list = new Vector();
listFilesTo(list, directory, filter, recurse);
return list;
}
DirectoryLoader(File dir){
directory = dir;
}
public File getFile(){
return directory;
}
public ClassFile[] getClasses() throws IOException {
Vector v = new Vector();
Vector files = listFiles( directory, new ClassFilter(), true);
for (int i = 0; i < files.size(); i++){
File file = (File)files.elementAt(i);
InputStream is = null;
try {
is = ClassPathLoader.getCachedStream(new FileInputStream(file));
ClassFile classFile = new ClassFile(is);
is.close();
is = null;
v.addElement(classFile);
} finally {
if (is != null){
try {
is.close();
} catch (IOException ignored){}
}
}
}
ClassFile[] classes = new ClassFile[v.size()];
v.copyInto(classes);
return classes;
}

/**
* List files that obeys to a specific filter recursively from a given base
* directory.
* @param directory the directory where to list the files from.
* @param filter the file filter to apply
* @param recurse tells whether or not the listing is recursive.
* @return the list of <tt>File</tt> objects that applies to the given
* filter.
*/
public static Vector listFiles(File directory, FilenameFilter filter, boolean recurse){
if (!directory.isDirectory()){
throw new IllegalArgumentException(directory + " is not a directory");
}
Vector list = new Vector();
listFilesTo(list, directory, filter, recurse);
return list;
}


/**
* List and add files to a given list. As a convenience it sends back the
* instance of the list given as a parameter.
* @param list the list of files where the filtered files should be added
* @param directory the directory where to list the files from.
* @param filter the file filter to apply
* @param recurse tells whether or not the listing is recursive.
* @return the list instance that was passed as the <tt>list</tt> argument.
*/
private static Vector listFilesTo(Vector list, File directory, FilenameFilter filter, boolean recurse){
String[] files = directory.list(filter);
for (int i = 0; i < files.length; i++){
list.addElement( new File(directory, files[i]) );
}
files = null; // we don't need it anymore
if (recurse){
String[] subdirs = directory.list( new DirectoryFilter() );
for (int i = 0; i < subdirs.length; i++){
listFilesTo(list, new File(directory, subdirs[i]), filter, recurse);
}
}
return list;
}
/**
* List and add files to a given list. As a convenience it sends back the
* instance of the list given as a parameter.
* @param list the list of files where the filtered files should be added
* @param directory the directory where to list the files from.
* @param filter the file filter to apply
* @param recurse tells whether or not the listing is recursive.
* @return the list instance that was passed as the <tt>list</tt> argument.
*/
private static Vector listFilesTo(Vector list, File directory, FilenameFilter filter, boolean recurse){
String[] files = directory.list(filter);
for (int i = 0; i < files.length; i++){
list.addElement( new File(directory, files[i]) );
}
files = null; // we don't need it anymore
if (recurse){
String[] subdirs = directory.list( new DirectoryFilter() );
for (int i = 0; i < subdirs.length; i++){
listFilesTo(list, new File(directory, subdirs[i]), filter, recurse);
}
}
return list;
}


} }


/** Convenient filter that accepts only directory <tt>File</tt> */ /** Convenient filter that accepts only directory <tt>File</tt> */
class DirectoryFilter implements FilenameFilter { class DirectoryFilter implements FilenameFilter {
public boolean accept(File directory, String name){
File pathname = new File(directory, name);
return pathname.isDirectory();
}
public boolean accept(File directory, String name){
File pathname = new File(directory, name);
return pathname.isDirectory();
}
} }
/** convenient filter to accept only .class files */ /** convenient filter to accept only .class files */
class ClassFilter implements FilenameFilter { class ClassFilter implements FilenameFilter {
public boolean accept(File dir, String name){
return name.endsWith(".class");
}
public boolean accept(File dir, String name){
return name.endsWith(".class");
}
} }

+ 207
- 207
src/main/org/apache/tools/ant/taskdefs/optional/sitraka/bytecode/Utils.java View File

@@ -64,320 +64,320 @@ import java.util.Vector;
* @author <a href="sbailliez@imediation.com">Stephane Bailliez</a> * @author <a href="sbailliez@imediation.com">Stephane Bailliez</a>
*/ */
public class Utils { public class Utils {
/** public access flag */
/** public access flag */
public final static short ACC_PUBLIC = 1; public final static short ACC_PUBLIC = 1;
/** private access flag */
/** private access flag */
public final static short ACC_PRIVATE = 2; public final static short ACC_PRIVATE = 2;
/** protected access flag */
/** protected access flag */
public final static short ACC_PROTECTED = 4; public final static short ACC_PROTECTED = 4;
/** static access flag */
/** static access flag */
public final static short ACC_STATIC = 8; public final static short ACC_STATIC = 8;
/** final access flag */
/** final access flag */
public final static short ACC_FINAL = 16; public final static short ACC_FINAL = 16;
/** super access flag */
/** super access flag */
public final static short ACC_SUPER = 32; public final static short ACC_SUPER = 32;
/** synchronized access flag */
/** synchronized access flag */
public final static short ACC_SYNCHRONIZED = 32; public final static short ACC_SYNCHRONIZED = 32;
/** volatile access flag */
/** volatile access flag */
public final static short ACC_VOLATILE = 64; public final static short ACC_VOLATILE = 64;
/** transient access flag */
/** transient access flag */
public final static short ACC_TRANSIENT = 128; public final static short ACC_TRANSIENT = 128;
/** native access flag */
/** native access flag */
public final static short ACC_NATIVE = 256; public final static short ACC_NATIVE = 256;
/** interface access flag */
/** interface access flag */
public final static short ACC_INTERFACE = 512; public final static short ACC_INTERFACE = 512;
/** abstract access flag */
/** abstract access flag */
public final static short ACC_ABSTRACT = 1024; public final static short ACC_ABSTRACT = 1024;
/** strict access flag */
/** strict access flag */
public final static short ACC_STRICT = 2048; public final static short ACC_STRICT = 2048;


/** private constructor */
private Utils(){
}
/**
* return an UTF8 value from the pool located a a specific index.
* @param pool the constant pool to look at
* @param index index of the UTF8 value in the constant pool
* @return the value of the string if it exists
* @throws ClassCastException if the index is not an UTF8 constant.
*/
public static String getUTF8Value(ConstantPool pool, int index){
return ((Utf8CPInfo)pool.getEntry(index)).getValue();
}
/**
* parse all parameters from a descritor into fields of java name.
* @param descriptor of a method.
* @return the parameter list of a given method descriptor. Each string
* represent a java object with its fully qualified classname or the
* primitive name such as int, long, ...
*/
public static String[] getMethodParams(String descriptor){
int i = 0;
if (descriptor.charAt(i) != '('){
throw new IllegalArgumentException("Method descriptor should start with a '('");
}
Vector params = new Vector();
StringBuffer param = new StringBuffer();
/** private constructor */
private Utils(){
}
/**
* return an UTF8 value from the pool located a a specific index.
* @param pool the constant pool to look at
* @param index index of the UTF8 value in the constant pool
* @return the value of the string if it exists
* @throws ClassCastException if the index is not an UTF8 constant.
*/
public static String getUTF8Value(ConstantPool pool, int index){
return ((Utf8CPInfo)pool.getEntry(index)).getValue();
}
/**
* parse all parameters from a descritor into fields of java name.
* @param descriptor of a method.
* @return the parameter list of a given method descriptor. Each string
* represent a java object with its fully qualified classname or the
* primitive name such as int, long, ...
*/
public static String[] getMethodParams(String descriptor){
int i = 0;
if (descriptor.charAt(i) != '('){
throw new IllegalArgumentException("Method descriptor should start with a '('");
}
Vector params = new Vector();
StringBuffer param = new StringBuffer();
i++; i++;
while ( (i = descriptor2java(descriptor, i, param)) < descriptor.length() ){ while ( (i = descriptor2java(descriptor, i, param)) < descriptor.length() ){
params.add(param.toString());
param.setLength(0); // reset
if (descriptor.charAt(i) == ')'){
i++;
break;
}
}
String[] array = new String[params.size()];
params.copyInto(array);
return array;
}
/**
* return the object type of a return type.
* @param descriptor
* @return get the return type objet of a given descriptor
*/
public static String getMethodReturnType(String descriptor){
int pos = descriptor.indexOf(')');
StringBuffer rettype = new StringBuffer();
descriptor2java(descriptor, pos + 1, rettype);
return rettype.toString();
params.add(param.toString());
param.setLength(0); // reset
if (descriptor.charAt(i) == ')'){
i++;
break;
}
}
String[] array = new String[params.size()];
params.copyInto(array);
return array;
} }
/**
* Parse a single descriptor symbol and returns it java equivalent.
* @param descriptor the descriptor symbol.
* @param i the index to look at the symbol in the descriptor string
* @param sb the stringbuffer to return the java equivalent of the symbol
* @return the index after the descriptor symbol
*/
public static int descriptor2java(String descriptor, int i, StringBuffer sb){
// get the dimension
StringBuffer dim = new StringBuffer();
for (;descriptor.charAt(i) == '['; i++){
dim.append("[]");
}
// now get the type
switch (descriptor.charAt(i)){
case 'B': sb.append("byte"); break;
case 'C': sb.append("char"); break;
case 'D': sb.append("double"); break;
case 'F': sb.append("float"); break;
case 'I': sb.append("int"); break;
case 'J': sb.append("long"); break;
case 'S': sb.append("short"); break;
case 'Z': sb.append("boolean"); break;
case 'V': sb.append("void"); break;
case 'L':
// it is a class
int pos = descriptor.indexOf(';', i + 1);
String classname = descriptor.substring(i + 1, pos).replace('/', '.');
sb.append(classname);
i = pos;
break;
default:
//@todo, yeah this happens because I got things like:
// ()Ljava/lang/Object; and it will return and ) will be here
// think about it.
//ooooops should never happen
//throw new IllegalArgumentException("Invalid descriptor symbol: '" + i + "' in '" + descriptor + "'");
}
sb.append(dim.toString());
return ++i;
}
/**
* check for abstract access
* @param access_flags access flags
*/

/**
* return the object type of a return type.
* @param descriptor
* @return get the return type objet of a given descriptor
*/
public static String getMethodReturnType(String descriptor){
int pos = descriptor.indexOf(')');
StringBuffer rettype = new StringBuffer();
descriptor2java(descriptor, pos + 1, rettype);
return rettype.toString();
}

/**
* Parse a single descriptor symbol and returns it java equivalent.
* @param descriptor the descriptor symbol.
* @param i the index to look at the symbol in the descriptor string
* @param sb the stringbuffer to return the java equivalent of the symbol
* @return the index after the descriptor symbol
*/
public static int descriptor2java(String descriptor, int i, StringBuffer sb){
// get the dimension
StringBuffer dim = new StringBuffer();
for (;descriptor.charAt(i) == '['; i++){
dim.append("[]");
}
// now get the type
switch (descriptor.charAt(i)){
case 'B': sb.append("byte"); break;
case 'C': sb.append("char"); break;
case 'D': sb.append("double"); break;
case 'F': sb.append("float"); break;
case 'I': sb.append("int"); break;
case 'J': sb.append("long"); break;
case 'S': sb.append("short"); break;
case 'Z': sb.append("boolean"); break;
case 'V': sb.append("void"); break;
case 'L':
// it is a class
int pos = descriptor.indexOf(';', i + 1);
String classname = descriptor.substring(i + 1, pos).replace('/', '.');
sb.append(classname);
i = pos;
break;
default:
//@todo, yeah this happens because I got things like:
// ()Ljava/lang/Object; and it will return and ) will be here
// think about it.

//ooooops should never happen
//throw new IllegalArgumentException("Invalid descriptor symbol: '" + i + "' in '" + descriptor + "'");
}
sb.append(dim.toString());
return ++i;
}

/**
* check for abstract access
* @param access_flags access flags
*/
public static boolean isAbstract(int access_flags) { public static boolean isAbstract(int access_flags) {
return (access_flags & ACC_ABSTRACT) != 0; return (access_flags & ACC_ABSTRACT) != 0;
} }
/**
* check for public access
* @param access_flags access flags
*/
/**
* check for public access
* @param access_flags access flags
*/
public static boolean isPublic(int access_flags) { public static boolean isPublic(int access_flags) {
return (access_flags & ACC_PUBLIC) != 0; return (access_flags & ACC_PUBLIC) != 0;
} }
/**
* check for a static access
* @param access_flags access flags
*/
/**
* check for a static access
* @param access_flags access flags
*/
public static boolean isStatic(int access_flags) { public static boolean isStatic(int access_flags) {
return (access_flags & ACC_STATIC) != 0; return (access_flags & ACC_STATIC) != 0;
} }
/**
* check for native access
* @param access_flags access flags
*/
/**
* check for native access
* @param access_flags access flags
*/
public static boolean isNative(int access_flags) { public static boolean isNative(int access_flags) {
return (access_flags & ACC_NATIVE) != 0; return (access_flags & ACC_NATIVE) != 0;
} }
/**
* check for class access
* @param access_flags access flags
*/
/**
* check for class access
* @param access_flags access flags
*/
public static boolean isClass(int access_flags) { public static boolean isClass(int access_flags) {
return !isInterface(access_flags); return !isInterface(access_flags);
} }
/**
* check for strict access
* @param access_flags access flags
*/
/**
* check for strict access
* @param access_flags access flags
*/
public static boolean isStrict(int access_flags) { public static boolean isStrict(int access_flags) {
return (access_flags & ACC_STRICT) != 0; return (access_flags & ACC_STRICT) != 0;
} }
/**
* check for interface access
* @param access_flags access flags
*/
/**
* check for interface access
* @param access_flags access flags
*/
public static boolean isInterface(int access_flags) { public static boolean isInterface(int access_flags) {
return (access_flags & ACC_INTERFACE) != 0; return (access_flags & ACC_INTERFACE) != 0;
} }
/**
* check for private access
* @param access_flags access flags
*/
/**
* check for private access
* @param access_flags access flags
*/
public static boolean isPrivate(int access_flags) { public static boolean isPrivate(int access_flags) {
return (access_flags & ACC_PRIVATE) != 0; return (access_flags & ACC_PRIVATE) != 0;
} }
/**
* check for transient flag
* @param access_flags access flags
*/
/**
* check for transient flag
* @param access_flags access flags
*/
public static boolean isTransient(int access_flags) { public static boolean isTransient(int access_flags) {
return (access_flags & ACC_TRANSIENT) != 0; return (access_flags & ACC_TRANSIENT) != 0;
} }
/**
* check for volatile flag
* @param access_flags access flags
*/
/**
* check for volatile flag
* @param access_flags access flags
*/
public static boolean isVolatile(int access_flags){ public static boolean isVolatile(int access_flags){
return (access_flags & ACC_VOLATILE) != 0; return (access_flags & ACC_VOLATILE) != 0;
} }
/**
* check for super flag
* @param access_flags access flag
*/
/**
* check for super flag
* @param access_flags access flag
*/
public static boolean isSuper(int access_flags) { public static boolean isSuper(int access_flags) {
return (access_flags & ACC_SUPER) != 0; return (access_flags & ACC_SUPER) != 0;
} }
/**
* check for protected flag
* @param access_flags access flags
*/
/**
* check for protected flag
* @param access_flags access flags
*/
public static boolean isProtected(int access_flags) { public static boolean isProtected(int access_flags) {
return (access_flags & ACC_PROTECTED) != 0; return (access_flags & ACC_PROTECTED) != 0;
} }
/**
* chck for final flag
* @param access_flags access flags
*/
/**
* chck for final flag
* @param access_flags access flags
*/
public static boolean isFinal(int access_flags) { public static boolean isFinal(int access_flags) {
return (access_flags & ACC_FINAL) != 0; return (access_flags & ACC_FINAL) != 0;
} }
/**
* check for synchronized flag
* @param access_flags access flags
*/
/**
* check for synchronized flag
* @param access_flags access flags
*/
public static boolean isSynchronized(int access_flags) { public static boolean isSynchronized(int access_flags) {
return (access_flags & ACC_SYNCHRONIZED) != 0; return (access_flags & ACC_SYNCHRONIZED) != 0;
} }
/**
* return the method access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
/**
* return the method access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
public static String getMethodAccess(int access_flags) { public static String getMethodAccess(int access_flags) {
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
if(isPublic(access_flags)){ if(isPublic(access_flags)){
sb.append("public "); sb.append("public ");
} else if(isPrivate(access_flags)){
} else if(isPrivate(access_flags)){
sb.append("private "); sb.append("private ");
} else if(isProtected(access_flags)){
} else if(isProtected(access_flags)){
sb.append("protected "); sb.append("protected ");
}
if(isFinal(access_flags)){
}
if(isFinal(access_flags)){
sb.append("final "); sb.append("final ");
}
}
if(isStatic(access_flags)){ if(isStatic(access_flags)){
sb.append("static "); sb.append("static ");
}
}
if(isSynchronized(access_flags)){ if(isSynchronized(access_flags)){
sb.append("synchronized "); sb.append("synchronized ");
}
}
if(isNative(access_flags)){ if(isNative(access_flags)){
sb.append("native "); sb.append("native ");
}
}
if(isAbstract(access_flags)){ if(isAbstract(access_flags)){
sb.append("abstract "); sb.append("abstract ");
}
}
return sb.toString().trim(); return sb.toString().trim();
} }


/**
* return the field access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
/**
* return the field access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
public static String getFieldAccess(int access_flags) { public static String getFieldAccess(int access_flags) {
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
if(isPublic(access_flags)){ if(isPublic(access_flags)){
sb.append("public "); sb.append("public ");
} else if(isPrivate(access_flags)){
} else if(isPrivate(access_flags)){
sb.append("private "); sb.append("private ");
} else if (isProtected(access_flags)){
} else if (isProtected(access_flags)){
sb.append("protected "); sb.append("protected ");
}
}
if(isFinal(access_flags)){ if(isFinal(access_flags)){
sb.append("final "); sb.append("final ");
}
}
if(isStatic(access_flags)){ if(isStatic(access_flags)){
sb.append("static "); sb.append("static ");
}
}
if(isVolatile(access_flags)){ if(isVolatile(access_flags)){
sb.append("volatile "); sb.append("volatile ");
}
}
if(isTransient(access_flags)){ if(isTransient(access_flags)){
sb.append("transient "); sb.append("transient ");
}
}
return sb.toString().trim(); return sb.toString().trim();
} }


/**
* return the class access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
/**
* return the class access flag as java modifiers
* @param access_flags access flags
* @return the access flags as modifier strings
*/
public static String getClassAccess(int access_flags) { public static String getClassAccess(int access_flags) {
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
if(isPublic(access_flags)){ if(isPublic(access_flags)){
sb.append("public "); sb.append("public ");
} else if (isProtected(access_flags)){
sb.append("protected ");
} else if (isPrivate(access_flags)){
sb.append("private ");
}
if(isFinal(access_flags)){
} else if (isProtected(access_flags)){
sb.append("protected ");
} else if (isPrivate(access_flags)){
sb.append("private ");
}
if(isFinal(access_flags)){
sb.append("final "); sb.append("final ");
}
}
if(isSuper(access_flags)){ if(isSuper(access_flags)){
sb.append("/*super*/ "); sb.append("/*super*/ ");
}
}
if(isInterface(access_flags)){ if(isInterface(access_flags)){
sb.append("interface "); sb.append("interface ");
}
}
if(isAbstract(access_flags)){ if(isAbstract(access_flags)){
sb.append("abstract "); sb.append("abstract ");
}
}
if(isClass(access_flags)){ if(isClass(access_flags)){
sb.append("class "); sb.append("class ");
}
}
return sb.toString().trim(); return sb.toString().trim();
} }
} }


+ 33
- 33
src/main/org/apache/tools/ant/taskdefs/optional/sound/AntSoundPlayer.java View File

@@ -137,32 +137,32 @@ public class AntSoundPlayer implements LineListener, BuildListener {
AudioInputStream audioInputStream = null; AudioInputStream audioInputStream = null;




try {
audioInputStream = AudioSystem.getAudioInputStream(file);
}
catch (UnsupportedAudioFileException uafe) {
project.log("Audio format is not yet supported: "+uafe.getMessage());
}
try {
audioInputStream = AudioSystem.getAudioInputStream(file);
}
catch (UnsupportedAudioFileException uafe) {
project.log("Audio format is not yet supported: "+uafe.getMessage());
}
catch (IOException ioe) { catch (IOException ioe) {
ioe.printStackTrace(); ioe.printStackTrace();
} }


if (audioInputStream != null) {
AudioFormat format = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format,
if (audioInputStream != null) {
AudioFormat format = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format,
AudioSystem.NOT_SPECIFIED); AudioSystem.NOT_SPECIFIED);
try {
audioClip = (Clip) AudioSystem.getLine(info);
audioClip.addLineListener(this);
try {
audioClip = (Clip) AudioSystem.getLine(info);
audioClip.addLineListener(this);
audioClip.open(audioInputStream); audioClip.open(audioInputStream);
}
catch (LineUnavailableException e) {
}
catch (LineUnavailableException e) {
project.log("The sound device is currently unavailable"); project.log("The sound device is currently unavailable");
return; return;
}
catch (IOException e) {
e.printStackTrace();
}
}
catch (IOException e) {
e.printStackTrace();
}


if (duration != null) { if (duration != null) {
playClip(audioClip, duration.longValue()); playClip(audioClip, duration.longValue());
@@ -171,10 +171,10 @@ public class AntSoundPlayer implements LineListener, BuildListener {
} }
audioClip.drain(); audioClip.drain();
audioClip.close(); audioClip.close();
}
else {
project.log("Can't get data from file " + file.getName());
}
}
else {
project.log("Can't get data from file " + file.getName());
}
} }


private void playClip(Clip clip, int loops) { private void playClip(Clip clip, int loops) {
@@ -203,16 +203,16 @@ public class AntSoundPlayer implements LineListener, BuildListener {
if (event.getType().equals(LineEvent.Type.STOP)) { if (event.getType().equals(LineEvent.Type.STOP)) {
Line line = event.getLine(); Line line = event.getLine();
line.close(); line.close();
}
else if (event.getType().equals(LineEvent.Type.CLOSE)) {
/*
* There is a bug in JavaSound 0.90 (jdk1.3beta).
* It prevents correct termination of the VM.
* So we have to exit ourselves.
*/
//System.exit(0);
}
}
}
else if (event.getType().equals(LineEvent.Type.CLOSE)) {
/*
* There is a bug in JavaSound 0.90 (jdk1.3beta).
* It prevents correct termination of the VM.
* So we have to exit ourselves.
*/
//System.exit(0);
}
}




/** /**
@@ -220,7 +220,7 @@ public class AntSoundPlayer implements LineListener, BuildListener {
*/ */
public void buildStarted(BuildEvent event){ public void buildStarted(BuildEvent event){
} }
/** /**
* Fired after the last target has finished. This event * Fired after the last target has finished. This event
* will still be thrown if an error occured during the build. * will still be thrown if an error occured during the build.


Loading…
Cancel
Save