summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/org')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/App.java5
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java16
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java18
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java18
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java76
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java4
7 files changed, 89 insertions, 58 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
index 42af2c9e..ae39d30d 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/App.java
@@ -140,6 +140,11 @@ public class App {
new AwtBox(null, message);
}
+ /**
+ * Blocks as long as initialization is still going on. Currently this is
+ * just the proxy setup, so this should be used before any network
+ * communication happens.
+ */
public static synchronized void waitForInit() {
if (proxyThread == null)
return;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
index be7bfad0..b54ca750 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageListWindow.java
@@ -65,7 +65,8 @@ public class ImageListWindow extends ImageListWindowLayout {
public void selectionChanged(SelectionChangedEvent event) {
IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
ImageSummaryRead selectedElement = (ImageSummaryRead) selection.getFirstElement();
- if (selectedElement == null) return;
+ if (selectedElement == null)
+ return;
String imageName = selectedElement.getImageName();
if (imageName == null) {
imageSelectedNameLabel.setText("Unknown");
@@ -137,7 +138,6 @@ public class ImageListWindow extends ImageListWindowLayout {
public void widgetSelected(SelectionEvent e) {
ImageWizard wizard = new ImageWizard(true);
WizardDialog wd = new WizardDialog(getShell(), wizard);
- wd.open();
refreshList(wd.open() == Window.OK);
}
});
@@ -162,8 +162,8 @@ public class ImageListWindow extends ImageListWindowLayout {
public void fire() {
Throwable t = null;
try {
- ThriftManager.getSatClient().deleteImageVersion(
- Session.getSatelliteToken(), image.getCurrentVersionId());
+ ThriftManager.getSatClient().deleteImageVersion(Session.getSatelliteToken(),
+ image.getCurrentVersionId());
} catch (Exception e) {
t = e;
}
@@ -188,12 +188,13 @@ public class ImageListWindow extends ImageListWindowLayout {
});
}
- private boolean refreshList(boolean forceRefresh) {
+ private void refreshList(boolean forceRefresh) {
+ if (isDisposed())
+ return;
List<ImageSummaryRead> imageList = ImageCache.get(forceRefresh);
tableViewer.setInput(imageList);
tableViewer.refresh();
- return true;
}
@Override
@@ -208,7 +209,8 @@ public class ImageListWindow extends ImageListWindowLayout {
public void deleteCallback(ImageSummaryRead image, Throwable t) {
if (t == null) {
- Gui.showMessageBox(getShell(), "Deleted image with UUID '" + image + "'.", MessageType.INFO, LOGGER, t);
+ Gui.showMessageBox(getShell(), "Deleted image with UUID '" + image + "'.", MessageType.INFO,
+ LOGGER, t);
} else {
Gui.showMessageBox(getShell(), "Failed to delete image!", MessageType.ERROR, LOGGER, t);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java
index 0fd41d46..19f57f60 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java
@@ -65,7 +65,7 @@ public class ImageWizard extends Wizard {
LOGGER.debug(uploadWizardState.description);
LOGGER.debug(uploadWizardState.descriptionFile.toString());
LOGGER.debug(uploadWizardState.diskFile.toString());
- LOGGER.debug(uploadWizardState.operatingSystem.toString());
+ LOGGER.debug(uploadWizardState.selectedOs.toString());
LOGGER.debug(uploadWizardState.virtualizer.toString());
LOGGER.debug(uploadWizardState.isTemplate);
LOGGER.debug(uploadWizardState.permissions.toString());
@@ -132,15 +132,15 @@ public class ImageWizard extends Wizard {
return false;
}
}
- if (uploadWizardState.operatingSystem == null) {
+ if (uploadWizardState.selectedOs == null) {
LOGGER.error("No OS set in state!");
return false;
} else {
- if (!(uploadWizardState.operatingSystem.isSetArchitecture()
- && uploadWizardState.operatingSystem.isSetOsId()
- && uploadWizardState.operatingSystem.isSetOsName()
- && uploadWizardState.operatingSystem.isSetVirtualizerOsId())) {
- LOGGER.error("OS has missing fields: " + uploadWizardState.operatingSystem.toString());
+ if (!(uploadWizardState.selectedOs.isSetArchitecture()
+ && uploadWizardState.selectedOs.isSetOsId()
+ && uploadWizardState.selectedOs.isSetOsName()
+ && uploadWizardState.selectedOs.isSetVirtualizerOsId())) {
+ LOGGER.error("OS has missing fields: " + uploadWizardState.selectedOs.toString());
return false;
}
}
@@ -162,7 +162,7 @@ public class ImageWizard extends Wizard {
&& uploadWizardState.permissions.isSetDownload()
&& uploadWizardState.permissions.isSetEdit()
&& uploadWizardState.permissions.isSetLink())) {
- LOGGER.error("Virtualizer has missing fields: " + uploadWizardState.operatingSystem.toString());
+ LOGGER.error("Virtualizer has missing fields: " + uploadWizardState.selectedOs.toString());
return false;
}
}
@@ -182,7 +182,7 @@ public class ImageWizard extends Wizard {
return new ImageBaseWrite(
uploadWizardState.name,
uploadWizardState.description,
- uploadWizardState.operatingSystem.getOsId(),
+ uploadWizardState.selectedOs.getOsId(),
uploadWizardState.virtualizer.getVirtId(),
uploadWizardState.isTemplate,
uploadWizardState.permissions,
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java
index 921dc6d6..55dd1193 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java
@@ -40,21 +40,21 @@ public abstract class ImageUploadPageLayout extends WizardPage {
// -- Browse for VM --
Label imageFileCaption = new Label(container, SWT.NONE);
imageFileCaption.setText("Virtuelle Maschine");
- imageFileBrowseButton = new Button(container, SWT.PUSH);
- imageFileBrowseButton.setText("Browse");
imageFileTextField = new Text(container, SWT.BORDER | SWT.SINGLE);
imageFileTextField.setEditable(false);
GridData gdImageFileTextField = new GridData(SWT.FILL, SWT.FILL, true, false);
gdImageFileTextField.horizontalSpan = 2;
imageFileTextField.setLayoutData(gdImageFileTextField);
+ imageFileBrowseButton = new Button(container, SWT.PUSH);
+ imageFileBrowseButton.setText("Browse");
Label imageNameCaption = new Label(container, SWT.NONE);
imageNameCaption.setText("Name des Images");
imageNameTextField = new Text(container, SWT.BORDER | SWT.SINGLE);
- GridData gdimageNameTextField = new GridData(GridData.FILL_HORIZONTAL);
- gdimageNameTextField.horizontalSpan = 2;
- imageNameTextField.setLayoutData(gdimageNameTextField);
+ GridData gdImageNameTextField = new GridData(GridData.FILL_HORIZONTAL);
+ gdImageNameTextField.horizontalSpan = 2;
+ imageNameTextField.setLayoutData(gdImageNameTextField);
startUploadButton = new Button(container, SWT.PUSH);
startUploadButton.setText("Upload");
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 98739897..395beed1 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
@@ -35,7 +35,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
uploadWizardState.shareMode = ShareMode.LOCAL;
uploadWizardState.virtualizer = MetaDataCache.getVirtualizers().get(0);
}
-
+
@Override
public void createControl(Composite parent) {
super.createControl(parent);
@@ -63,9 +63,8 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
public void widgetSelected(SelectionEvent e) {
final int selectionIndex = osCombo.getSelectionIndex();
if (selectionIndex != -1) {
- uploadWizardState.operatingSystem =
- (OperatingSystem) osCombo.getData(osCombo.getItem(selectionIndex));
- LOGGER.debug(uploadWizardState.operatingSystem.toString());
+ uploadWizardState.selectedOs = (OperatingSystem) osCombo.getData(osCombo.getItem(selectionIndex));
+ LOGGER.debug(uploadWizardState.selectedOs.toString());
// complete if the description was filled
if (!descriptionText.getText().isEmpty()) {
@@ -131,7 +130,6 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
// -- end checkboxes for permissions --
}
-
/* 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.
*
@@ -142,7 +140,15 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
boolean currentlyVisible = getControl().isVisible();
if (!currentlyVisible && visible) {
LOGGER.debug("Entering page...");
- // TODO: Set detected OS from previous step
+ // Preselect OS if possible
+ if (uploadWizardState.selectedOs == null && uploadWizardState.detectedOs != null) {
+ for (int i = 0; i < osCombo.getItemCount(); ++i) {
+ if (uploadWizardState.detectedOs.getOsName().equals(osCombo.getItem(i))) {
+ osCombo.select(i);
+ break;
+ }
+ }
+ }
}
// leaving this page
if (currentlyVisible && !visible) {
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 380856a1..4920f90c 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
@@ -8,11 +8,12 @@ import org.apache.log4j.Logger;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
-import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.filetransfer.UploadTask;
import org.openslx.dozmod.gui.Gui;
@@ -34,6 +35,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
private UploadWizardState uploadWizardState;
protected final boolean editExistingImage;
+ private String lastDetectedName = null;
public ImageUploadPage(UploadWizardState uploadWizardState, boolean editExistingImage) {
super();
@@ -63,24 +65,31 @@ public class ImageUploadPage extends ImageUploadPageLayout {
}
});
+ // Browse for *.vmx
imageFileBrowseButton.addSelectionListener(new SelectionListener() {
-
@Override
public void widgetSelected(SelectionEvent e) {
- FileDialog dialog = new FileDialog(getWizard().getContainer().getShell(), SWT.OPEN);
- dialog.setFilterNames(new String[] { "VMware Virtuelle Maschine (Beschreibungsdatei)" });
- dialog.setFilterExtensions(new String[] { "*.vmx" });
- dialog.setFilterPath(Config.getUploadPath());
- String ret = dialog.open();
- if (ret != null) {
- vmxSelected(new File(ret).getAbsoluteFile());
- }
+ browseForVm();
}
-
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
+ imageFileTextField.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseUp(MouseEvent e) {
+ if (e.button == 1 && imageFileTextField.getClientArea().contains(e.x, e.y))
+ browseForVm();
+ }
+ @Override
+ public void mouseDown(MouseEvent e) {
+ }
+ @Override
+ public void mouseDoubleClick(MouseEvent e) {
+ }
+ });
+
+ // Start upload
startUploadButton.addSelectionListener(new SelectionListener() {
@Override
@@ -93,10 +102,21 @@ public class ImageUploadPage extends ImageUploadPageLayout {
}
});
startUploadButton.setEnabled(false);
+ imageFileBrowseButton.setFocus();
+ }
+
+ private void browseForVm() {
+ FileDialog dialog = new FileDialog(getWizard().getContainer().getShell(), SWT.OPEN);
+ dialog.setFilterNames(new String[] { "VMware Virtuelle Maschine (Beschreibungsdatei)" });
+ dialog.setFilterExtensions(new String[] { "*.vmx" });
+ dialog.setFilterPath(Config.getUploadPath());
+ String ret = dialog.open();
+ if (ret != null) {
+ vmxSelected(new File(ret).getAbsoluteFile());
+ }
}
private void vmxSelected(File file) {
- // TODO: setErrorMessage(newMessage);
Config.setUploadPath(file.getParent());
VmwareMetaData meta = null;
try {
@@ -124,25 +144,11 @@ public class ImageUploadPage extends ImageUploadPageLayout {
return;
// Allow to continue!?
}
- // OS parsed?
- OperatingSystem os = meta.getOs();
- if (os == null || os.getOsName() == null) {
- LOGGER.error("The selected VMX's OS cannot be determined! Setting default for now.");
- // dont return here, since we let the user the chance to set it in the next page
- } else {
- // add the OS to the state
- uploadWizardState.operatingSystem = os;
- }
- // vmx ok, set it as our description file
- uploadWizardState.descriptionFile = file;
// now check the disk files
File vmDiskFileInfo = new File(hdds.get(0).diskImage);
if (!vmDiskFileInfo.isAbsolute()) {
- // relative path: making a new File would take this application's
- // working direction and the basename of the disk file
- // and result in a potentially existing vmdk file
- // which is not the one we want.
+ // it's relative, compose path using the vmx location
File vmxBaseDirectory = file.getParentFile();
vmDiskFileInfo = new File(vmxBaseDirectory, hdds.get(0).diskImage);
}
@@ -153,14 +159,23 @@ public class ImageUploadPage extends ImageUploadPageLayout {
setPageComplete(false);
return;
}
- if (imageNameTextField.getText().isEmpty()) {
+
+ // vmx ok, set it as our description file
+ uploadWizardState.descriptionFile = file;
+
+ // User didn't enter a name yet or didn't change it -> set
+ String txtName = imageNameTextField.getText();
+ if (txtName.isEmpty() || txtName.equals(lastDetectedName)) {
imageNameTextField.setText(meta.getDisplayName());
}
- uploadWizardState.operatingSystem = meta.getOs();
+ lastDetectedName = meta.getDisplayName();
+
+ uploadWizardState.detectedOs = meta.getOs();
imageFileTextField.setText(file.getAbsolutePath());
// let the user know the upload is ready
setMessage("Sie können jetzt den Upload starten!");
startUploadButton.setEnabled(true);
+ startUploadButton.setFocus();
}
/* Override setVisible() to inject some code when this page is set visible
@@ -172,7 +187,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
public void setVisible(boolean visible) {
if (getControl().isVisible() && !visible) {
LOGGER.debug("Leaving ImageUploadPage...");
-
+ } else if (!getControl().isVisible() && visible) {
+ //
}
super.setVisible(visible);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
index d22e26c8..e768414a 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java
@@ -16,7 +16,9 @@ public class UploadWizardState {
// description of the virtual machine as entered by the user
public String description = null;
// operating system of the virtual machine to be uploaded
- public OperatingSystem operatingSystem = null;
+ public OperatingSystem selectedOs = null;
+ // What we got from the vmx
+ public OperatingSystem detectedOs = null;
// description file of the virtual machine to be uploaded
public File descriptionFile = null;
// disk file of the virtual machine to be uploaded