diff options
| author | Simon Rettberg | 2015-07-14 19:03:36 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2015-07-14 19:03:36 +0200 |
| commit | 7bd9792e259bdea3b469d1c3373ce40a6f0f47c8 (patch) | |
| tree | b286b46a1c6e0ee70b327cee7297a7c7bfdeef81 | |
| parent | [client] Added custom permission page for wizard without functionality. (diff) | |
| download | tutor-module-7bd9792e259bdea3b469d1c3373ce40a6f0f47c8.tar.gz tutor-module-7bd9792e259bdea3b469d1c3373ce40a6f0f47c8.tar.xz tutor-module-7bd9792e259bdea3b469d1c3373ce40a6f0f47c8.zip | |
[client] Use vmx parser to check validity of VM (work in progress)
4 files changed, 64 insertions, 18 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java index 34b76bc7..dd9aa3ce 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java @@ -93,6 +93,7 @@ public class App { } public static void main(final String[] args) { + try { Config.init(); } catch (Exception e) { @@ -106,7 +107,7 @@ public class App { try { ProxyConfigurator.init(); } catch (IOException e) { - showAwtMessage("Could not detect proxy server automatically. No proxy server will be used", e); + showAwtMessage("Could not detect proxy server automatically. No proxy server will be used", e); } // Check if we can load SWT by calling some library function diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java index b8403eaa..8c0d5cc5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java @@ -131,6 +131,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { boolean currentlyVisible = getControl().isVisible(); if (!currentlyVisible && visible) { LOGGER.debug("Entering page..."); + // TODO: Set detected OS from previous step } // leaving this page if (currentlyVisible && !visible) { @@ -149,7 +150,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { osCombo.setData(os.osName, os); } } - // select the first one by default - osCombo.select(0); + // Select no OS by default + osCombo.clearSelection(); } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java index 5c52ee23..e0838031 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java @@ -1,6 +1,8 @@ package org.openslx.dozmod.gui.wizard.page; import java.io.File; +import java.io.IOException; +import java.util.List; import java.util.UUID; import org.apache.log4j.Logger; @@ -12,21 +14,25 @@ import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.openslx.dozmod.Config; +import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.helper.Gui; +import org.openslx.dozmod.gui.helper.MessageType; import org.openslx.dozmod.gui.wizard.layout.ImageUploadPageLayout; import org.openslx.dozmod.state.UploadWizardState; +import org.openslx.dozmod.thrift.MetaDataCache; import org.openslx.dozmod.thrift.Session; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; +import org.openslx.util.vm.VmMetaData.HardDisk; +import org.openslx.util.vm.VmwareMetaData; public class ImageUploadPage extends ImageUploadPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageUploadPage.class); - + private UploadWizardState uploadWizardState; protected final boolean editExistingImage; - private File file; public ImageUploadPage(UploadWizardState uploadWizardState, boolean editExistingImage) { super(); @@ -47,7 +53,6 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void keyReleased(KeyEvent e) { if (!imageNameTextField.getText().isEmpty()) { - uploadWizardState.vmName = imageNameTextField.getText(); setPageComplete(uploadWizardState.vmDescriptionFile != null); } else setPageComplete(false); @@ -64,12 +69,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { dialog.setFilterPath(Config.getUploadPath()); String ret = dialog.open(); if (ret != null) { - file = new File(ret); - Config.setUploadPath(file.getParentFile().getAbsolutePath()); - uploadWizardState.vmDescriptionFile = file; - uploadWizardState.vmDiskFile = file; - imageFileTextField.setText(ret); - setPageComplete(!imageNameTextField.getText().isEmpty()); + vmxSelected(new File(ret)); } } @@ -77,8 +77,48 @@ public class ImageUploadPage extends ImageUploadPageLayout { public void widgetDefaultSelected(SelectionEvent e) { } }); - + } + + private void vmxSelected(File file) { + // TODO: setErrorMessage(newMessage); + Config.setUploadPath(file.getParentFile().getAbsolutePath()); + VmwareMetaData meta = null; + try { + meta = new VmwareMetaData(MetaDataCache.getOperatingSystems(), file); + } catch (IOException e) { + MainWindow.showMessageBox("Konnte " + file.getPath() + " nicht lesen", MessageType.ERROR, LOGGER, + e); + setPageComplete(false); + return; + } + if (meta == null || meta.getDisplayName() == null) { + setErrorMessage("Keine gülte vmx-Datei ausgewählt!"); + setPageComplete(false); + return; + } + List<HardDisk> hdds = meta.getHdds(); + if (hdds.size() == 0 || hdds.get(0).diskImage == null) { + setErrorMessage("Die gewählte VM enthält keine HDD"); + setPageComplete(false); + return; + } + if (hdds.size() > 1) { + setErrorMessage("Die gewählte VM enthält mehr als eine virtuelle HDD"); + setPageComplete(false); + return; + // Allow to continue!? + } + uploadWizardState.vmDescriptionFile = file; + uploadWizardState.vmDiskFile = new File(hdds.get(0).diskImage); + if (imageNameTextField.getText().isEmpty()) { + imageNameTextField.setText(meta.getDisplayName()); + } + uploadWizardState.vmOperatingSystem = meta.getOs(); + imageFileTextField.setText(file.getAbsolutePath()); + setPageComplete(!imageNameTextField.getText().isEmpty()); + } + /* Override setVisible() to inject some code when this page is set visible * Note that this also gets called when we go back to this page. * @@ -92,11 +132,12 @@ public class ImageUploadPage extends ImageUploadPageLayout { if (uploadWizardState.vmUuid != null) { LOGGER.debug("UUID already set: " + uploadWizardState.vmUuid); } else { + uploadWizardState.vmName = imageNameTextField.getText(); if (Session.getSatelliteToken() == null) LOGGER.error("No session token"); else LOGGER.debug(Session.getSatelliteToken()); - + // async creation of the image QuickTimer.scheduleOnce(new Task() { UUID newImageUUID = null; @@ -104,8 +145,8 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void fire() { try { - newImageUUID = UUID.fromString(ThriftManager.getSatClient() - .createImage(Session.getSatelliteToken(), uploadWizardState.vmName)); + newImageUUID = UUID.fromString(ThriftManager.getSatClient().createImage( + Session.getSatelliteToken(), uploadWizardState.vmName)); } catch (Exception e) { LOGGER.error("Error while creating image: ", e); return; @@ -122,14 +163,16 @@ public class ImageUploadPage extends ImageUploadPageLayout { } super.setVisible(visible); } + public void createImageCallback(UUID uuid) { if (uuid != null) { // set it LOGGER.debug("Received UUID from satellite: " + uuid.toString()); uploadWizardState.vmUuid = uuid; + imageNameTextField.setEnabled(false); } else LOGGER.error("Null UUID returned from the createImage() runnable!"); - + // TODO start upload } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageCache.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageCache.java index e8cb696e..380b51ea 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageCache.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageCache.java @@ -18,6 +18,7 @@ public class ImageCache { @Override protected List<ImageSummaryRead> update() throws TAuthorizationException, TInternalServerError, TException { List<ImageSummaryRead> result = null; + int pageSize = ThriftManager.getSatClient().getPageSize(); for (int i = 0;; ++i) { List<ImageSummaryRead> page = ThriftManager.getSatClient().getImageList(Session.getSatelliteToken(), null, i); if (result == null) { @@ -25,7 +26,7 @@ public class ImageCache { } else { result.addAll(page); } - if (page.size() < ThriftManager.getSatClient().getPageSize()) + if (page.size() < pageSize) break; } return result; |
