public abstract class AbstractRetrieveFileTransfer extends java.lang.Object implements IIncomingFileTransfer, IRetrieveFileTransfer, IFileTransferPausable
Modifier and Type | Field and Description |
---|---|
protected int |
buff_length |
protected long |
bytesReceived |
protected static int |
CLOSE_TIMEOUT |
protected boolean |
closeOutputStream |
protected IConnectContext |
connectContext |
static int |
DEFAULT_BUF_LENGTH |
protected boolean |
done |
protected double |
downloadRateBytesPerSecond |
protected java.lang.Exception |
exception |
protected long |
fileLength |
protected org.eclipse.core.runtime.jobs.Job |
job |
protected java.lang.Object |
jobLock |
protected long |
lastModifiedTime |
protected IFileTransferListener |
listener |
protected java.io.OutputStream |
localFileContents |
protected java.util.Map |
options |
protected boolean |
paused |
protected static int |
POLLING_RETRY_ATTEMPTS |
protected Proxy |
proxy |
protected IFileRangeSpecification |
rangeSpecification |
protected static int |
READ_TIMEOUT |
protected java.io.InputStream |
remoteFileContents |
protected IFileID |
remoteFileID |
protected java.net.URL |
remoteFileURL |
protected java.util.Map |
responseHeaders |
protected static int |
TIMEOUT_INPUTSTREAM_BUFFER_SIZE |
protected long |
transferStartTime |
Constructor and Description |
---|
AbstractRetrieveFileTransfer() |
Modifier and Type | Method and Description |
---|---|
void |
cancel()
Cancel this file transfer.
|
protected java.lang.String |
createJobName() |
protected java.lang.String |
createRangeName() |
protected abstract boolean |
doPause()
Subclass overridable version of
pause() . |
protected abstract boolean |
doResume()
Subclass overridable version of
resume() . |
protected void |
fireReceiveResumedEvent() |
protected void |
fireReceiveStartEvent() |
protected void |
fireTransferReceiveDataEvent() |
protected void |
fireTransferReceiveDoneEvent() |
protected void |
fireTransferReceivePausedEvent() |
java.lang.Object |
getAdapter(java.lang.Class adapter) |
long |
getBytesReceived()
Get number of bytes received so far.
|
java.lang.Exception |
getException()
Get any exception associated with this file transfer.
|
long |
getFileLength()
Return resulting file length (in bytes) for this file transfer instance.
|
IFileRangeSpecification |
getFileRangeSpecification()
Get file range specification for this incoming file transfer instance.
|
protected org.eclipse.core.runtime.IStatus |
getFinalStatus(java.lang.Throwable exception1) |
ID |
getID()
Return the ID for this 'identifiable' object.
|
IFileTransferListener |
getListener()
Get listener assigned to this incoming file transfer.
|
protected java.util.Map |
getOptions() |
double |
getPercentComplete()
Get the percent complete for this file transfer.
|
java.lang.String |
getRemoteFileName()
Obtains the name of the remote file if possible.
|
protected java.net.URL |
getRemoteFileURL() |
java.util.Date |
getRemoteLastModified()
Obtains the timestamp that reflects the time when the remote file was last
modified if possible.
|
Namespace |
getRetrieveNamespace()
Get namespace to be used for creation of remoteFileID for retrieve
request.
|
protected int |
getSocketCloseTimeout() |
protected int |
getSocketReadTimeout() |
protected void |
handleReceivedData(byte[] buf,
int bytes,
double factor,
org.eclipse.core.runtime.IProgressMonitor monitor) |
protected void |
hardClose() |
protected boolean |
isCanceled() |
boolean |
isDone()
Return true if this file transfer is done, false if not yet completed.
|
boolean |
isPaused() |
protected UserCancelledException |
newUserCancelledException() |
protected abstract void |
openStreams()
Open incoming and outgoing streams associated with this file transfer.
|
boolean |
pause()
Pause file transfer.
|
protected void |
resetDoneAndException() |
boolean |
resume()
Resume file transfer after having been paused.
|
protected org.eclipse.core.net.proxy.IProxyData |
selectProxyFromProxies(java.lang.String protocol,
org.eclipse.core.net.proxy.IProxyData[] proxies)
Select a single proxy from a set of proxies available for the given host.
|
void |
sendRetrieveRequest(IFileID rFileID,
IFileRangeSpecification rangeSpec,
IFileTransferListener transferListener,
java.util.Map ops)
Send request for transfer of a remote file to local file storage.
|
void |
sendRetrieveRequest(IFileID remoteFileID1,
IFileTransferListener transferListener,
java.util.Map options1)
Send request for transfer of a remote file to local file storage.
|
protected void |
setCloseOutputStream(boolean close) |
void |
setConnectContextForAuthentication(IConnectContext connectContext)
Set connect context for authentication upon subsequent
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map) . |
protected void |
setDone(boolean done) |
protected void |
setDoneCanceled() |
protected void |
setDoneCanceled(java.lang.Exception e) |
protected void |
setDoneException(java.lang.Exception e) |
protected void |
setFileLength(long length) |
protected void |
setInputStream(java.io.InputStream ins) |
protected void |
setLastModifiedTime(long timestamp) |
protected void |
setOutputStream(java.io.OutputStream outs) |
void |
setProxy(Proxy proxy)
Set proxy for use upon subsequent
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map) . |
protected void |
setupAndScheduleJob(FileTransferJob fileTransferJob) |
protected void |
setupProxies() |
protected abstract void |
setupProxy(Proxy proxy)
Setup ECF proxy.
|
protected boolean |
targetHasGzSuffix(java.lang.String target) |
static java.lang.String |
toHumanReadableBytes(double size) |
protected java.io.InputStream |
wrapTransferReadInputStream(java.io.InputStream inputStream,
org.eclipse.core.runtime.IProgressMonitor monitor) |
public static final int DEFAULT_BUF_LENGTH
protected static final int POLLING_RETRY_ATTEMPTS
protected static final int TIMEOUT_INPUTSTREAM_BUFFER_SIZE
protected static final int READ_TIMEOUT
protected static final int CLOSE_TIMEOUT
protected java.lang.Object jobLock
protected org.eclipse.core.runtime.jobs.Job job
protected java.net.URL remoteFileURL
protected IFileID remoteFileID
protected IFileTransferListener listener
protected int buff_length
protected boolean done
protected volatile long bytesReceived
protected java.io.InputStream remoteFileContents
protected java.io.OutputStream localFileContents
protected boolean closeOutputStream
protected java.lang.Exception exception
protected long fileLength
protected long lastModifiedTime
protected java.util.Map options
protected boolean paused
protected IFileRangeSpecification rangeSpecification
protected Proxy proxy
protected IConnectContext connectContext
protected long transferStartTime
protected double downloadRateBytesPerSecond
protected java.util.Map responseHeaders
protected java.io.InputStream wrapTransferReadInputStream(java.io.InputStream inputStream, org.eclipse.core.runtime.IProgressMonitor monitor)
protected java.net.URL getRemoteFileURL()
protected int getSocketReadTimeout()
protected int getSocketCloseTimeout()
protected void setInputStream(java.io.InputStream ins)
protected void setOutputStream(java.io.OutputStream outs)
protected void setCloseOutputStream(boolean close)
protected void setFileLength(long length)
protected void setLastModifiedTime(long timestamp)
protected java.util.Map getOptions()
protected void handleReceivedData(byte[] buf, int bytes, double factor, org.eclipse.core.runtime.IProgressMonitor monitor) throws java.io.IOException
java.io.IOException
public static java.lang.String toHumanReadableBytes(double size)
public ID getID()
IIdentifiable
null
.getID
in interface IIdentifiable
null
.protected org.eclipse.core.runtime.IStatus getFinalStatus(java.lang.Throwable exception1)
protected void hardClose()
protected void fireTransferReceivePausedEvent()
protected void fireTransferReceiveDoneEvent()
protected void fireTransferReceiveDataEvent()
public void setConnectContextForAuthentication(IConnectContext connectContext)
IRetrieveFileTransferContainerAdapter
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
. This
method should be called with a non-null connectContext in order to allow
authentication to occur during call to
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
.setConnectContextForAuthentication
in interface IRetrieveFileTransferContainerAdapter
connectContext
- the connect context to use for authenticating during
subsequent call to
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
.
If null
, then no authentication will be
attempted.public void setProxy(Proxy proxy)
IRetrieveFileTransferContainerAdapter
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
. This
method should be called with proxy to allow the given proxy to
be used in subsequent calls to
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
.
When proxy is null
or has not been called providers must use
the org.eclipse.core.net
proxy API to obtain proxy information
and proxy credentials if they support proxies of the type(s) supported by
that API. The API is provided by an OSGi service of type
org.eclipse.core.net.proxy.IProxyService
.
If no information is available via IProxyService
providers may use other defaults.
setProxy
in interface IRetrieveFileTransferContainerAdapter
proxy
- the proxy to use for subsequent calls to
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
.
If null
, then proxy information is obtained from
IProxyService
if available. Otherwise provider
defined defaults may be used.public long getBytesReceived()
IIncomingFileTransfer
getBytesReceived
in interface IIncomingFileTransfer
protected UserCancelledException newUserCancelledException()
protected void resetDoneAndException()
protected void setDone(boolean done)
protected void setDoneException(java.lang.Exception e)
protected boolean isCanceled()
protected void setDoneCanceled()
protected void setDoneCanceled(java.lang.Exception e)
public void cancel()
IFileTransfer
IFileTransferEvent
being delivered to the
IFileTransferListener
indicating that transfer is done (IFileTransfer.isDone()
returns true), and some exception will be made availablecancel
in interface IFileTransfer
public java.lang.Exception getException()
IFileTransfer
IFileTransfer.isDone()
method returns true.
If the file transfer completed successfully, IFileTransfer.isDone()
will
return true, and this method will return null. If the file transfer
completed unsuccessfully (some exception occurred), then
IFileTransfer.isDone()
will return true, and this method will return a
non-null Exception instance that occurred.
If the the file transfer was canceled by the user, then the exception
returned will be an instance of UserCancelledException
.
getException
in interface IFileTransfer
null
if transfer completed successfully, non-null if transfer
completed with some exception. Only valid after
IFileTransfer.isDone()
returns true.public double getPercentComplete()
IFileTransfer
IFileTransfer.isDone()
method should be consulted to determine if the file
transfer has completed (with or without error).getPercentComplete
in interface IFileTransfer
public long getFileLength()
IFileTransfer
IFileRangeSpecification
is provided that the returned
file length is the expected file length of just the range retrieved (and not the entire file).getFileLength
in interface IFileTransfer
public java.util.Date getRemoteLastModified()
IIncomingFileTransfer
getRemoteLastModified
in interface IIncomingFileTransfer
null
if that
information was not available.public boolean isDone()
IFileTransfer
IFileTransfer.getException()
method.isDone
in interface IFileTransfer
public java.lang.Object getAdapter(java.lang.Class adapter)
getAdapter
in interface org.eclipse.core.runtime.IAdaptable
protected abstract void openStreams() throws IncomingFileTransferException
remoteFileContents
and localFileContent
must be non-null
after successful completion of the
implementation of this method.IncomingFileTransferException
- if some problempublic void sendRetrieveRequest(IFileID remoteFileID1, IFileTransferListener transferListener, java.util.Map options1) throws IncomingFileTransferException
IRetrieveFileTransferContainerAdapter
NOTE: if this method completes successfully, the given transferListener
will be asynchronously notified via an IIncomingFileTransferReceiveDoneEvent
(along with other possible events). All implementations are required to
issue this event whether successful or failed. Listeners
can consult IIncomingFileTransferReceiveDoneEvent.getException()
to
determine whether the transfer operation completed successfully.
sendRetrieveRequest
in interface IRetrieveFileTransferContainerAdapter
remoteFileID1
- reference to the remote target file (e.g.
http://www.eclipse.org/index.html) or a reference to a
resource that specifies the location of a target file.
Implementing providers will determine what protocol schemes
are supported (e.g. ftp, http, torrent, file, etc) and the
required format of the scheme-specific information. If a
protocol is specified that is not supported, or the
scheme-specific information is not well-formed, then an
IncomingFileTransferException will be thrown. Typically,
callers will create IFileID instances via calls such as:
IFileID remoteFileID = FileIDFactory.getDefault().createID( ftc.getRetrieveNamespace(), "http://www.composent.com/index.html");Must not be
null
.transferListener
- a listener for file transfer events. Must not be null. Must not be null. See Note above.options1
- a Map of options associated with sendRetrieveRequest. The
particular name/value pairs will be unique to the individual
providers. May be null
.IncomingFileTransferException
- if the provider is not connected or is not in the correct
state for initiating file transferpublic Namespace getRetrieveNamespace()
IRetrieveFileTransferContainerAdapter
IDFactory.createID(Namespace, String)
to be used as first in
IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
getRetrieveNamespace
in interface IRetrieveFileTransferContainerAdapter
IDFactory.createID(Namespace, String)
. Will not be
null
.public boolean isPaused()
isPaused
in interface IFileTransferPausable
protected abstract boolean doPause()
pause()
. Subclasses must provide
an implementation of this method to support IFileTransferPausable
.false
otherwise.public boolean pause()
IFileTransferPausable
pause
in interface IFileTransferPausable
protected abstract boolean doResume()
resume()
. Subclasses must
provide an implementation of this method to support
IFileTransferPausable
.false
otherwise.public boolean resume()
IFileTransferPausable
resume
in interface IFileTransferPausable
public IFileTransferListener getListener()
IIncomingFileTransfer
null
if no listener
has been provided.getListener
in interface IIncomingFileTransfer
protected java.lang.String createRangeName()
protected java.lang.String createJobName()
protected void setupAndScheduleJob(FileTransferJob fileTransferJob)
protected void fireReceiveStartEvent()
protected void fireReceiveResumedEvent()
public IFileRangeSpecification getFileRangeSpecification()
IIncomingFileTransfer
null
if the retrieval is of the entire file.getFileRangeSpecification
in interface IIncomingFileTransfer
null
if the retrieval is of the entire file.public void sendRetrieveRequest(IFileID rFileID, IFileRangeSpecification rangeSpec, IFileTransferListener transferListener, java.util.Map ops) throws IncomingFileTransferException
IRetrieveFileTransferContainerAdapter
NOTE: if this method completes successfully, the given transferListener
will be asynchronously notified via an IIncomingFileTransferReceiveDoneEvent
(along with other possible events). All implementations are required to
issue this event whether successful or failed. Listeners
can consult IIncomingFileTransferReceiveDoneEvent.getException()
to
determine whether the transfer operation completed successfully.
sendRetrieveRequest
in interface IRetrieveFileTransferContainerAdapter
rFileID
- reference to the remote target file (e.g.
http://www.eclipse.org/index.html) or a reference to a
resource that specifies the location of a target file.
Implementing providers will determine what protocol schemes
are supported (e.g. ftp, http, torrent, file, etc) and the
required format of the scheme-specific information. If a
protocol is specified that is not supported, or the
scheme-specific information is not well-formed, then an
IncomingFileTransferException will be thrown. Typically,
callers will create IFileID instances via calls such as:
IFileID remoteFileID = FileIDFactory.getDefault().createID( ftc.getRetrieveNamespace(), "http://www.composent.com/index.html");Must not be
null
.rangeSpec
- a range specification for retrieving a portion of the given
remote file. If null
the entire file will be retrieved (as per IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)
.
If non-null
the given file range will be used to retrieve the given file. For example, if the
rangeSpecification has a start value of 1 and end value of 3, and the total length of the file is
5 bytes with content [a, b, c, d, e], a successful retrieve request would transfer bytes 'b', 'c', and 'd', but not 'a', and 'e'.transferListener
- a listener for file transfer events. Must not be null. See Note above.ops
- a Map of options associated with sendRetrieveRequest. The
particular name/value pairs will be unique to the individual
providers. May be null
.IncomingFileTransferException
- if some problem sending retrieve requestprotected abstract void setupProxy(Proxy proxy)
sendRetrieveRequest(IFileID, IFileTransferListener, Map)
and
sendRetrieveRequest(IFileID, IFileRangeSpecification, IFileTransferListener, Map)
, prior to the actual call to openStreams()
.proxy
- the proxy to be setup. Will not be null
.protected org.eclipse.core.net.proxy.IProxyData selectProxyFromProxies(java.lang.String protocol, org.eclipse.core.net.proxy.IProxyData[] proxies)
protocol
- the target protocol (e.g. http, https, scp, etc). Will not be
null
.proxies
- the proxies to select from. May be null
or array
of length 0.protected void setupProxies()
public java.lang.String getRemoteFileName()
IIncomingFileTransfer
getRemoteFileName
in interface IIncomingFileTransfer
null
if no such name can be determined.protected boolean targetHasGzSuffix(java.lang.String target)