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 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 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); } }