package org.openslx.dozmod.gui.wizard.page; import java.awt.KeyboardFocusManager; import java.awt.Window; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.ImageSummaryRead; import org.openslx.bwlp.thrift.iface.TransferState; import org.openslx.dozmod.Branding; 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.LectureWizard; 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.dozmod.thrift.cache.ImageCache; 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 boolean allowCreateLecture = 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) { ctlUploadProgressBar.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 REQUESTING: text = "Der Upload-Vorgang wird mit dem Server ausgehandelt..."; 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; case UPLOAD_STARTING: text = "Die Verbindung zur Übertragung der VM wird aufgebaut..."; 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 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 " + Branding.getServiceName() + "-Support Ihrer Einrichtung."; if (state.upload.getErrorMessage() != null) { text += "

Weitere Informationen:
" + state.upload.getErrorMessage(); } break; default: return; } } final String t = text; Gui.asyncExec(new Runnable() { @Override public void run() { lblHelpText.setText("" + t + ""); if (initState == UploadInitState.UPLOAD_STARTED) { setPageComplete(true); } if (state.upload.getUploadTask() != null && state.upload.getUploadTask().isComplete()) { chkCreateLecture.setVisible(allowCreateLecture); } } }); } public ImageUploadSummaryPage(Wizard wizard, UploadWizardState state, boolean allowCreateLecture) { super(wizard); this.state = state; this.allowCreateLecture = allowCreateLecture; setPageComplete(false); } @Override protected void onPageEnter() { if (pageIsVisible) return; pageIsVisible = true; updateInfoText(UploadInitState.REQUESTING); QuickTimer.scheduleAtFixedDelay(updateHelpText, 500, 3000); } @Override protected void onPageLeave() { if (!pageIsVisible) return; pageIsVisible = false; // optional lectureWizard state.upload.getUploadTask().removeListener(uploadListener); if (!wizard.isCancelled() && !state.upload.getUploadTask().isCanceled()) { MainWindow.addUpload(state); } if (!wizard.isCancelled() && chkCreateLecture.isSelected()) { wizard.setVisible(false); Window parent = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); ImageSummaryRead image = null; for (ImageSummaryRead tmpImage : ImageCache.get(true)) { if (tmpImage.imageBaseId.equals(state.uuid)) { image = tmpImage; break; } } if (image != null) { new LectureWizard(parent, image, state.upload.getToken()).setVisible(true); } else { LOGGER.error("Couldn't find the new image in the image cache."); //TODO could this happen? Show messagebox then? } } } }