summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-14 16:43:40 +0200
committerSimon Rettberg2015-08-14 16:43:40 +0200
commit13b8f65c5e51d42591acb17bd8a25805e594ed06 (patch)
tree4d03540c2b147b146ca5818f0c57b24d48ff5756 /dozentenmodul/src/main
parent[server] Return permissions for lectures, LectureRead changed (diff)
downloadtutor-module-13b8f65c5e51d42591acb17bd8a25805e594ed06.tar.gz
tutor-module-13b8f65c5e51d42591acb17bd8a25805e594ed06.tar.xz
tutor-module-13b8f65c5e51d42591acb17bd8a25805e594ed06.zip
[client] Design improvements
Diffstat (limited to 'dozentenmodul/src/main')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ComboBox.java113
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/GridManager.java82
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java6
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java89
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java18
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java26
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java76
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java16
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java28
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java33
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java12
12 files changed, 298 insertions, 211 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ComboBox.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ComboBox.java
new file mode 100644
index 00000000..abc0365c
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/ComboBox.java
@@ -0,0 +1,113 @@
+package org.openslx.dozmod.gui.control;
+
+import java.awt.Component;
+import java.util.Comparator;
+
+import javax.swing.ComboBoxModel;
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+@SuppressWarnings("serial")
+public class ComboBox<T> extends JComboBox<T> {
+
+ public static abstract class ComboBoxRenderer<T> {
+ public abstract String renderItem(T item);
+
+ public String getEmptyText() {
+ return null;
+ }
+ }
+
+ private final Comparator<T> equalityComparator;
+ private final ComboBoxRenderer<T> itemRenderer;
+ private final ComboBox<T> me = this;
+ private boolean replacedRenderer = false;
+
+ public ComboBox(ComboBoxRenderer<T> renderer) {
+ this(null, renderer);
+ }
+
+ public ComboBox(Comparator<T> equalityComparator, ComboBoxRenderer<T> renderer) {
+ super();
+ this.itemRenderer = renderer;
+ this.equalityComparator = equalityComparator;
+ }
+
+ /**
+ * This version of {@link JComboBox#setSelectedItem(Object)} will use the
+ * comparator given when constructing the ComboBox to determine if an entry
+ * should be selected.
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void setSelectedItem(Object anObject) {
+ if (anObject != null && equalityComparator != null) {
+ ComboBoxModel<T> model = getModel();
+ try {
+ for (int i = 0; i < model.getSize(); ++i) {
+ T element = model.getElementAt(i);
+ if (equalityComparator.compare((T) anObject, element) == 0) {
+ anObject = element;
+ break;
+ }
+ }
+ } catch (ClassCastException e) {
+ // Bummer, fall through
+ }
+ }
+ super.setSelectedItem(anObject);
+ }
+
+ @Override
+ public void updateUI() {
+ super.updateUI();
+ if (!replacedRenderer) {
+ replacedRenderer = true;
+ final ListCellRenderer<? super T> oldRenderer = super.getRenderer();
+ if (oldRenderer instanceof JLabel) {
+ // The default JComboBox renderer always seems to be a subclass of JLabel, which is nice
+ super.setRenderer(new ListCellRenderer<T>() {
+ @Override
+ public Component getListCellRendererComponent(JList<? extends T> list, T value,
+ int index, boolean isSelected, boolean cellHasFocus) {
+ String text;
+ if (me.getModel().getSize() == 0) {
+ text = itemRenderer.getEmptyText();
+ } else {
+ text = itemRenderer.renderItem(value);
+ }
+ Component comp = oldRenderer.getListCellRendererComponent(list, null, index,
+ isSelected, cellHasFocus);
+ comp.setEnabled(me.isEnabled());
+ ((JLabel) comp).setText(text);
+ return comp;
+ }
+ });
+ } else {
+ // Fallback, in case there's any platform, L&F, runtime environment or whatnot where it's not a JLabel
+ super.setRenderer(new DefaultListCellRenderer() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public Component getListCellRendererComponent(JList<?> list, Object value, int index,
+ boolean isSelected, boolean cellHasFocus) {
+ if (me.getModel().getSize() == 0) {
+ value = itemRenderer.getEmptyText();
+ } else {
+ try {
+ value = itemRenderer.renderItem((T) value);
+ } catch (ClassCastException e) {
+ // Should never happen; do nothing, retain original value
+ }
+ }
+ return super.getListCellRendererComponent(list, value, index, isSelected,
+ cellHasFocus);
+ }
+ });
+ }
+ }
+ }
+
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/GridManager.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/GridManager.java
index aa5a679f..766ab94c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/GridManager.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/GridManager.java
@@ -6,6 +6,8 @@ import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
import java.util.ArrayList;
import javax.swing.Box;
@@ -20,7 +22,7 @@ public class GridManager {
* Setting this to true will insert green panels in cells where nothing was
* added
*/
- public static boolean debugEmptyCells = false;
+ public static boolean debugEmptyCells = true;
private final Container container;
private final Insets defaultInsets;
@@ -32,7 +34,6 @@ public class GridManager {
private final ArrayList<Component[]> currentRows = new ArrayList<>();
- private final GridBagConstraints mainConstraints = new GridBagConstraints();
private GBC currentGbc = null;
// Static general constraints
@@ -234,20 +235,20 @@ public class GridManager {
private void addCurrentControl() {
if (currentGbc == null)
return;
- container.add(currentGbc.component, mainConstraints);
+ container.add(currentGbc.component, currentGbc);
// Remember placement for future sanity checks
- for (int relrow = 0; relrow < mainConstraints.gridheight; ++relrow) {
+ for (int relrow = 0; relrow < currentGbc.gridheight; ++relrow) {
if (currentRows.size() <= relrow) {
currentRows.add(new Component[columnCount]);
}
Component[] row = currentRows.get(relrow);
- for (int relcol = 0; relcol < mainConstraints.gridwidth; ++relcol) {
- if (row[relcol + mainConstraints.gridx] != null)
+ for (int relcol = 0; relcol < currentGbc.gridwidth; ++relcol) {
+ if (row[relcol + currentGbc.gridx] != null)
throw new IllegalStateException("Collision detected in cell ("
- + (relcol + mainConstraints.gridx) + "|" + (relrow + mainConstraints.gridy)
- + "): Have " + row[relcol + mainConstraints.gridx].getClass().getSimpleName()
- + ", trying to add " + currentGbc.component.getClass().getSimpleName());
- row[relcol + mainConstraints.gridx] = currentGbc.component;
+ + (relcol + currentGbc.gridx) + "|" + (relrow + currentGbc.gridy) + "): Have "
+ + row[relcol + currentGbc.gridx].getClass().getSimpleName() + ", trying to add "
+ + currentGbc.component.getClass().getSimpleName());
+ row[relcol + currentGbc.gridx] = currentGbc.component;
}
}
currentGbc.valid = false;
@@ -277,7 +278,8 @@ public class GridManager {
//
- public class GBC {
+ @SuppressWarnings("serial")
+ public class GBC extends GridBagConstraints {
private boolean valid = true;
private final Component component;
@@ -291,11 +293,13 @@ public class GridManager {
public GBC fill(boolean fillX, boolean fillY) {
checkValid();
if (fillX && fillY) {
- mainConstraints.fill = GridBagConstraints.BOTH;
+ this.fill = GridBagConstraints.BOTH;
} else if (fillX) {
- mainConstraints.fill = GridBagConstraints.HORIZONTAL;
+ this.fill = GridBagConstraints.HORIZONTAL;
} else if (fillY) {
- mainConstraints.fill = GridBagConstraints.VERTICAL;
+ this.fill = GridBagConstraints.VERTICAL;
+ } else {
+ this.fill = GridBagConstraints.NONE;
}
return this;
}
@@ -310,7 +314,7 @@ public class GridManager {
* @return This instance, so calls can be chained
*/
public GBC expand(boolean expandX, boolean expandY) {
- return expand(1, 1);
+ return expand(expandX ? 1 : 0, expandY ? 1 : 0);
}
/**
@@ -325,25 +329,25 @@ public class GridManager {
*/
public GBC expand(double expandX, double expandY) {
checkValid();
- mainConstraints.weightx = expandX;
- mainConstraints.weighty = expandY;
+ this.weightx = expandX;
+ this.weighty = expandY;
return this;
}
// Extend with more helpers as needed
private GBC(Component component, int spanX, int spanY) {
- mainConstraints.gridx = nextColumn;
- mainConstraints.gridy = currentRow;
- mainConstraints.gridwidth = spanX;
- mainConstraints.gridheight = spanY;
- mainConstraints.weightx = 0;
- mainConstraints.weighty = 0;
- mainConstraints.anchor = GridBagConstraints.LINE_START;
- mainConstraints.fill = GridBagConstraints.NONE;
- mainConstraints.insets = defaultInsets;
- mainConstraints.ipadx = 0;
- mainConstraints.ipady = 0;
+ this.gridx = nextColumn;
+ this.gridy = currentRow;
+ this.gridwidth = spanX;
+ this.gridheight = spanY;
+ this.weightx = 0;
+ this.weighty = 0;
+ this.anchor = GridBagConstraints.LINE_START;
+ this.fill = GridBagConstraints.NONE;
+ this.insets = defaultInsets;
+ this.ipadx = 0;
+ this.ipady = 0;
this.component = component;
}
@@ -351,6 +355,28 @@ public class GridManager {
if (!valid)
throw new IllegalAccessError("Cannot modify constraints after adding next control");
}
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{ ");
+ for (Field f : getClass().getFields()) {
+ if (Modifier.isFinal(f.getModifiers()) || Modifier.isStatic(f.getModifiers()))
+ continue;
+ String val;
+ try {
+ val = f.get(this).toString();
+ } catch (IllegalArgumentException | IllegalAccessException e) {
+ val = "???";
+ }
+ sb.append(f.getName());
+ sb.append('=');
+ sb.append(val);
+ sb.append(' ');
+ }
+ sb.append('}');
+ return sb.toString();
+ }
}
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
index 21ee98da..57866b98 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
@@ -253,10 +253,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
for (OperatingSystem os : osList) {
cboOperatingSystem.addItem(os);
}
- OperatingSystem os = MetaDataCache.getOsById(image.getOsId());
- if (os != null) {
- cboOperatingSystem.setSelectedItem(os);
- }
+ cboOperatingSystem.setSelectedItem(new OperatingSystem(image.getOsId(), null, null, null));
+
Virtualizer virt = MetaDataCache.getVirtualizerById(image.getVirtId());
if (virt != null)
lblVirtualizer.setText(virt.getVirtName());
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
index 09f787e4..d901881f 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java
@@ -1,11 +1,8 @@
package org.openslx.dozmod.gui.window;
-import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
@@ -13,20 +10,18 @@ import java.util.Date;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
-import javax.swing.JList;
import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.bwlp.thrift.iface.LectureRead;
-import org.openslx.bwlp.thrift.iface.Organization;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
-import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.window.layout.LectureDetailsWindowLayout;
import org.openslx.dozmod.permissions.LecturePerms;
import org.openslx.dozmod.thrift.Session;
+import org.openslx.dozmod.thrift.ThriftError;
import org.openslx.dozmod.thrift.UserCache;
import org.openslx.dozmod.util.FormatHelper;
import org.openslx.thrifthelper.ThriftManager;
@@ -53,16 +48,6 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout {
dispose();
}
});
- // ESC closes this window
- addKeyListener(new KeyAdapter() {
- @Override
- public void keyPressed(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
- dispose();
- }
- }
- });
- setFocusable(true);
btnAutoUpdate.addActionListener(new ActionListener() {
@@ -80,36 +65,26 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout {
QuickTimer.scheduleOnce(new Task() {
@Override
public void fire() {
- Exception error = null;
+ TException error = null;
try {
synchronized (me) {
if (lecture != null)
return;
- lecture = ThriftManager.getSatClient().getLectureDetails(Session.getSatelliteToken(), lectureId);
+ lecture = ThriftManager.getSatClient().getLectureDetails(Session.getSatelliteToken(),
+ lectureId);
+ image = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(),
+ lecture.getImageBaseId());
}
- } catch (Exception e) {
+ } catch (TException e) {
error = e;
}
- // getting imageDetailsRead for the versions
- if (lecture != null) {
- try {
- synchronized (me) {
- if (image != null)
- return;
- image = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(), lecture.getImage().getImageBaseId());
- }
- } catch (Exception e) {
-
- error = e;
- }
- }
- final Exception e = error;
+ final TException e = error;
Gui.asyncExec(new Runnable() {
@Override
public void run() {
if (e != null || lecture == null || image == null) {
- Gui.showMessageBox(null, "Konnte Daten der Vorlesung nicht abrufen",
- MessageType.ERROR, LOGGER, e);
+ ThriftError.showMessage(btnAutoUpdate, LOGGER, e,
+ "Konnte Daten der Vorlesung nicht abrufen");
dispose();
} else {
fill();
@@ -147,42 +122,32 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout {
// version combo
List<ImageVersionDetails> versions = image.getVersions();
-
- // sort versions with createtime
+
+ // sort versions by createtime
Collections.sort(versions, new Comparator<ImageVersionDetails>() {
public int compare(ImageVersionDetails o1, ImageVersionDetails o2) {
- return - Long.compare(o1.getCreateTime(), o2.getCreateTime());
+ return -Long.compare(o1.getCreateTime(), o2.getCreateTime());
}
});
-
- cboVersions.setModel(new DefaultComboBoxModel<ImageVersionDetails>(versions.toArray(new ImageVersionDetails[versions.size()])));
- cboVersions.setRenderer(new DefaultListCellRenderer() {
- @Override
- public Component getListCellRendererComponent(JList<?> list, Object value, int index,
- boolean isSelected, boolean cellHasFocus) {
- super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
- if (value instanceof ImageVersionDetails) {
- ImageVersionDetails version = (ImageVersionDetails) value;
- setText(FormatHelper.shortDate(version.getCreateTime()));
- }
- return this;
- }
- });
-
+
+ cboVersions.setModel(new DefaultComboBoxModel<ImageVersionDetails>(
+ versions.toArray(new ImageVersionDetails[versions.size()])));
+ cboVersions.setSelectedItem(new ImageVersionDetails(lecture.getImageVersionId(), 0, 0, 0, null, true,
+ true, true, null));
+
Calendar startCal = Calendar.getInstance();
startCal.setTime(new Date(lecture.getStartTime() * 1000l));
- startDate.getModel().setDate(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DATE));
+ startDate.getModel().setDate(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH),
+ startCal.get(Calendar.DATE));
startTime.getModel().setValue(startCal.getTime());
-
+
Calendar endCal = Calendar.getInstance();
endCal.setTime(new Date(lecture.getEndTime() * 1000l));
- endDate.getModel().setDate(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DATE));
+ endDate.getModel().setDate(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH),
+ endCal.get(Calendar.DATE));
endTime.getModel().setValue(endCal.getTime());
-
-
- // TODO grey out non editable components, lecture image has no permissions yet
- //makeEditable(LecturePerms.canEdit(lecture));
+ makeEditable(LecturePerms.canEdit(lecture));
pack();
MainWindow.centerShell(this);
setVisible(true);
@@ -197,7 +162,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout {
txtTitle.setEnabled(editable);
txtDescription.setEditable(editable);
txtId.setEditable(editable);
-
+
// TODO functionality for changing dates still missing
// lblCreateTime.setText(FormatHelper.longDate(lecture.getCreateTime()));
// lblUpdateTime.setText(FormatHelper.longDate(lecture.getUpdateTime()));
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
index 4112974d..36b59eed 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LoginWindow.java
@@ -1,6 +1,5 @@
package org.openslx.dozmod.gui.window;
-import java.awt.Component;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -16,9 +15,7 @@ import java.util.Iterator;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
-import javax.swing.DefaultListCellRenderer;
import javax.swing.JFrame;
-import javax.swing.JList;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.Organization;
@@ -187,21 +184,6 @@ public class LoginWindow extends LoginWindowLayout {
} else {
usernameField.requestFocus();
}
-
- idpCombo.setRenderer(new DefaultListCellRenderer() {
- @Override
- public Component getListCellRendererComponent(JList<?> list, Object value, int index,
- boolean isSelected, boolean cellHasFocus) {
- if (idpCombo.getModel().getSize() == 0) {
- value = "Inizialisiere...";
- } else if (value instanceof Organization) {
- value = ((Organization) value).getDisplayName();
- }
- super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
- this.setEnabled(idpCombo.isEnabled());
- return this;
- }
- });
}
/**
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
index daa63d9a..76875c74 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
@@ -1,7 +1,6 @@
package org.openslx.dozmod.gui.window.layout;
import java.awt.BorderLayout;
-import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
@@ -9,14 +8,12 @@ import java.awt.Frame;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
-import javax.swing.DefaultListCellRenderer;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
-import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
@@ -25,9 +22,12 @@ import javax.swing.JTextField;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
+import org.openslx.dozmod.gui.control.ComboBox;
+import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.PersonLabel;
import org.openslx.dozmod.gui.control.table.ImageVersionTable;
import org.openslx.dozmod.gui.helper.GridManager;
+import org.openslx.thrifthelper.Comparators;
@SuppressWarnings("serial")
public abstract class ImageDetailsWindowLayout extends JDialog {
@@ -117,18 +117,16 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
grid.nextRow();
// os
- cboOperatingSystem = new JComboBox<>();
+ cboOperatingSystem = new ComboBox<>(Comparators.operatingSystem,
+ new ComboBoxRenderer<OperatingSystem>() {
+ @Override
+ public String renderItem(OperatingSystem item) {
+ if (item == null)
+ return null;
+ return item.getOsName();
+ }
+ });
cboOperatingSystem.setEditable(false);
- cboOperatingSystem.setRenderer(new DefaultListCellRenderer() {
- @Override
- public Component getListCellRendererComponent(JList<?> list, Object value, int index,
- boolean isSelected, boolean cellHasFocus) {
- if (value instanceof OperatingSystem) {
- value = ((OperatingSystem) value).getOsName();
- }
- return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
- }
- });
grid.add(new JLabel("Betriebssystem"));
grid.add(cboOperatingSystem, 2).expand(true, false).fill(true, false);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
index e186284c..ff6be78b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureDetailsWindowLayout.java
@@ -30,9 +30,13 @@ import org.jdatepicker.impl.JDatePanelImpl;
import org.jdatepicker.impl.JDatePickerImpl;
import org.jdatepicker.impl.UtilDateModel;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
+import org.openslx.dozmod.gui.control.ComboBox;
+import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.PersonLabel;
import org.openslx.dozmod.gui.helper.GridPos;
import org.openslx.dozmod.util.DateLabelFormatter;
+import org.openslx.dozmod.util.FormatHelper;
+import org.openslx.thrifthelper.Comparators;
@SuppressWarnings("serial")
public abstract class LectureDetailsWindowLayout extends JDialog {
@@ -52,7 +56,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
protected final JCheckBox btnIsExam;
protected final JCheckBox btnHasInternetAccess;
protected final JCheckBox btnIsActive;
-
+
protected final JTextField txtId;
protected final JLabel lblUseCount;
protected final JButton btnSaveChanges;
@@ -91,7 +95,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
// -- name --
txtTitle = new JLabel();
txtTitle.setFont(txtTitle.getFont().deriveFont(Font.BOLD, txtTitle.getFont().getSize2D() * 2));
- infoPanel.add(txtTitle, GridPos.get(0, row++, 2, 1, true, false));
+ infoPanel.add(txtTitle, GridPos.get(0, row++, 2, 1, true, false));
// description
txtDescription = new JTextArea();
txtDescription.setLineWrap(true);
@@ -108,17 +112,25 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
btnLinkImage = new JButton();
btnLinkImage.setText("Link Image");
linkedImagePanel.add(btnLinkImage);
- infoPanel.add(linkedImagePanel, GridPos.get(1, row++, false, false));
+ infoPanel.add(linkedImagePanel, GridPos.get(1, row++, false, false));
// image version handling
// auto update
btnAutoUpdate = new JCheckBox("Auto Update");
- infoPanel.add(new JLabel("Image Version"), GridPos.get(0, row, false, false));
+ infoPanel.add(new JLabel("Image Version"), GridPos.get(0, row, false, false));
JPanel versionPanel = new JPanel();
versionPanel.add(btnAutoUpdate);
// versions combo
- cboVersions = new JComboBox<>();
+ cboVersions = new ComboBox<>(Comparators.imageVersionDetails,
+ new ComboBoxRenderer<ImageVersionDetails>() {
+ @Override
+ public String renderItem(ImageVersionDetails item) {
+ if (item == null)
+ return null;
+ return FormatHelper.longDate(item.getCreateTime());
+ }
+ });
versionPanel.add(cboVersions);
- infoPanel.add(versionPanel, GridPos.get(1, row++, false, false));
+ infoPanel.add(versionPanel, GridPos.get(1, row++, false, false));
// start time of the lecture
JPanel startTimePanel = new JPanel();
startTimePanel.setLayout(new BorderLayout());
@@ -128,8 +140,8 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
startTimePanel.add(startDate, BorderLayout.WEST);
startTimePanel.add(startTime, BorderLayout.CENTER);
lblStartTime = new JLabel();
- infoPanel.add(new JLabel("Startdatum"), GridPos.get(0, row, false, false));
- infoPanel.add(startTimePanel, GridPos.get(1, row++, false, false));
+ infoPanel.add(new JLabel("Startdatum"), GridPos.get(0, row, false, false));
+ infoPanel.add(startTimePanel, GridPos.get(1, row++, false, false));
// end time of the lecture
JPanel endTimePanel = new JPanel();
@@ -140,45 +152,45 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
endTimePanel.add(endDate, BorderLayout.WEST);
endTimePanel.add(endTime, BorderLayout.CENTER);
lblEndTime = new JLabel();
- infoPanel.add(new JLabel("Enddatum"), GridPos.get(0, row, false, false));
- infoPanel.add(endTimePanel, GridPos.get(1, row++, false, false));
+ infoPanel.add(new JLabel("Enddatum"), GridPos.get(0, row, false, false));
+ infoPanel.add(endTimePanel, GridPos.get(1, row++, false, false));
// owner
lblOwner = new PersonLabel();
- infoPanel.add(new JLabel("Besitzer"), GridPos.get(0, row, false, false));
- infoPanel.add(lblOwner, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Besitzer"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblOwner, GridPos.get(1, row++, true, false));
// creation time
lblCreateTime = new JLabel();
- infoPanel.add(new JLabel("Erstellt"), GridPos.get(0, row, false, false));
- infoPanel.add(lblCreateTime, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Erstellt"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblCreateTime, GridPos.get(1, row++, true, false));
// last updater
lblUpdater = new PersonLabel();
- infoPanel.add(new JLabel("Geändert durch"), GridPos.get(0, row, false, false));
- infoPanel.add(lblUpdater, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Geändert durch"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblUpdater, GridPos.get(1, row++, true, false));
// last updated
lblUpdateTime = new JLabel();
- infoPanel.add(new JLabel("Änderungszeitpunkt"), GridPos.get(0, row, false, false));
- infoPanel.add(lblUpdateTime, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Änderungszeitpunkt"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblUpdateTime, GridPos.get(1, row++, true, false));
// is exam
btnIsExam = new JCheckBox();
- infoPanel.add(new JLabel("Klausur"), GridPos.get(0, row, false, false));
- infoPanel.add(btnIsExam, GridPos.get(1, row++, true, false));
-
+ infoPanel.add(new JLabel("Klausur"), GridPos.get(0, row, false, false));
+ infoPanel.add(btnIsExam, GridPos.get(1, row++, true, false));
+
btnHasInternetAccess = new JCheckBox();
- infoPanel.add(new JLabel("Internetzugriff"), GridPos.get(0, row, false, false));
- infoPanel.add(btnHasInternetAccess, GridPos.get(1, row++, true, false));
-
+ infoPanel.add(new JLabel("Internetzugriff"), GridPos.get(0, row, false, false));
+ infoPanel.add(btnHasInternetAccess, GridPos.get(1, row++, true, false));
+
btnIsActive = new JCheckBox();
- infoPanel.add(new JLabel("Aktiv"), GridPos.get(0, row, false, false));
- infoPanel.add(btnIsActive, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("Aktiv"), GridPos.get(0, row, false, false));
+ infoPanel.add(btnIsActive, GridPos.get(1, row++, true, false));
// id
txtId = new JTextField();
txtId.setEditable(false);
- infoPanel.add(new JLabel("ID"), GridPos.get(0, row, false, false));
- infoPanel.add(txtId, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("ID"), GridPos.get(0, row, false, false));
+ infoPanel.add(txtId, GridPos.get(1, row++, true, false));
// use count
lblUseCount = new JLabel();
- infoPanel.add(new JLabel("useCount"), GridPos.get(0, row, false, false));
- infoPanel.add(lblUseCount, GridPos.get(1, row++, true, false));
+ infoPanel.add(new JLabel("useCount"), GridPos.get(0, row, false, false));
+ infoPanel.add(lblUseCount, GridPos.get(1, row++, true, false));
// finally add the infoPanel itself to the main view
add(infoPanel, BorderLayout.CENTER);
// button panel on the bottom
@@ -194,7 +206,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
private JSpinner makeTimeSpinner(int h, int m) {
Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.HOUR_OF_DAY, h); // 24 == 12 PM == 00:00:00
+ calendar.set(Calendar.HOUR_OF_DAY, h);
calendar.set(Calendar.MINUTE, m);
calendar.set(Calendar.SECOND, 0);
SpinnerDateModel model = new SpinnerDateModel();
@@ -202,7 +214,7 @@ public abstract class LectureDetailsWindowLayout extends JDialog {
JSpinner spinner = new JSpinner(model);
JSpinner.DateEditor editor = new JSpinner.DateEditor(spinner, "HH:mm");
DateFormatter formatter = (DateFormatter) editor.getTextField().getFormatter();
- formatter.setAllowsInvalid(false); // this makes what you want
+ formatter.setAllowsInvalid(false);
formatter.setOverwriteMode(true);
spinner.setEditor(editor);
return spinner;
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
index ebd0da26..5472ea42 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LoginWindowLayout.java
@@ -20,6 +20,8 @@ import javax.swing.border.TitledBorder;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.Organization;
import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.control.ComboBox;
+import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.util.ResourceLoader;
@@ -77,7 +79,19 @@ public abstract class LoginWindowLayout extends JDialog {
loginTypes[1] = new JRadioButton("Test-Zugang mit festem Benutzer");
loginTypes[2] = new JRadioButton("Direkter Zugang zum Satelliten");
- idpCombo = new JComboBox<Organization>();
+ idpCombo = new ComboBox<>(new ComboBoxRenderer<Organization>() {
+ @Override
+ public String renderItem(Organization item) {
+ if (item == null)
+ return null;
+ return item.getDisplayName();
+ }
+
+ @Override
+ public String getEmptyText() {
+ return "Wird geladen...";
+ }
+ });
usernameField = new JTextField();
passwordField = new JPasswordField();
loginButton = new JButton("Login");
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
index 75aefae2..a7b9141a 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/Wizard.java
@@ -4,7 +4,6 @@ import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
-import java.awt.GridBagLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -25,7 +24,7 @@ import javax.swing.JSeparator;
import javax.swing.SwingConstants;
import org.openslx.dozmod.gui.MainWindow;
-import org.openslx.dozmod.gui.helper.GridPos;
+import org.openslx.dozmod.gui.helper.GridManager;
@SuppressWarnings("serial")
public abstract class Wizard extends JDialog {
@@ -63,9 +62,10 @@ public abstract class Wizard extends JDialog {
header.add(messageLabel);
// Add header
JPanel headerWrapper = new JPanel();
- headerWrapper.setLayout(new GridBagLayout());
- headerWrapper.add(header, GridPos.get(0, 0, true, false));
- headerWrapper.add(new JSeparator(), GridPos.get(0, 1, true, false));
+ GridManager grid = new GridManager(headerWrapper, 1, false);
+ grid.add(header).expand(true, false).fill(true, false);
+ grid.add(new JSeparator()).expand(true, false).fill(true, false);
+ grid.finish(false);
getContentPane().add(headerWrapper, BorderLayout.PAGE_START);
// Buttons in footer
JPanel footer = new JPanel();
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 6f10f937..2bfe0edf 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,23 +1,22 @@
package org.openslx.dozmod.gui.wizard.layout;
-import java.awt.Component;
import java.awt.Dimension;
-import javax.swing.Box;
-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.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
+import org.openslx.dozmod.gui.control.ComboBox;
+import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.wizard.Wizard;
import org.openslx.dozmod.gui.wizard.WizardPage;
+import org.openslx.thrifthelper.Comparators;
@SuppressWarnings("serial")
public abstract class ImageMetaDataPageLayout extends WizardPage {
@@ -45,24 +44,20 @@ public abstract class ImageMetaDataPageLayout extends WizardPage {
GridManager grid = new GridManager(this, 2, false);
JLabel osCaption = new JLabel("Betriebssystem");
- osCombo = new JComboBox<>();
- osCombo.setEditable(false);
- osCombo.setRenderer(new DefaultListCellRenderer() {
+ osCombo = new ComboBox<>(Comparators.operatingSystem, new ComboBoxRenderer<OperatingSystem>() {
@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;
+ public String renderItem(OperatingSystem item) {
+ if (item == null)
+ return null;
+ return item.getOsName();
}
});
+ osCombo.setEditable(false);
grid.add(osCaption);
grid.add(osCombo);
JLabel descriptionCation = new JLabel("Beschreibung");
- descriptionText = new JTextArea(5,50);
+ descriptionText = new JTextArea(5, 50);
descriptionText.setMinimumSize(new Dimension(0, 70));
descriptionText.setLineWrap(true);
descriptionText.setWrapStyleWord(true);
@@ -75,13 +70,12 @@ public abstract class ImageMetaDataPageLayout extends WizardPage {
setActiveCheck = new JCheckBox("Image aktivieren");
grid.add(setActiveCheck);
-
+
licencedSoftwareCheck = new JCheckBox("Image enthält lizenzpflichtige Software");
licencedSoftwareCheck.setSelected(true);
grid.add(licencedSoftwareCheck);
grid.nextRow();
-
// -- default permissions group --
JPanel permissionsGroup = new JPanel();
permissionsGroup.setBorder(new TitledBorder("Standardberechtigungen"));
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java
index c997d4a6..b488e142 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/LectureCreationPageLayout.java
@@ -5,7 +5,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
-import javax.swing.Box;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
@@ -25,12 +24,12 @@ import org.openslx.dozmod.util.DateLabelFormatter;
@SuppressWarnings("serial")
public abstract class LectureCreationPageLayout extends WizardPage {
- protected JTextField lectureNameTextField;
- protected JTextArea descriptionText;
- protected JDatePickerImpl startDate;
- protected JDatePickerImpl endDate;
- protected JSpinner startTime;
- protected JSpinner endTime;
+ protected final JTextField lectureNameTextField;
+ protected final JTextArea descriptionText;
+ protected final JDatePickerImpl startDate;
+ protected final JDatePickerImpl endDate;
+ protected final JSpinner startTime;
+ protected final JSpinner endTime;
private static final Properties pickerStrings = new Properties();
@@ -49,16 +48,14 @@ public abstract class LectureCreationPageLayout extends WizardPage {
public LectureCreationPageLayout(Wizard wizard, String title) {
super(wizard, title);
setDescription("Geben Sie bitte einen aussagekräftigen Namen für die neue Veranstaltung ein");
- GridManager grid = new GridManager(this, 3, false);
+ GridManager grid = new GridManager(this, 3);
// lecture name
- JLabel lectureNameLabel = new JLabel("Veranstaltungsname");
- grid.add(lectureNameLabel);
lectureNameTextField = new JTextField();
- grid.add(lectureNameTextField, 2, 1).fill(true, false).expand(true, false);
+ grid.add(new JLabel("Veranstaltungsname"));
+ grid.add(lectureNameTextField, 2).fill(true, false).expand(true, false);
grid.nextRow();
- JLabel descriptionCaption = new JLabel("Beschreibung");
descriptionText = new JTextArea(3, 50);
descriptionText.setLineWrap(true);
descriptionText.setWrapStyleWord(true);
@@ -66,30 +63,26 @@ public abstract class LectureCreationPageLayout extends WizardPage {
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
descriptionText.setMinimumSize(new Dimension(0, 60));
descPane.setMinimumSize(descriptionText.getMinimumSize());
- grid.add(descriptionCaption);
- grid.add(descPane, 2, 1).fill(true, false);
-
+ grid.add(new JLabel("Beschreibung"));
+ grid.add(descPane, 2).fill(true, false).expand(true, false);
grid.nextRow();
// Start date/time
- JLabel startDateLabel = new JLabel("Startdatum");
startDate = new JDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings),
new DateLabelFormatter());
startTime = makeTimeSpinner(0, 0);
- grid.add(startDateLabel);
+ grid.add(new JLabel("Startdatum"));
grid.add(startDate).fill(true, false).expand(true, false);
grid.add(startTime);
grid.nextRow();
- JLabel endDateLabel = new JLabel("Enddatum");
endDate = new JDatePickerImpl(new JDatePanelImpl(new UtilDateModel(new Date()), pickerStrings),
new DateLabelFormatter());
endTime = makeTimeSpinner(23, 59);
- grid.add(endDateLabel);
+ grid.add(new JLabel("Enddatum"));
grid.add(endDate).fill(true, false).expand(true, false);
grid.add(endTime);
grid.nextRow();
- grid.add(Box.createVerticalStrut(10), 3, 1);
grid.finish(true);
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java b/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java
index a88ab5e8..167a2b65 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/permissions/LecturePerms.java
@@ -1,20 +1,12 @@
package org.openslx.dozmod.permissions;
import org.openslx.bwlp.thrift.iface.LectureRead;
-import org.openslx.dozmod.thrift.Session;
/**
* Class for checking, whether user can edit given lecture
*/
public class LecturePerms {
- public static boolean canEdit(LectureRead lecture){
- if(lecture.getOwnerId().equals(Session.getUserId()))
- return true;
- if(lecture.userPermissions !=null) {
- return lecture.userPermissions.edit;
- }
- if (lecture.defaultPermissions != null)
- return lecture.defaultPermissions.edit;
- return false;
+ public static boolean canEdit(LectureRead lecture) {
+ return lecture != null && lecture.userPermissions != null && lecture.userPermissions.edit;
}
}