org.eclipse.ecf.provider.filetransfer.retrieve
Class MultiProtocolRetrieveAdapter

java.lang.Object
  extended by org.eclipse.ecf.provider.filetransfer.retrieve.MultiProtocolRetrieveAdapter
All Implemented Interfaces:
org.eclipse.core.runtime.IAdaptable, IRetrieveFileTransferContainerAdapter, IRetrieveFileTransfer

public class MultiProtocolRetrieveAdapter
extends java.lang.Object
implements IRetrieveFileTransfer

Multi protocol handler for retrieve file transfer. Multiplexes between Apache httpclient 3.0.1-based file retriever and the URLConnection-based file retriever.


Constructor Summary
MultiProtocolRetrieveAdapter()
           
 
Method Summary
 java.lang.Object getAdapter(java.lang.Class adapter)
           
 Namespace getRetrieveNamespace()
          Get namespace to be used for creation of remoteFileID for retrieve request.
 void sendRetrieveRequest(IFileID remoteFileID, IFileRangeSpecification rangeSpecification, IFileTransferListener transferListener, java.util.Map options)
          Send request for transfer of a remote file to local file storage.
 void sendRetrieveRequest(IFileID remoteFileID, IFileTransferListener transferListener, java.util.Map options)
          Send request for transfer of a remote file to local file storage.
 void setConnectContextForAuthentication(IConnectContext connectContext)
          Set connect context for authentication upon subsequent IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map).
 void setProxy(Proxy proxy)
          Set proxy for use upon subsequent IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

MultiProtocolRetrieveAdapter

public MultiProtocolRetrieveAdapter()
Method Detail

getRetrieveNamespace

public Namespace getRetrieveNamespace()
Description copied from interface: IRetrieveFileTransferContainerAdapter
Get namespace to be used for creation of remoteFileID for retrieve request. Result typically used as first parameter for IDFactory.createID(Namespace, String) to be used as first in IRetrieveFileTransferContainerAdapter.sendRetrieveRequest(IFileID, IFileTransferListener, Map)

Specified by:
getRetrieveNamespace in interface IRetrieveFileTransferContainerAdapter
Returns:
Namespace to use for ID creation via IDFactory.createID(Namespace, String). Will not be null.

setConnectContextForAuthentication

public void setConnectContextForAuthentication(IConnectContext connectContext)
Description copied from interface: IRetrieveFileTransferContainerAdapter
Set connect context for authentication upon subsequent 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).

Specified by:
setConnectContextForAuthentication in interface IRetrieveFileTransferContainerAdapter
Parameters:
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.

setProxy

public void setProxy(Proxy proxy)
Description copied from interface: IRetrieveFileTransferContainerAdapter
Set proxy for use upon subsequent 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.

Specified by:
setProxy in interface IRetrieveFileTransferContainerAdapter
Parameters:
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.

sendRetrieveRequest

public void sendRetrieveRequest(IFileID remoteFileID,
                                IFileTransferListener transferListener,
                                java.util.Map options)
                         throws IncomingFileTransferException
Description copied from interface: IRetrieveFileTransferContainerAdapter
Send request for transfer of a remote file to local file storage. This method is used to initiate a file retrieve for a remoteFileID (first parameter). File transfer events are asynchronously delivered a file transfer listener (second parameter). The given remoteFileID and transferListener must not be null.

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.

Specified by:
sendRetrieveRequest in interface IRetrieveFileTransferContainerAdapter
Parameters:
remoteFileID - 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.
options - a Map of options associated with sendRetrieveRequest. The particular name/value pairs will be unique to the individual providers. May be null.
Throws:
IncomingFileTransferException - if the provider is not connected or is not in the correct state for initiating file transfer

sendRetrieveRequest

public void sendRetrieveRequest(IFileID remoteFileID,
                                IFileRangeSpecification rangeSpecification,
                                IFileTransferListener transferListener,
                                java.util.Map options)
                         throws IncomingFileTransferException
Description copied from interface: IRetrieveFileTransferContainerAdapter
Send request for transfer of a remote file to local file storage. This method is used to initiate a file retrieve for a remoteFileID (first parameter). File transfer events are asynchronously delivered a file transfer listener (third parameter). The given remoteFileID and transferListener must not be null.

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.

Specified by:
sendRetrieveRequest in interface IRetrieveFileTransferContainerAdapter
Parameters:
remoteFileID - 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.
rangeSpecification - 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.
options - a Map of options associated with sendRetrieveRequest. The particular name/value pairs will be unique to the individual providers. May be null.
Throws:
IncomingFileTransferException - if the provider is not connected or is not in the correct state for initiating file transfer

getAdapter

public java.lang.Object getAdapter(java.lang.Class adapter)
Specified by:
getAdapter in interface org.eclipse.core.runtime.IAdaptable