From 813c2482279195999531f86dce204164523a071b Mon Sep 17 00:00:00 2001 From: "Steven M. Cohen" Date: Fri, 13 May 2005 10:26:20 +0000 Subject: [PATCH] Add FTPConfigurator class so as to avoid forcing users to upgrade to version 1.4.0 of commons-net. As long as users use the ftp task as they have previously, they do not need 1.4.0. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278257 13f79535-47bb-0310-9956-ffa450edef68 --- docs/manual/install.html | 4 +- .../tools/ant/taskdefs/optional/net/FTP.java | 85 ++++++++++-------- .../optional/net/FTPConfigurator.java | 88 +++++++++++++++++++ 3 files changed, 139 insertions(+), 38 deletions(-) create mode 100644 src/main/org/apache/tools/ant/taskdefs/optional/net/FTPConfigurator.java diff --git a/docs/manual/install.html b/docs/manual/install.html index 0542e790a..f4940bce4 100644 --- a/docs/manual/install.html +++ b/docs/manual/install.html @@ -425,7 +425,9 @@ 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.4.0 is now required. + For all users, a minimum version of commons-net of 1.4.0 is recommended. Earlier + versions did not support the full range of configuration options, and 1.4.0 is needed + to compile Ant.
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 152db21d8..a64ac7ce8 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,7 +17,6 @@ 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; @@ -1322,12 +1321,48 @@ public class FTP } + /** + * @return Returns the systemKeyConfig. + */ + String getSystemKeyConfig() { + return systemKeyConfig; + } + /** + * @return Returns the defaultDateFormatConfig. + */ + String getDefaultDateFormatConfig() { + return defaultDateFormatConfig; + } + /** + * @return Returns the recentDateFormatConfig. + */ + String getRecentDateFormatConfig() { + return recentDateFormatConfig; + } + /** + * @return Returns the serverLanguageCodeConfig. + */ + String getServerLanguageCodeConfig() { + return serverLanguageCodeConfig; + } + /** + * @return Returns the serverTimeZoneConfig. + */ + String getServerTimeZoneConfig() { + return serverTimeZoneConfig; + } + /** + * @return Returns the shortMonthNamesConfig. + */ + String getShortMonthNamesConfig() { + return shortMonthNamesConfig; + } /** * Checks to see that all required parameters are set. * * @throws BuildException if the configuration is not valid. */ - protected void checkConfiguration() throws BuildException { + protected void checkAttributes() throws BuildException { if (server == null) { throw new BuildException("server attribute must be set!"); } @@ -1352,6 +1387,15 @@ public class FTP throw new BuildException("chmod attribute must be set for chmod " + "action!"); } + + if (this.isConfigurationSet) { + try { + Class.forName("org.apache.commons.net.ftp.FTPClientConfig"); + } catch (ClassNotFoundException e) { + throw new BuildException( + "commons-net.jar >= 1.4.0 is required for at least one of the attributes specified."); + } + } } @@ -2025,40 +2069,7 @@ 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); + FTPConfigurator.configure(ftp, this); } } @@ -2069,7 +2080,7 @@ public class FTP * correctly. */ public void execute() throws BuildException { - checkConfiguration(); + checkAttributes(); FTPClient ftp = null; diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPConfigurator.java b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPConfigurator.java new file mode 100644 index 000000000..0aa49557f --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/net/FTPConfigurator.java @@ -0,0 +1,88 @@ +/* + * Copyright 2005 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +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.tools.ant.Project; + +/** + * The sole purpose of this class is (note that it is package-private + * is to serve as a separate, static compilation unit for importing + * FTPClientConfig, to enable users who wish to use the FTP task + * without using its new features to avoid the need to + * upgrade to jakarta-commons-net 1.4.0, where FTPClientConfig was + * introduced. + */ +class FTPConfigurator { + /** + * configures the supplied FTPClient with the various + * attributes set in the supplied FTP task. + * @param client the FTPClient to be configured + * @param task the FTP task whose attributes are used to + * configure the client + * @return the client as configured. + */ + static FTPClient configure(FTPClient client, FTP task) { + FTPClientConfig config; + String systemKeyConfig = task.getSystemKeyConfig(); + if (systemKeyConfig != null) { + config = new FTPClientConfig(systemKeyConfig); + task.log("custom config: system key = " + + systemKeyConfig, Project.MSG_VERBOSE); + } else { + config = new FTPClientConfig(); + } + + String defaultDateFormatConfig = task.getDefaultDateFormatConfig(); + if (defaultDateFormatConfig != null) { + config.setDefaultDateFormatStr(defaultDateFormatConfig); + task.log("custom config: default date format = " + + defaultDateFormatConfig, Project.MSG_VERBOSE); + } + + String recentDateFormatConfig = task.getRecentDateFormatConfig(); + if (recentDateFormatConfig != null) { + config.setRecentDateFormatStr(recentDateFormatConfig); + task.log("custom config: recent date format = " + + recentDateFormatConfig, Project.MSG_VERBOSE); + } + + String serverLanguageCodeConfig = task.getServerLanguageCodeConfig(); + if (serverLanguageCodeConfig != null) { + config.setServerLanguageCode(serverLanguageCodeConfig); + task.log("custom config: server language code = " + + serverLanguageCodeConfig, Project.MSG_VERBOSE); + } + + String serverTimeZoneConfig = task.getServerTimeZoneConfig(); + if (serverTimeZoneConfig != null) { + config.setServerTimeZoneId(serverTimeZoneConfig); + task.log("custom config: server time zone ID = " + + serverTimeZoneConfig, Project.MSG_VERBOSE); + } + + String shortMonthNamesConfig = task.getShortMonthNamesConfig(); + if (shortMonthNamesConfig != null) { + config.setShortMonthNames(shortMonthNamesConfig); + task.log("custom config: short month names = " + + shortMonthNamesConfig, Project.MSG_VERBOSE); + } + client.configure(config); + return client; + + } +}