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

                                           
                               
                                                     
                                               
                                  
                                          
                                                        
                                            
                                                                    
                                                  
                                         
                                                     
                                            

                                        

                                          
 




                                   


                                            
                                                                                            
 

                                                                                       
                                        
 
                                                                                      
                              
                                               
                                       
                                                                     
                                                              
                                                                
                                    

                                                            
 
                                                      
                                                                             
                                                                                     
                                                             
                                                              
                                                                     


                                                                    
                         
                   
 
                                                                       
                                                                             


                                                                               


                         
                                                                                           
                                                         
                                                   


                         
 
                                                
                                           
                                               
                                                                             
                                                      
                                                                 
                 

                                                   

                                                                     
                                   

         
                                                        


                                                                                          
 
                                                                             
         
 



                                                                
                                                                            
                                                   
                                                       
                 
         
 
           
                                                                                     

                                                      
                                         
                                                                  
                                                              
                                                                                                               

                                               
                 





                                                          
                                                                



                                                                                                                      





                                                                                      
                                             
                                                             
                                                                               
                                                 
                                                                                                                        

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

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.I18n;
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.vm.DockerMetaDataDummy;
import org.openslx.vm.QemuMetaData;

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

/**
 * 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(I18n.PAGE.getString("ImageMetaData.WizardPage.warningMessage.noOS"));
			setPageComplete(false);
			return;
		}

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

		if (state.meta instanceof DockerMetaDataDummy) {
			// TODO we need Information about a OS in Container? Currently use "Other (32 Bit)" as default
			lblOperatingSystem.setVisible(false);
			cboOperatingSystem.setVisible(false);

			// TODO do we need to check license restrictions in container?
			chkLicenseRestricted.setVisible(false);
			// TODO currently no Container Template!
			chkIsTemplate.setVisible(false);
		}

		// evaluate description field
		state.description = txtDescription.getText();
		if (state.description == null || state.description.isEmpty()) {
			// OS set, no description
			setWarningMessage(I18n.PAGE.getString("ImageMetaData.WizardPage.warningMessage.noDescription"));
			setPageComplete(false);
			return;
		}
		setDescription(I18n.PAGE.getString("ImageMetaData.WizardPage.description"));
		setPageComplete(true);
	}
}