<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (14.0.1) on Tue Jun 15 20:48:08 PDT 2021 -->
<title>IRetrieveFileTransferContainerAdapter (Eclipse Communication Framework (ECF) 3.14.22 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="dc.created" content="2021-06-15">
<meta name="description" content="declaration: package: org.eclipse.ecf.filetransfer, interface: IRetrieveFileTransferContainerAdapter">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<script type="text/javascript" src="../../../../script-dir/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../script-dir/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../script-dir/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../script-dir/jquery-3.4.1.js"></script>
<script type="text/javascript" src="../../../../script-dir/jquery-ui.js"></script>
</head>
<body class="class-declaration">
<script type="text/javascript">var data = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flexBox">
<header role="banner" class="flexHeader">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a id="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/IRetrieveFileTransferContainerAdapter.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<div class="navListSearch"><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<div class="skipNav"><a id="skip.navbar.top">
<!--   -->
</a></div>
</nav>
</header>
<div class="flexContent">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.ecf.filetransfer</a></div>
<h1 title="Interface IRetrieveFileTransferContainerAdapter" class="title">Interface IRetrieveFileTransferContainerAdapter</h1>
</div>
<div class="contentContainer">
<section class="description">
<dl>
<dt>All Superinterfaces:</dt>
<dd><code>org.eclipse.core.runtime.IAdaptable</code></dd>
</dl>
<dl>
<dt>All Known Subinterfaces:</dt>
<dd><code><a href="service/IRetrieveFileTransfer.html" title="interface in org.eclipse.ecf.filetransfer.service">IRetrieveFileTransfer</a></code></dd>
</dl>
<dl>
<dt>All Known Implementing Classes:</dt>
<dd><code><a href="../provider/filetransfer/retrieve/AbstractRetrieveFileTransfer.html" title="class in org.eclipse.ecf.provider.filetransfer.retrieve">AbstractRetrieveFileTransfer</a></code>, <code><a href="../provider/filetransfer/httpclient4/HttpClientRetrieveFileTransfer.html" title="class in org.eclipse.ecf.provider.filetransfer.httpclient4">HttpClientRetrieveFileTransfer</a></code>, <code><a href="../provider/filetransfer/httpclient45/HttpClientRetrieveFileTransfer.html" title="class in org.eclipse.ecf.provider.filetransfer.httpclient45">HttpClientRetrieveFileTransfer</a></code>, <code><a href="../provider/filetransfer/httpclient5/HttpClientRetrieveFileTransfer.html" title="class in org.eclipse.ecf.provider.filetransfer.httpclient5">HttpClientRetrieveFileTransfer</a></code>, <code><a href="../provider/filetransfer/retrieve/MultiProtocolRetrieveAdapter.html" title="class in org.eclipse.ecf.provider.filetransfer.retrieve">MultiProtocolRetrieveAdapter</a></code>, <code><a href="../provider/filetransfer/retrieve/UrlConnectionRetrieveFileTransfer.html" title="class in org.eclipse.ecf.provider.filetransfer.retrieve">UrlConnectionRetrieveFileTransfer</a></code></dd>
</dl>
<hr>
<pre>public interface <span class="typeNameLabel">IRetrieveFileTransferContainerAdapter</span>
extends org.eclipse.core.runtime.IAdaptable</pre>
<div class="block">Entry point retrieval file transfer adapter. This adapter interface allows
 providers to expose file retrieval semantics to clients in a transport
 independent manner. To be used, a non-null adapter reference must be returned
 from a call to <a href="../core/IContainer.html#getAdapter(java.lang.Class)"><code>IContainer.getAdapter(Class)</code></a>. Once a non-null
 reference is retrieved, then it may be used to send a retrieve request.
 Events will then be asynchronously delivered to the provided listener to
 complete file transfer.
 <p>
 For example, to retrieve a remote file and store it in a local file:
 
 <pre>
 // Get IRetrieveFileTransferContainerAdapter adapter
 IRetrieveFileTransferContainerAdapter ftc = (IRetrieveFileTransferContainerAdapter) container
                .getAdapter(IRetrieveFileTransferContainerAdapter.class);
 if (ftc != null) {
        // Create listener for receiving/responding to asynchronous file transfer events
        IFileTransferListener listener = new IFileTransferListener() {
                public void handleTransferEvent(IFileTransferEvent event) {
                        // If incoming receive start event, respond by specifying local file to save to
                        if (event instanceof IIncomingFileTransferReceiveStartEvent) {
                                IIncomingFileTransferReceiveStartEvent rse = (IIncomingFileTransferReceiveStartEvent) event;
                                try {
                                        rse.receive(new File(&quot;composent.main.page.html&quot;));
                                } catch (IOException e) {
                                        // Handle exception appropriately 
                                }
                        }
                }
        };
        // Identify file to retrieve and create ID
        IFileID remoteFileID = FileIDFactory.getDefault().createID(
                        ftc.getRetrieveNamespace(), &quot;http://www.composent.com/index.html&quot;);
        // Actually make request to start retrieval.  The listener provided will then be notified asynchronously 
        // as file transfer events occur
        ftc.sendRetrieveRequest(remoteFileID, listener, null);
 }
 </pre>
 
 Where the IFileTransferEvent subtypes <b>for the receiver</b> will be:
 <ul>
 <li><a href="events/IIncomingFileTransferReceiveStartEvent.html" title="interface in org.eclipse.ecf.filetransfer.events"><code>IIncomingFileTransferReceiveStartEvent</code></a></li>
 <li><a href="events/IIncomingFileTransferReceiveDataEvent.html" title="interface in org.eclipse.ecf.filetransfer.events"><code>IIncomingFileTransferReceiveDataEvent</code></a></li>
 <li><a href="events/IIncomingFileTransferReceiveDoneEvent.html" title="interface in org.eclipse.ecf.filetransfer.events"><code>IIncomingFileTransferReceiveDoneEvent</code></a></li>
 </ul></div>
</section>
<section class="summary">
<ul class="blockList">
<!-- ========== METHOD SUMMARY =========== -->
<li class="blockList">
<section class="methodSummary"><a id="method.summary">
<!--   -->
</a>
<h2>Method Summary</h2>
<div class="memberSummary">
<div role="tablist" aria-orientation="horizontal"><button role="tab" aria-selected="true" aria-controls="memberSummary_tabpanel" tabindex="0" onkeydown="switchTab(event)" id="t0" class="activeTableTab">All Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t2" class="tableTab" onclick="show(2);">Instance Methods</button><button role="tab" aria-selected="false" aria-controls="memberSummary_tabpanel" tabindex="-1" onkeydown="switchTab(event)" id="t3" class="tableTab" onclick="show(4);">Abstract Methods</button></div>
<div id="memberSummary_tabpanel" role="tabpanel">
<table aria-labelledby="t0">
<thead>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
</thead>
<tbody>
<tr class="altColor" id="i0">
<td class="colFirst"><code><a href="../core/identity/Namespace.html" title="class in org.eclipse.ecf.core.identity">Namespace</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#getRetrieveNamespace()">getRetrieveNamespace</a></span>()</code></th>
<td class="colLast">
<div class="block">Get namespace to be used for creation of remoteFileID for retrieve
 request.</div>
</td>
</tr>
<tr class="rowColor" id="i1">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileRangeSpecification,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)">sendRetrieveRequest</a></span>&#8203;(<a href="identity/IFileID.html" title="interface in org.eclipse.ecf.filetransfer.identity">IFileID</a>&nbsp;remoteFileID,
<a href="IFileRangeSpecification.html" title="interface in org.eclipse.ecf.filetransfer">IFileRangeSpecification</a>&nbsp;rangeSpecification,
<a href="IFileTransferListener.html" title="interface in org.eclipse.ecf.filetransfer">IFileTransferListener</a>&nbsp;transferListener,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&nbsp;options)</code></th>
<td class="colLast">
<div class="block">Send request for transfer of a remote file to local file storage.</div>
</td>
</tr>
<tr class="altColor" id="i2">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)">sendRetrieveRequest</a></span>&#8203;(<a href="identity/IFileID.html" title="interface in org.eclipse.ecf.filetransfer.identity">IFileID</a>&nbsp;remoteFileID,
<a href="IFileTransferListener.html" title="interface in org.eclipse.ecf.filetransfer">IFileTransferListener</a>&nbsp;transferListener,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&nbsp;options)</code></th>
<td class="colLast">
<div class="block">Send request for transfer of a remote file to local file storage.</div>
</td>
</tr>
<tr class="rowColor" id="i3">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setConnectContextForAuthentication(org.eclipse.ecf.core.security.IConnectContext)">setConnectContextForAuthentication</a></span>&#8203;(<a href="../core/security/IConnectContext.html" title="interface in org.eclipse.ecf.core.security">IConnectContext</a>&nbsp;connectContext)</code></th>
<td class="colLast">
<div class="block">Set connect context for authentication upon subsequent
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.</div>
</td>
</tr>
<tr class="altColor" id="i4">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#setProxy(org.eclipse.ecf.core.util.Proxy)">setProxy</a></span>&#8203;(<a href="../core/util/Proxy.html" title="class in org.eclipse.ecf.core.util">Proxy</a>&nbsp;proxy)</code></th>
<td class="colLast">
<div class="block">Set proxy for use upon subsequent
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="inheritedList">
<h3>Methods inherited from interface&nbsp;org.eclipse.core.runtime.IAdaptable</h3>
<a id="methods.inherited.from.class.org.eclipse.core.runtime.IAdaptable">
<!--   -->
</a><code>getAdapter</code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<li class="blockList">
<section class="methodDetails"><a id="method.detail">
<!--   -->
</a>
<h2>Method Details</h2>
<ul class="blockList">
<li class="blockList">
<section class="detail">
<h3><a id="sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)">sendRetrieveRequest</a></h3>
<div class="memberSignature"><span class="returnType">void</span>&nbsp;<span class="memberName">sendRetrieveRequest</span>&#8203;(<span class="arguments"><a href="identity/IFileID.html" title="interface in org.eclipse.ecf.filetransfer.identity">IFileID</a>&nbsp;remoteFileID,
<a href="IFileTransferListener.html" title="interface in org.eclipse.ecf.filetransfer">IFileTransferListener</a>&nbsp;transferListener,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&nbsp;options)</span>
                  throws <span class="exceptions"><a href="IncomingFileTransferException.html" title="class in org.eclipse.ecf.filetransfer">IncomingFileTransferException</a></span></div>
<div class="block">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.
 <p>
 <b>NOTE</b>: 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 <a href="events/IIncomingFileTransferReceiveDoneEvent.html#getException()"><code>IIncomingFileTransferReceiveDoneEvent.getException()</code></a> to 
 determine whether the transfer operation completed successfully.
 </p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>remoteFileID</code> - 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:
 
 <pre>
 IFileID remoteFileID = FileIDFactory.getDefault().createID(
                ftc.getRetrieveNamespace(), &quot;http://www.composent.com/index.html&quot;);
 </pre>
 
 Must not be <code>null</code>.</dd>
<dd><code>transferListener</code> - a listener for file transfer events. Must not be null.  Must not be null.  See <b>Note</b> above.</dd>
<dd><code>options</code> - a Map of options associated with sendRetrieveRequest. The
            particular name/value pairs will be unique to the individual
            providers. May be <code>null</code>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="IncomingFileTransferException.html" title="class in org.eclipse.ecf.filetransfer">IncomingFileTransferException</a></code> - if the provider is not connected or is not in the correct
             state for initiating file transfer</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileRangeSpecification,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)">sendRetrieveRequest</a></h3>
<div class="memberSignature"><span class="returnType">void</span>&nbsp;<span class="memberName">sendRetrieveRequest</span>&#8203;(<span class="arguments"><a href="identity/IFileID.html" title="interface in org.eclipse.ecf.filetransfer.identity">IFileID</a>&nbsp;remoteFileID,
<a href="IFileRangeSpecification.html" title="interface in org.eclipse.ecf.filetransfer">IFileRangeSpecification</a>&nbsp;rangeSpecification,
<a href="IFileTransferListener.html" title="interface in org.eclipse.ecf.filetransfer">IFileTransferListener</a>&nbsp;transferListener,
<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Map.html?is-external=true" title="class or interface in java.util" class="externalLink">Map</a>&nbsp;options)</span>
                  throws <span class="exceptions"><a href="IncomingFileTransferException.html" title="class in org.eclipse.ecf.filetransfer">IncomingFileTransferException</a></span></div>
<div class="block">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.
 <p>
 <b>NOTE</b>: 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 <a href="events/IIncomingFileTransferReceiveDoneEvent.html#getException()"><code>IIncomingFileTransferReceiveDoneEvent.getException()</code></a> to 
 determine whether the transfer operation completed successfully.
 </p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>remoteFileID</code> - 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:
 
 <pre>
 IFileID remoteFileID = FileIDFactory.getDefault().createID(
                ftc.getRetrieveNamespace(), &quot;http://www.composent.com/index.html&quot;);
 </pre>
 
 Must not be <code>null</code>.</dd>
<dd><code>rangeSpecification</code> - a range specification for retrieving a portion of the given
 remote file.  If <code>null</code> the entire file will be retrieved (as per <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.
 If non-<code>null</code> 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'.</dd>
<dd><code>transferListener</code> - a listener for file transfer events. Must not be null.  See <b>Note</b> above.</dd>
<dd><code>options</code> - a Map of options associated with sendRetrieveRequest. The
            particular name/value pairs will be unique to the individual
            providers. May be <code>null</code>.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="IncomingFileTransferException.html" title="class in org.eclipse.ecf.filetransfer">IncomingFileTransferException</a></code> - if the provider is not connected or is not in the correct
             state for initiating file transfer</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="getRetrieveNamespace()">getRetrieveNamespace</a></h3>
<div class="memberSignature"><span class="returnType"><a href="../core/identity/Namespace.html" title="class in org.eclipse.ecf.core.identity">Namespace</a></span>&nbsp;<span class="memberName">getRetrieveNamespace</span>()</div>
<div class="block">Get namespace to be used for creation of remoteFileID for retrieve
 request. Result typically used as first parameter for
 <a href="../core/identity/IDFactory.html#createID(org.eclipse.ecf.core.identity.Namespace,java.lang.String)"><code>IDFactory.createID(Namespace, String)</code></a> to be used as first in
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a></div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>Namespace to use for ID creation via
         <a href="../core/identity/IDFactory.html#createID(org.eclipse.ecf.core.identity.Namespace,java.lang.String)"><code>IDFactory.createID(Namespace, String)</code></a>. Will not be
         <code>null</code>.</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setConnectContextForAuthentication(org.eclipse.ecf.core.security.IConnectContext)">setConnectContextForAuthentication</a></h3>
<div class="memberSignature"><span class="returnType">void</span>&nbsp;<span class="memberName">setConnectContextForAuthentication</span>&#8203;(<span class="arguments"><a href="../core/security/IConnectContext.html" title="interface in org.eclipse.ecf.core.security">IConnectContext</a>&nbsp;connectContext)</span></div>
<div class="block">Set connect context for authentication upon subsequent
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>. This
 method should be called with a non-null connectContext in order to allow
 authentication to occur during call to
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>connectContext</code> - the connect context to use for authenticating during
            subsequent call to
            <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.
            If <code>null</code>, then no authentication will be
            attempted.</dd>
</dl>
</section>
</li>
<li class="blockList">
<section class="detail">
<h3><a id="setProxy(org.eclipse.ecf.core.util.Proxy)">setProxy</a></h3>
<div class="memberSignature"><span class="returnType">void</span>&nbsp;<span class="memberName">setProxy</span>&#8203;(<span class="arguments"><a href="../core/util/Proxy.html" title="class in org.eclipse.ecf.core.util">Proxy</a>&nbsp;proxy)</span></div>
<div class="block">Set proxy for use upon subsequent
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>. This
 method should be called with proxy to allow the given proxy to
 be used in subsequent calls to
 <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.
 <p>
 When proxy is <code>null</code> or has not been called providers must use
 the <code>org.eclipse.core.net</code> 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
 <code>org.eclipse.core.net.proxy.IProxyService</code>.
 </p><p>
 If no information is available via <code>IProxyService</code> 
 providers may use other defaults. 
 </p></div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>proxy</code> - the proxy to use for subsequent calls to
            <a href="#sendRetrieveRequest(org.eclipse.ecf.filetransfer.identity.IFileID,org.eclipse.ecf.filetransfer.IFileTransferListener,java.util.Map)"><code>sendRetrieveRequest(IFileID, IFileTransferListener, Map)</code></a>.
            If <code>null</code>, then proxy information is obtained from
            <code>IProxyService</code> if available. Otherwise provider
            defined defaults may be used.</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
</div>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<nav role="navigation">
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a id="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/IRetrieveFileTransferContainerAdapter.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-files/index-1.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
</div>
<a id="skip.navbar.bottom">
<!--   -->
</a>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</nav>
<p class="legalCopy"><small>Copyright &#169; 2004&#x2013;2020 <a href="https://www.eclipse.org/">Eclipse Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>
