@@ -425,7 +425,9 @@ you need jakarta-oro 2.0.1 or later, and <a href="#commons-net">commons-net</a>< | |||||
<td><a name="commons-net">commons-net.jar</td> | <td><a name="commons-net">commons-net.jar</td> | ||||
<td>ftp, rexec and telnet tasks<br> | <td>ftp, rexec and telnet tasks<br> | ||||
jakarta-oro 2.0.1 or later is required in any case together with commons-net.<br> | jakarta-oro 2.0.1 or later is required in any case together with commons-net.<br> | ||||
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. | |||||
</td> | </td> | ||||
<td><a href="http://jakarta.apache.org/commons/net/index.html" | <td><a href="http://jakarta.apache.org/commons/net/index.html" | ||||
target="_top">http://jakarta.apache.org/commons/net/index.html</a></td> | target="_top">http://jakarta.apache.org/commons/net/index.html</a></td> | ||||
@@ -17,7 +17,6 @@ | |||||
package org.apache.tools.ant.taskdefs.optional.net; | package org.apache.tools.ant.taskdefs.optional.net; | ||||
import org.apache.commons.net.ftp.FTPClient; | 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.FTPFile; | ||||
import org.apache.commons.net.ftp.FTPReply; | import org.apache.commons.net.ftp.FTPReply; | ||||
import java.io.BufferedInputStream; | 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. | * Checks to see that all required parameters are set. | ||||
* | * | ||||
* @throws BuildException if the configuration is not valid. | * @throws BuildException if the configuration is not valid. | ||||
*/ | */ | ||||
protected void checkConfiguration() throws BuildException { | |||||
protected void checkAttributes() throws BuildException { | |||||
if (server == null) { | if (server == null) { | ||||
throw new BuildException("server attribute must be set!"); | 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 " | throw new BuildException("chmod attribute must be set for chmod " | ||||
+ "action!"); | + "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) { | private void configure(FTPClient ftp) { | ||||
if (this.isConfigurationSet) { | 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. | * correctly. | ||||
*/ | */ | ||||
public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
checkConfiguration(); | |||||
checkAttributes(); | |||||
FTPClient ftp = null; | FTPClient ftp = null; | ||||
@@ -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; | |||||
} | |||||
} |