diff options
author | Jonathan Bauer | 2015-07-14 00:30:10 +0200 |
---|---|---|
committer | Jonathan Bauer | 2015-07-14 00:30:10 +0200 |
commit | 9875e5350bdd4749c99d20d8b1e9594f6377b459 (patch) | |
tree | ee8bf74bf2c8d5639bbc3673182d08a5f32d35cd /dozentenmodul | |
parent | never commit in a hurry .............. (diff) | |
download | tutor-module-9875e5350bdd4749c99d20d8b1e9594f6377b459.tar.gz tutor-module-9875e5350bdd4749c99d20d8b1e9594f6377b459.tar.xz tutor-module-9875e5350bdd4749c99d20d8b1e9594f6377b459.zip |
[client] first steps towards actually uploading an image through API
set some defaults permissions in uploadWizardState and various other fields of imageBaseWrite for testing purposes.
Implemented some actually functionality of ImageMetaDataPage like checkboxes and description etc
Diffstat (limited to 'dozentenmodul')
6 files changed, 178 insertions, 29 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/MainMenuWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/MainMenuWindow.java index 3fafd51f..7b2fa94b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/MainMenuWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/MainMenuWindow.java @@ -1,14 +1,10 @@ package org.openslx.dozmod.gui.window; -import java.io.File; - import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Shell; -import org.openslx.dozmod.filetransfer.UploadTask; import org.openslx.dozmod.gui.MainWindow; import org.openslx.dozmod.gui.window.layout.MainMenuWindowLayout; -import org.openslx.dozmod.thrift.Session; public class MainMenuWindow extends MainMenuWindowLayout { 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 eddcd516..804760dd 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 @@ -45,6 +45,19 @@ public class ImageWizard extends Wizard { @Override public boolean performFinish() { + // since we only started the download and created a "blank" image entry + // we can here do all the sanity checks on the fields of UploadWizardState + // and react accordingly. + LOGGER.debug(uploadWizardState.isTemplate); + LOGGER.debug(uploadWizardState.vmDescription); + LOGGER.debug(uploadWizardState.vmDiskFile); + LOGGER.debug(uploadWizardState.vmName); + LOGGER.debug(uploadWizardState.vmOperatingSystem.getOsName()); + LOGGER.debug(uploadWizardState.vmVirtualizer.getVirtName()); + LOGGER.debug(uploadWizardState.vmPerms.toString()); + LOGGER.debug(uploadWizardState.vmShareMode.toString()); + LOGGER.debug(uploadWizardState.vmUuid.toString()); + LOGGER.debug(uploadWizardState.vmDescriptionFile.toString()); MainWindow.showMessageBox("Would continue uploading now :)", MessageType.INFO, LOGGER, null); return true; } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java index 67cfb045..4294a727 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java @@ -64,6 +64,7 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { Label licencedSoftwareCaption = new Label(container, SWT.NONE); licencedSoftwareCaption.setText("Image enthält lizenzpflichtige Software"); licencedSoftwareCheck = new Button(container, SWT.CHECK); + licencedSoftwareCheck.setSelection(true); Group permissionsGroup = new Group(container, SWT.BORDER); gd = new GridData(); @@ -76,10 +77,12 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { readPermissionsCheck = new Button(permissionsGroup, SWT.CHECK); readPermissionsCheck.setText("Lesen"); + readPermissionsCheck.setSelection(true); writePermissionsCheck = new Button(permissionsGroup, SWT.CHECK); writePermissionsCheck.setText("Schreiben"); linkPermissionsCheck = new Button(permissionsGroup, SWT.CHECK); linkPermissionsCheck.setText("Verlinken"); + linkPermissionsCheck.setSelection(true); adminPermissionsCheck = new Button(permissionsGroup, SWT.CHECK); adminPermissionsCheck.setText("Admin"); 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 a150433e..b20f818d 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 @@ -1,16 +1,27 @@ package org.openslx.dozmod.gui.wizard.page; +import java.io.File; +import java.lang.reflect.Field; import java.util.List; import org.apache.log4j.Logger; +import org.apache.thrift.TException; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; +import org.openslx.bwlp.thrift.iface.ImageBaseWrite; +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.Virtualizer; import org.openslx.dozmod.gui.helper.Gui; import org.openslx.dozmod.gui.wizard.layout.ImageMetaDataPageLayout; 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; @@ -24,6 +35,16 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { super(); this.uploadWizardState = uploadWizardState; setPageComplete(false); + + // HACK set fixed uploadWizardState to test functions + uploadWizardState.vmDiskFile = uploadWizardState.vmDescriptionFile; + uploadWizardState.isTemplate = false; + uploadWizardState.vmPerms = new ImagePermissions(true, false, true, false); + uploadWizardState.vmShareMode = ShareMode.LOCAL; +// uploadWizardState.vmVirtualizer = MetaDataCache.getVirtualizers().get(0); + uploadWizardState.vmVirtualizer = new Virtualizer("0", "FakeVirt"); + uploadWizardState.vmOperatingSystem = MetaDataCache.getOperatingSystems().get(0); + } @Override @@ -55,9 +76,38 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { @Override public void keyReleased(KeyEvent e) { - setPageComplete(!descriptionText.getText().isEmpty()); + if (!descriptionText.getText().isEmpty()) { + uploadWizardState.vmDescription = descriptionText.getText(); + setPageComplete(true); + } + } + }); + // -- checkboxes for permissions -- + readPermissionsCheck.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + uploadWizardState.vmPerms.download = readPermissionsCheck.getSelection(); + } + }); + linkPermissionsCheck.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + uploadWizardState.vmPerms.link = linkPermissionsCheck.getSelection(); + } + }); + writePermissionsCheck.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + uploadWizardState.vmPerms.edit = writePermissionsCheck.getSelection(); + } + }); + adminPermissionsCheck.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + uploadWizardState.vmPerms.admin = adminPermissionsCheck.getSelection(); } }); + // -- end checkboxes for permissions -- } @@ -68,22 +118,84 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout { */ @Override public void setVisible(boolean visible) { - - if (!getControl().isVisible() && visible) { - LOGGER.debug("Entering ImageMetaDataPage..."); - if (uploadWizardState == null) { - LOGGER.debug("state is null"); - return; - } - LOGGER.debug("vmName: " + - uploadWizardState.vmName == null ? + if (uploadWizardState == null) { + // something bad is happening :( + LOGGER.debug("null state"); + return; + } + boolean currentlyVisible = getControl().isVisible(); + if (!currentlyVisible && visible) { + LOGGER.debug("Entering page..."); + + LOGGER.debug(uploadWizardState.vmName == null ? "null" : uploadWizardState.vmName); LOGGER.debug("vmDescriptionFile: " + uploadWizardState.vmDescriptionFile == null ? "null" : uploadWizardState.vmDescriptionFile.toString()); } + // leaving this page + if (currentlyVisible && !visible) { + LOGGER.debug("Leaving page..."); + // check state + if (validateInput()) { + // build imageBaseWrite + ImageBaseWrite imageBaseWrite = new ImageBaseWrite( + uploadWizardState.vmName, + uploadWizardState.vmDescription, + uploadWizardState.vmOperatingSystem.getOsId(), + uploadWizardState.vmVirtualizer.getVirtId(), + uploadWizardState.isTemplate, + uploadWizardState.vmPerms, + uploadWizardState.vmShareMode); + // push to sat + // TODO run the actually request over external threaded class + try { + ThriftManager.getSatClient().updateImageBase( + Session.getSatelliteToken(), uploadWizardState.vmUuid.toString(), imageBaseWrite); + } catch (TException e) { + LOGGER.error("Fail to push image metadata to satellite: ", e); + // hm here, just nothing for now + } + } + } super.setVisible(visible); } + + private boolean validateInput() { + // debug purposes + if (uploadWizardState.vmOperatingSystem == null) + LOGGER.error("No OS set in state!"); + if (uploadWizardState.vmDescription == null) + LOGGER.error("No description set in state!"); + if (uploadWizardState.vmDiskFile == null) + LOGGER.error("No disk file set in state!"); + if (uploadWizardState.vmOperatingSystem == null) + LOGGER.error("No OS set in state!"); + if (uploadWizardState.vmVirtualizer == null) + LOGGER.error("No virtualizer set in state!"); + if (uploadWizardState.vmPerms == null) + LOGGER.error("No perms set in state!"); + if (uploadWizardState.vmShareMode == null) + LOGGER.error("No share mode set in state!"); + + // compact version go over all fields + for (Field field : UploadWizardState.class.getDeclaredFields()) { + LOGGER.debug(field.toGenericString()); + if (field.equals(null)) { + LOGGER.error("bad"); + return false; + } + } + // regular + return uploadWizardState.isTemplate == null + || uploadWizardState.vmDescription == null + || uploadWizardState.vmDiskFile == null + || uploadWizardState.vmOperatingSystem == null + || uploadWizardState.vmVirtualizer == null + || uploadWizardState.vmPerms == null + || uploadWizardState.vmShareMode == null; + } + /** * @param osList list of OS's to fill the combo with */ 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 e6d77f31..28a9544f 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,7 @@ package org.openslx.dozmod.gui.wizard.page; import java.io.File; +import java.util.UUID; import org.apache.log4j.Logger; import org.eclipse.swt.SWT; @@ -13,6 +14,7 @@ import org.eclipse.swt.widgets.FileDialog; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.wizard.layout.ImageUploadPageLayout; import org.openslx.dozmod.state.UploadWizardState; +import org.openslx.dozmod.thrift.Session; public class ImageUploadPage extends ImageUploadPageLayout { @@ -80,12 +82,28 @@ public class ImageUploadPage extends ImageUploadPageLayout { @Override public void setVisible(boolean visible) { if (getControl().isVisible() && !visible) { - // currently shown and about to be hidden LOGGER.info("Leaving ImageUploadPage..."); - LOGGER.debug(uploadWizardState.vmName == null ? "vmName: null" : "vmName: " + uploadWizardState.vmName + " fopajkws"); - LOGGER.debug("vmDescriptionFile: " + - uploadWizardState.vmDescriptionFile == null ? - "null" : uploadWizardState.vmDescriptionFile.toString()); + // currently shown and about to be hidden = we're switching to another page + if (uploadWizardState.vmUuid == null) { + if (Session.getSatelliteToken() == null) + LOGGER.error("No session token"); + UUID newImageUUID = UUID.randomUUID(); +// try { +// newImageUUID = UUID.fromString(ThriftManager.getSatClient() +// .createImage(Session.getSatelliteToken(), uploadWizardState.vmName)); +// } catch (Exception e) { +// Gui.showMessageBox(getShell(), e.getMessage(), MessageType.ERROR_RETRY, LOGGER, e); +// return; +// } + // all fine + uploadWizardState.vmUuid = newImageUUID; + LOGGER.debug(uploadWizardState.vmName == null ? + "vmName: null" : uploadWizardState.vmName); + LOGGER.debug(uploadWizardState.vmDescriptionFile == null ? + "vmDesc: null" : uploadWizardState.vmDescriptionFile.getAbsolutePath()); + // start upload + } else + LOGGER.debug(uploadWizardState.vmUuid.toString()); } 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 12ce08a1..471132cc 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/state/UploadWizardState.java @@ -1,26 +1,33 @@ package org.openslx.dozmod.state; import java.io.File; +import java.util.UUID; +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.Virtualizer; public class UploadWizardState { - // name of the virtual machine as entered by the user public String vmName; + // description of the virtual machine as entered by the user + public String vmDescription; // operating system of the virtual machine to be uploaded public OperatingSystem vmOperatingSystem; // description file of the virtual machine to be uploaded public File vmDescriptionFile; // disk file of the virtual machine to be uploaded public File vmDiskFile; - - // image metadata holders -// public ImageBaseWrite imageBaseWrite; -// public ImageVersionWrite imageVersionWrite; - - public UploadWizardState() { -// this.imageBaseWrite = new ImageBaseWrite(); -// this.imageVersionWrite = new ImageVersionWrite(); - } + // UUID given returned by the satellite after creating the image + public UUID vmUuid; + // flags an image as a template + public Boolean isTemplate; + // virtualizer for this image (vmware, vbox..) + public Virtualizer vmVirtualizer; + // permissions assigned to that image by the user + // TODO: defaults per sat + public ImagePermissions vmPerms; + // local, publish, download frozen share mode (see bwlp.thrift in mss) + public ShareMode vmShareMode; } |