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