From c9928eaad1f371f18ecae2b487a5328b315b5790 Mon Sep 17 00:00:00 2001 From: Peter Donald Date: Sat, 25 Nov 2000 01:10:09 +0000 Subject: [PATCH] Removed Project.toBoolean method where appropriate and removed a number of tabs. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268233 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tools/ant/taskdefs/Copydir.java | 11 +- .../apache/tools/ant/taskdefs/Copyfile.java | 7 +- .../org/apache/tools/ant/taskdefs/Exec.java | 4 +- .../tools/ant/taskdefs/GenerateKey.java | 157 +- .../org/apache/tools/ant/taskdefs/Get.java | 94 +- .../apache/tools/ant/taskdefs/Replace.java | 2 +- .../apache/tools/ant/taskdefs/SignJar.java | 14 +- .../tools/ant/taskdefs/optional/NetRexxC.java | 133 +- .../taskdefs/optional/RenameExtensions.java | 25 +- .../optional/scm/AntStarTeamCheckOut.java | 2614 +++++++++-------- 10 files changed, 1541 insertions(+), 1520 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Copydir.java b/src/main/org/apache/tools/ant/taskdefs/Copydir.java index 2e5643a5f..437cd8981 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Copydir.java +++ b/src/main/org/apache/tools/ant/taskdefs/Copydir.java @@ -54,10 +54,9 @@ package org.apache.tools.ant.taskdefs; -import org.apache.tools.ant.*; - import java.io.*; import java.util.*; +import org.apache.tools.ant.*; /** * Copies a directory. @@ -84,16 +83,16 @@ public class Copydir extends MatchingTask { destDir = dest; } - public void setFiltering(String filter) { - filtering = Project.toBoolean(filter); + public void setFiltering(boolean filter) { + filtering = filter; } public void setFlatten(boolean flatten) { this.flatten = flatten; } - public void setForceoverwrite(String force) { - forceOverwrite = Project.toBoolean(force); + public void setForceoverwrite(boolean force) { + forceOverwrite = force; } public void execute() throws BuildException { diff --git a/src/main/org/apache/tools/ant/taskdefs/Copyfile.java b/src/main/org/apache/tools/ant/taskdefs/Copyfile.java index 97b8cdd1b..f93a7b802 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Copyfile.java +++ b/src/main/org/apache/tools/ant/taskdefs/Copyfile.java @@ -54,10 +54,9 @@ package org.apache.tools.ant.taskdefs; -import org.apache.tools.ant.*; - import java.io.*; import java.util.*; +import org.apache.tools.ant.*; /** * Copies a file. @@ -78,8 +77,8 @@ public class Copyfile extends Task { srcFile = src; } - public void setForceoverwrite(String force) { - forceOverwrite = Project.toBoolean(force); + public void setForceoverwrite(boolean force) { + forceOverwrite = force; } public void setDest(File dest) { diff --git a/src/main/org/apache/tools/ant/taskdefs/Exec.java b/src/main/org/apache/tools/ant/taskdefs/Exec.java index fc39f2114..24dfed6d9 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Exec.java +++ b/src/main/org/apache/tools/ant/taskdefs/Exec.java @@ -182,8 +182,8 @@ public class Exec extends Task { this.out = out; } - public void setFailonerror(String fail) { - failOnError = Project.toBoolean(fail); + public void setFailonerror(boolean fail) { + failOnError = fail; } protected void outputLog(String line, int messageLevel) { diff --git a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java b/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java index e61b40397..d53dcdd35 100644 --- a/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java +++ b/src/main/org/apache/tools/ant/taskdefs/GenerateKey.java @@ -53,15 +53,15 @@ */ package org.apache.tools.ant.taskdefs; -import org.apache.tools.ant.*; -import org.apache.tools.ant.types.Commandline; import java.util.Enumeration; import java.util.Vector; +import org.apache.tools.ant.*; +import org.apache.tools.ant.types.Commandline; /** * Generates a key. * - * @author Peter Donald donaldp@mad.scientist.com + * @author Peter Donald */ public class GenerateKey extends Task { @@ -104,46 +104,46 @@ public class GenerateKey extends Task { } public String toString() { - final int size = params.size(); - final StringBuffer sb = new StringBuffer(); - boolean firstPass = true; - - for( int i = 0; i < size; i++ ) { - if( !firstPass ) { - sb.append(" ,"); - } - firstPass = false; - - final DnameParam param = (DnameParam)params.elementAt( i ); - sb.append( encode( param.getName() ) ); - sb.append( '=' ); - sb.append( encode( param.getValue() ) ); - } - - return sb.toString(); + final int size = params.size(); + final StringBuffer sb = new StringBuffer(); + boolean firstPass = true; + + for( int i = 0; i < size; i++ ) { + if( !firstPass ) { + sb.append(" ,"); + } + firstPass = false; + + final DnameParam param = (DnameParam)params.elementAt( i ); + sb.append( encode( param.getName() ) ); + sb.append( '=' ); + sb.append( encode( param.getValue() ) ); + } + + return sb.toString(); } - public String encode( final String string ) { - int end = string.indexOf(','); - - if( -1 == end ) return string; - - final StringBuffer sb = new StringBuffer(); - - int start = 0; - - while( -1 != end ) - { - sb.append( string.substring( start, end ) ); - sb.append( "\\," ); - start = end + 1; - end = string.indexOf( ',', start ); - } - - sb.append( string.substring( start ) ); - - return sb.toString(); - } + public String encode( final String string ) { + int end = string.indexOf(','); + + if( -1 == end ) return string; + + final StringBuffer sb = new StringBuffer(); + + int start = 0; + + while( -1 != end ) + { + sb.append( string.substring( start, end ) ); + sb.append( "\\," ); + start = end + 1; + end = string.indexOf( ',', start ); + } + + sb.append( string.substring( start ) ); + + return sb.toString(); + } } /** @@ -168,20 +168,22 @@ public class GenerateKey extends Task { protected boolean verbose; public DistinguishedName createDname() throws BuildException { - if( null != expandedDname ) { - throw new BuildException("DName sub-element can only be specified once."); - } - if( null != dname ) { - throw new BuildException("It is not possible to specify dname both as attribute and element."); - } - expandedDname = new DistinguishedName(); - return expandedDname; + if( null != expandedDname ) { + throw new BuildException( "DName sub-element can only be specified once." ); + } + if( null != dname ) { + throw new BuildException( "It is not possible to specify dname both " + + "as attribute and element." ); + } + expandedDname = new DistinguishedName(); + return expandedDname; } public void setDname(final String dname) { - if( null != expandedDname ) { - throw new BuildException("It is not possible to specify dname both as attribute and element."); - } + if( null != expandedDname ) { + throw new BuildException( "It is not possible to specify dname both " + + "as attribute and element." ); + } this.dname = dname; } @@ -214,40 +216,41 @@ public class GenerateKey extends Task { } public void setKeysize(final String keysize) throws BuildException { - try { this.keysize = Integer.parseInt(keysize); } - catch(final NumberFormatException nfe) - { - throw new BuildException( "KeySize attribute should be a integer" ); - } + try { this.keysize = Integer.parseInt(keysize); } + catch(final NumberFormatException nfe) + { + throw new BuildException( "KeySize attribute should be a integer" ); + } } public void setValidity(final String validity) throws BuildException { - try { this.validity = Integer.parseInt(validity); } - catch(final NumberFormatException nfe) - { - throw new BuildException( "Validity attribute should be a integer" ); - } + try { this.validity = Integer.parseInt(validity); } + catch(final NumberFormatException nfe) + { + throw new BuildException( "Validity attribute should be a integer" ); + } } - public void setVerbose(final String verbose) { - this.verbose = project.toBoolean(verbose); + public void setVerbose(final boolean verbose) { + this.verbose = verbose; } public void execute() throws BuildException { if (project.getJavaVersion().equals(Project.JAVA_1_1)) { - throw new BuildException("The genkey task is only available on JDK versions 1.2 or greater"); + throw new BuildException( "The genkey task is only available on JDK" + + " versions 1.2 or greater" ); } if (null == alias) { - throw new BuildException("alias attribute must be set"); + throw new BuildException( "alias attribute must be set" ); } if (null == storepass) { - throw new BuildException("storepass attribute must be set"); + throw new BuildException( "storepass attribute must be set" ); } if (null == dname && null == expandedDname) { - throw new BuildException("dname must be set"); + throw new BuildException( "dname must be set" ); } final StringBuffer sb = new StringBuffer(); @@ -258,9 +261,9 @@ public class GenerateKey extends Task { sb.append("-v "); } - sb.append("-alias \""); - sb.append(alias); - sb.append("\" "); + sb.append("-alias \""); + sb.append(alias); + sb.append("\" "); if (null != dname) { sb.append("-dname \""); @@ -275,9 +278,9 @@ public class GenerateKey extends Task { } if (null != keystore) { - sb.append("-keystore \""); + sb.append("-keystore \""); sb.append(keystore); - sb.append("\" "); + sb.append("\" "); } if (null != storepass) { @@ -292,14 +295,14 @@ public class GenerateKey extends Task { sb.append("\" "); } - sb.append("-keypass \""); + sb.append("-keypass \""); if (null != keypass) { sb.append(keypass); } - else { + else { sb.append(storepass); - } - sb.append("\" "); + } + sb.append("\" "); if (null != sigalg) { sb.append("-sigalg \""); diff --git a/src/main/org/apache/tools/ant/taskdefs/Get.java b/src/main/org/apache/tools/ant/taskdefs/Get.java index f97a68c34..4813b59f0 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Get.java +++ b/src/main/org/apache/tools/ant/taskdefs/Get.java @@ -54,10 +54,10 @@ package org.apache.tools.ant.taskdefs; -import org.apache.tools.ant.*; import java.io.*; import java.net.*; import java.util.*; +import org.apache.tools.ant.*; /** * Get a particular file from a URL source. @@ -100,14 +100,14 @@ public class Get extends Task { try { - log("Getting: " + source); + log("Getting: " + source); - //set the timestamp to the file date. - long timestamp=0; + //set the timestamp to the file date. + long timestamp=0; boolean hasTimestamp=false; - if(useTimestamp && dest.exists()) { - timestamp=dest.lastModified(); + if(useTimestamp && dest.exists()) { + timestamp=dest.lastModified(); if (verbose) { Date t=new Date(timestamp); log("local file date : "+t.toString()); @@ -115,7 +115,7 @@ public class Get extends Task { hasTimestamp=true; } - + //set up the URL connection URLConnection connection=source.openConnection(); //modify the headers @@ -128,7 +128,7 @@ public class Get extends Task { connection.connect(); //next test for a 304 result (HTTP only) if(connection instanceof HttpURLConnection) { - HttpURLConnection httpConnection=(HttpURLConnection)connection; + HttpURLConnection httpConnection=(HttpURLConnection)connection; if(httpConnection.getResponseCode()==HttpURLConnection.HTTP_NOT_MODIFIED) { //not modified so no file download. just return instead //and trace out something so the user doesn't think that the @@ -141,45 +141,45 @@ public class Get extends Task { //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 //newer. Some protocols (FTP) dont include dates, of course. - - FileOutputStream fos = new FileOutputStream(dest); + + FileOutputStream fos = new FileOutputStream(dest); - InputStream is=null; - for( int i=0; i< 3 ; i++ ) { - try { - is = connection.getInputStream(); - break; - } catch( IOException ex ) { - log( "Error opening connection " + ex ); - } - } - if( is==null ) { - log( "Can't get " + source + " to " + dest); - if(ignoreErrors) + InputStream is=null; + for( int i=0; i< 3 ; i++ ) { + try { + is = connection.getInputStream(); + break; + } catch( IOException ex ) { + log( "Error opening connection " + ex ); + } + } + if( is==null ) { + log( "Can't get " + source + " to " + dest); + if(ignoreErrors) return; - throw new BuildException( "Can't get " + source + " to " + dest, + throw new BuildException( "Can't get " + source + " to " + dest, location); - } - - byte[] buffer = new byte[100 * 1024]; - int length; - - while ((length = is.read(buffer)) >= 0) { - fos.write(buffer, 0, length); - if (verbose) System.out.print("."); - } - if(verbose) System.out.println(); - fos.close(); - is.close(); + } + + byte[] buffer = new byte[100 * 1024]; + int length; + + while ((length = is.read(buffer)) >= 0) { + fos.write(buffer, 0, length); + if (verbose) System.out.print("."); + } + if(verbose) System.out.println(); + fos.close(); + is.close(); //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 if(useTimestamp) { - long remoteTimestamp=connection.getLastModified(); + long remoteTimestamp=connection.getLastModified(); if (verbose) { Date t=new Date(remoteTimestamp); log("last modified = "+t.toString() - +((remoteTimestamp==0)?" - using current time instead":"")); + +((remoteTimestamp==0)?" - using current time instead":"")); } if(remoteTimestamp!=0) touchFile(dest,remoteTimestamp); @@ -187,12 +187,12 @@ public class Get extends Task { - } catch (IOException ioe) { - log("Error getting " + source + " to " + dest ); - if(ignoreErrors) + } catch (IOException ioe) { + log("Error getting " + source + " to " + dest ); + if(ignoreErrors) return; - throw new BuildException(ioe, location); - } + throw new BuildException(ioe, location); + } } /** @@ -221,7 +221,7 @@ public class Get extends Task { } else { return false; } - } + } /** * Set the URL. @@ -229,7 +229,7 @@ public class Get extends Task { * @param u URL for the file. */ public void setSrc(URL u) { - this.source = u; + this.source = u; } /** @@ -238,7 +238,7 @@ public class Get extends Task { * @param dest Path to file. */ public void setDest(File dest) { - this.dest = dest; + this.dest = dest; } /** @@ -247,7 +247,7 @@ public class Get extends Task { * @param v if "true" then be verbose */ public void setVerbose(boolean v) { - verbose = v; + verbose = v; } /** @@ -256,7 +256,7 @@ public class Get extends Task { * @param v if "true" then don't report download errors up to ant */ public void setIgnoreErrors(boolean v) { - ignoreErrors = v; + ignoreErrors = v; } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/Replace.java b/src/main/org/apache/tools/ant/taskdefs/Replace.java index 004baa286..dbe8975b6 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Replace.java +++ b/src/main/org/apache/tools/ant/taskdefs/Replace.java @@ -110,7 +110,7 @@ public class Replace extends MatchingTask { } if (dir != null) { - DirectoryScanner ds = super.getDirectoryScanner(dir); + DirectoryScanner ds = super.getDirectoryScanner(dir); String[] srcs = ds.getIncludedFiles(); for(int i=0; i classFile.lastModified()) { filecopyList.put(srcFile.getAbsolutePath(), destFile.getAbsolutePath()); compileList.addElement(destFile.getAbsolutePath()); @@ -492,7 +493,7 @@ public class NetRexxC extends MatchingTask { project.copyFile(fromFile, toFile); } catch (IOException ioe) { String msg = "Failed to copy " + fromFile + " to " + toFile - + " due to " + ioe.getMessage(); + + " due to " + ioe.getMessage(); throw new BuildException(msg, ioe); } } @@ -554,8 +555,8 @@ public class NetRexxC extends MatchingTask { try { StringWriter out = new StringWriter(); - int rc = COM.ibm.netrexx.process.NetRexxC.main( - new Rexx(compileArgs), new PrintWriter(out)); + int rc = COM.ibm.netrexx.process.NetRexxC. + main(new Rexx(compileArgs), new PrintWriter(out)); if (rc > 1) { // 1 is warnings from real NetRexxC log(out.toString(), Project.MSG_ERR); @@ -644,7 +645,7 @@ public class NetRexxC extends MatchingTask { */ private void addExistingToClasspath(StringBuffer target,String source) { StringTokenizer tok = new StringTokenizer(source, - System.getProperty("path.separator"), false); + System.getProperty("path.separator"), false); while (tok.hasMoreTokens()) { File f = project.resolveFile(tok.nextToken()); @@ -653,7 +654,7 @@ public class NetRexxC extends MatchingTask { target.append(f.getAbsolutePath()); } else { log("Dropping from classpath: "+ - f.getAbsolutePath(), Project.MSG_VERBOSE); + f.getAbsolutePath(), Project.MSG_VERBOSE); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java b/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java index e7f32a76c..651501aaa 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/RenameExtensions.java @@ -101,8 +101,8 @@ public class RenameExtensions extends MatchingTask { * store replace attribute - this determines whether the target file * should be overwritten if present */ - public void setReplace(String replaceString) { - replace = Project.toBoolean(replaceString); + public void setReplace(boolean replace) { + this.replace = replace; } /** @@ -119,7 +119,8 @@ public class RenameExtensions extends MatchingTask { // first off, make sure that we've got a from and to extension if (fromExtension == null || toExtension == null || srcDir == null) { - throw new BuildException("srcDir, fromExtension and toExtension attributes must be set!"); + throw new BuildException( "srcDir, fromExtension and toExtension " + + "attributes must be set!" ); } // scan source and dest dirs to build up rename list @@ -136,7 +137,10 @@ public class RenameExtensions extends MatchingTask { fromFile = (File)e.nextElement(); toFile = (File)renameList.get(fromFile); if (toFile.exists() && replace) toFile.delete(); - if (!fromFile.renameTo(toFile)) throw new BuildException("Rename from: '" + fromFile + "' to '" + toFile + "' failed."); + if (!fromFile.renameTo(toFile)) { + throw new BuildException( "Rename from: '" + fromFile + "' to '" + + toFile + "' failed." ); + } } } @@ -147,17 +151,22 @@ public class RenameExtensions extends MatchingTask { String filename = files[i]; // if it's a file that ends in the fromExtension, copy to the rename list if (filename.toLowerCase().endsWith(fromExtension)) { - File destFile = new File(srcDir, filename.substring(0, filename.lastIndexOf(fromExtension)) + toExtension); + File destFile = + new File( srcDir, + filename.substring(0, filename.lastIndexOf(fromExtension)) + + toExtension ); + if (replace || !destFile.exists()) { list.put(srcFile, destFile); } else { - log("Rejecting file: '" + srcFile + "' for rename as replace is false and file exists", Project.MSG_VERBOSE); + log( "Rejecting file: '" + srcFile + "' for rename as " + + "replace is false and file exists", Project.MSG_VERBOSE ); } } else { - log("File '"+ filename + "' doesn't match fromExtension: '" + fromExtension + "'", Project.MSG_VERBOSE); + log( "File '"+ filename + "' doesn't match fromExtension: '" + + fromExtension + "'", Project.MSG_VERBOSE ); } } return list; } - } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java b/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java index db1b5986a..f97e6bb10 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/scm/AntStarTeamCheckOut.java @@ -55,11 +55,11 @@ */ package org.apache.tools.ant.taskdefs.optional.scm; -import org.apache.tools.ant.*; -import java.io.*; -import java.util.*; import com.starbase.starteam.*; import com.starbase.util.Platform; +import java.io.*; +import java.util.*; +import org.apache.tools.ant.*; /** * Checks out files from a specific StarTeam server, project, view, and @@ -105,1307 +105,1317 @@ import com.starbase.util.Platform; */ public class AntStarTeamCheckOut extends org.apache.tools.ant.Task { - - /** - * By default, force is set to "false" through this field. - * If you set force to "true," AntStarTeamCheckOut will - * overwrite files in the target directory. If the target directory does - * not exist, the force setting does nothing. Note that - * DEFAULT_FORCESETTING and force are strings, - * not boolean values. See the links below for more information. - * - * @see #getForce() - * @see #getForceAsBoolean() - * @see #setForce(String force) - */ - static public final String DEFAULT_FORCESETTING = "false"; - - /** - * This field is used in setting verbose to "false", the - * default. If verbose is true, AntStarTeamCheckOut will - * display file and directory names as it checks files out. The default - * setting displays only a total. Note that - * DEFAULT_VERBOSESETTING and verbose are - * strings, not boolean values. See the links below for more - * information. - * - * @see #getVerbose() - * @see #getVerboseAsBoolean() - * @see #setVerbose(String verbose) - */ - static public final String DEFAULT_VERBOSESETTING = "false"; - - /** - * DEFAULT_RECURSIONSETTING contains the normal setting -- - * true -- for recursion. Thus, if you do not - * setRecursion("false") somewhere in your program, - * AntStarTeamCheckOut will check files out from all subfolders as well - * as from the given folder. - * - * @see #getRecursion() - * @see #setRecursion(String recursion) - */ - static public final String DEFAULT_RECURSIONSETTING = "true"; - - /** - * This constant sets the filter to include all files. This default has - * the same result as setIncludes("*"). - * - * @see #getIncludes() - * @see #setIncludes(String includes) - */ - static public final String DEFAULT_INCLUDESETTING = "*"; - - /** - * This disables the exclude filter by default. In other words, no files - * are excluded. This setting is equivalent to - * setExcludes(null). - * - * @see #getExcludes() - * @see #setExcludes(String excludes) - */ - static public final String DEFAULT_EXCLUDESETTING = null; - - /** - * The default folder to search; the root folder. Since - * AntStarTeamCheckOut searches subfolders, by default it processes an - * entire view. - * - * @see #getFolderName() - * @see #setFolderName(String folderName) - */ - static public final String DEFAULT_FOLDERSETTING = null; - - - /** - * This is used when formatting the output. The directory name is - * displayed only when it changes. - */ - private Folder prevFolder = null; - - /** - * This field keeps count of the number of files checked out. - */ - private int checkedOut; - - // Change these through their GET and SET methods. - - /** - * The name of the server you wish to connect to. - */ - private String serverName = null; - - /** - * The port on the server used for StarTeam. - */ - private String serverPort = null; - - /** - * The name of your project. - */ - private String projectName = null; - - /** - * The name of the folder you want to check out files from. All - * subfolders will be searched, as well. - */ - private String folderName = DEFAULT_FOLDERSETTING; - - /** - * The view that the files you want are in. - */ - private String viewName = null; - - /** - * Your username on the StarTeam server. - */ - private String username = null; - - /** - * Your StarTeam password. - */ - private String password = null; - - /** - * The path to the root folder you want to check out to. This is a local - * directory. - */ - private String targetFolder = null; - - /** - * If force set to true, AntStarTeamCheckOut will overwrite files in the - * target directory. - */ - private String force = DEFAULT_FORCESETTING; - - /** - * When verbose is true, the program will display all files and - * directories as they are checked out. - */ - private String verbose = DEFAULT_VERBOSESETTING; - - /** - * Set recursion to false to check out files in only the given folder - * and not in its subfolders. - */ - private String recursion = DEFAULT_RECURSIONSETTING; - - // These fields deal with includes and excludes - - /** - * All files that fit this pattern are checked out. - */ - private String includes = DEFAULT_INCLUDESETTING; - - /** - * All files fitting this pattern are ignored. - */ - private String excludes = DEFAULT_EXCLUDESETTING; - - /** - * The file delimitor on the user's system. - */ - private String delim = Platform.getFilePathDelim(); - - /** - * Do the execution. - * - * @exception BuildException - */ - public void execute() throws BuildException - { - - // Check all of the properties that are required. - if ( getServerName() == null ) - { - project.log("ServerName must not be null."); - return; - } - if ( getServerPort() == null ) - { - project.log("ServerPort must not be null."); - return; - } - if ( getProjectName() == null ) - { - project.log("ProjectName must not be null."); - return; - } - if ( getViewName() == null ) - { - project.log("ViewName must not be null."); - return; - } - if ( getUsername() == null ) - { - project.log("Username must not be null."); - return; - } - if ( getPassword() == null ) - { - project.log("Password must not be null."); - return; - } - if ( getTargetFolder() == null ) - { - project.log("TargetFolder must not be null."); - return; - } - - // Because of the way I create the full target path, there must be NO slash at the end of targetFolder and folderName - // However, if the slash or backslash is the only character, leave it alone - if (!(getTargetFolder()==null)) - { - if ((getTargetFolder().endsWith("/") || getTargetFolder().endsWith("\\")) && getTargetFolder().length() > 1) - { - setTargetFolder(getTargetFolder().substring(0, getTargetFolder().length() - 1)); - } - } - - if (!(getFolderName()==null)) - { - if ((getFolderName().endsWith("/") || getFolderName().endsWith("\\")) && getFolderName().length() > 1) - { - setFolderName(getFolderName().substring(0, getFolderName().length() - 1)); - } - } - - // Check to see if the target directory exists. - java.io.File dirExist = new java.io.File(getTargetFolder()); - if (dirExist.isDirectory() && !getForceAsBoolean()) - { - project.log("Target directory exists. Set \"force\" to \"true\" to continue anyway."); - return; - } - - try - { - // Connect to the StarTeam server, and log on. - Server s = getServer(); - - // Search the items on this server. - runServer(s); - - // Disconnect from the server. - s.disconnect(); - - // after you are all of the properties are ok, do your thing - // with StarTeam. If there are any kind of exceptions then - // send the message to the project log. - - // Tell how many files were checked out. - project.log(checkedOut + " files checked out."); - } - catch (Throwable e) - { - project.log(" " + e.getMessage()); - } - } - - /** - * Creates and logs in to a StarTeam server. - * - * @return A StarTeam server. - */ - protected Server getServer() - { - // Simplest constructor, uses default encryption algorithm and compression level. - Server s = new Server(getServerName(), getServerPortAsInt()); - - // Optional; logOn() connects if necessary. - s.connect(); - - // Logon using specified user name and password. - s.logOn(getUsername(), getPassword()); - - return s; - } - - /** - * Searches for the specified project on the server. - * - * @param s A StarTeam server. - */ - protected void runServer(Server s) - { - - com.starbase.starteam.Project[] projects = s.getProjects(); - for (int i = 0; i < projects.length; i++) - { - com.starbase.starteam.Project p = projects[i]; - - if (p.getName().equals(getProjectName())) - { - if (getVerboseAsBoolean()) - { - project.log("Found " + getProjectName() + delim); - } - runProject(s, p); - break; - } - } - } - - /** - * Searches for the given view in the project. - * - * @param s A StarTeam server. - * @param p A valid project on the given server. - */ - protected void runProject(Server s, com.starbase.starteam.Project p) - { - View[] views = p.getViews(); - for (int i = 0; i < views.length; i++) - { - View v = views[i]; - if (v.getName().equals(getViewName())) - { - if (getVerboseAsBoolean()) - { - project.log("Found " + getProjectName() + delim + getViewName() + delim); - } - runType(s, p, v, s.typeForName((String)s.getTypeNames().FILE)); - break; - } - } - } - - /** - * Searches for folders in the given view. - * - * @param s A StarTeam server. - * @param p A valid project on the server. - * @param v A view name from the specified project. - * @param t An item type which is currently always "file". - */ - protected void runType(Server s, com.starbase.starteam.Project p, View v, Type t) - { - - // This is ugly; checking for the root folder. - Folder f = v.getRootFolder(); - if (!(getFolderName()==null)) - { - if (getFolderName().equals("\\") || getFolderName().equals("/")) - { - setFolderName(null); - } - else - { - f = StarTeamFinder.findFolder(v.getRootFolder(), getFolderName()); - } - } - - if (getVerboseAsBoolean() && !(getFolderName()==null)) - { - project.log("Found " + getProjectName() + delim + getViewName() + delim + getFolderName() + delim + "\n"); - } - - // For performance reasons, it is important to pre-fetch all the - // properties we'll need for all the items we'll be searching. - - // We always display the ItemID (OBJECT_ID) and primary descriptor. - int nProperties = 2; - - // We'll need this item type's primary descriptor. - Property p1 = getPrimaryDescriptor(t); - - // Does this item type have a secondary descriptor? - // If so, we'll need it. - Property p2 = getSecondaryDescriptor(t); - if (p2 != null) - { - nProperties++; - } - - // Now, build an array of the property names. - String[] strNames = new String[nProperties]; - int iProperty = 0; - strNames[iProperty++] = s.getPropertyNames().OBJECT_ID; - strNames[iProperty++] = p1.getName(); - if (p2 != null) - { - strNames[iProperty++] = p2.getName(); - } - - // Pre-fetch the item properties and cache them. - f.populateNow(t.getName(), strNames, -1); - - // Now, search for items in the selected folder. - runFolder(s, p, v, t, f); - - // Free up the memory used by the cached items. - f.discardItems(t.getName(), -1); - } - - /** - * Searches for files in the given folder. This method is recursive and - * thus searches all subfolders. - * - * @param s A StarTeam server. - * @param p A valid project on the server. - * @param v A view name from the specified project. - * @param t An item type which is currently always "file". - * @param f The folder to search. - */ - protected void runFolder(Server s, com.starbase.starteam.Project p, View v, Type t, Folder f) - { - - // Process all items in this folder. - Item[] items = f.getItems(t.getName()); - for (int i = 0; i < items.length; i++) - { - runItem(s, p, v, t, f, items[i]); - } - - // Process all subfolders recursively if recursion is on. - if (getRecursionAsBoolean()) - { - Folder[] subfolders = f.getSubFolders(); - for (int i = 0; i < subfolders.length; i++) - { - runFolder(s, p, v, t, subfolders[i]); - } - } - } - - /** - * Check out one file if it matches the include filter but not the - * exclude filter. - * - * @param s A StarTeam server. - * @param p A valid project on the server. - * @param v A view name from the specified project. - * @param t An item type which is currently always "file". - * @param f The folder the file is localed in. - * @param item The file to check out. - */ - protected void runItem(Server s, com.starbase.starteam.Project p, View v, Type t, Folder f, Item item) - { - - // Get descriptors for this item type. - Property p1 = getPrimaryDescriptor(t); - Property p2 = getSecondaryDescriptor(t); - - // Time to filter... - String pName = (String)item.get(p1.getName()); - boolean includeIt = false; - boolean excludeIt = false; - - // See if it fits any includes. - if (getIncludes()!=null) - { - StringTokenizer inStr = new StringTokenizer(getIncludes(), " "); - while (inStr.hasMoreTokens()) - { - if (match(inStr.nextToken(), pName)) - { - includeIt = true; - } - } - } - - // See if it fits any excludes. - if (getExcludes()!=null) - { - StringTokenizer exStr = new StringTokenizer(getExcludes(), " "); - while (exStr.hasMoreTokens()) - { - if (match(exStr.nextToken(), pName)) - { - excludeIt = true; - } - } - } - - // Don't check it out if - // (a) It fits no include filters - // (b) It fits an exclude filter - if (!includeIt | excludeIt) - { - return; - } - - // VERBOSE MODE ONLY - if (getVerboseAsBoolean()) - { - // Show folder only if changed. - boolean bShowHeader = true; - if (f != prevFolder) - { - // We want to display the folder the same way you would - // enter it on the command line ... so we remove the - // View name (which is also the name of the root folder, - // and therefore shows up at the start of the path). - String strFolder = f.getFolderHierarchy(); - int i = strFolder.indexOf(delim); - if (i >= 0) - { - strFolder = strFolder.substring(i+1); - } - System.out.println(" Folder: \"" + strFolder + "\""); - prevFolder = f; - } - else - bShowHeader = false; - - // If we displayed the project, view, item type, or folder, - // then show the list of relevant item properties. - if (bShowHeader) - { - System.out.print(" Item"); - System.out.print(",\t" + p1.getDisplayName()); - if (p2 != null) - { - System.out.print(",\t" + p2.getDisplayName()); - } - System.out.println(""); - } - - // Finally, show the Item properties ... - - // Always show the ItemID. - System.out.print(" " + item.getItemID()); - - // Show the primary descriptor. - // There should always be one. - System.out.print(",\t" + formatForDisplay(p1, item.get(p1.getName()))); - - // Show the secondary descriptor, if there is one. - // Some item types have one, some don't. - if (p2 != null) - { - System.out.print(",\t" + formatForDisplay(p2, item.get(p2.getName()))); - } - - // Show if the file is locked. - int locker = item.getLocker(); - if (locker>-1) - { - System.out.println(",\tLocked by " + locker); - } - else - { - System.out.println(",\tNot locked"); - } - } - // END VERBOSE ONLY - - // Check it out; also ugly. - - // Change the item to be checked out to a StarTeam File. - com.starbase.starteam.File remote = (com.starbase.starteam.File)item; - - // Create a variable dirName that contains the name of the StarTeam folder that is the root folder in this view. - // Get the default path to the current view. - String dirName = v.getDefaultPath(); - // Settle on "/" as the default path separator for this purpose only. - dirName = dirName.replace('\\', '/'); - // Take the StarTeam folder name furthest down in the hierarchy. - int endDirIndex = dirName.length(); - // If it ends with separator then strip it off - if (dirName.endsWith("/")) + /** + * By default, force is set to "false" through this field. + * If you set force to "true," AntStarTeamCheckOut will + * overwrite files in the target directory. If the target directory does + * not exist, the force setting does nothing. Note that + * DEFAULT_FORCESETTING and force are strings, + * not boolean values. See the links below for more information. + * + * @see #getForce() + * @see #getForceAsBoolean() + * @see #setForce(String force) + */ + static public final String DEFAULT_FORCESETTING = "false"; + + /** + * This field is used in setting verbose to "false", the + * default. If verbose is true, AntStarTeamCheckOut will + * display file and directory names as it checks files out. The default + * setting displays only a total. Note that + * DEFAULT_VERBOSESETTING and verbose are + * strings, not boolean values. See the links below for more + * information. + * + * @see #getVerbose() + * @see #getVerboseAsBoolean() + * @see #setVerbose(String verbose) + */ + static public final String DEFAULT_VERBOSESETTING = "false"; + + /** + * DEFAULT_RECURSIONSETTING contains the normal setting -- + * true -- for recursion. Thus, if you do not + * setRecursion("false") somewhere in your program, + * AntStarTeamCheckOut will check files out from all subfolders as well + * as from the given folder. + * + * @see #getRecursion() + * @see #setRecursion(String recursion) + */ + static public final String DEFAULT_RECURSIONSETTING = "true"; + + /** + * This constant sets the filter to include all files. This default has + * the same result as setIncludes("*"). + * + * @see #getIncludes() + * @see #setIncludes(String includes) + */ + static public final String DEFAULT_INCLUDESETTING = "*"; + + /** + * This disables the exclude filter by default. In other words, no files + * are excluded. This setting is equivalent to + * setExcludes(null). + * + * @see #getExcludes() + * @see #setExcludes(String excludes) + */ + static public final String DEFAULT_EXCLUDESETTING = null; + + /** + * The default folder to search; the root folder. Since + * AntStarTeamCheckOut searches subfolders, by default it processes an + * entire view. + * + * @see #getFolderName() + * @see #setFolderName(String folderName) + */ + static public final String DEFAULT_FOLDERSETTING = null; + + /** + * This is used when formatting the output. The directory name is + * displayed only when it changes. + */ + private Folder prevFolder = null; + + /** + * This field keeps count of the number of files checked out. + */ + private int checkedOut; + + // Change these through their GET and SET methods. + + /** + * The name of the server you wish to connect to. + */ + private String serverName = null; + + /** + * The port on the server used for StarTeam. + */ + private String serverPort = null; + + /** + * The name of your project. + */ + private String projectName = null; + + /** + * The name of the folder you want to check out files from. All + * subfolders will be searched, as well. + */ + private String folderName = DEFAULT_FOLDERSETTING; + + /** + * The view that the files you want are in. + */ + private String viewName = null; + + /** + * Your username on the StarTeam server. + */ + private String username = null; + + /** + * Your StarTeam password. + */ + private String password = null; + + /** + * The path to the root folder you want to check out to. This is a local + * directory. + */ + private String targetFolder = null; + + /** + * If force set to true, AntStarTeamCheckOut will overwrite files in the + * target directory. + */ + private String force = DEFAULT_FORCESETTING; + + /** + * When verbose is true, the program will display all files and + * directories as they are checked out. + */ + private String verbose = DEFAULT_VERBOSESETTING; + + /** + * Set recursion to false to check out files in only the given folder + * and not in its subfolders. + */ + private String recursion = DEFAULT_RECURSIONSETTING; + + // These fields deal with includes and excludes + + /** + * All files that fit this pattern are checked out. + */ + private String includes = DEFAULT_INCLUDESETTING; + + /** + * All files fitting this pattern are ignored. + */ + private String excludes = DEFAULT_EXCLUDESETTING; + + /** + * The file delimitor on the user's system. + */ + private String delim = Platform.getFilePathDelim(); + + /** + * Do the execution. + * + * @exception BuildException + */ + public void execute() throws BuildException + { + // Check all of the properties that are required. + if ( getServerName() == null ) + { + project.log("ServerName must not be null."); + return; + } + if ( getServerPort() == null ) + { + project.log("ServerPort must not be null."); + return; + } + if ( getProjectName() == null ) + { + project.log("ProjectName must not be null."); + return; + } + if ( getViewName() == null ) + { + project.log("ViewName must not be null."); + return; + } + if ( getUsername() == null ) + { + project.log("Username must not be null."); + return; + } + if ( getPassword() == null ) + { + project.log("Password must not be null."); + return; + } + if ( getTargetFolder() == null ) + { + project.log("TargetFolder must not be null."); + return; + } + + // Because of the way I create the full target path, there + // must be NO slash at the end of targetFolder and folderName + // However, if the slash or backslash is the only character, leave it alone + if (null != getTargetFolder()) + { + if ((getTargetFolder().endsWith("/") || + getTargetFolder().endsWith("\\")) && getTargetFolder().length() > 1) + { + setTargetFolder(getTargetFolder().substring(0, getTargetFolder().length() - 1)); + } + } + + if ( null != getFolderName() ) + { + if ((getFolderName().endsWith("/") || + getFolderName().endsWith("\\")) && getFolderName().length() > 1) + { + setFolderName(getFolderName().substring(0, getFolderName().length() - 1)); + } + } + + // Check to see if the target directory exists. + java.io.File dirExist = new java.io.File(getTargetFolder()); + if (dirExist.isDirectory() && !getForceAsBoolean()) + { + project.log( "Target directory exists. Set \"force\" to \"true\" " + + "to continue anyway." ); + return; + } + + try + { + // Connect to the StarTeam server, and log on. + Server s = getServer(); + + // Search the items on this server. + runServer(s); + + // Disconnect from the server. + s.disconnect(); + + // after you are all of the properties are ok, do your thing + // with StarTeam. If there are any kind of exceptions then + // send the message to the project log. + + // Tell how many files were checked out. + project.log(checkedOut + " files checked out."); + } + catch (Throwable e) + { + project.log(" " + e.getMessage()); + } + } + + /** + * Creates and logs in to a StarTeam server. + * + * @return A StarTeam server. + */ + protected Server getServer() + { + // Simplest constructor, uses default encryption algorithm and compression level. + Server s = new Server(getServerName(), getServerPortAsInt()); + + // Optional; logOn() connects if necessary. + s.connect(); + + // Logon using specified user name and password. + s.logOn(getUsername(), getPassword()); + + return s; + } + + /** + * Searches for the specified project on the server. + * + * @param s A StarTeam server. + */ + protected void runServer(Server s) + { + com.starbase.starteam.Project[] projects = s.getProjects(); + for (int i = 0; i < projects.length; i++) + { + com.starbase.starteam.Project p = projects[i]; + + if (p.getName().equals(getProjectName())) + { + if (getVerboseAsBoolean()) { - // This should be the SunOS and Linux case - endDirIndex--; + project.log("Found " + getProjectName() + delim); } - dirName = dirName.substring(dirName.lastIndexOf("/", dirName.length() - 2) + 1, endDirIndex); + runProject(s, p); + break; + } + } + } + + /** + * Searches for the given view in the project. + * + * @param s A StarTeam server. + * @param p A valid project on the given server. + */ + protected void runProject(Server s, com.starbase.starteam.Project p) + { + View[] views = p.getViews(); + for (int i = 0; i < views.length; i++) + { + View v = views[i]; + if (v.getName().equals(getViewName())) + { + if (getVerboseAsBoolean()) + { + project.log("Found " + getProjectName() + delim + getViewName() + delim); + } + runType(s, p, v, s.typeForName((String)s.getTypeNames().FILE)); + break; + } + } + } + + /** + * Searches for folders in the given view. + * + * @param s A StarTeam server. + * @param p A valid project on the server. + * @param v A view name from the specified project. + * @param t An item type which is currently always "file". + */ + protected void runType(Server s, com.starbase.starteam.Project p, View v, Type t) + { + // This is ugly; checking for the root folder. + Folder f = v.getRootFolder(); + if (!(getFolderName()==null)) + { + if (getFolderName().equals("\\") || getFolderName().equals("/")) + { + setFolderName(null); + } + else + { + f = StarTeamFinder.findFolder(v.getRootFolder(), getFolderName()); + } + } + + if (getVerboseAsBoolean() && !(getFolderName()==null)) + { + project.log( "Found " + getProjectName() + delim + getViewName() + + delim + getFolderName() + delim + "\n" ); + } + + // For performance reasons, it is important to pre-fetch all the + // properties we'll need for all the items we'll be searching. + + // We always display the ItemID (OBJECT_ID) and primary descriptor. + int nProperties = 2; + + // We'll need this item type's primary descriptor. + Property p1 = getPrimaryDescriptor(t); + + // Does this item type have a secondary descriptor? + // If so, we'll need it. + Property p2 = getSecondaryDescriptor(t); + if (p2 != null) + { + nProperties++; + } + + // Now, build an array of the property names. + String[] strNames = new String[nProperties]; + int iProperty = 0; + strNames[iProperty++] = s.getPropertyNames().OBJECT_ID; + strNames[iProperty++] = p1.getName(); + if (p2 != null) + { + strNames[iProperty++] = p2.getName(); + } + + // Pre-fetch the item properties and cache them. + f.populateNow(t.getName(), strNames, -1); + + // Now, search for items in the selected folder. + runFolder(s, p, v, t, f); + + // Free up the memory used by the cached items. + f.discardItems(t.getName(), -1); + } + + /** + * Searches for files in the given folder. This method is recursive and + * thus searches all subfolders. + * + * @param s A StarTeam server. + * @param p A valid project on the server. + * @param v A view name from the specified project. + * @param t An item type which is currently always "file". + * @param f The folder to search. + */ + protected void runFolder( Server s, + com.starbase.starteam.Project p, + View v, + Type t, + Folder f ) + { + // Process all items in this folder. + Item[] items = f.getItems(t.getName()); + for (int i = 0; i < items.length; i++) + { + runItem(s, p, v, t, f, items[i]); + } + + // Process all subfolders recursively if recursion is on. + if (getRecursionAsBoolean()) + { + Folder[] subfolders = f.getSubFolders(); + for (int i = 0; i < subfolders.length; i++) + { + runFolder(s, p, v, t, subfolders[i]); + } + } + } + + /** + * Check out one file if it matches the include filter but not the + * exclude filter. + * + * @param s A StarTeam server. + * @param p A valid project on the server. + * @param v A view name from the specified project. + * @param t An item type which is currently always "file". + * @param f The folder the file is localed in. + * @param item The file to check out. + */ + protected void runItem( Server s, + com.starbase.starteam.Project p, + View v, + Type t, + Folder f, + Item item ) + { + // Get descriptors for this item type. + Property p1 = getPrimaryDescriptor(t); + Property p2 = getSecondaryDescriptor(t); + + // Time to filter... + String pName = (String)item.get(p1.getName()); + boolean includeIt = false; + boolean excludeIt = false; + + // See if it fits any includes. + if (getIncludes()!=null) + { + StringTokenizer inStr = new StringTokenizer(getIncludes(), " "); + while (inStr.hasMoreTokens()) + { + if (match(inStr.nextToken(), pName)) + { + includeIt = true; + } + } + } + + // See if it fits any excludes. + if (getExcludes()!=null) + { + StringTokenizer exStr = new StringTokenizer(getExcludes(), " "); + while (exStr.hasMoreTokens()) + { + if (match(exStr.nextToken(), pName)) + { + excludeIt = true; + } + } + } + + // Don't check it out if + // (a) It fits no include filters + // (b) It fits an exclude filter + if (!includeIt | excludeIt) + { + return; + } + + // VERBOSE MODE ONLY + if (getVerboseAsBoolean()) + { + // Show folder only if changed. + boolean bShowHeader = true; + if (f != prevFolder) + { + // We want to display the folder the same way you would + // enter it on the command line ... so we remove the + // View name (which is also the name of the root folder, + // and therefore shows up at the start of the path). + String strFolder = f.getFolderHierarchy(); + int i = strFolder.indexOf(delim); + if (i >= 0) + { + strFolder = strFolder.substring(i+1); + } + System.out.println(" Folder: \"" + strFolder + "\""); + prevFolder = f; + } + else + bShowHeader = false; + + // If we displayed the project, view, item type, or folder, + // then show the list of relevant item properties. + if (bShowHeader) + { + System.out.print(" Item"); + System.out.print(",\t" + p1.getDisplayName()); + if (p2 != null) + { + System.out.print(",\t" + p2.getDisplayName()); + } + System.out.println(""); + } + + // Finally, show the Item properties ... + + // Always show the ItemID. + System.out.print(" " + item.getItemID()); + + // Show the primary descriptor. + // There should always be one. + System.out.print(",\t" + formatForDisplay(p1, item.get(p1.getName()))); + + // Show the secondary descriptor, if there is one. + // Some item types have one, some don't. + if (p2 != null) + { + System.out.print(",\t" + formatForDisplay(p2, item.get(p2.getName()))); + } + + // Show if the file is locked. + int locker = item.getLocker(); + if (locker>-1) + { + System.out.println(",\tLocked by " + locker); + } + else + { + System.out.println(",\tNot locked"); + } + } + // END VERBOSE ONLY + + // Check it out; also ugly. + + // Change the item to be checked out to a StarTeam File. + com.starbase.starteam.File remote = (com.starbase.starteam.File)item; + + // Create a variable dirName that contains the name of + //the StarTeam folder that is the root folder in this view. + // Get the default path to the current view. + String dirName = v.getDefaultPath(); + // Settle on "/" as the default path separator for this purpose only. + dirName = dirName.replace('\\', '/'); + // Take the StarTeam folder name furthest down in the hierarchy. + int endDirIndex = dirName.length(); + // If it ends with separator then strip it off + if (dirName.endsWith("/")) + { + // This should be the SunOS and Linux case + endDirIndex--; + } + dirName = + dirName.substring(dirName.lastIndexOf("/", dirName.length() - 2) + 1, endDirIndex); - // Replace the projectName in the file's absolute path to the viewName. - // This eventually makes the target of a checkout operation equal to: - // targetFolder + dirName + [subfolders] + itemName - StringTokenizer pathTokenizer = new StringTokenizer(item.getParentFolder().getFolderHierarchy(), delim); - String localName = delim; - String currentToken = null; - while (pathTokenizer.hasMoreTokens()) - { - currentToken = pathTokenizer.nextToken(); - if (currentToken.equals(getProjectName())) - { - currentToken = dirName; - } - localName += currentToken + delim; - } - // Create a reference to the local target file using the format listed above. - java.io.File local = new java.io.File(getTargetFolder() + localName + item.get(p1.getName())); - try - { - remote.checkoutTo(local, Item.LockType.UNCHANGED, false, true, true); - } - catch (Throwable e) - { - project.log(" " + e.getMessage()); - } - checkedOut++; - } - - /** - * Get the primary descriptor of the given item type. - * Returns null if there isn't one. - * In practice, all item types have a primary descriptor. - * - * @param t An item type. At this point it will always be "file". - * @return The specified item's primary descriptor. - */ - protected Property getPrimaryDescriptor(Type t) - { - Property[] properties = t.getProperties(); - for (int i = 0; i < properties.length; i++) - { - Property p = properties[i]; - if (p.isPrimaryDescriptor()) - { - return p; - } - } - return null; - } - - /** - * Get the secondary descriptor of the given item type. - * Returns null if there isn't one. - * - * @param t An item type. At this point it will always be "file". - * @return The specified item's secondary descriptor. There may not be - * one for every file. - */ - protected Property getSecondaryDescriptor(Type t) - { - Property[] properties = t.getProperties(); - for (int i = 0; i < properties.length; i++) - { - Property p = properties[i]; - if (p.isDescriptor() && !p.isPrimaryDescriptor()) - { - return p; - } - } - return null; - } - - /** - * Formats a property value for display to the user. - * - * @param p An item property to format. - * @param value - * @return A string containing the property, which is truncated to 35 - * characters for display. - */ - protected String formatForDisplay(Property p, Object value) - { - if (p.getTypeCode() == Property.Types.TEXT) - { - String str = value.toString(); - if (str.length() > 35) - { - str = str.substring(0, 32) + "..."; - } - return "\"" + str + "\""; - } - else - { - if (p.getTypeCode() == Property.Types.ENUMERATED) - { - return "\"" + p.getEnumDisplayName(((Integer)value).intValue()) + "\""; - } - else - { - return value.toString(); - } - } - } - - // TORN STRAIGHT FROM ANT.DIRECTORYSCANNER - - /** - * TORN STRAIGHT FROM ANT.DIRECTORYSCANNER - * - * Matches a string against a pattern. The pattern contains two special - * characters:
- * '*' which means zero or more characters,
- * '?' which means one and only one character. - * - * @param pattern the (non-null) pattern to match against - * @param str the (non-null) string that must be matched against the - * pattern - * @return true when the string matches against the - * pattern, false otherwise. - */ - private static boolean match(String pattern, String str) - { - char[] patArr = pattern.toCharArray(); - char[] strArr = str.toCharArray(); - int patIdxStart = 0; - int patIdxEnd = patArr.length-1; - int strIdxStart = 0; - int strIdxEnd = strArr.length-1; - char ch; - - boolean containsStar = false; - for (int i = 0; i < patArr.length; i++) - { - if (patArr[i] == '*') - { - containsStar = true; - break; - } - } - - if (!containsStar) - { - // No '*'s, so we make a shortcut - if (patIdxEnd != strIdxEnd) - { - return false; // Pattern and string do not have the same size - } - for (int i = 0; i <= patIdxEnd; i++) - { - ch = patArr[i]; - if (ch != '?' && ch != strArr[i]) - { - return false; // Character mismatch - } - } - return true; // String matches against pattern - } - - if (patIdxEnd == 0) - { - return true; // Pattern contains only '*', which matches anything - } - - // Process characters before first star - while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) - { - if (ch != '?' && ch != strArr[strIdxStart]) - { - return false; - } - patIdxStart++; - strIdxStart++; - } - if (strIdxStart > strIdxEnd) - { - // All characters in the string are used. Check if only '*'s are - // left in the pattern. If so, we succeeded. Otherwise failure. - for (int i = patIdxStart; i <= patIdxEnd; i++) - { - if (patArr[i] != '*') - { - return false; - } - } - return true; - } - - // Process characters after last star - while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) - { - if (ch != '?' && ch != strArr[strIdxEnd]) - { - return false; - } - patIdxEnd--; - strIdxEnd--; - } - if (strIdxStart > strIdxEnd) - { - // All characters in the string are used. Check if only '*'s are - // left in the pattern. If so, we succeeded. Otherwise failure. - for (int i = patIdxStart; i <= patIdxEnd; i++) - { - if (patArr[i] != '*') - { - return false; - } - } - return true; - } - - // process pattern between stars. padIdxStart and patIdxEnd point - // always to a '*'. - while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) - { - int patIdxTmp = -1; - for (int i = patIdxStart+1; i <= patIdxEnd; i++) - { - if (patArr[i] == '*') - { - patIdxTmp = i; - break; - } - } - if (patIdxTmp == patIdxStart+1) - { - // Two stars next to each other, skip the first one. - patIdxStart++; - continue; - } - // Find the pattern between padIdxStart & padIdxTmp in str between - // strIdxStart & strIdxEnd - int patLength = (patIdxTmp-patIdxStart-1); - int strLength = (strIdxEnd-strIdxStart+1); - int foundIdx = -1; - strLoop: - for (int i = 0; i <= strLength - patLength; i++) - { - for (int j = 0; j < patLength; j++) - { - ch = patArr[patIdxStart+j+1]; - if (ch != '?' && ch != strArr[strIdxStart+i+j]) - { - continue strLoop; - } - } - - foundIdx = strIdxStart+i; - break; - } - - if (foundIdx == -1) - { - return false; - } - - patIdxStart = patIdxTmp; - strIdxStart = foundIdx+patLength; - } - - // All characters in the string are used. Check if only '*'s are left - // in the pattern. If so, we succeeded. Otherwise failure. - for (int i = patIdxStart; i <= patIdxEnd; i++) - { - if (patArr[i] != '*') - { - return false; - } - } - return true; - } - - // Begin SET and GET methods - - /** - * Sets the serverName attribute to the given value. - * - * @param serverName The name of the server you wish to connect to. - * @see #getServerName() - */ - public void setServerName(String serverName) - { - this.serverName = serverName; - } - - /** - * Gets the serverName attribute. - * - * @return The StarTeam server to log in to. - * @see #setServerName(String serverName) - */ - public String getServerName() - { - return serverName; - } - - /** - * Sets the serverPort attribute to the given value. The - * given value must be a valid integer, but it must be a string object. - * - * @param serverPort A string containing the port on the StarTeam server - * to use. - * @see #getServerPort() - */ - public void setServerPort(String serverPort) - { - this.serverPort = serverPort; - } - - /** - * Gets the serverPort attribute. - * - * @return A string containing the port on the StarTeam server to use. - * @see #getServerPortAsInt() - * @see #setServerPort(String serverPort) - */ - public String getServerPort() - { - return serverPort; - } - - /** - * Gets the serverPort attribute as an integer. - * - * @return An integer value for the port on the StarTeam server to use. - * @see #getServerPort() - * @see #setServerPort(String serverPort) - */ - public int getServerPortAsInt() - { - return Integer.parseInt(serverPort); - } - - /** - * Sets the projectName attribute to the given value. - * - * @param projectName - * The StarTeam project to search. - * @see #getProjectName() - */ - public void setProjectName(String projectName) - { - this.projectName = projectName; - } - - /** - * Gets the projectName attribute. - * - * @return The StarTeam project to search. - * @see #setProjectName(String projectName) - */ - public String getProjectName() - { - return projectName; - } - - /** - * Sets the viewName attribute to the given value. - * - * @param viewName The view to find the specified folder in. - * @see #getViewName() - */ - public void setViewName(String viewName) - { - this.viewName = viewName; - } - - /** - * Gets the viewName attribute. - * - * @return The view to find the specified folder in. - * @see #setViewName(String viewName) - */ - public String getViewName() - { - return viewName; - } - - /** - * Sets the folderName attribute to the given value. To - * search the root folder, use a slash or backslash, or simply don't set - * a folder at all. - * - * @param folderName The subfolder from which to check out files. - * @see #getFolderName() - */ - public void setFolderName(String folderName) - { - this.folderName = folderName; - } - - /** - * Gets the folderName attribute. - * - * @return The subfolder from which to check out files. All subfolders - * will be searched, as well. - * @see #setFolderName(String folderName) - */ - public String getFolderName() - { - return folderName; - } - - /** - * Sets the username attribute to the given value. - * - * @param username Your username for the specified StarTeam server. - * @see #getUsername() - */ - public void setUsername(String username) - { - this.username = username; - } - - /** - * Gets the username attribute. - * - * @return The username given by the user. - * @see #setUsername(String username) - */ - public String getUsername() - { - return username; - } - - /** - * Sets the password attribute to the given value. - * - * @param password Your password for the specified StarTeam server. - * @see #getPassword() - */ - public void setPassword(String password) - { - this.password = password; - } - - /** - * Gets the password attribute. - * - * @return The password given by the user. - * @see #setPassword(String password) - */ - public String getPassword() - { - return password; - } - - /** - * Sets the targetFolder attribute to the given value. - * - * @param target The target path on the local machine to check out to. - * @see #getTargetFolder() - */ - public void setTargetFolder(String targetFolder) - { - this.targetFolder = targetFolder; - } - - /** - * Gets the targetFolder attribute. - * - * @return The target path on the local machine to check out to. - * - * @see #setTargetFolder(String targetFolder) - */ - public String getTargetFolder() - { - return targetFolder; - } - - /** - * Sets the force attribute to the given value. - * - * @param force A string containing "true" or "false" that tells the - * application whether to continue if the target directory - * exists. If force is true, - * AntStarTeamCheckOut will overwrite files in the target - * directory. By default it set to false as a safeguard. - * Note that if the target directory does not exist, this - * setting has no effect. - * @see #DEFAULT_FORCESETTING - * @see #getForce() - * @see #getForceAsBoolean() - */ - public void setForce(String force) - { - this.force = force; - } - - /** - * Gets the force attribute. - * - * @return A string containing "true" or "false" telling the application - * whether to continue if the target directory exists. If - * force is true, AntStarTeamCheckOut will - * overwrite files in the target directory. If it is false and - * the target directory exists, AntStarTeamCheckOut will exit - * with a warning. If the target directory does not exist, this - * setting has no effect. The default setting is false. - * @see #DEFAULT_FORCESETTING - * @see #getForceAsBoolean() - * @see #setForce(String force) - */ - public String getForce() - { - return force; - } - - /** - * Gets the force attribute as a boolean value. - * - * @return A boolean value telling whether to continue if the target - * directory exists. - * @see #DEFAULT_FORCESETTING - * @see #getForce() - * @see #setForce(String force) - */ - public boolean getForceAsBoolean() - { - return project.toBoolean(force); - } - - /** - * Turns recursion on or off. - * - * @param verbose A string containing "true" or "false." If it is true, - * the default, subfolders are searched recursively for - * files to check out. Otherwise, only files specified - * by folderName are scanned. - * @see #DEFAULT_RECURSIONSETTING - * @see #getRecursion() - * @see #getRecursionAsBoolean() - */ - public void setRecursion(String recursion) - { - this.recursion = recursion; - } - - /** - * Gets the recursion attribute, which tells - * AntStarTeamCheckOut whether to search subfolders when checking out - * files. - * - * @return A string telling whether recursion is "true" or - * "false." - * - * @see #DEFAULT_RECURSIONSETTING - * @see #getRecursionAsBoolean() - * @see #setRecursion(String recursion) - */ - public String getRecursion() - { - return recursion; - } - - /** - * Gets the recursion attribute as a boolean value. - * - * @return A boolean value telling whether subfolders of - * folderName will be scanned for files to check out. - * - * @see #DEFAULT_RECURSIONSETTING - * @see #getRecursion() - * @see #setRecursion(String recursion) - */ - public boolean getRecursionAsBoolean() - { - return project.toBoolean(recursion); - } - - /** - * Sets the verbose attribute to the given value. - * - * @param verbose A string containing "true" or "false" to tell - * AntStarTeamCheckOut whether to display files as they - * are checked out. By default it is false, so the - * program only displays the total number of files unless - * you override this default. - * @see #DEFAULT_FORCESETTING - * @see #getForce() - * @see #getForceAsBoolean() - */ - public void setVerbose(String verbose) - { - this.verbose = verbose; - } - - /** - * Gets the verbose attribute. - * - * @return A string containing "true" or "false" telling the application - * to display all files as it checks them out. By default it is - * false, so the program only displays the total number of - * files. - * @see #DEFAULT_VERBOSESETTING - * @see #getVerboseAsBoolean() - * @see #setVerbose(String verbose) - */ - public String getVerbose() - { - return verbose; - } - - /** - * Gets the verbose attribute as a boolean value. - * - * @return A boolean value telling whether to display all files as they - * are checked out. - * @see #DEFAULT_VERBOSESETTING - * @see #getVerbose() - * @see #setVerbose(String verbose) - */ - public boolean getVerboseAsBoolean() - { - return project.toBoolean(verbose); - } - - // Begin filter getters and setters - - /** - * Sets the include filter. When filtering files, AntStarTeamCheckOut - * uses an unmodified version of DirectoryScanner's - * match method, so here are the patterns straight from the - * Ant source code: - *

- * Matches a string against a pattern. The pattern contains two special - * characters: - *
'*' which means zero or more characters, - *
'?' which means one and only one character. - *

- * I would have used the Ant method directly from its class, but - * match is a private member, so I cannot access it from - * this program. - *

- * Separate multiple inlcude filters by spaces, not commas as Ant - * uses. For example, if you want to check out all .java and .class\ - * files, you would put the following line in your program: - * setIncludes("*.java *.class"); - * Finally, note that filters have no effect on the directories - * that are scanned; you could not check out files from directories with - * names beginning only with "build," for instance. Of course, you - * could limit AntStarTeamCheckOut to a particular folder and its - * subfolders with the setFolderName(String folderName) - * command. - *

- * Treatment of overlapping inlcudes and excludes: To give a simplistic - * example suppose that you set your include filter to "*.htm *.html" - * and your exclude filter to "index.*". What happens to index.html? - * AntStarTeamCheckOut will not check out index.html, as it matches an - * exclude filter ("index.*"), even though it matches the include - * filter, as well. - *

- * Please also read the following sections before using filters: - * - * @param includes A string of filter patterns to include. Separate the - * patterns by spaces. - * @see #getIncludes() - * @see #setExcludes(String excludes) - * @see #getExcludes() - */ - public void setIncludes(String includes) - { - this.includes = includes; - } - - /** - * Gets the patterns from the include filter. Rather that duplicate the - * details of AntStarTeanCheckOut's filtering here, refer to these - * links: - * - * @return A string of filter patterns separated by spaces. - * @see #setIncludes(String includes) - * @see #setExcludes(String excludes) - * @see #getExcludes() - */ - public String getIncludes() - { - return includes; - } - - /** - * Sets the exclude filter. When filtering files, AntStarTeamCheckOut - * uses an unmodified version of DirectoryScanner's - * match method, so here are the patterns straight from the - * Ant source code: - *

- * Matches a string against a pattern. The pattern contains two special - * characters: - *
'*' which means zero or more characters, - *
'?' which means one and only one character. - *

- * I would have used the Ant method directly from its class, but - * match is a private member, so I cannot access it from - * this program. - *

- * Separate multiple exlcude filters by spaces, not commas as Ant - * uses. For example, if you want to check out all files except .XML and - * .HTML files, you would put the following line in your program: - * setExcludes("*.XML *.HTML"); - * Finally, note that filters have no effect on the directories - * that are scanned; you could not skip over all files in directories - * whose names begin with "project," for instance. - *

- * Treatment of overlapping inlcudes and excludes: To give a simplistic - * example suppose that you set your include filter to "*.htm *.html" - * and your exclude filter to "index.*". What happens to index.html? - * AntStarTeamCheckOut will not check out index.html, as it matches an - * exclude filter ("index.*"), even though it matches the include - * filter, as well. - *

- * Please also read the following sections before using filters: - * - * @param excludes A string of filter patterns to exclude. Separate the - * patterns by spaces. - * @see #setIncludes(String includes) - * @see #getIncludes() - * @see #getExcludes() - */ - public void setExcludes(String excludes) - { - this.excludes = excludes; - } - - /** - * Gets the patterns from the exclude filter. Rather that duplicate the - * details of AntStarTeanCheckOut's filtering here, refer to these - * links: - * - * @return A string of filter patterns separated by spaces. - * @see #setExcludes(String excludes) - * @see #setIncludes(String includes) - * @see #getIncludes() - */ - public String getExcludes() - { - return excludes; - } + // Replace the projectName in the file's absolute path to the viewName. + // This eventually makes the target of a checkout operation equal to: + // targetFolder + dirName + [subfolders] + itemName + StringTokenizer pathTokenizer = + new StringTokenizer(item.getParentFolder().getFolderHierarchy(), delim); + String localName = delim; + String currentToken = null; + while (pathTokenizer.hasMoreTokens()) + { + currentToken = pathTokenizer.nextToken(); + if (currentToken.equals(getProjectName())) + { + currentToken = dirName; + } + localName += currentToken + delim; + } + // Create a reference to the local target file using the format listed above. + java.io.File local = new java.io.File( getTargetFolder() + localName + + item.get(p1.getName()) ); + try + { + remote.checkoutTo(local, Item.LockType.UNCHANGED, false, true, true); + } + catch (Throwable e) + { + project.log(" " + e.getMessage()); + } + checkedOut++; + } + + /** + * Get the primary descriptor of the given item type. + * Returns null if there isn't one. + * In practice, all item types have a primary descriptor. + * + * @param t An item type. At this point it will always be "file". + * @return The specified item's primary descriptor. + */ + protected Property getPrimaryDescriptor(Type t) + { + Property[] properties = t.getProperties(); + for (int i = 0; i < properties.length; i++) + { + Property p = properties[i]; + if (p.isPrimaryDescriptor()) + { + return p; + } + } + return null; + } + + /** + * Get the secondary descriptor of the given item type. + * Returns null if there isn't one. + * + * @param t An item type. At this point it will always be "file". + * @return The specified item's secondary descriptor. There may not be + * one for every file. + */ + protected Property getSecondaryDescriptor(Type t) + { + Property[] properties = t.getProperties(); + for (int i = 0; i < properties.length; i++) + { + Property p = properties[i]; + if (p.isDescriptor() && !p.isPrimaryDescriptor()) + { + return p; + } + } + return null; + } + + /** + * Formats a property value for display to the user. + * + * @param p An item property to format. + * @param value + * @return A string containing the property, which is truncated to 35 + * characters for display. + */ + protected String formatForDisplay(Property p, Object value) + { + if (p.getTypeCode() == Property.Types.TEXT) + { + String str = value.toString(); + if (str.length() > 35) + { + str = str.substring(0, 32) + "..."; + } + return "\"" + str + "\""; + } + else + { + if (p.getTypeCode() == Property.Types.ENUMERATED) + { + return "\"" + p.getEnumDisplayName(((Integer)value).intValue()) + "\""; + } + else + { + return value.toString(); + } + } + } + + // TORN STRAIGHT FROM ANT.DIRECTORYSCANNER + + /** + * TORN STRAIGHT FROM ANT.DIRECTORYSCANNER + * + * Matches a string against a pattern. The pattern contains two special + * characters:
+ * '*' which means zero or more characters,
+ * '?' which means one and only one character. + * + * @param pattern the (non-null) pattern to match against + * @param str the (non-null) string that must be matched against the + * pattern + * @return true when the string matches against the + * pattern, false otherwise. + */ + private static boolean match(String pattern, String str) + { + char[] patArr = pattern.toCharArray(); + char[] strArr = str.toCharArray(); + int patIdxStart = 0; + int patIdxEnd = patArr.length-1; + int strIdxStart = 0; + int strIdxEnd = strArr.length-1; + char ch; + + boolean containsStar = false; + for (int i = 0; i < patArr.length; i++) + { + if (patArr[i] == '*') + { + containsStar = true; + break; + } + } + + if (!containsStar) + { + // No '*'s, so we make a shortcut + if (patIdxEnd != strIdxEnd) + { + return false; // Pattern and string do not have the same size + } + for (int i = 0; i <= patIdxEnd; i++) + { + ch = patArr[i]; + if (ch != '?' && ch != strArr[i]) + { + return false; // Character mismatch + } + } + return true; // String matches against pattern + } + + if (patIdxEnd == 0) + { + return true; // Pattern contains only '*', which matches anything + } + + // Process characters before first star + while ((ch = patArr[patIdxStart]) != '*' && strIdxStart <= strIdxEnd) + { + if (ch != '?' && ch != strArr[strIdxStart]) + { + return false; + } + patIdxStart++; + strIdxStart++; + } + if (strIdxStart > strIdxEnd) + { + // All characters in the string are used. Check if only '*'s are + // left in the pattern. If so, we succeeded. Otherwise failure. + for (int i = patIdxStart; i <= patIdxEnd; i++) + { + if (patArr[i] != '*') + { + return false; + } + } + return true; + } + + // Process characters after last star + while ((ch = patArr[patIdxEnd]) != '*' && strIdxStart <= strIdxEnd) + { + if (ch != '?' && ch != strArr[strIdxEnd]) + { + return false; + } + patIdxEnd--; + strIdxEnd--; + } + if (strIdxStart > strIdxEnd) + { + // All characters in the string are used. Check if only '*'s are + // left in the pattern. If so, we succeeded. Otherwise failure. + for (int i = patIdxStart; i <= patIdxEnd; i++) + { + if (patArr[i] != '*') + { + return false; + } + } + return true; + } + + // process pattern between stars. padIdxStart and patIdxEnd point + // always to a '*'. + while (patIdxStart != patIdxEnd && strIdxStart <= strIdxEnd) + { + int patIdxTmp = -1; + for (int i = patIdxStart+1; i <= patIdxEnd; i++) + { + if (patArr[i] == '*') + { + patIdxTmp = i; + break; + } + } + if (patIdxTmp == patIdxStart+1) + { + // Two stars next to each other, skip the first one. + patIdxStart++; + continue; + } + // Find the pattern between padIdxStart & padIdxTmp in str between + // strIdxStart & strIdxEnd + int patLength = (patIdxTmp-patIdxStart-1); + int strLength = (strIdxEnd-strIdxStart+1); + int foundIdx = -1; + strLoop: + for (int i = 0; i <= strLength - patLength; i++) + { + for (int j = 0; j < patLength; j++) + { + ch = patArr[patIdxStart+j+1]; + if (ch != '?' && ch != strArr[strIdxStart+i+j]) + { + continue strLoop; + } + } + foundIdx = strIdxStart+i; + break; + } + + if (foundIdx == -1) + { + return false; + } + + patIdxStart = patIdxTmp; + strIdxStart = foundIdx+patLength; + } + + // All characters in the string are used. Check if only '*'s are left + // in the pattern. If so, we succeeded. Otherwise failure. + for (int i = patIdxStart; i <= patIdxEnd; i++) + { + if (patArr[i] != '*') + { + return false; + } + } + return true; + } + + // Begin SET and GET methods + + /** + * Sets the serverName attribute to the given value. + * + * @param serverName The name of the server you wish to connect to. + * @see #getServerName() + */ + public void setServerName(String serverName) + { + this.serverName = serverName; + } + + /** + * Gets the serverName attribute. + * + * @return The StarTeam server to log in to. + * @see #setServerName(String serverName) + */ + public String getServerName() + { + return serverName; + } + + /** + * Sets the serverPort attribute to the given value. The + * given value must be a valid integer, but it must be a string object. + * + * @param serverPort A string containing the port on the StarTeam server + * to use. + * @see #getServerPort() + */ + public void setServerPort(String serverPort) + { + this.serverPort = serverPort; + } + + /** + * Gets the serverPort attribute. + * + * @return A string containing the port on the StarTeam server to use. + * @see #getServerPortAsInt() + * @see #setServerPort(String serverPort) + */ + public String getServerPort() + { + return serverPort; + } + + /** + * Gets the serverPort attribute as an integer. + * + * @return An integer value for the port on the StarTeam server to use. + * @see #getServerPort() + * @see #setServerPort(String serverPort) + */ + public int getServerPortAsInt() + { + return Integer.parseInt(serverPort); + } + + /** + * Sets the projectName attribute to the given value. + * + * @param projectName + * The StarTeam project to search. + * @see #getProjectName() + */ + public void setProjectName(String projectName) + { + this.projectName = projectName; + } + + /** + * Gets the projectName attribute. + * + * @return The StarTeam project to search. + * @see #setProjectName(String projectName) + */ + public String getProjectName() + { + return projectName; + } + + /** + * Sets the viewName attribute to the given value. + * + * @param viewName The view to find the specified folder in. + * @see #getViewName() + */ + public void setViewName(String viewName) + { + this.viewName = viewName; + } + + /** + * Gets the viewName attribute. + * + * @return The view to find the specified folder in. + * @see #setViewName(String viewName) + */ + public String getViewName() + { + return viewName; + } + + /** + * Sets the folderName attribute to the given value. To + * search the root folder, use a slash or backslash, or simply don't set + * a folder at all. + * + * @param folderName The subfolder from which to check out files. + * @see #getFolderName() + */ + public void setFolderName(String folderName) + { + this.folderName = folderName; + } + + /** + * Gets the folderName attribute. + * + * @return The subfolder from which to check out files. All subfolders + * will be searched, as well. + * @see #setFolderName(String folderName) + */ + public String getFolderName() + { + return folderName; + } + + /** + * Sets the username attribute to the given value. + * + * @param username Your username for the specified StarTeam server. + * @see #getUsername() + */ + public void setUsername(String username) + { + this.username = username; + } + + /** + * Gets the username attribute. + * + * @return The username given by the user. + * @see #setUsername(String username) + */ + public String getUsername() + { + return username; + } + + /** + * Sets the password attribute to the given value. + * + * @param password Your password for the specified StarTeam server. + * @see #getPassword() + */ + public void setPassword(String password) + { + this.password = password; + } + + /** + * Gets the password attribute. + * + * @return The password given by the user. + * @see #setPassword(String password) + */ + public String getPassword() + { + return password; + } + + /** + * Sets the targetFolder attribute to the given value. + * + * @param target The target path on the local machine to check out to. + * @see #getTargetFolder() + */ + public void setTargetFolder(String targetFolder) + { + this.targetFolder = targetFolder; + } + + /** + * Gets the targetFolder attribute. + * + * @return The target path on the local machine to check out to. + * + * @see #setTargetFolder(String targetFolder) + */ + public String getTargetFolder() + { + return targetFolder; + } + + /** + * Sets the force attribute to the given value. + * + * @param force A string containing "true" or "false" that tells the + * application whether to continue if the target directory + * exists. If force is true, + * AntStarTeamCheckOut will overwrite files in the target + * directory. By default it set to false as a safeguard. + * Note that if the target directory does not exist, this + * setting has no effect. + * @see #DEFAULT_FORCESETTING + * @see #getForce() + * @see #getForceAsBoolean() + */ + public void setForce(String force) + { + this.force = force; + } + + /** + * Gets the force attribute. + * + * @return A string containing "true" or "false" telling the application + * whether to continue if the target directory exists. If + * force is true, AntStarTeamCheckOut will + * overwrite files in the target directory. If it is false and + * the target directory exists, AntStarTeamCheckOut will exit + * with a warning. If the target directory does not exist, this + * setting has no effect. The default setting is false. + * @see #DEFAULT_FORCESETTING + * @see #getForceAsBoolean() + * @see #setForce(String force) + */ + public String getForce() + { + return force; + } + + /** + * Gets the force attribute as a boolean value. + * + * @return A boolean value telling whether to continue if the target + * directory exists. + * @see #DEFAULT_FORCESETTING + * @see #getForce() + * @see #setForce(String force) + */ + public boolean getForceAsBoolean() + { + return project.toBoolean(force); + } + + /** + * Turns recursion on or off. + * + * @param verbose A string containing "true" or "false." If it is true, + * the default, subfolders are searched recursively for + * files to check out. Otherwise, only files specified + * by folderName are scanned. + * @see #DEFAULT_RECURSIONSETTING + * @see #getRecursion() + * @see #getRecursionAsBoolean() + */ + public void setRecursion(String recursion) + { + this.recursion = recursion; + } + + /** + * Gets the recursion attribute, which tells + * AntStarTeamCheckOut whether to search subfolders when checking out + * files. + * + * @return A string telling whether recursion is "true" or + * "false." + * + * @see #DEFAULT_RECURSIONSETTING + * @see #getRecursionAsBoolean() + * @see #setRecursion(String recursion) + */ + public String getRecursion() + { + return recursion; + } + + /** + * Gets the recursion attribute as a boolean value. + * + * @return A boolean value telling whether subfolders of + * folderName will be scanned for files to check out. + * + * @see #DEFAULT_RECURSIONSETTING + * @see #getRecursion() + * @see #setRecursion(String recursion) + */ + public boolean getRecursionAsBoolean() + { + return project.toBoolean(recursion); + } + + /** + * Sets the verbose attribute to the given value. + * + * @param verbose A string containing "true" or "false" to tell + * AntStarTeamCheckOut whether to display files as they + * are checked out. By default it is false, so the + * program only displays the total number of files unless + * you override this default. + * @see #DEFAULT_FORCESETTING + * @see #getForce() + * @see #getForceAsBoolean() + */ + public void setVerbose(String verbose) + { + this.verbose = verbose; + } + + /** + * Gets the verbose attribute. + * + * @return A string containing "true" or "false" telling the application + * to display all files as it checks them out. By default it is + * false, so the program only displays the total number of + * files. + * @see #DEFAULT_VERBOSESETTING + * @see #getVerboseAsBoolean() + * @see #setVerbose(String verbose) + */ + public String getVerbose() + { + return verbose; + } + + /** + * Gets the verbose attribute as a boolean value. + * + * @return A boolean value telling whether to display all files as they + * are checked out. + * @see #DEFAULT_VERBOSESETTING + * @see #getVerbose() + * @see #setVerbose(String verbose) + */ + public boolean getVerboseAsBoolean() + { + return project.toBoolean(verbose); + } + + // Begin filter getters and setters + + /** + * Sets the include filter. When filtering files, AntStarTeamCheckOut + * uses an unmodified version of DirectoryScanner's + * match method, so here are the patterns straight from the + * Ant source code: + *

+ * Matches a string against a pattern. The pattern contains two special + * characters: + *
'*' which means zero or more characters, + *
'?' which means one and only one character. + *

+ * I would have used the Ant method directly from its class, but + * match is a private member, so I cannot access it from + * this program. + *

+ * Separate multiple inlcude filters by spaces, not commas as Ant + * uses. For example, if you want to check out all .java and .class\ + * files, you would put the following line in your program: + * setIncludes("*.java *.class"); + * Finally, note that filters have no effect on the directories + * that are scanned; you could not check out files from directories with + * names beginning only with "build," for instance. Of course, you + * could limit AntStarTeamCheckOut to a particular folder and its + * subfolders with the setFolderName(String folderName) + * command. + *

+ * Treatment of overlapping inlcudes and excludes: To give a simplistic + * example suppose that you set your include filter to "*.htm *.html" + * and your exclude filter to "index.*". What happens to index.html? + * AntStarTeamCheckOut will not check out index.html, as it matches an + * exclude filter ("index.*"), even though it matches the include + * filter, as well. + *

+ * Please also read the following sections before using filters: + * + * @param includes A string of filter patterns to include. Separate the + * patterns by spaces. + * @see #getIncludes() + * @see #setExcludes(String excludes) + * @see #getExcludes() + */ + public void setIncludes(String includes) + { + this.includes = includes; + } + + /** + * Gets the patterns from the include filter. Rather that duplicate the + * details of AntStarTeanCheckOut's filtering here, refer to these + * links: + * + * @return A string of filter patterns separated by spaces. + * @see #setIncludes(String includes) + * @see #setExcludes(String excludes) + * @see #getExcludes() + */ + public String getIncludes() + { + return includes; + } + + /** + * Sets the exclude filter. When filtering files, AntStarTeamCheckOut + * uses an unmodified version of DirectoryScanner's + * match method, so here are the patterns straight from the + * Ant source code: + *

+ * Matches a string against a pattern. The pattern contains two special + * characters: + *
'*' which means zero or more characters, + *
'?' which means one and only one character. + *

+ * I would have used the Ant method directly from its class, but + * match is a private member, so I cannot access it from + * this program. + *

+ * Separate multiple exlcude filters by spaces, not commas as Ant + * uses. For example, if you want to check out all files except .XML and + * .HTML files, you would put the following line in your program: + * setExcludes("*.XML *.HTML"); + * Finally, note that filters have no effect on the directories + * that are scanned; you could not skip over all files in directories + * whose names begin with "project," for instance. + *

+ * Treatment of overlapping inlcudes and excludes: To give a simplistic + * example suppose that you set your include filter to "*.htm *.html" + * and your exclude filter to "index.*". What happens to index.html? + * AntStarTeamCheckOut will not check out index.html, as it matches an + * exclude filter ("index.*"), even though it matches the include + * filter, as well. + *

+ * Please also read the following sections before using filters: + * + * @param excludes A string of filter patterns to exclude. Separate the + * patterns by spaces. + * @see #setIncludes(String includes) + * @see #getIncludes() + * @see #getExcludes() + */ + public void setExcludes(String excludes) + { + this.excludes = excludes; + } + + /** + * Gets the patterns from the exclude filter. Rather that duplicate the + * details of AntStarTeanCheckOut's filtering here, refer to these + * links: + * + * @return A string of filter patterns separated by spaces. + * @see #setExcludes(String excludes) + * @see #setIncludes(String includes) + * @see #getIncludes() + */ + public String getExcludes() + { + return excludes; + } }