Xavier Hanin wrote:
Now for the FileUtil and CopyProgressListener part, the documentation
doesn't say anything, but I think that the intent is to send an event only if the transfer is successfully completed. Maybe adding an event in case of
an error would improve the API, and then to avoid modifying the
CopyProgressListener interface we could simply call end and add an exception in the CopyProgressEvent. But if we want to call the end method only if the
copy is actually successful, putting the call after closing the streams
would cause it to be sent if an exception occured in the try block. So we
No don't put the end() in the finally. what I meant was :

try {
 copy(...)
} finally {
  close()
}
end()

That is, end() is only called if it is successful. which looks like to me the original intent. end() cannot really be before the close() as the close() does an underlying flush()/close(). So considering it is silly to throw an exception in the finally when you may already have an exception, maybe do
try {
 copy(...)
 close()
} finally {
  closequietly()
}


should remind to test if we have actually reached the end of the try block before calling the end method. Or test if no exception was raised, which is better if we want to call the end method in all cases, with an exception in
case of a transfer which caused an exception, and without in case of a
successful transfer.

What do you think?

have to read that piece of code again. busy for the day now. :)

-- stephane

Reply via email to