blob: 1ec57fcef5a47bb05db0c6fc6c6c650d4623e178 (
plain) (
tree)
|
|
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);
}
}
|