git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270031 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -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"); | ||||
| @@ -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()); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -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); | ||||
| @@ -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 ); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -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"); | ||||
| @@ -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, | ||||
| @@ -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; | |||||
| } | } | ||||
| } | } | ||||
| @@ -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"); | ||||
| @@ -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." | ||||
| @@ -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; | |||||
| } | |||||
| } | } | ||||
| @@ -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); | ||||
| } | } | ||||
| } | } | ||||
| @@ -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 | ||||
| @@ -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); | ||||
| @@ -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> | |||||
| * <vajexport destdir="C:/builddir/source"> | * <vajexport destdir="C:/builddir/source"> | ||||
| * <include name="/MyVAProject/org/foo/subsystem1/**" /> | * <include name="/MyVAProject/org/foo/subsystem1/**" /> | ||||
| * <exclude name="/MyVAProject/org/foo/subsystem1/test/**"/> | * <exclude name="/MyVAProject/org/foo/subsystem1/test/**"/> | ||||
| * </vajexport> | * </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; | |||||
| } | |||||
| } | } | ||||
| @@ -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> | |||||
| * <vajimport project="MyVAProject"> | * <vajimport project="MyVAProject"> | ||||
| * <fileset dir="src"> | * <fileset dir="src"> | ||||
| * <include name="org/foo/subsystem1/**" /> | * <include name="org/foo/subsystem1/**" /> | ||||
| @@ -77,7 +77,7 @@ import java.lang.reflect.Field; | |||||
| * </vajexport> | * </vajexport> | ||||
| * </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); | |||||
| } | |||||
| } | } | ||||
| @@ -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) | |||||
| ); | ); | ||||
| } | } | ||||
| } | } | ||||
| @@ -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 ) { | ||||
| @@ -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"); | ||||
| @@ -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 ); | ||||
| @@ -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 | ||||
| */ | */ | ||||
| @@ -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")); | ||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -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); | |||||
| } | } | ||||
| @@ -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); | ||||
| } | } | ||||
| @@ -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; | ||||
| @@ -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; | ||||
| @@ -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; | ||||
| } | } | ||||
| @@ -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); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -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 :( | ||||
| @@ -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)); | |||||
| } | |||||
| } | } | ||||
| @@ -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) { | ||||
| @@ -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> | ||||
| * <P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /> | * <P4Label name="MyLabel-${TSTAMP}-${DSTAMP}" desc="Auto Build Label" /> | ||||
| * </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); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -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...."); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -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); | |||||
| } | |||||
| } | } | ||||
| @@ -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; | ||||
| @@ -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"); | |||||
| } | |||||
| } | } | ||||
| @@ -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(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -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. | ||||