summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2015-07-29 18:26:05 +0200
committerSimon Rettberg2015-07-29 18:26:05 +0200
commitb4d08e310bb03d8322f996976a2f68043e5abb64 (patch)
tree8f6974fae1b9805f351818f9cb542001c6545a94 /dozentenmodul/src/main/java
parent[client] Get top level window when showing message box with parent (diff)
downloadtutor-module-b4d08e310bb03d8322f996976a2f68043e5abb64.tar.gz
tutor-module-b4d08e310bb03d8322f996976a2f68043e5abb64.tar.xz
tutor-module-b4d08e310bb03d8322f996976a2f68043e5abb64.zip
[client] Started porting wizards to Swing
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/ImageWizard.java27
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java8
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java45
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/WizardPage.java109
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java156
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageUploadPageLayout.java84
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageMetaDataPage.java165
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/page/ImageUploadPage.java142
8 files changed, 389 insertions, 347 deletions
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 3b8f40fe..4a09aa00 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
@@ -1,14 +1,13 @@
package org.openslx.dozmod.gui.wizard;
+import javax.swing.JFrame;
+
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.swt.widgets.TableItem;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
-import org.openslx.dozmod.gui.MainWindow;
+import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.helper.MessageType;
-import org.openslx.dozmod.gui.helper.UserToPermissionLink;
import org.openslx.dozmod.gui.wizard.page.ImageCustomPermissionPage;
import org.openslx.dozmod.gui.wizard.page.ImageMetaDataPage;
import org.openslx.dozmod.gui.wizard.page.ImageUploadPage;
@@ -24,17 +23,14 @@ public class ImageWizard extends Wizard {
protected ImageUploadPage imageUploadPage;
protected ImageMetaDataPage imageMetaDataPage;
protected ImageCustomPermissionPage imageCustomPermissionPage;
- protected boolean editExistingImage;
/**
* Wizard for creating or editing an image
*
* @param editExistingImage whether to create new or edit existing image
*/
- public ImageWizard(boolean editExistingImage) {
- super();
- setNeedsProgressMonitor(true);
- this.editExistingImage = editExistingImage;
+ public ImageWizard(JFrame parent) {
+ super(parent);
this.uploadWizardState = new UploadWizardState();
}
@@ -47,7 +43,7 @@ public class ImageWizard extends Wizard {
@Override
public void addPages() {
// create the shared object for all pages of the wizard
- imageUploadPage = new ImageUploadPage(uploadWizardState, editExistingImage);
+ imageUploadPage = new ImageUploadPage(uploadWizardState);
imageMetaDataPage = new ImageMetaDataPage(uploadWizardState);
imageCustomPermissionPage = new ImageCustomPermissionPage(uploadWizardState);
addPage(imageUploadPage);
@@ -57,13 +53,8 @@ public class ImageWizard extends Wizard {
@Override
public boolean performFinish() {
- // evaluate table state and create the map of permissions
- for (TableItem tc : imageCustomPermissionPage.getTable().getItems()) {
- if (tc.getData() instanceof UserToPermissionLink) {
- UserToPermissionLink upl = (UserToPermissionLink) tc.getData();
- LOGGER.debug(upl.getUserId() + " has permissions: " + upl.getPermission());
- }
- }
+ // TODO evaluate table state and create the map of permissions
+ //
// 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.
@@ -105,7 +96,7 @@ public class ImageWizard extends Wizard {
return false;
}
- MainWindow.showMessageBox("Creation of image worked :)", MessageType.INFO, LOGGER, null);
+ Gui.showMessageBox(this, "Creation of image worked :)", MessageType.INFO, LOGGER, null);
return true;
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java
index 87348e16..e34d93b3 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/LectureWizard.java
@@ -1,7 +1,8 @@
package org.openslx.dozmod.gui.wizard;
+import javax.swing.JFrame;
+
import org.apache.log4j.Logger;
-import org.eclipse.jface.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.layout.LectureCreationPageLayout;
import org.openslx.dozmod.gui.wizard.page.LectureCreationPage;
import org.openslx.dozmod.gui.wizard.page.LectureCustomPermissionPage;
@@ -18,9 +19,8 @@ public class LectureWizard extends Wizard {
* Wizard for creating or editing a lecture
* @param editExistingLecture whether to create new or edit existing lecture
*/
- public LectureWizard(boolean editExistingLecture) {
- super();
- setNeedsProgressMonitor(true);
+ public LectureWizard(JFrame parent, boolean editExistingLecture) {
+ super(parent);
this.editExistingLecture = editExistingLecture;
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java
new file mode 100644
index 00000000..cf785d7c
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java
@@ -0,0 +1,45 @@
+package org.openslx.dozmod.gui.wizard;
+
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+
+@SuppressWarnings("serial")
+public abstract class Wizard extends JDialog {
+
+ public Wizard(JFrame parent) {
+ super(parent, ModalityType.APPLICATION_MODAL);
+ }
+
+ public String getWindowTitle() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ protected abstract void addPages();
+
+ protected final void addPage(WizardPage page) {
+ // TODO Auto-generated method stub
+ }
+
+ /**
+ * Called when user clicks finish. Override to do final checks and take
+ * appropriate actions.
+ *
+ * @return <code>true</code> if finish is allowed/succeeded,
+ * <code>false</code> otherwise
+ */
+ public boolean performFinish() {
+ return true;
+ }
+
+ void updateHeader() {
+ // TODO Auto-generated method stub
+
+ }
+
+ void updateButtons() {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/WizardPage.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/WizardPage.java
new file mode 100644
index 00000000..880e3eae
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/WizardPage.java
@@ -0,0 +1,109 @@
+package org.openslx.dozmod.gui.wizard;
+
+import javax.swing.JPanel;
+
+public abstract class WizardPage extends JPanel {
+
+ private final String title;
+
+ private String description = null;
+
+ private String message = null;
+
+ private boolean isError = false;
+
+ private boolean isComplete = false;
+
+ private Wizard wizard = null;
+
+ /**
+ * Whether the user is allowed to go back to this page once they clicked
+ * next.
+ */
+ protected boolean canComeBack = true;
+
+ public WizardPage(String title) {
+ this.title = title;
+ }
+
+ public String getTitle() {
+ return this.title;
+ }
+
+ private void updateHeader() {
+ if (this.wizard != null)
+ this.wizard.updateHeader();
+ }
+
+ /*
+ * Feedback from the pages
+ */
+
+ /**
+ * Called when the user wants to advance to the next page. You have the
+ * chance to run some sanity checks and return false if you want to prevent
+ * the user from switching the page, but in general it is recommended to
+ * disable the next button as long as there are errors in the current page.
+ *
+ * @return true allows to flip the page, false cancels
+ */
+ protected boolean goNext() {
+ return isComplete;
+ }
+
+ /**
+ * Called when the page is being shown. This can be caused by three possible events:
+ * 1) The wizard opens and this is the fist page
+ * 2) The user clicked "Previous" and this is the previous page
+ * 3) The user clicked "Next" and this is the next page
+ */
+ protected void onPageEnter() {
+ }
+
+ /**
+ * Called when the page is being hidden. This can be caused by three possible events:
+ * 1) The user clicked finish and this is the page currently displayed
+ * 2) The user clicked "Previous" and this is the current page
+ * 3) The user clicked "Next" and this is the current page
+ */
+ protected void onPageLeave() {
+ }
+
+ /*
+ * Setters from derived classes
+ */
+
+ protected void setPageComplete(boolean b) {
+ isComplete = b;
+ if (wizard != null)
+ wizard.updateButtons();
+ }
+
+ protected void setDescription(String description) {
+ this.description = description;
+ this.updateHeader();
+ }
+
+ protected void setErrorMessage(String message) {
+ this.message = message;
+ this.isError = true;
+ this.updateHeader();
+ }
+
+ protected void setWarningMessage(String message) {
+ this.message = message;
+ this.isError = false;
+ this.updateHeader();
+ }
+
+ /*
+ * Setters from Wizard
+ */
+
+ void setWizard(Wizard wizard) {
+ if (this.wizard != null)
+ throw new IllegalStateException("Parent Wizard already set");
+ this.wizard = wizard;
+ }
+
+}
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 ccc66190..74f0055d 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
@@ -1,97 +1,89 @@
package org.openslx.dozmod.gui.wizard.layout;
-
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-
-
-
+import java.awt.Component;
+import java.awt.GridBagLayout;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JTextArea;
+import javax.swing.border.TitledBorder;
+
+import org.openslx.bwlp.thrift.iface.OperatingSystem;
+import org.openslx.dozmod.gui.helper.GridPos;
+import org.openslx.dozmod.gui.wizard.WizardPage;
+
+@SuppressWarnings("serial")
public abstract class ImageMetaDataPageLayout extends WizardPage {
- protected Composite container;
-
- protected Combo osCombo;
- protected Text descriptionText;
- protected Button licencedSoftwareCheck;
- protected Button setActiveCheck;
-
- // permissions checks
- protected Button readPermissionsCheck;
- protected Button writePermissionsCheck;
- protected Button linkPermissionsCheck;
- protected Button adminPermissionsCheck;
-
+ protected JComboBox<OperatingSystem> osCombo;
+ protected JTextArea descriptionText;
+ protected JCheckBox licencedSoftwareCheck;
+ protected JCheckBox setActiveCheck;
+ // permissions checks
+ protected JCheckBox readPermissionsCheck;
+ protected JCheckBox writePermissionsCheck;
+ protected JCheckBox linkPermissionsCheck;
+ protected JCheckBox adminPermissionsCheck;
/**
* wizard page for entering image data at creating or editing an image
*/
+ @SuppressWarnings("serial")
public ImageMetaDataPageLayout() {
- super("Eingabe Ihrer Daten", "Eingabe Ihrer Daten", null);
+ super("Metadaten");
setDescription("Geben Sie bitte einen aussagekräftigen Namen für das neue Image ein.");
- }
-
-
-
- @Override
- public void createControl(Composite parent) {
- container = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- container.setLayout(layout);
- layout.numColumns = 2;
-
- GridData gd = new GridData(GridData.FILL_HORIZONTAL);
-
- Label osCaption = new Label(container, SWT.NONE);
- osCaption.setText("Betriebssystem:");
- osCombo = new Combo(container, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
- osCombo.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false));
-
- Label descriptionCation = new Label(container, SWT.NONE);
- descriptionCation.setText("Beschreibung:");
- descriptionText = new Text(container, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
- gd.heightHint = 80;
- descriptionText.setLayoutData(gd);
-
- Label setActiveLabel = new Label(container, SWT.NONE);
- setActiveLabel.setText("Image aktivieren");
- setActiveCheck = new Button(container, SWT.CHECK);
-
-
- 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();
- gd.horizontalSpan = 2;
- permissionsGroup.setLayoutData(gd);
-
-
- permissionsGroup.setText("Standardberechtigungen");
- permissionsGroup.setLayout(new GridLayout(4, true));
-
- 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");
- setControl(container);
+ setLayout(new GridBagLayout());
+
+ JLabel osCaption = new JLabel("Betriebssystem");
+ osCombo = new JComboBox<>();
+ osCombo.setEditable(false);
+ osCombo.setRenderer(new DefaultListCellRenderer() {
+ @Override
+ public Component getListCellRendererComponent(JList<?> list, Object value, int index,
+ boolean isSelected, boolean cellHasFocus) {
+ if (value instanceof OperatingSystem) {
+ OperatingSystem org = (OperatingSystem) value;
+ setText(org.getOsName());
+ }
+ return this;
+ }
+ });
+ add(osCaption, GridPos.get(0, 0));
+ add(osCombo, GridPos.get(1, 0));
+
+ JLabel descriptionCation = new JLabel("Beschreibung");
+ descriptionText = new JTextArea(3, 50);
+ add(descriptionCation, GridPos.get(0, 1));
+ add(descriptionText, GridPos.get(1, 1, true, false));
+
+ setActiveCheck = new JCheckBox("Image aktivieren");
+ add(setActiveCheck, GridPos.get(0, 2));
+ licencedSoftwareCheck = new JCheckBox("Image enthält lizenzpflichtige Software");
+ licencedSoftwareCheck.setSelected(true);
+ add(setActiveCheck, GridPos.get(0, 3));
+
+ // -- default permissions group --
+ JPanel permissionsGroup = new JPanel();
+ permissionsGroup.setBorder(new TitledBorder("Standardberechtigungen"));
+
+ linkPermissionsCheck = new JCheckBox("Verlinken");
+ linkPermissionsCheck.setSelected(true);
+ readPermissionsCheck = new JCheckBox("Herunterladen");
+ readPermissionsCheck.setSelected(true);
+ writePermissionsCheck = new JCheckBox("Bearbeiten");
+ adminPermissionsCheck = new JCheckBox("Administrieren");
+ permissionsGroup.add(linkPermissionsCheck);
+ permissionsGroup.add(readPermissionsCheck);
+ permissionsGroup.add(writePermissionsCheck);
+ permissionsGroup.add(adminPermissionsCheck);
+ add(permissionsGroup, GridPos.get(0, 4, 2, 1, true, false));
+ // -- end permissions group --
}
public String getImageDescription() {
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 e0b074ef..616f5088 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
@@ -1,24 +1,25 @@
package org.openslx.dozmod.gui.wizard.layout;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
+import java.awt.Dimension;
+import java.awt.GridBagLayout;
+import java.awt.event.KeyEvent;
+
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
import org.openslx.dozmod.gui.control.BlockProgressBar;
+import org.openslx.dozmod.gui.helper.GridPos;
+import org.openslx.dozmod.gui.wizard.WizardPage;
+@SuppressWarnings("serial")
public abstract class ImageUploadPageLayout extends WizardPage {
- protected Text imageNameTextField;
- protected Composite container;
- protected Button imageFileBrowseButton;
- protected Text imageFileTextField;
- protected Button startUploadButton;
+ protected JTextField imageNameTextField;
+ protected JButton imageFileBrowseButton;
+ protected JTextField imageFileTextField;
+ protected JButton startUploadButton;
protected BlockProgressBar blockProgressBar;
- protected Button cancelUpload;
/**
* Page for uploading an imagefile
@@ -28,45 +29,30 @@ public abstract class ImageUploadPageLayout extends WizardPage {
*/
public ImageUploadPageLayout() {
super("Neue VM anlegen");
- setTitle("Neue VM anlegen");
- setDescription("Wählen Sie bitte zunächst die VM auf Ihrem lokalen Speicher aus");
- }
-
- @Override
- public void createControl(Composite parent) {
- container = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.verticalSpacing = 16;
- container.setLayout(layout);
- layout.numColumns = 3;
+ setDescription("Bitte wählen Sie eine virtuelle Maschine zum Hochladen aus.");
+ setLayout(new GridBagLayout());
// -- Browse for VM --
- Label imageFileCaption = new Label(container, SWT.NONE);
- imageFileCaption.setText("Virtuelle Maschine");
- imageFileTextField = new Text(container, SWT.BORDER | SWT.SINGLE);
+ JLabel imageFileCaption = new JLabel("Virtuelle Maschine");
+ imageFileTextField = new JTextField();
imageFileTextField.setEditable(false);
- imageFileTextField.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
- imageFileBrowseButton = new Button(container, SWT.PUSH);
- imageFileBrowseButton.setText("&Browse");
+ imageFileBrowseButton = new JButton("Browse");
+ imageFileBrowseButton.setMnemonic(KeyEvent.VK_B);
+ add(imageFileCaption, GridPos.get(0, 0));
+ add(imageFileTextField, GridPos.get(1, 0, true, false));
+ add(imageFileBrowseButton, GridPos.get(2, 0));
// -- Name --
- Label imageNameCaption = new Label(container, SWT.NONE);
- imageNameCaption.setText("Name des Images");
- imageNameTextField = new Text(container, SWT.BORDER | SWT.SINGLE);
- imageNameTextField.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1));
- startUploadButton = new Button(container, SWT.PUSH);
- startUploadButton.setText("&Upload starten");
- startUploadButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 3, 1));
-
- blockProgressBar = new BlockProgressBar(container, null);
- GridData gdBlockProgressBar = new GridData(SWT.FILL, SWT.DOWN, true, true, 2, 1);
- gdBlockProgressBar.heightHint = 30;
- blockProgressBar.setLayoutData(gdBlockProgressBar);
-
- cancelUpload = new Button(container, SWT.PUSH);
- cancelUpload.setText("&Abbrechen");
- cancelUpload.setLayoutData(new GridData(SWT.CENTER, SWT.BOTTOM, false, true));
-
- setControl(container);
+ JLabel imageNameCaption = new JLabel("Name des Images");
+ imageNameTextField = new JTextField();
+ startUploadButton = new JButton("Upload starten");
+ startUploadButton.setMnemonic(KeyEvent.VK_U);
+ add(imageNameCaption, GridPos.get(0, 1));
+ add(imageNameTextField, GridPos.get(1, 1, true, false));
+ add(startUploadButton, GridPos.get(2, 1));
+
+ blockProgressBar = new BlockProgressBar(null);
+ blockProgressBar.setPreferredSize(new Dimension(200, 50));
+ add(blockProgressBar, GridPos.get(0, 1, 3, 1));
}
}
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 795cf458..ac33bd06 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,13 +1,13 @@
package org.openslx.dozmod.gui.wizard.page;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
import java.util.List;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
import org.apache.log4j.Logger;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
@@ -18,6 +18,7 @@ import org.openslx.dozmod.thrift.MetaDataCache;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
+@SuppressWarnings("serial")
public class ImageMetaDataPage extends ImageMetaDataPageLayout {
private final static Logger LOGGER = Logger.getLogger(ImageMetaDataPage.class);
@@ -28,16 +29,9 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
super();
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;
- }
-
- @Override
- public void createControl(Composite parent) {
- super.createControl(parent);
// fetch the OS list
QuickTimer.scheduleOnce(new Task() {
@@ -48,7 +42,7 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
osList = MetaDataCache.getOperatingSystems();
// now send the organizations back to the LoginWindow
// through populateIdpCombo()
- Gui.display.asyncExec(new Runnable() {
+ Gui.asyncExec(new Runnable() {
@Override
public void run() {
fillOsCombo(osList);
@@ -57,90 +51,52 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
}
});
- osCombo.addSelectionListener(new SelectionAdapter() {
+ osCombo.addItemListener(new ItemListener() {
@Override
- public void widgetSelected(SelectionEvent e) {
- reactToUserInput();
+ public void itemStateChanged(ItemEvent e) {
+ if (e.getStateChange() == ItemEvent.SELECTED) {
+ reactToUserInput();
+ }
}
});
- descriptionText.addKeyListener(new KeyAdapter() {
- @Override
- public void keyReleased(KeyEvent e) {
- reactToUserInput();
- }
- });
- // -- active checkbox --
- setActiveCheck.addSelectionListener(new SelectionAdapter() {
+ descriptionText.getDocument().addDocumentListener(new DocumentListener() {
@Override
- public void widgetSelected(SelectionEvent e) {
- state.isEnabled = setActiveCheck.getSelection();
+ public void removeUpdate(DocumentEvent e) {
+ changedUpdate(e);
}
- });
- setActiveCheck.setSelection(state.isEnabled);
- // -- licensed software check --
- licencedSoftwareCheck.addSelectionListener(new SelectionAdapter() {
@Override
- public void widgetSelected(SelectionEvent e) {
- state.isRestricted = licencedSoftwareCheck.getSelection();
+ public void insertUpdate(DocumentEvent e) {
+ changedUpdate(e);
}
- });
- licencedSoftwareCheck.setSelection(state.isRestricted);
- // -- checkboxes for permissions --
- readPermissionsCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- state.permissions.download = readPermissionsCheck.getSelection();
- }
- });
- linkPermissionsCheck.addSelectionListener(new SelectionAdapter() {
@Override
- public void widgetSelected(SelectionEvent e) {
- state.permissions.link = linkPermissionsCheck.getSelection();
- }
- });
- writePermissionsCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- state.permissions.edit = writePermissionsCheck.getSelection();
- }
- });
- adminPermissionsCheck.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- state.permissions.admin = adminPermissionsCheck.getSelection();
+ public void changedUpdate(DocumentEvent e) {
+ reactToUserInput();
}
});
- // -- end checkboxes for permissions --
+
+ setActiveCheck.setSelected(state.isEnabled);
+
}
- /* 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.
- *
- * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
- */
@Override
- public void setVisible(boolean visible) {
- boolean currentlyVisible = getControl().isVisible();
- if (!currentlyVisible && visible) {
- LOGGER.debug("Entering page...");
- // Preselect OS if possible
- if (state.selectedOs == null && state.detectedOs != null) {
- for (int i = 0; i < osCombo.getItemCount(); ++i) {
- if (state.detectedOs.getOsName().equals(osCombo.getItem(i))) {
- osCombo.select(i);
- break;
- }
- }
- }
+ protected void onPageEnter() {
+ LOGGER.debug("Entering page...");
+ // Preselect OS if possible
+ if (state.selectedOs == null && state.detectedOs != null) {
+ osCombo.setSelectedItem(state.detectedOs);
}
- // leaving this page
- if (currentlyVisible && !visible) {
- LOGGER.debug("Leaving page...");
- }
- super.setVisible(visible);
+ }
+
+ @Override
+ protected boolean goNext() {
+ state.permissions = new ImagePermissions(linkPermissionsCheck.isSelected(),
+ readPermissionsCheck.isSelected(), writePermissionsCheck.isSelected(),
+ adminPermissionsCheck.isSelected());
+ state.selectedOs = (OperatingSystem)osCombo.getSelectedItem();
+ return state.selectedOs != null && state.description != null;
}
/**
@@ -148,47 +104,32 @@ public class ImageMetaDataPage extends ImageMetaDataPageLayout {
*/
private void fillOsCombo(List<OperatingSystem> osList) {
for (OperatingSystem os : osList) {
- if (os.isSetOsName()) {
- osCombo.add(os.getOsName());
- osCombo.setData(os.osName, os);
- }
+ osCombo.addItem(os);
}
- // Select no OS by default
- osCombo.clearSelection();
+ // TODO: Select no OS by default
}
-
+
/**
- * Called by event listeners. This will set guidance message or error message
+ * Called by event listeners. This will set guidance message or error
+ * message
* and call setPageComplete(bool) accordingly.
*/
private void reactToUserInput() {
- final int selectionIndex = osCombo.getSelectionIndex();
- final String descriptionInput = descriptionText.getText();
-
- // first check if both the combo and the description field are empty
- if (selectionIndex == -1) {
- if (descriptionInput.isEmpty()) {
- // both empty, set the regular message
- setMessage("Bitte wählen Sie das Betriebssystem aus und fügen Sie eine Beschreibung hinzu.");
- } else {
+ if (osCombo.getSelectedIndex() == -1) {
// OS empty, description input present
- setMessage("Wählen Sie das Betriebssystem aus.");
- }
- } else {
- // OS selected, save it to state
- state.selectedOs = (OperatingSystem) osCombo.getData(osCombo.getItem(selectionIndex));
- if (descriptionInput.isEmpty()) {
+ setWarningMessage("Wählen Sie das Betriebssystem aus.");
+ setPageComplete(false);
+ return;
+ }
+
+ state.description = descriptionText.getText();
+ if (state.description == null || state.description.isEmpty()) {
// OS set, no description
- setMessage("Fügen Sie eine Beschreibung hinzu.");
- } else {
- // all set
- setMessage("Fertig! 'Next'/'Finish' Text bla.");
- }
+ setWarningMessage("Fügen Sie eine Beschreibung hinzu.");
+ setPageComplete(false);
+ return;
}
- // always save the description input, even if empty.
- state.description = descriptionInput;
- // final step: check if we can continue or not
- setPageComplete(selectionIndex != -1 && !descriptionInput.isEmpty());
+ setPageComplete(true);
}
}
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 a87becd1..202bad4f 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,27 +1,27 @@
package org.openslx.dozmod.gui.wizard.page;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
+import javax.swing.JFileChooser;
+import javax.swing.SwingUtilities;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.filechooser.FileNameExtensionFilter;
+
import org.apache.log4j.Logger;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FileDialog;
import org.openslx.dozmod.Config;
import org.openslx.dozmod.filetransfer.TransferEvent;
import org.openslx.dozmod.filetransfer.TransferEventListener;
import org.openslx.dozmod.filetransfer.UploadTask;
import org.openslx.dozmod.gui.Gui;
-import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.wizard.layout.ImageUploadPageLayout;
import org.openslx.dozmod.state.UploadWizardState;
@@ -38,77 +38,78 @@ public class ImageUploadPage extends ImageUploadPageLayout {
private final static Logger LOGGER = Logger.getLogger(ImageUploadPage.class);
private UploadWizardState state;
- protected final boolean editExistingImage;
private String lastDetectedName = null;
- public ImageUploadPage(UploadWizardState uploadWizardState, boolean editExistingImage) {
+ public ImageUploadPage(UploadWizardState uploadWizardState) {
super();
setPageComplete(false);
- this.editExistingImage = editExistingImage;
+ this.canComeBack = false;
this.state = uploadWizardState;
- setMessage("Bitte wählen Sie eine virtuelle Maschine zum Hochladen aus.");
- }
- @Override
- public void createControl(Composite parent) {
- super.createControl(parent);
- imageNameTextField.setEnabled(!editExistingImage);
- imageNameTextField.addKeyListener(new KeyAdapter() {
+ imageNameTextField.getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+ changedUpdate(e);
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ changedUpdate(e);
+ }
+
@Override
- public void keyReleased(KeyEvent e) {
+ public void changedUpdate(DocumentEvent e) {
if (!imageNameTextField.getText().isEmpty()) {
setPageComplete(state.descriptionFile != null && state.uuid != null
&& state.transferInformation != null);
- } else
+ } else {
setPageComplete(false);
+ }
}
});
// Browse for *.vmx
- imageFileBrowseButton.addSelectionListener(new SelectionAdapter() {
+ imageFileBrowseButton.addActionListener(new ActionListener() {
@Override
- public void widgetSelected(SelectionEvent e) {
+ public void actionPerformed(ActionEvent e) {
browseForVm();
}
});
+
imageFileTextField.addMouseListener(new MouseAdapter() {
@Override
- public void mouseUp(MouseEvent e) {
- if (e.button == 1 && imageFileTextField.getClientArea().contains(e.x, e.y))
+ public void mouseClicked(MouseEvent e) {
+ if (e.getClickCount() == 1)
browseForVm();
}
});
// Start upload
- startUploadButton.addSelectionListener(new SelectionAdapter() {
+ startUploadButton.addActionListener(new ActionListener() {
@Override
- public void widgetSelected(SelectionEvent e) {
+ public void actionPerformed(ActionEvent e) {
createAndUploadImage();
}
});
startUploadButton.setEnabled(false);
- // Cancel upload
- cancelUpload.addSelectionListener(new SelectionAdapter() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- cancelUpload();
- }
- });
- cancelUpload.setVisible(false);
blockProgressBar.setVisible(false);
- imageFileBrowseButton.setFocus();
+ imageFileBrowseButton.requestFocus();
}
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());
- }
+ JFileChooser dialog = new JFileChooser(Config.getUploadPath());
+ FileNameExtensionFilter filter = new FileNameExtensionFilter("Virtuelle Maschine", "vmx");
+ dialog.setFileFilter(filter);
+ dialog.setFileSelectionMode(JFileChooser.FILES_ONLY);
+
+ int ret = dialog.showOpenDialog(SwingUtilities.windowForComponent(this));
+ if (ret != JFileChooser.APPROVE_OPTION)
+ return;
+ File file = dialog.getSelectedFile();
+ if (file == null)
+ return;
+ vmxSelected(file.getAbsoluteFile());
}
private void vmxSelected(File file) {
@@ -116,7 +117,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
try {
state.meta = new VmwareMetaData(MetaDataCache.getOperatingSystems(), file);
} catch (IOException e) {
- MainWindow.showMessageBox("Konnte " + file.getPath() + " nicht lesen", MessageType.ERROR, LOGGER,
+ Gui.showMessageBox(this, "Konnte " + file.getPath() + " nicht lesen", MessageType.ERROR, LOGGER,
e);
setPageComplete(false);
return;
@@ -169,24 +170,9 @@ public class ImageUploadPage extends ImageUploadPageLayout {
imageFileTextField.setText(file.getAbsolutePath());
// let the user know the upload is ready
setErrorMessage(null);
- setMessage("Sie können jetzt den Upload starten!");
+ setDescription("Sie können jetzt den Upload starten!");
startUploadButton.setEnabled(true);
- startUploadButton.setFocus();
- }
-
- /* 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.
- *
- * @see org.eclipse.jface.dialogs.DialogPage#setVisible(boolean)
- */
- @Override
- public void setVisible(boolean visible) {
- if (getControl().isVisible() && !visible) {
- LOGGER.debug("Leaving ImageUploadPage...");
- } else if (!getControl().isVisible() && visible) {
- //
- }
- super.setVisible(visible);
+ startUploadButton.requestFocus();
}
/**
@@ -244,8 +230,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
state.transferInformation.getPlainPort(),
state.transferInformation.getToken(), state.diskFile);
} catch (FileNotFoundException e) {
- MainWindow.showMessageBox("Cannot upload file: Not found", MessageType.ERROR, LOGGER,
- e);
+ Gui.showMessageBox(getTopLevelAncestor(), "Cannot upload file: Not found",
+ MessageType.ERROR, LOGGER, e);
return;
}
// -- add listener for upload status/progress --
@@ -253,7 +239,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
@Override
public void update(final TransferEvent event) {
final TransferEventListener listener = this;
- Gui.display.asyncExec(new Runnable() {
+ Gui.asyncExec(new Runnable() {
@Override
public void run() {
// always callback to gui
@@ -264,7 +250,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
});
new Thread(state.uploadTask).start();
}
- Gui.display.asyncExec(new Runnable() {
+ Gui.asyncExec(new Runnable() {
@Override
public void run() {
createAndUploadImageCallback();
@@ -289,8 +275,6 @@ public class ImageUploadPage extends ImageUploadPageLayout {
* know which step failed and handle the error accordingly.
*/
public void createAndUploadImageCallback() {
- if (getShell().isDisposed())
- return;
// always disable "Browse" and "Image Name" field
imageNameTextField.setEnabled(false);
imageFileBrowseButton.setEnabled(false);
@@ -303,9 +287,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
LOGGER.debug("No transfer information in upload state!");
setErrorMessage("Fehler bei der Upload-Anfrage!");
} else if (state.uploadTask != null) {
- cancelUpload.setVisible(true);
blockProgressBar.setVisible(true);
- setMessage("Der Upload wurde gestartet");
+ setDescription("Der Upload wurde gestartet");
}
setPageComplete(state.uploadTask != null);
}
@@ -317,12 +300,14 @@ public class ImageUploadPage extends ImageUploadPageLayout {
* @param listener
*/
private void processTransferStatus(TransferEventListener listener, TransferEvent event) {
- if (getControl().isDisposed()) {
+ if (!getTopLevelAncestor().isVisible()) {
if (state.uploadTask != null) {
state.uploadTask.removeListener(listener);
}
return;
}
+ if (!isVisible())
+ return;
// always update progress bar
if (event.progress != null) {
// TODO: Maybe only display percentage in the wizard pages once we have the status bar in mainwindow
@@ -333,13 +318,12 @@ public class ImageUploadPage extends ImageUploadPageLayout {
// TODO: Move user interaction to central listener when we have it
switch (event.state) {
case FINISHED:
- cancelUpload.setEnabled(false);
- MainWindow.showMessageBox("Upload abgeschlossen.", MessageType.INFO, LOGGER, null);
+ Gui.showMessageBox(this, "Upload abgeschlossen.", MessageType.INFO, LOGGER, null);
break;
case ERROR:
if (state.uploadTask != null && state.uploadTask.isCanceled())
return;
- if (MainWindow.showMessageBox("Fehler beim Upload: " + event.errorMessage
+ if (Gui.showMessageBox(this, "Fehler beim Upload: " + event.errorMessage
+ "\nNochmal versuchen?", MessageType.ERROR_RETRY, LOGGER, null)) {
// user wants to try again, just reset transferInformation ...
state.uploadTask = null;
@@ -356,6 +340,7 @@ public class ImageUploadPage extends ImageUploadPageLayout {
}
}
+ // TODO: In main control in main window....
private void cancelUpload() {
LOGGER.debug("Cancelling upload ...");
// first tell the server about this
@@ -369,15 +354,8 @@ public class ImageUploadPage extends ImageUploadPageLayout {
}
// Then cancel the task
state.uploadTask.cancel();
- Gui.asyncExec(new Runnable() {
- @Override
- public void run() {
- cancelUpload.setVisible(false);
- }
- });
}
});
- cancelUpload.setEnabled(false);
setPageComplete(false);
blockProgressBar.setVisible(false);
}