summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window
diff options
context:
space:
mode:
authorSimon Rettberg2018-06-21 15:22:50 +0200
committerSimon Rettberg2018-06-21 15:22:50 +0200
commit4180be8908fa4f520599e6d416b403008e384310 (patch)
tree98480c8b9f5420e0e8ae8c774f296284e7fd43b0 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/window
parent[client] showMessagBox with clickable Hyperlink (diff)
downloadtutor-module-4180be8908fa4f520599e6d416b403008e384310.tar.gz
tutor-module-4180be8908fa4f520599e6d416b403008e384310.tar.xz
tutor-module-4180be8908fa4f520599e6d416b403008e384310.zip
[client] Refactor change monitor classes, better error message handling
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/window')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java48
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java31
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureNetrulesWindowLayout.java9
3 files changed, 68 insertions, 20 deletions
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 512175a5..9794c37a 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,6 +1,5 @@
package org.openslx.dozmod.gui.window;
-import java.awt.Color;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -35,6 +34,8 @@ import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.changemonitor.AbstractControlWrapper;
import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor;
+import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.TextNotEmptyConstraint;
+import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.ValidationConstraint;
import org.openslx.dozmod.gui.helper.DateTimeHelper;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
@@ -126,12 +127,31 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
});
// Add controls to change monitor
- changeMonitor.addFixedCombo(cboVersions, Comparators.imageVersionDetails,
+ changeMonitor.addFixedCombo(cboVersions, Comparators.imageVersionDetails)
+ .addConstraint(
new DialogChangeMonitor.ValidationConstraint<ImageVersionDetails>() {
- public boolean isValid(ImageVersionDetails userInput) {
- return userInput != null && userInput.isValid;
+ public String checkStateValid(ImageVersionDetails userInput) {
+ if (userInput != null && userInput.isValid)
+ return null;
+ return "Keine/Ungültige VM-Version ausgewählt";
}
- }, "Keine/Ungültige VM-Version ausgewählt");
+ });
+ // Create constraint for date start/end
+ final Date maxValidity;
+ Calendar c = Calendar.getInstance();
+ c.add(Calendar.DAY_OF_MONTH, Session.getSatelliteConfig().maxLectureValidityDays);
+ maxValidity = c.getTime();
+ ValidationConstraint<Object> dateRangeValidator = new DialogChangeMonitor.ValidationConstraint<Object>() {
+ public String checkStateValid(Object ignored) {
+ Date start = DateTimeHelper.getDateFrom(dtpStartDate, spnStartTime);
+ Date end = DateTimeHelper.getDateFrom(dtpEndDate, spnEndTime);
+ if (!end.after(start))
+ return "Enddatum darf nicht vor dem Startdatum liegen";
+ if (end.after(maxValidity))
+ return "Enddatum liegt nach dem " + FormatHelper.shortDate(maxValidity);
+ return null;
+ }
+ };
changeMonitor.add(chkAutoUpdate);
changeMonitor.add(chkIsExam);
changeMonitor.add(chkHasInternetAccess);
@@ -139,20 +159,18 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
changeMonitor.add(chkIsActive);
changeMonitor.add(chkCustomPermAdmin);
changeMonitor.add(chkCustomPermEdit);
- changeMonitor.add(txtTitle, DialogChangeMonitor.VC_NOT_EMPTY, "Veranstaltungsname darf nicht leer sein");
- changeMonitor.add(txtDescription, DialogChangeMonitor.VC_NOT_EMPTY, "Beschreibung darf nicht leer sein");
- changeMonitor.add(dtpEndDate, null, null);
- changeMonitor.add(dtpStartDate, null, null);
- changeMonitor.add(spnEndTime);
- changeMonitor.add(spnStartTime);
+ changeMonitor.add(txtTitle).addConstraint(new TextNotEmptyConstraint("Veranstaltungsname darf nicht leer sein"));
+ changeMonitor.add(txtDescription).addConstraint(new TextNotEmptyConstraint("Beschreibung darf nicht leer sein"));
+ changeMonitor.add(dtpEndDate).addConstraint(dateRangeValidator);
+ changeMonitor.add(dtpStartDate).addConstraint(dateRangeValidator);
+ changeMonitor.add(spnEndTime).addConstraint(dateRangeValidator);
+ changeMonitor.add(spnStartTime).addConstraint(dateRangeValidator);
changeListenerPermissions = changeMonitor.add(ctlPermissionManager);
ctlLocationSelector.addToChangeMonitor(changeMonitor);
ctlRunscriptConfigurator.addToChangeMonitor(changeMonitor);
ctlNetshareConfigurator.addToChangeMonitor(changeMonitor);
ctlLdapFilterConfigurator.addToChangeMonitor(changeMonitor);
- // TODO: NetShare: Having uncommitted changes in the input fields should be handled too
- // TODO: NetRules editor
- // TODO: LDAP editor
+ // TODO: LDAP/NetShare: Having uncommitted changes in the input fields should be handled too
// End change monitor
addWindowListener(new WindowAdapter() {
@@ -234,7 +252,7 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements
btnNetrules.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- List<NetRule> newNetrules = LectureNetrulesWindow.open(me, lecture.networkExceptions);
+ List<NetRule> newNetrules = LectureNetrulesWindow.open(me, lecture.networkExceptions, changeMonitor);
if (newNetrules != null)
lecture.networkExceptions = newNetrules;
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java
index f570cc0e..e5b1659b 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureNetrulesWindow.java
@@ -3,13 +3,18 @@ package org.openslx.dozmod.gui.window;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
+import javax.swing.event.ChangeListener;
+
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.NetRule;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.Gui.GuiCallable;
+import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.UiFeedback;
import org.openslx.dozmod.gui.window.layout.LectureNetrulesWindowLayout;
@@ -24,13 +29,13 @@ public class LectureNetrulesWindow extends LectureNetrulesWindowLayout
private List<NetRule> newRules = null;
public LectureNetrulesWindow(Window modalParent,
- List<NetRule> netrules) {
+ List<NetRule> netrules, DialogChangeMonitor changeMonitor) {
super(modalParent);
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
- newRules = ctlNetrulesConfigurator.getState();
+ newRules = ctlNetrulesConfigurator.getState(false);
if (newRules == null) {
return;
}
@@ -46,6 +51,7 @@ public class LectureNetrulesWindow extends LectureNetrulesWindowLayout
}
});
ctlNetrulesConfigurator.setState(netrules);
+ changeMonitor.add(this).reset();
}
/**
@@ -64,17 +70,18 @@ public class LectureNetrulesWindow extends LectureNetrulesWindowLayout
*
* @param modalParent
* parent to this window
+ * @param changeMonitor If you want to track changes...
* @param locations
* locations to preselect in the LocationSelector
* @return forwards the return value of the window itself: list of ids of
* the selected locations
*/
public static List<NetRule> open(final Window modalParent,
- final List<NetRule> netrules) {
+ final List<NetRule> netrules, final DialogChangeMonitor changeMonitor) {
return Gui.syncExec(new GuiCallable<List<NetRule>>() {
@Override
public List<NetRule> run() {
- return new LectureNetrulesWindow(modalParent, netrules)
+ return new LectureNetrulesWindow(modalParent, netrules, changeMonitor)
.runAndReturn();
}
});
@@ -98,4 +105,20 @@ public class LectureNetrulesWindow extends LectureNetrulesWindowLayout
dispose();
}
}
+
+ @Override
+ public List<NetRule> getState() {
+ return ctlNetrulesConfigurator.getState(true);
+ }
+
+ @Override
+ public void addChangeListener(final ChangeListener l) {
+ addWindowListener(new WindowAdapter() {
+ @Override
+ public void windowClosed(WindowEvent e) {
+ l.stateChanged(null);
+ }
+ });
+ }
+
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureNetrulesWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureNetrulesWindowLayout.java
index 31a1a929..ce4067ce 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureNetrulesWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/LectureNetrulesWindowLayout.java
@@ -2,6 +2,9 @@ package org.openslx.dozmod.gui.window.layout;
import java.awt.BorderLayout;
import java.awt.Window;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.Box;
@@ -9,11 +12,14 @@ import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
+import javax.swing.event.ChangeListener;
+import org.openslx.bwlp.thrift.iface.NetRule;
import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.changemonitor.ListEditorWindow;
import org.openslx.dozmod.gui.control.NetrulesConfigurator;
-public class LectureNetrulesWindowLayout extends JDialog {
+public abstract class LectureNetrulesWindowLayout extends JDialog implements ListEditorWindow<NetRule> {
private static final long serialVersionUID = 5565439063675405598L;
@@ -53,4 +59,5 @@ public class LectureNetrulesWindowLayout extends JDialog {
pack();
Gui.centerShellOverShell(modalParent, this);
}
+
}