From 782fa952152f46182e10a9c3e580384a1fa211dc Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 23 Jul 2015 14:09:33 +0200 Subject: [client] Adapt to RPC/VmMeta changes, store VmMeta in upload wizard state --- .../org/openslx/dozmod/gui/wizard/ImageWizard.java | 30 +------- .../dozmod/gui/wizard/page/ImageMetaDataPage.java | 21 +++--- .../dozmod/gui/wizard/page/ImageUploadPage.java | 83 +++++++++++----------- .../openslx/dozmod/state/UploadWizardState.java | 9 ++- 4 files changed, 59 insertions(+), 84 deletions(-) (limited to 'dozentenmodul/src/main/java') 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 3f56f586..21bda601 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 @@ -62,16 +62,6 @@ public class ImageWizard extends Wizard { LOGGER.error("Invalid state!"); return false; } else { - LOGGER.debug(uploadWizardState.name); - LOGGER.debug(uploadWizardState.description); - LOGGER.debug(uploadWizardState.descriptionFile.toString()); - LOGGER.debug(uploadWizardState.diskFile.toString()); - LOGGER.debug(uploadWizardState.selectedOs.toString()); - LOGGER.debug(uploadWizardState.virtualizer.toString()); - LOGGER.debug(uploadWizardState.isTemplate); - LOGGER.debug(uploadWizardState.permissions.toString()); - LOGGER.debug(uploadWizardState.shareMode.toString()); - LOGGER.debug(uploadWizardState.uuid.toString()); // TODO run the actually request over external threaded class try { // push to sat @@ -160,27 +150,13 @@ public class ImageWizard extends Wizard { return false; } } - if (uploadWizardState.virtualizer == null) { - LOGGER.error("No virtualizer set in state!"); + if (uploadWizardState.meta == null) { + LOGGER.error("No vm meta data set in state!"); return false; - } else { - if (!(uploadWizardState.virtualizer.isSetVirtId() - && uploadWizardState.virtualizer.isSetVirtName())) { - LOGGER.error("Virtualizer has missing fields: " + uploadWizardState.virtualizer.toString()); - return false; - } } if (uploadWizardState.permissions == null) { LOGGER.error("No permissions set in state!"); return false; - } else { - if (!(uploadWizardState.permissions.isSetAdmin() - && uploadWizardState.permissions.isSetDownload() - && uploadWizardState.permissions.isSetEdit() - && uploadWizardState.permissions.isSetLink())) { - LOGGER.error("Virtualizer has missing fields: " + uploadWizardState.selectedOs.toString()); - return false; - } } if (uploadWizardState.shareMode == null) { LOGGER.error("No share mode set in state!"); @@ -199,7 +175,7 @@ public class ImageWizard extends Wizard { uploadWizardState.name, uploadWizardState.description, uploadWizardState.selectedOs.getOsId(), - uploadWizardState.virtualizer.getVirtId(), + uploadWizardState.meta.getVirtualizer().getVirtId(), uploadWizardState.isTemplate, uploadWizardState.permissions, uploadWizardState.shareMode); 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 dc234568..ba452299 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 @@ -22,18 +22,17 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageMetaDataPage.class); - private UploadWizardState uploadWizardState; + private UploadWizardState state; public ImageMetaDataPage(UploadWizardState uploadWizardState) { super(); - this.uploadWizardState = uploadWizardState; + this.state = uploadWizardState; setPageComplete(false); setMessage("Bitte wählen Sie das Betriebssystem aus und fügen Sie eine Beschreibung hinzu."); // HACK set fixed uploadWizardState to test functions uploadWizardState.isTemplate = false; uploadWizardState.permissions = new ImagePermissions(true, false, true, false); uploadWizardState.shareMode = ShareMode.LOCAL; - uploadWizardState.virtualizer = MetaDataCache.getVirtualizers().get(0); } @Override @@ -75,25 +74,25 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { readPermissionsCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - uploadWizardState.permissions.download = readPermissionsCheck.getSelection(); + state.permissions.download = readPermissionsCheck.getSelection(); } }); linkPermissionsCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - uploadWizardState.permissions.link = linkPermissionsCheck.getSelection(); + state.permissions.link = linkPermissionsCheck.getSelection(); } }); writePermissionsCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - uploadWizardState.permissions.edit = writePermissionsCheck.getSelection(); + state.permissions.edit = writePermissionsCheck.getSelection(); } }); adminPermissionsCheck.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - uploadWizardState.permissions.admin = adminPermissionsCheck.getSelection(); + state.permissions.admin = adminPermissionsCheck.getSelection(); } }); // -- end checkboxes for permissions -- @@ -110,9 +109,9 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { if (!currentlyVisible && visible) { LOGGER.debug("Entering page..."); // Preselect OS if possible - if (uploadWizardState.selectedOs == null && uploadWizardState.detectedOs != null) { + if (state.selectedOs == null && state.detectedOs != null) { for (int i = 0; i < osCombo.getItemCount(); ++i) { - if (uploadWizardState.detectedOs.getOsName().equals(osCombo.getItem(i))) { + if (state.detectedOs.getOsName().equals(osCombo.getItem(i))) { osCombo.select(i); break; } @@ -160,7 +159,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { } } else { // OS selected, save it to state - uploadWizardState.selectedOs = (OperatingSystem) osCombo.getData(osCombo.getItem(selectionIndex)); + state.selectedOs = (OperatingSystem) osCombo.getData(osCombo.getItem(selectionIndex)); if (descriptionInput.isEmpty()) { // OS set, no description setMessage("Fügen Sie eine Beschreibung hinzu."); @@ -170,7 +169,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { } } // always save the description input, even if empty. - uploadWizardState.description = descriptionInput; + state.description = descriptionInput; // final step: check if we can continue or not setPageComplete(selectionIndex != -1 && !descriptionInput.isEmpty()); } 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 4f9ed944..041627d9 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 @@ -36,7 +36,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { private final static Logger LOGGER = Logger.getLogger(ImageUploadPage.class); - private UploadWizardState uploadWizardState; + private UploadWizardState state; protected final boolean editExistingImage; private String lastDetectedName = null; @@ -44,7 +44,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { super(); setPageComplete(false); this.editExistingImage = editExistingImage; - this.uploadWizardState = uploadWizardState; + this.state = uploadWizardState; setMessage("Bitte wählen Sie eine virtuelle Maschine zum Hochladen aus."); } @@ -56,9 +56,8 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void keyReleased(KeyEvent e) { if (!imageNameTextField.getText().isEmpty()) { - setPageComplete(uploadWizardState.descriptionFile != null - && uploadWizardState.uuid != null - && uploadWizardState.transferInformation != null); + setPageComplete(state.descriptionFile != null && state.uuid != null + && state.transferInformation != null); } else setPageComplete(false); } @@ -113,21 +112,20 @@ public class ImageUploadPage extends ImageUploadPageLayout { private void vmxSelected(File file) { Config.setUploadPath(file.getParent()); - VmwareMetaData meta = null; try { - meta = new VmwareMetaData(MetaDataCache.getOperatingSystems(), file); + state.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) { + if (state.meta == null || state.meta.getDisplayName() == null) { setErrorMessage("Keine gültige vmx-Datei ausgewählt!"); setPageComplete(false); return; } - List hdds = meta.getHdds(); + List hdds = state.meta.getHdds(); if (hdds.size() == 0 || hdds.get(0).diskImage == null) { setErrorMessage("Die gewählte VM enthält keine HDD"); setPageComplete(false); @@ -148,7 +146,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { vmDiskFileInfo = new File(vmxBaseDirectory, hdds.get(0).diskImage); } if (vmDiskFileInfo.canRead()) { - uploadWizardState.diskFile = vmDiskFileInfo; + state.diskFile = vmDiskFileInfo; } else { setErrorMessage("'" + vmDiskFileInfo.getPath() + "' kann nicht gelesen werden!"); setPageComplete(false); @@ -156,18 +154,19 @@ public class ImageUploadPage extends ImageUploadPageLayout { } // vmx ok, set it as our description file - uploadWizardState.descriptionFile = file; + state.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()); + imageNameTextField.setText(state.meta.getDisplayName()); } - lastDetectedName = meta.getDisplayName(); + lastDetectedName = state.meta.getDisplayName(); - uploadWizardState.detectedOs = meta.getOs(); + state.detectedOs = state.meta.getOs(); imageFileTextField.setText(file.getAbsolutePath()); // let the user know the upload is ready + setErrorMessage(null); setMessage("Sie können jetzt den Upload starten!"); startUploadButton.setEnabled(true); startUploadButton.setFocus(); @@ -207,7 +206,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { private void createAndUploadImage() { // first get the image name from the field // (either auto filled by VmwareMetaData or by user) - uploadWizardState.name = imageNameTextField.getText(); + state.name = imageNameTextField.getText(); // schedule task to create the image if we have no UUID // and to request the upload once we received that UUID. @@ -215,41 +214,40 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void fire() { // -- create image -- - if (uploadWizardState.uuid == null) { + if (state.uuid == null) { LOGGER.debug("Creating image..."); try { - uploadWizardState.uuid = ThriftManager.getSatClient().createImage( - Session.getSatelliteToken(), uploadWizardState.name); + state.uuid = ThriftManager.getSatClient().createImage(Session.getSatelliteToken(), + state.name); } catch (Exception e) { LOGGER.error("Error while creating image: ", e); } } - if (uploadWizardState.transferInformation == null && uploadWizardState.uuid != null) { + if (state.transferInformation == null && state.uuid != null) { // -- request upload -- LOGGER.debug("Requesting upload..."); try { - uploadWizardState.transferInformation = ThriftManager.getSatClient() - .requestImageVersionUpload(Session.getSatelliteToken(), - uploadWizardState.uuid, uploadWizardState.diskFile.length(), null); + state.transferInformation = ThriftManager.getSatClient().requestImageVersionUpload( + Session.getSatelliteToken(), state.uuid, state.diskFile.length(), null, + state.meta.getFilteredDefinition()); } catch (Exception e) { - LOGGER.error("Error while requesting download for: " + uploadWizardState.uuid, e); + LOGGER.error("Error while requesting download for: " + state.uuid, e); } } - if (uploadWizardState.uploadTask == null && uploadWizardState.transferInformation != null - && uploadWizardState.uuid != null) { + if (state.uploadTask == null && state.transferInformation != null && state.uuid != null) { // do actually start the upload now - LOGGER.debug("Starting upload for : " + uploadWizardState.diskFile.toPath()); + LOGGER.debug("Starting upload for : " + state.diskFile.toPath()); try { - uploadWizardState.uploadTask = new UploadTask(Session.getSatelliteAddress(), - uploadWizardState.transferInformation.getPlainPort(), - uploadWizardState.transferInformation.getToken(), uploadWizardState.diskFile); + state.uploadTask = new UploadTask(Session.getSatelliteAddress(), + state.transferInformation.getPlainPort(), + state.transferInformation.getToken(), state.diskFile); } catch (FileNotFoundException e) { MainWindow.showMessageBox("Cannot upload file: Not found", MessageType.ERROR, LOGGER, e); return; } // -- add listener for upload status/progress -- - uploadWizardState.uploadTask.addListener(new TransferEventListener() { + state.uploadTask.addListener(new TransferEventListener() { @Override public void update(final TransferEvent event) { final TransferEventListener listener = this; @@ -262,7 +260,7 @@ public class ImageUploadPage extends ImageUploadPageLayout { }); } }); - new Thread(uploadWizardState.uploadTask).start(); + new Thread(state.uploadTask).start(); } Gui.display.asyncExec(new Runnable() { @Override @@ -296,18 +294,18 @@ public class ImageUploadPage extends ImageUploadPageLayout { imageFileBrowseButton.setEnabled(false); imageFileTextField.setEnabled(false); // -- check image creation -- - if (uploadWizardState.uuid == null) { + if (state.uuid == null) { LOGGER.debug("No UUID in upload state!"); setErrorMessage("Konnte das Image nicht auf dem Satelliten erstellen!"); - } else if (uploadWizardState.transferInformation == null) { + } else if (state.transferInformation == null) { LOGGER.debug("No transfer information in upload state!"); setErrorMessage("Fehler bei der Upload-Anfrage!"); - } else if (uploadWizardState.uploadTask != null) { + } else if (state.uploadTask != null) { cancelUpload.setVisible(true); blockProgressBar.setVisible(true); setMessage("Der Upload wurde gestartet"); } - setPageComplete(uploadWizardState.uploadTask != null); + setPageComplete(state.uploadTask != null); } /** @@ -318,8 +316,8 @@ public class ImageUploadPage extends ImageUploadPageLayout { */ private void processTransferStatus(TransferEventListener listener, TransferEvent event) { if (getControl().isDisposed()) { - if (uploadWizardState.uploadTask != null) { - uploadWizardState.uploadTask.removeListener(listener); + if (state.uploadTask != null) { + state.uploadTask.removeListener(listener); } return; } @@ -337,12 +335,12 @@ public class ImageUploadPage extends ImageUploadPageLayout { MainWindow.showMessageBox("Upload abgeschlossen.", MessageType.INFO, LOGGER, null); break; case ERROR: - if (uploadWizardState.uploadTask != null && uploadWizardState.uploadTask.isCanceled()) + if (state.uploadTask != null && state.uploadTask.isCanceled()) return; if (MainWindow.showMessageBox("Fehler beim Upload: " + event.errorMessage + "\nNochmal versuchen?", MessageType.ERROR_RETRY, LOGGER, null)) { // user wants to try again, just reset transferInformation ... - uploadWizardState.uploadTask = null; + state.uploadTask = null; // ... since this function will then do the upload process again. createAndUploadImage(); } @@ -363,13 +361,12 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void fire() { try { - ThriftManager.getSatClient().cancelUpload( - uploadWizardState.transferInformation.getToken()); + ThriftManager.getSatClient().cancelUpload(state.transferInformation.getToken()); } catch (Exception e) { - LOGGER.debug("Remote error while canceling upload for " + uploadWizardState.uuid, e); + LOGGER.debug("Remote error while canceling upload for " + state.uuid, e); } // Then cancel the task - uploadWizardState.uploadTask.cancel(); + state.uploadTask.cancel(); Gui.asyncExec(new Runnable() { @Override public void run() { 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 0bf48732..a9366305 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java @@ -7,8 +7,8 @@ import org.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.bwlp.thrift.iface.ShareMode; import org.openslx.bwlp.thrift.iface.TransferInformation; -import org.openslx.bwlp.thrift.iface.Virtualizer; import org.openslx.dozmod.filetransfer.UploadTask; +import org.openslx.util.vm.VmMetaData; public class UploadWizardState { // -- objects of the GUI itself -- @@ -26,8 +26,6 @@ public class UploadWizardState { public File diskFile = null; // flags an image as a template public Boolean isTemplate = null; - // virtualizer for this image (vmware, vbox..) - public Virtualizer virtualizer = null; // permissions assigned to that image by the user // TODO: defaults per sat public ImagePermissions permissions = null; @@ -44,4 +42,9 @@ public class UploadWizardState { * The upload task representing this new VM */ public UploadTask uploadTask = null; + + /** + * Meta data (description file content) of this VM + */ + public VmMetaData meta = null; } -- cgit v1.2.3-55-g7522