summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2015-07-14 19:03:36 +0200
committerSimon Rettberg2015-07-14 19:03:36 +0200
commit7bd9792e259bdea3b469d1c3373ce40a6f0f47c8 (patch)
treeb286b46a1c6e0ee70b327cee7297a7c7bfdeef81
parent[client] Added custom permission page for wizard without functionality. (diff)
downloadtutor-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)
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/App.java3
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java71
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageCache.java3
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;