summaryrefslogblamecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageUpdateWizard.java
blob: 1bcbaaf64a59b7f7a4fd7f7b30ea365ecd21fef0 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                      

                                           
                                    
                                                      
                                                       
                                  
                                          
                                                 
                                                      
                                                
                                                                 
                                                              
                                                          
                                                                 
                                                  
                                               
                                                                        
                                       

                                        
 
                                                                                       
 




                                                                          
                                                                                             
                                                                  
 
                                                  
 
                                                                                     
                              
 


                                                                 
                                                                            



                                            



                                                                                       

                              


                 
                                        
                                                    

                                            










                                                                                                                                        
                                                                                                                                                            


                                                                                                                
                                         
                                   
                         
                        











                                                                      
                                                                                                                              




                                                                        
                                                                                                            

                                 
                 
                                 
         
 
                 
                                          
                                            



                                     
                           



                                        
                                                                         

         


                                                            
                                                                                             


                 



















                                                                                         

                                    



                                            
                                       

         
 
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() {
		if (state != null) {
			state.upload = null;
			state = null;
		}
		imageUploadPage = null;
	}

}