summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2018-06-26 14:53:55 +0200
committerSimon Rettberg2018-06-26 14:53:55 +0200
commit0eb8cdc9517c427d5b69587c86e6a3a2e3d1473e (patch)
tree1d259645660e6dd23b8dfd05ab019ee42a5afde8 /dozentenmodul/src/main/java
parent[client] Move ResourceLoader back to dozmod client (diff)
downloadtutor-module-0eb8cdc9517c427d5b69587c86e6a3a2e3d1473e.tar.gz
tutor-module-0eb8cdc9517c427d5b69587c86e6a3a2e3d1473e.tar.xz
tutor-module-0eb8cdc9517c427d5b69587c86e6a3a2e3d1473e.zip
[client] Clean up change monitors: Unify generic listener
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java25
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java17
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/GenericControlWindow.java (renamed from dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ListEditorWindow.java)14
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ImagePermissionManagerWrapper.java39
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/LecturePermissionManagerWrapper.java39
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java51
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java51
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java8
8 files changed, 60 insertions, 184 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java
index e43b5393..460f457e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java
@@ -1,8 +1,10 @@
package org.openslx.dozmod.gui.changemonitor;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor.ValidationConstraint;
@@ -105,17 +107,20 @@ public abstract class AbstractControlWrapper<T> {
if (muted)
return;
final boolean changed;
- if (cmp == null) {
- if (originalContent == null) {
- if (newContent == null) {
- changed = false;
- } else {
- changed = true;
- }
- } else {
- changed = !originalContent.equals(newContent);
- }
+ if (newContent == originalContent) {
+ changed = false; // This also covers null == null
+ } else if (newContent == null || originalContent == null) {
+ changed = true; // So here we know either/or is null, not both
+ } else if (newContent instanceof Collection
+ && ((Collection<?>) newContent).size() != ((Collection<?>) originalContent).size()) {
+ changed = true;
+ } else if (newContent instanceof Map
+ && ((Map<?, ?>) newContent).size() != ((Map<?, ?>) originalContent).size()) {
+ changed = true;
+ } else if (cmp == null) {
+ changed = !originalContent.equals(newContent);
} else {
+ // User supplied comparator
changed = cmp.compare(originalContent, newContent) != 0;
}
if (isCurrentlyChanged != changed) {
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java
index f679b960..4651bdad 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java
@@ -3,7 +3,6 @@ package org.openslx.dozmod.gui.changemonitor;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
-import java.util.Map;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
@@ -15,10 +14,6 @@ import javax.swing.tree.TreePath;
import org.apache.log4j.Logger;
import org.jdatepicker.JDatePicker;
-import org.openslx.bwlp.thrift.iface.ImagePermissions;
-import org.openslx.bwlp.thrift.iface.LecturePermissions;
-import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator;
-import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.JCheckBoxTree;
import org.openslx.util.Util;
@@ -84,20 +79,12 @@ public class DialogChangeMonitor {
return add(new TimeSpinnerWrapper(this, spinner));
}
- public AbstractControlWrapper<Map<String, LecturePermissions>> add(LecturePermissionConfigurator manager) {
- return add(new LecturePermissionManagerWrapper(this, manager));
- }
-
- public AbstractControlWrapper<Map<String, ImagePermissions>> add(ImagePermissionConfigurator manager) {
- return add(new ImagePermissionManagerWrapper(this, manager));
- }
-
public AbstractControlWrapper<ClonedTableModel> add(JTable table) {
return add(new TableWrapper(this, table));
}
- public <T> AbstractControlWrapper<List<T>> add(ListEditorWindow<T> editor) {
- return add(new ListEditorWindowWrapper<T>(this, editor));
+ public <T> AbstractControlWrapper<T> add(GenericControlWindow<T> editor) {
+ return add(new GenericControlWrapper<T>(this, editor));
}
/*
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ListEditorWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/GenericControlWindow.java
index ebefd326..2a9637b7 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ListEditorWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/GenericControlWindow.java
@@ -1,7 +1,5 @@
package org.openslx.dozmod.gui.changemonitor;
-import java.util.List;
-
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -12,18 +10,18 @@ import javax.swing.event.ChangeListener;
* changes, since the main window that's interested in the changes will
* be covered anyways during editing.
*/
-public interface ListEditorWindow<T> {
+public interface GenericControlWindow<T> {
- public List<T> getState();
+ public T getState();
public void addChangeListener(ChangeListener l);
}
-class ListEditorWindowWrapper<T> extends AbstractControlWrapper<List<T>> {
- private final ListEditorWindow<T> component;
+class GenericControlWrapper<T> extends AbstractControlWrapper<T> {
+ private final GenericControlWindow<T> component;
- public ListEditorWindowWrapper(DialogChangeMonitor dcm, ListEditorWindow<T> comp) {
+ public GenericControlWrapper(DialogChangeMonitor dcm, GenericControlWindow<T> comp) {
super(dcm, null);
this.component = comp;
@@ -34,7 +32,7 @@ class ListEditorWindowWrapper<T> extends AbstractControlWrapper<List<T>> {
});
}
- List<T> getCurrentValue() {
+ T getCurrentValue() {
return this.component.getState();
}
} \ No newline at end of file
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ImagePermissionManagerWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ImagePermissionManagerWrapper.java
deleted file mode 100644
index a4e5746b..00000000
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/ImagePermissionManagerWrapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.openslx.dozmod.gui.changemonitor;
-
-import java.util.Comparator;
-import java.util.Map;
-
-import org.openslx.bwlp.thrift.iface.ImagePermissions;
-import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator;
-import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator.UserChangeEvent;
-import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator.UserChangeEventListener;
-import org.openslx.dozmod.util.MapHelper;
-
-class ImagePermissionManagerWrapper extends AbstractControlWrapper<Map<String, ImagePermissions>> {
-
- /**
- * Comparator so we can check properly if the permission list changed
- */
- private static final Comparator<Map<String, ImagePermissions>> COMPARATOR = new Comparator<Map<String,ImagePermissions>>() {
- public int compare(Map<String, ImagePermissions> o1, Map<String, ImagePermissions> o2) {
- return MapHelper.compare(o1, o2);
- }
- };
-
- private final ImagePermissionConfigurator component;
-
- public ImagePermissionManagerWrapper(DialogChangeMonitor dcm, ImagePermissionConfigurator manager) {
- super(dcm, COMPARATOR);
- this.component = manager;
-
- manager.addUserChangeEventListener(new UserChangeEventListener() {
- public void stateChanged(UserChangeEvent event) {
- contentChanged();
- }
- });
- }
-
- Map<String, ImagePermissions> getCurrentValue() {
- return this.component.getPermissions();
- }
-} \ No newline at end of file
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/LecturePermissionManagerWrapper.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/LecturePermissionManagerWrapper.java
deleted file mode 100644
index 5f68c4f2..00000000
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/LecturePermissionManagerWrapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.openslx.dozmod.gui.changemonitor;
-
-import java.util.Comparator;
-import java.util.Map;
-
-import org.openslx.bwlp.thrift.iface.LecturePermissions;
-import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator;
-import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator.UserChangeEvent;
-import org.openslx.dozmod.gui.configurator.LecturePermissionConfigurator.UserChangeEventListener;
-import org.openslx.dozmod.util.MapHelper;
-
-class LecturePermissionManagerWrapper extends AbstractControlWrapper<Map<String, LecturePermissions>> {
-
- /**
- * Comparator so we can check properly if the permission list changed
- */
- private static final Comparator<Map<String, LecturePermissions>> COMPARATOR = new Comparator<Map<String,LecturePermissions>>() {
- public int compare(Map<String, LecturePermissions> o1, Map<String, LecturePermissions> o2) {
- return MapHelper.compare(o1, o2);
- }
- };
-
- private final LecturePermissionConfigurator component;
-
- public LecturePermissionManagerWrapper(DialogChangeMonitor dcm, LecturePermissionConfigurator manager) {
- super(dcm, COMPARATOR);
- this.component = manager;
-
- manager.addUserChangeEventListener(new UserChangeEventListener() {
- public void stateChanged(UserChangeEvent event) {
- contentChanged();
- }
- });
- }
-
- Map<String, LecturePermissions> getCurrentValue() {
- return this.component.getPermissions();
- }
-} \ No newline at end of file
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java
index 2310f406..efba020c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java
@@ -8,9 +8,8 @@ import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
-import java.util.EventListener;
-import java.util.EventObject;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -24,11 +23,12 @@ import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
-import javax.swing.event.EventListenerList;
+import javax.swing.event.ChangeListener;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.UserInfo;
+import org.openslx.dozmod.gui.changemonitor.GenericControlWindow;
import org.openslx.dozmod.gui.control.table.ImagePermissionTable;
import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions;
import org.openslx.dozmod.gui.control.table.QScrollPane;
@@ -43,7 +43,7 @@ import org.openslx.dozmod.util.FormatHelper;
* customImagePermissions.
*/
@SuppressWarnings("serial")
-public class ImagePermissionConfigurator extends JPanel {
+public class ImagePermissionConfigurator extends JPanel implements GenericControlWindow<Map<String, ImagePermissions>> {
protected ImagePermissionTable permissionTable;
@@ -190,42 +190,27 @@ public class ImagePermissionConfigurator extends JPanel {
}
return newPermissionMap;
}
-
- /**
- * Custom event mechanism to detect changes to the user list
+
+ /*
+ * For dialog change monitor
*/
- protected EventListenerList listenerList = new EventListenerList();
- /**
- * Shared instance, since there is no data attached (yet)
- */
- private static final UserChangeEvent CHANGE_EVENT = new UserChangeEvent();
-
- public static class UserChangeEvent extends EventObject {
-
- public UserChangeEvent() {
- super(new Object());
+ void fireUserChangeEvent() {
+ for (ChangeListener cl : listeners) {
+ cl.stateChanged(null);
}
}
- public interface UserChangeEventListener extends EventListener {
- public void stateChanged(UserChangeEvent event);
+ @Override
+ public Map<String, ImagePermissions> getState() {
+ return getPermissions();
}
+
+ private final List<ChangeListener> listeners = new ArrayList<>(1);
- public void addUserChangeEventListener(UserChangeEventListener listener) {
- listenerList.add(UserChangeEventListener.class, listener);
+ @Override
+ public void addChangeListener(ChangeListener l) {
+ listeners.add(l);
}
- public void removeUserChangeEventListener(UserChangeEventListener listener) {
- listenerList.remove(UserChangeEventListener.class, listener);
- }
-
- void fireUserChangeEvent() {
- Object[] listeners = listenerList.getListenerList();
- for (int i = 0; i < listeners.length; i++) {
- if (listeners[i] == UserChangeEventListener.class) {
- ((UserChangeEventListener) listeners[i + 1]).stateChanged(CHANGE_EVENT);
- }
- }
- }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java
index 26052cf3..5e4c1649 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java
@@ -6,9 +6,8 @@ import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
-import java.util.EventListener;
-import java.util.EventObject;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -22,11 +21,12 @@ import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
-import javax.swing.event.EventListenerList;
+import javax.swing.event.ChangeListener;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.LecturePermissions;
import org.openslx.bwlp.thrift.iface.UserInfo;
+import org.openslx.dozmod.gui.changemonitor.GenericControlWindow;
import org.openslx.dozmod.gui.control.table.LecturePermissionTable;
import org.openslx.dozmod.gui.control.table.LecturePermissionTable.UserLecturePermissions;
import org.openslx.dozmod.gui.control.table.QScrollPane;
@@ -43,7 +43,7 @@ import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback;
*
*/
@SuppressWarnings("serial")
-public class LecturePermissionConfigurator extends JPanel {
+public class LecturePermissionConfigurator extends JPanel implements GenericControlWindow<Map<String, LecturePermissions>> {
/**
* Self reference
@@ -182,43 +182,26 @@ public class LecturePermissionConfigurator extends JPanel {
return newPermissionMap;
}
- /**
- * Custom event mechanism to detect changes to the user list
- * (Mostly needed for the reactToChange() stuff in LectureDetailsWindow)
- */
- protected EventListenerList listenerList = new EventListenerList();
-
- /**
- * Shared instance, since there is no data attached (yet)
+ /*
+ * For dialog change monitor
*/
- private static final UserChangeEvent CHANGE_EVENT = new UserChangeEvent();
- public static class UserChangeEvent extends EventObject {
-
- public UserChangeEvent() {
- super(new Object());
+ void fireUserChangeEvent() {
+ for (ChangeListener cl : listeners) {
+ cl.stateChanged(null);
}
}
- public interface UserChangeEventListener extends EventListener {
- public void stateChanged(UserChangeEvent event);
- }
-
- public void addUserChangeEventListener(UserChangeEventListener listener) {
- listenerList.add(UserChangeEventListener.class, listener);
+ @Override
+ public Map<String, LecturePermissions> getState() {
+ return getPermissions();
}
+
+ private final List<ChangeListener> listeners = new ArrayList<>(1);
- public void removeUserChangeEventListener(UserChangeEventListener listener) {
- listenerList.remove(UserChangeEventListener.class, listener);
+ @Override
+ public void addChangeListener(ChangeListener l) {
+ listeners.add(l);
}
- void fireUserChangeEvent() {
- Object[] listeners = listenerList.getListenerList();
- for (int i = 0; i < listeners.length; i++) {
- if (listeners[i] == UserChangeEventListener.class) {
- ((UserChangeEventListener) listeners[i + 1])
- .stateChanged(CHANGE_EVENT);
- }
- }
- }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java
index e1c59863..5841efc5 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java
@@ -1,7 +1,6 @@
package org.openslx.dozmod.gui.configurator;
import java.awt.Color;
-import java.awt.Container;
import java.awt.Insets;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
@@ -10,8 +9,6 @@ import java.awt.event.KeyEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
-import java.util.EventListener;
-import java.util.EventObject;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -24,7 +21,6 @@ import javax.swing.JTextPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.SimpleAttributeSet;
@@ -34,7 +30,7 @@ import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.NetDirection;
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.changemonitor.GenericControlWindow;
import org.openslx.dozmod.gui.control.WordWrapLabel;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.dozmod.gui.helper.MessageType;
@@ -44,7 +40,7 @@ import org.openslx.util.Util;
/**
* Widget for netrules configuration of lectures
*/
-public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements ListEditorWindow<NetRule> {
+public class NetrulesConfigurator extends NetrulesConfiguratorLayout implements GenericControlWindow<List<NetRule>> {
private static final long serialVersionUID = -3497629601818983994L;
private final static Logger LOGGER = Logger.getLogger(NetrulesConfigurator.class);