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

                                           

                                   
                             


                               
                                                     
                                               
                                  
                                                        
                                            
                                                                    
                                                  
                                         
                                                     
                                            

                                        
                                        
 


                                            
                           

                                                                

                                                                                       
                                        
 

                                                                                      
                                               
                                       
                                                                     
                                                              
                                                                
                                    

                                                            
 


                                                                             
                                                                                     
                                                             
                                                              




                                                                    
                         
                   
 
                                                                       
                                 



                                                                               


                         
                                                                                           
                                 
                                               
                                                   


                         
 
                 
                                      
                                           
                                               
                                                                             
                                                      
                                                                 
                 

                                                   

                                                                     
                                   


                 
                                              


                                                                                          
                                                                             
         
 



                                                                
                                                                            
                                                   
                                                       
                 
         
 
           

                                                                             

                                                      
                                         
                                                                  



                                                                                 
                 





                                                          
                                             
                                                             
                                                                               



                                                                                 
                 
                                                                                                              
                                      
         
 
package org.openslx.dozmod.gui.wizard.page;

import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Collections;
import java.util.List;

import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.TextChangeListener;
import org.openslx.dozmod.gui.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.layout.ImageMetaDataPageLayout;
import org.openslx.dozmod.state.UploadWizardState;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.thrifthelper.Comparators;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
import org.openslx.util.vm.QemuMetaData;

/**
 * Page for setting the details of an image.
 */
@SuppressWarnings("serial")
public class ImageMetaDataPage extends ImageMetaDataPageLayout {

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

	private UploadWizardState state;

	public ImageMetaDataPage(Wizard wizard, UploadWizardState uploadWizardState) {
		super(wizard);
		this.state = uploadWizardState;
		setPageComplete(false);
		// HACK set fixed uploadWizardState to test functions
		uploadWizardState.shareMode = ShareMode.LOCAL;
		chkIsTemplate.setEnabled(Session.isSuperUser());
		// fetch the OS list
		QuickTimer.scheduleOnce(new Task() {
			List<OperatingSystem> osList = null;

			@Override
			public void fire() {
				osList = MetaDataCache.getOperatingSystems();
				// now send the organizations back to the LoginWindow
				// through populateIdpCombo()
				Gui.asyncExec(new Runnable() {
					@Override
					public void run() {
						fillOsCombo(osList);
					}
				});
			}
		});

		cboOperatingSystem.addItemListener(new ItemListener() {
			@Override
			public void itemStateChanged(ItemEvent e) {
				if (e.getStateChange() == ItemEvent.SELECTED) {
					reactToUserInput();
				}
			}
		});

		txtDescription.getDocument().addDocumentListener(new TextChangeListener() {
			@Override
			public void changed() {
				reactToUserInput();
			}
		});
	}

	@Override
	protected void onPageEnter() {
		// Preselect OS if possible
		if (state.detectedOs != null) {
			cboOperatingSystem.setSelectedItem(state.detectedOs);
		} else if (state.selectedOs == null) {
			cboOperatingSystem.setSelectedItem(null);
		}
		sCommandCaption.setVisible(false);
		startCommandPane.setVisible(false);
		chkIsTemplate.setSelected(state.isTemplate);
		chkLicenseRestricted.setSelected(state.isRestricted);
		reactToUserInput();
	}

	@Override
	protected boolean wantNextOrFinish() {
		state.selectedOs = (OperatingSystem) cboOperatingSystem.getSelectedItem();
		state.isTemplate = chkIsTemplate.isSelected();
		state.isRestricted = chkLicenseRestricted.isSelected();
		return state.selectedOs != null && state.description != null;
	}

	/**
	 * @param osList list of OS's to fill the combo with
	 */
	private void fillOsCombo(List<OperatingSystem> osList) {
		Collections.sort(osList, Comparators.operatingSystemByName);
		for (OperatingSystem os : osList) {
			cboOperatingSystem.addItem(os);
		}
	}

	/**
	 * Called by event listeners. This will set guidance message or error
	 * message
	 * and call setPageComplete(bool) accordingly.
	 */
	private void reactToUserInput() {
		if (cboOperatingSystem.getSelectedIndex() == -1) {
			// OS empty, description input present
			setWarningMessage("Wählen Sie das Betriebssystem aus.");
			setPageComplete(false);
			return;
		}

		if (state.meta instanceof QemuMetaData) {
			sCommandCaption.setVisible(true);
			startCommandPane.setVisible(true);
		}

		// evaluate description field
		state.description = txtDescription.getText();
		if (state.description == null || state.description.isEmpty()) {
			// OS set, no description
			setWarningMessage("Fügen Sie eine Beschreibung hinzu.");
			setPageComplete(false);
			return;
		}
		setDescription("Klicken Sie auf 'Weiter' um Berechtigungen festzulegen oder 'Fertigstellen'");
		setPageComplete(true);
	}
}