diff --git a/docs/manual/install.html b/docs/manual/install.html index ebf4812dd..0542e790a 100644 --- a/docs/manual/install.html +++ b/docs/manual/install.html @@ -425,8 +425,7 @@ you need jakarta-oro 2.0.1 or later, and commons-net< commons-net.jar ftp, rexec and telnet tasks
jakarta-oro 2.0.1 or later is required in any case together with commons-net.
- For all users, a minimum version of commons-net of 1.2.2 is recommended. Earlier - versions did not support autodetection of system type or had significant bugs. + For all users, a minimum version of commons-net of 1.4.0 is now required.
http://jakarta.apache.org/commons/net/index.html diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java index 310615eee..152db21d8 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java @@ -17,6 +17,7 @@ package org.apache.tools.ant.taskdefs.optional.net; import org.apache.commons.net.ftp.FTPClient; +import org.apache.commons.net.ftp.FTPClientConfig; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import java.io.BufferedInputStream; @@ -109,6 +110,13 @@ public class FTP private boolean preserveLastModified = false; private String chmod = null; private String umask = null; + private String systemKeyConfig = null; + private String defaultDateFormatConfig = null; + private String recentDateFormatConfig = null; + private String serverLanguageCodeConfig = null; + private String serverTimeZoneConfig = null; + private String shortMonthNamesConfig = null; + private boolean isConfigurationSet = false; protected static final String[] ACTION_STRS = { "sending", @@ -1243,6 +1251,76 @@ public class FTP this.ignoreNoncriticalErrors = ignoreNoncriticalErrors; } + private void configurationHasBeenSet() { + this.isConfigurationSet = true; + } + + /** + * Method for setting FTPClientConfig remote system key. + * + * @param systemKeyConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setSystemKeyConfig(String systemKey) { + this.systemKeyConfig = systemKey; + configurationHasBeenSet(); + } + + /** + * Delegate method for FTPClientConfig.setDefaultDateFormatStr(String). + * + * @param defaultDateFormatConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setDefaultDateFormatConfig(String defaultDateFormat) { + this.defaultDateFormatConfig = defaultDateFormat; + configurationHasBeenSet(); + } + + /** + * Delegate method for FTPClientConfig.setRecentDateFormatStr(String). + * + * @param recentDateFormatConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setRecentDateFormatConfig(String recentDateFormat) { + this.recentDateFormatConfig = recentDateFormat; + configurationHasBeenSet(); + } + + /** + * Delegate method for FTPClientConfig.setServerLanguageCode(String). + * + * @param serverLanguageCodeConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setServerLanguageCodeConfig(String serverLanguageCode) { + this.serverLanguageCodeConfig = serverLanguageCode; + configurationHasBeenSet(); + } + + /** + * Delegate method for FTPClientConfig.setServerTimeZoneId(String). + * + * @param serverTimeZoneConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setServerTimeZoneConfig(String serverTimeZoneId) { + this.serverTimeZoneConfig = serverTimeZoneId; + configurationHasBeenSet(); + } + + /** + * Delegate method for FTPClientConfig.setShortMonthNames(String). + * + * @param shortMonthNamesConfig + * @see org.apache.commons.net.ftp.FTPClientConfig + */ + public void setShortMonthNamesConfig(String shortMonthNames) { + this.shortMonthNamesConfig = shortMonthNames; + configurationHasBeenSet(); + } + /** * Checks to see that all required parameters are set. @@ -1945,6 +2023,45 @@ public class FTP } } + private void configure(FTPClient ftp) { + if (this.isConfigurationSet) { + FTPClientConfig config; + if (this.systemKeyConfig != null) { + config = new FTPClientConfig(this.systemKeyConfig); + log("custom config: system key = " + + this.systemKeyConfig, Project.MSG_VERBOSE); + } else { + config = new FTPClientConfig(); + } + if (this.defaultDateFormatConfig != null) { + config.setDefaultDateFormatStr(this.defaultDateFormatConfig); + log("custom config: default date format = " + + this.defaultDateFormatConfig, Project.MSG_VERBOSE); + } + if (this.recentDateFormatConfig != null) { + config.setRecentDateFormatStr(this.recentDateFormatConfig); + log("custom config: recent date format = " + + this.recentDateFormatConfig, Project.MSG_VERBOSE); + } + if (this.serverLanguageCodeConfig != null) { + config.setServerLanguageCode(this.serverLanguageCodeConfig); + log("custom config: server language code = " + + this.serverLanguageCodeConfig, Project.MSG_VERBOSE); + } + if (this.serverTimeZoneConfig != null) { + config.setServerTimeZoneId(this.serverTimeZoneConfig); + log("custom config: server time zone ID = " + + this.serverTimeZoneConfig, Project.MSG_VERBOSE); + } + if (this.shortMonthNamesConfig != null) { + config.setShortMonthNames(this.shortMonthNamesConfig); + log("custom config: short month names = " + + this.shortMonthNamesConfig, Project.MSG_VERBOSE); + } + ftp.configure(config); + } + } + /** * Runs the task. * @@ -1960,6 +2077,7 @@ public class FTP log("Opening FTP connection to " + server, Project.MSG_VERBOSE); ftp = new FTPClient(); + configure(ftp); ftp.connect(server, port); if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {