@@ -57,9 +57,7 @@ public abstract class TransferProgressAwareHandler<T, R extends TransferProgress
5757 protected abstract TransferContext getTransferContext (T transferEvent );
5858
5959 /**
60- * UI that the transfer was started with. Set from onStart(context).
61- * <p>
62- * protected for tests to set the ui.
60+ * UI that the transfer was started with. Set from context if not given.
6361 */
6462 private UI ui ;
6563
@@ -113,6 +111,9 @@ public R whenStart(SerializableRunnable startHandler) {
113111 addTransferProgressListenerInternal (new TransferProgressListener () {
114112 @ Override
115113 public void onStart (TransferContext context ) {
114+ if (ui == null ) {
115+ setTransferUI (context .getUI ());
116+ }
116117 ui .access (startHandler ::run );
117118 }
118119 });
@@ -138,7 +139,7 @@ public R whenStart(SerializableConsumer<TransferContext> startHandler) {
138139 addTransferProgressListenerInternal (new TransferProgressListener () {
139140 @ Override
140141 public void onStart (TransferContext context ) {
141- ui . access ( () -> startHandler .accept (context ));
142+ uiAccess ( context , () -> startHandler .accept (context ));
142143 }
143144 });
144145 return (R ) this ;
@@ -170,7 +171,7 @@ public R onProgress(
170171 @ Override
171172 public void onProgress (TransferContext context ,
172173 long transferredBytes , long totalBytes ) {
173- ui . access ( () -> progressHandler .accept (context ,
174+ uiAccess ( context , () -> progressHandler .accept (context ,
174175 transferredBytes , totalBytes ));
175176 }
176177
@@ -227,7 +228,7 @@ public R onProgress(SerializableBiConsumer<Long, Long> progressHandler,
227228 @ Override
228229 public void onProgress (TransferContext context ,
229230 long transferredBytes , long totalBytes ) {
230- ui . access ( () -> progressHandler .accept (transferredBytes ,
231+ uiAccess ( context , () -> progressHandler .accept (transferredBytes ,
231232 totalBytes ));
232233 }
233234
@@ -288,13 +289,15 @@ public R whenComplete(
288289 addTransferProgressListenerInternal (new TransferProgressListener () {
289290 @ Override
290291 public void onError (TransferContext context , IOException reason ) {
291- ui .access (() -> completeOrTerminateHandler .accept (false ));
292+ uiAccess (context ,
293+ () -> completeOrTerminateHandler .accept (false ));
292294 }
293295
294296 @ Override
295297 public void onComplete (TransferContext context ,
296298 long transferredBytes ) {
297- ui .access (() -> completeOrTerminateHandler .accept (true ));
299+ uiAccess (context ,
300+ () -> completeOrTerminateHandler .accept (true ));
298301 }
299302 });
300303 return (R ) this ;
@@ -326,14 +329,14 @@ public R whenComplete(
326329 addTransferProgressListenerInternal (new TransferProgressListener () {
327330 @ Override
328331 public void onError (TransferContext context , IOException reason ) {
329- ui . access ( () -> completeOrTerminateHandler . accept ( context ,
330- false ));
332+ uiAccess ( context , () -> completeOrTerminateHandler
333+ . accept ( context , false ));
331334 }
332335
333336 @ Override
334337 public void onComplete (TransferContext context ,
335338 long transferredBytes ) {
336- ui . access (
339+ uiAccess ( context ,
337340 () -> completeOrTerminateHandler .accept (context , true ));
338341 }
339342 });
@@ -405,6 +408,13 @@ protected void setTransferUI(UI ui) {
405408 }
406409 }
407410
411+ protected void uiAccess (TransferContext context , final Command command ) {
412+ if (ui == null ) {
413+ setTransferUI (context .getUI ());
414+ }
415+ ui .access (command );
416+ }
417+
408418 /**
409419 * A wrapper for {@link TransferProgressListener} that ensures that UI
410420 * updates in transfer progress listeners are pushed to client
@@ -422,24 +432,25 @@ public TransferProgressListenerWrapper(
422432
423433 @ Override
424434 public void onStart (TransferContext context ) {
425- ui . access ( () -> delegate .onStart (context ));
435+ uiAccess ( context , () -> delegate .onStart (context ));
426436 }
427437
428438 @ Override
429439 public void onProgress (TransferContext context , long transferredBytes ,
430440 long totalBytes ) {
431- ui . access ( () -> delegate .onProgress (context , transferredBytes ,
432- totalBytes ));
441+ uiAccess ( context , () -> delegate .onProgress (context ,
442+ transferredBytes , totalBytes ));
433443 }
434444
435445 @ Override
436446 public void onError (TransferContext context , IOException reason ) {
437- ui . access ( () -> delegate .onError (context , reason ));
447+ uiAccess ( context , () -> delegate .onError (context , reason ));
438448 }
439449
440450 @ Override
441451 public void onComplete (TransferContext context , long transferredBytes ) {
442- ui .access (() -> delegate .onComplete (context , transferredBytes ));
452+ uiAccess (context ,
453+ () -> delegate .onComplete (context , transferredBytes ));
443454 }
444455
445456 @ Override
@@ -450,5 +461,13 @@ public long progressReportInterval() {
450461 protected void setTransferUI (UI ui ) {
451462 this .ui = ui ;
452463 }
464+
465+ protected void uiAccess (TransferContext context ,
466+ final Command command ) {
467+ if (ui == null ) {
468+ setTransferUI (context .getUI ());
469+ }
470+ ui .access (command );
471+ }
453472 }
454473}
0 commit comments