diff options
| author | Simon Rettberg | 2018-06-26 14:53:55 +0200 |
|---|---|---|
| committer | Simon Rettberg | 2018-06-26 14:53:55 +0200 |
| commit | 0eb8cdc9517c427d5b69587c86e6a3a2e3d1473e (patch) | |
| tree | 1d259645660e6dd23b8dfd05ab019ee42a5afde8 /dozentenmodul/src/main/java/org | |
| parent | [client] Move ResourceLoader back to dozmod client (diff) | |
| download | tutor-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/org')
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/AbstractControlWrapper.java | 25 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/DialogChangeMonitor.java | 17 | ||||
| -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.java | 39 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/changemonitor/LecturePermissionManagerWrapper.java | 39 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/ImagePermissionConfigurator.java | 51 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LecturePermissionConfigurator.java | 51 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetrulesConfigurator.java | 8 |
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); |
