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 final 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(); } }); } 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(); } } @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(); } } }