Julien Béti created NET-717:
-------------------------------
Summary: FTPClient: Encapsulate completePendingCommand in returned
outputstream
Key: NET-717
URL: https://issues.apache.org/jira/browse/NET-717
Project: Commons Net
Issue Type: Improvement
Components: FTP
Reporter: Julien Béti
Most store / retrieve methods in {{FTPClient}} class requires a call to
{{completePendingCommand}} method in order to make sure that the operation
completed successfully, and allow additional operations to go on.
This is clearly documented, but often lead to clumsy code as 99% of the time we
just need to know if the file operation executed successfully or not (and in
some case, the {{completePendingCommand}} is simply forgotten leading to, as
documented, unexpected behavior of subsequent commands.
The idea would be to return a {{FilterOutputStream}} / {{FilterInputStream}}
that would encapsulates the returned {{OutputStream}}/{{InputStream}} returned
by methods that need a subsequent call to {{completePendingCommand}}. These
filter implementations would call the {{completePendingCommand}} method on
{{close}}, throwing an {{IOException}} if it returns false.
{code:java}
package org.apache.commons.net.ftp;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class FTPOutputStream extends FilterOutputStream {
private final FTPClient ftpClient;
public FTPOutputStream(OutputStream out, FTPClient ftpClient) {
super(out);
this.ftpClient = ftpClient;
}
@Override
public void close() throws IOException {
super.close();
if(!ftpClient.completePendingCommand()) {
throw new IOException("FTP Client was unable to complete pending
command");
}
}
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)