blob: 38aa9aeb2034e61da090dcfddb5f034c206cbf8e (
plain) (
tree)
|
|
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 += "<br><br>Weitere Informationen:<br>" + state.upload.getErrorMessage();
}
break;
default:
return;
}
}
final String t = text;
Gui.asyncExec(new Runnable() {
@Override
public void run() {
lblHelpText.setText("<html><body style ='width:100%'>" + t + "</body></html>");
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
if (state.upload != null && state.upload.getUploadTask() != null) {
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?
}
}
}
}
|