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

                                                            
                                                  

                                              
 
                           
                                                               
 

                                                                                 
                                                                                    

                                                      
                                                                      


                                                  
           
                                                                                
           
                                           
                              
                                                                                     




                                                                                                   

         


                                              

         
                 

                                                                                     

                                                                                          
                              




                                      








                                                                                                                         

                 
                                                       
                                                              
                                                             
                             
                                                                                                               
                                                                                                         
                                                


                                                                                                           
                         




                                                                                                    
                                                                                               
                                        


                                                                                                        
                 
         


                                        
                                                                                         


                                                              
                                                                                                       


                                                                     
                                                                

                                                                          
                        
                                                                           
                                                                                                                       


                                             
                                                         

                                                                   
                        
                                                                    
                                                                                                                


                                             
                                                           

                                                            
                        
                                                                              
                                                                                                                                                                                            
                                                                                                                  


                                             

                                                                      
                                     
                 
                                                            

                                                                     
                 
                                                          


                                                                    
                                                     


                                                              
                            
         
 

                                                          


                                                                                                                            
         


                                             
                                                                                                            
                                                                        














                                                                                     










                                                      
 
package org.openslx.dozmod.gui.wizard;

import java.awt.Window;

import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.wizard.page.ImageCustomPermissionPage;
import org.openslx.dozmod.gui.wizard.page.ImageMetaDataPage;
import org.openslx.dozmod.gui.wizard.page.ImageUploadPage;
import org.openslx.dozmod.state.UploadWizardState;
import org.openslx.dozmod.thrift.Session;
import org.openslx.thrifthelper.ThriftManager;

@SuppressWarnings("serial")
public class ImageWizard extends Wizard implements UiFeedback {

	private final static Logger LOGGER = Logger.getLogger(ImageWizard.class);

	private final UploadWizardState uploadWizardState = new UploadWizardState();
	protected ImageUploadPage imageUploadPage;
	protected ImageMetaDataPage imageMetaDataPage;
	protected ImageCustomPermissionPage imageCustomPermissionPage;

	/**
	 * Wizard for creating or editing an image
	 * 
	 * @param editExistingImage whether to create new or edit existing image
	 */
	public ImageWizard(Window parent) {
		super(parent);
		imageUploadPage = new ImageUploadPage(this, uploadWizardState, null);
		imageMetaDataPage = new ImageMetaDataPage(this, uploadWizardState);
		imageCustomPermissionPage = new ImageCustomPermissionPage(this, uploadWizardState);
		addPage(imageUploadPage);
		addPage(imageMetaDataPage);
		addPage(imageCustomPermissionPage);
	}

	@Override
	public String getWindowTitle() {
		return "Neues Image erzeugen";
	}

	@Override
	public boolean wantFinish() {
		// since we only started the upload and created a "blank" image entry
		// we can here do all the sanity checks on the fields of UploadWizardState
		// and react accordingly.
		// check state
		return isStateValid();
	}

	@Override
	public void performFinish() {
		// TODO run the actually request over external threaded class
		try {
			// push to sat
			ThriftManager.getSatClient().updateImageBase(Session.getSatelliteToken(),
					uploadWizardState.uuid.toString(), imageBaseWriteFromState());
		} catch (TException e) {
			Gui.showMessageBox(this, "Fail to push image metadata to satellite: ", MessageType.ERROR, LOGGER,
					e);
			return;
		}

		// push permissions to satellite server
		if (uploadWizardState.permissionMap != null) {
			// user skipped permission list stuff
			try {
				ThriftManager.getSatClient().writeImagePermissions(Session.getSatelliteToken(),
						uploadWizardState.uuid, uploadWizardState.permissionMap);
			} catch (TException e) {
				Gui.showMessageBox(this, "Could not write permissions list to satellite: ",
						MessageType.ERROR, LOGGER, e);
				return;
			}
		}
		try {
			// push to sat
			ThriftManager.getSatClient().updateImageVersion(Session.getSatelliteToken(),
					uploadWizardState.transferInformation.getToken(),
					new ImageVersionWrite(uploadWizardState.isRestricted));
		} catch (TException e) {
			Gui.showMessageBox(this, "Could not set active/restricted flags to satellite: ",
					MessageType.ERROR, LOGGER, e);
			return;
		}
	}

	private boolean isStateValid() {
		// debug purposes
		if (uploadWizardState.name == null || uploadWizardState.name.isEmpty()) {
			LOGGER.error("No name set in state!");
			return false;
		}
		if (uploadWizardState.description == null || uploadWizardState.description.isEmpty()) {
			LOGGER.error("No description set in state!");
			return false;
		}
		if (uploadWizardState.descriptionFile == null) {
			LOGGER.error("No description file set in state!");
			return false;
		} else {
			if (!uploadWizardState.descriptionFile.canRead()) {
				LOGGER.error(uploadWizardState.descriptionFile.getAbsolutePath() + " cannot be read!");
				return false;
			}
		}
		if (uploadWizardState.diskFile == null) {
			LOGGER.error("No disk file set in state!");
			return false;
		} else {
			if (!uploadWizardState.diskFile.canRead()) {
				LOGGER.error(uploadWizardState.diskFile.getAbsolutePath() + " cannot be read!");
				return false;
			}
		}
		if (uploadWizardState.selectedOs == null) {
			LOGGER.error("No OS set in state!");
			return false;
		} else {
			if (!(uploadWizardState.selectedOs.isSetArchitecture()
					&& uploadWizardState.selectedOs.isSetOsId() && uploadWizardState.selectedOs.isSetOsName() && uploadWizardState.selectedOs.isSetVirtualizerOsId())) {
				LOGGER.error("OS has missing fields: " + uploadWizardState.selectedOs.toString());
				return false;
			}
		}
		if (uploadWizardState.meta == null) {
			LOGGER.error("No vm meta data set in state!");
			return false;
		}
		if (uploadWizardState.permissions == null) {
			LOGGER.error("No permissions set in state!");
			return false;
		}
		if (uploadWizardState.shareMode == null) {
			LOGGER.error("No share mode set in state!");
			return false;
		}
		if (uploadWizardState.uuid == null) {
			LOGGER.error("No uuid set in state!");
			return false;
		}
		return true;
	}

	private ImageBaseWrite imageBaseWriteFromState() {
		// build imageBaseWrite
		return new ImageBaseWrite(uploadWizardState.name, uploadWizardState.description,
				uploadWizardState.selectedOs.getOsId(), uploadWizardState.meta.getVirtualizer().getVirtId(),
				uploadWizardState.isTemplate, uploadWizardState.permissions, uploadWizardState.shareMode);
	}

	@Override
	protected boolean onCancelRequest() {
		boolean confirmed = Gui.showMessageBox(this, "Möchten Sie den Vorgang wirklich abbrechen?",
				MessageType.QUESTION_YESNO, null, null);
		if (confirmed) {
			// TODO: Lösch-Calls am Sat
			// check the state to see what we did:
			if (uploadWizardState.uuid != null) {
				// we created the image, so delete the image base
				//ThriftActions.deleteImageBase()
			}
			if (uploadWizardState.transferInformation != null) {
				// we started an upload, thus we have a image version
			}
			if (uploadWizardState.uploadTask != null) {
				// an upload is running.
			}
		}
		return confirmed;
	}

	@Override
	public boolean wantConfirmQuit() {
		return uploadWizardState.uuid != null;
	}

	@Override
	public void escapePressed() {
		doCancel();
	}
}