diff options
Diffstat (limited to 'dozentenmodul/src')
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 |