diff options
author | Simon Rettberg | 2015-10-01 20:00:27 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-10-01 20:00:27 +0200 |
commit | 1fd45f1ec985012179b26c8136eadf0c5ae3c2c8 (patch) | |
tree | 05f2c0065d4e837f896cd3b0668125e87a211806 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java | |
parent | [client] Fix escape not working in message boxes (diff) | |
download | tutor-module-1fd45f1ec985012179b26c8136eadf0c5ae3c2c8.tar.gz tutor-module-1fd45f1ec985012179b26c8136eadf0c5ae3c2c8.tar.xz tutor-module-1fd45f1ec985012179b26c8136eadf0c5ae3c2c8.zip |
[client] Start upload only when finishing wizard, add final summary page to wizard
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java new file mode 100644 index 00000000..8c7d653d --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadSummaryPage.java @@ -0,0 +1,138 @@ +package org.openslx.dozmod.gui.wizard.page; + +import org.apache.log4j.Logger; +import org.openslx.bwlp.thrift.iface.TransferState; +import org.openslx.dozmod.filetransfer.TransferEvent; +import org.openslx.dozmod.filetransfer.TransferEventListener; +import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.MainWindow; +import org.openslx.dozmod.gui.wizard.Wizard; +import org.openslx.dozmod.gui.wizard.layout.ImageUploadSummaryPageLayout; +import org.openslx.dozmod.state.UploadWizardState; +import org.openslx.dozmod.thrift.UploadInitiator.UploadInitState; +import org.openslx.util.QuickTimer; + +@SuppressWarnings("serial") +public class ImageUploadSummaryPage extends ImageUploadSummaryPageLayout { + + private static final Logger LOGGER = Logger.getLogger(ImageUploadSummaryPage.class); + + private boolean pageIsVisible = false; + private boolean uploadListenerAdded = false; + private final UploadWizardState state; + + private final TransferEventListener uploadListener = new TransferEventListener() { + @Override + public void update(TransferEvent event) { + LOGGER.debug("update transfer event"); + if (!pageIsVisible) + return; + if (event.progress != null) { + progressBar.setStatus(event.progress); + if (event.state == TransferState.FINISHED) { + updateInfoText(null); + state.upload.getUploadTask().removeListener(uploadListener); + } + } + } + }; + + private final QuickTimer.Task updateHelpText = new QuickTimer.Task() { + private UploadInitState lastInitState = null; + + @Override + public void fire() { + LOGGER.debug("update help text"); + if (!pageIsVisible) { + this.cancel(); + return; + } + if (!uploadListenerAdded && state.upload.getUploadTask() != null) { + uploadListenerAdded = true; + state.upload.getUploadTask().addListener(uploadListener); + } + UploadInitState initState = state.upload.getState(); + if (initState != lastInitState) { + lastInitState = initState; + updateInfoText(initState); + } + if (lastInitState == UploadInitState.UPLOAD_STARTED || lastInitState == UploadInitState.ERROR) { + this.cancel(); + } + } + }; + + private void updateInfoText(final UploadInitState initState) { + String text; + if (state.upload.getUploadTask() != null && state.upload.getUploadTask().isComplete()) { + text = "Die Virtuelle Maschine wurde erfolgreich auf den Server hochgeladen."; + } else if (initState == null) { + return; + } else { + switch (initState) { + case ERROR: + text = "Die Initialisierung des Uploads auf den Server ist fehlgeschlagen." + + " Sie können versuchen, den Vorgang erneut zu starten." + + " Falls das Problem weiterhin besteht," + + " kontaktieren Sie den bwLehrpool-Support Ihrer Einrichtung."; + if (state.upload.getErrorMessage() != null) { + text += "<br><br>Weitere Informationen:<br>" + state.upload.getErrorMessage(); + } + break; + case REQUESTING: + text = "Der Upload-Vorgang wird mit dem Server ausgehandelt..."; + break; + case UPLOAD_STARTED: + text = "Der Upload Ihrer Virtuellen Maschine wurde gestartet." + + " Wenn Sie möchten, können Sie diesen Assistenten schließen," + + " und die Anwendung weiterverwenden." + + " Die Übertragung läuft dabei im Hintergrund weiter."; + break; + case UPLOAD_STARTING: + text = "Die Verbindung zur Übertragung der VM wird aufgebaut..."; + break; + case WAITING_FOR_SLOT: + text = "Der Server ist zur Zeit überlastet, da zu viele Uploads gleichzeitig laufen." + + " Es wird gewartet, bis der Server wieder Kapazitäten frei hat." + + " Bitte schließen Sie dieses Fenster nicht."; + break; + default: + return; + } + } + final String t = text; + Gui.asyncExec(new Runnable() { + @Override + public void run() { + infoText.setText("<html><body style ='width:100%'>" + t + "</body></html>"); + setPageComplete(initState == UploadInitState.UPLOAD_STARTED); + } + }); + } + + public ImageUploadSummaryPage(Wizard wizard, UploadWizardState state, boolean allowCreateLecture) { + super(wizard, allowCreateLecture); + this.state = state; + setPageComplete(false); + } + + @Override + protected void onPageEnter() { + if (pageIsVisible) + return; + pageIsVisible = true; + QuickTimer.scheduleAtFixedDelay(updateHelpText, 1, 3000); + } + + @Override + protected void onPageLeave() { + if (!pageIsVisible) + return; + pageIsVisible = false; + state.upload.getUploadTask().removeListener(uploadListener); + if (!state.upload.getUploadTask().isCanceled()) { + MainWindow.addUpload(state); + } + } + +} |