package org.openslx.dozmod.gui.wizard;
import java.awt.Window;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.I18n;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.QuitNotification;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.wizard.page.ImageOvfConversionPage;
import org.openslx.dozmod.gui.wizard.page.ContainerUploadPage;
import org.openslx.dozmod.gui.wizard.page.ImageUploadPage;
import org.openslx.dozmod.gui.wizard.page.ImageUploadSummaryPage;
import org.openslx.dozmod.state.UploadWizardState;
import org.openslx.dozmod.thrift.ThriftActions;
import org.openslx.dozmod.thrift.UploadInitiator.GotUploadTokenCallback;
import org.openslx.thrifthelper.TConst;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
public class ImageUpdateWizard extends Wizard implements UiFeedback, QuitNotification {
/**
* Version for serialization.
*/
private static final long serialVersionUID = -584900619809829672L;
private final static Logger LOGGER = LogManager.getLogger(ImageCreationWizard.class);
private UploadWizardState state = new UploadWizardState();
protected ImageUploadPage imageUploadPage;
public ImageUpdateWizard(final Window parent, final ImageDetailsRead image) {
super(parent);
// TODO allow user to update the plain dockerfile
switch (image.virtId){
case TConst.VIRT_DOCKER:
addPage(new ContainerUploadPage(this,state, image));
break;
case TConst.VIRT_QEMU:
case TConst.VIRT_VIRTUALBOX:
case TConst.VIRT_VMWARE:
imageUploadPage = new ImageUploadPage(this, state, image);
addPage(imageUploadPage);
state.conversionPage = new ImageOvfConversionPage(this, state);
addOutOfOrderPage(state.conversionPage);
break;
}
}
@Override
protected boolean wantFinish() {
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
state.upload.startUpload(new GotUploadTokenCallback() {
@Override
public void fire() {
// push version data
try {
ThriftActions.updateImageVersion(state.upload.getToken(), new ImageVersionWrite(
state.isRestricted));
} catch (TException e) {
if (state.isRestricted) {
Gui.showMessageBox(
null,
I18n.WIZARD.getString("ImageUpdate.Message.error.updateImageVersionFailed"),
MessageType.WARNING, LOGGER, e);
}
}
}
});
}
}, 500);
return true;
}
@Override
public WizardPage performFinish() {
return new ImageUploadSummaryPage(this, state, false);
}
@Override
protected boolean onCancelRequest() {
if (state.uuid == null)
return true;
boolean confirmed = Gui.showMessageBox(this, I18n.WIZARD.getString("ImageUpdate.Message.yesNo.cancelRequest"),
MessageType.QUESTION_YESNO, null, null);
if (confirmed && state.upload != null) {
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
state.upload.cancelError("ImageUploadWizard was cancelled by user");
}
});
}
return confirmed;
}
@Override
public boolean wantConfirmQuit() {
return state.upload != null;
}
@Override
public void escapePressed() {
doCancel();
}
@Override
public String getWindowTitle() {
return I18n.WIZARD.getString("ImageUpdate.Wizard.title");
}
@Override
public void onApplicationQuit() {
if (state != null && state.upload != null) {
state.upload.cancelError("Application quit (via ImageUpdateWizard)");
}
}
@Override
protected final void doPrevious() {
if (outOfOrderPage != null) {
outOfOrderPage = null;
returnAfterOutOfOrderPage(imageUploadPage, state.conversionPage);
} else {
super.doPrevious();
}
}
@Override
public final void doNext() {
if (outOfOrderPage != null) {
outOfOrderPage = null;
returnAfterOutOfOrderPage(imageUploadPage, state.conversionPage);
} else {
super.doNext();
}
}
@Override
protected void doCleanup() {
imageUploadPage = null;
state = null;
}
}