diff options
author | Simon Rettberg | 2018-06-20 17:02:18 +0200 |
---|---|---|
committer | Simon Rettberg | 2018-06-20 17:02:18 +0200 |
commit | d0b6c9c7243472d66b3e11fc733c19b01ae92749 (patch) | |
tree | d567e33d2846e9d5ee36d1a5113bb7f44dcaeb85 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/control | |
parent | [client] Add GUI change handling classes (diff) | |
download | tutor-module-d0b6c9c7243472d66b3e11fc733c19b01ae92749.tar.gz tutor-module-d0b6c9c7243472d66b3e11fc733c19b01ae92749.tar.xz tutor-module-d0b6c9c7243472d66b3e11fc733c19b01ae92749.zip |
[client] Switch over LectureDetailsWindow to new change monitor system
This saves ~230 LOC, making the class about 25% smaller
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/control')
5 files changed, 96 insertions, 101 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LdapFilterConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LdapFilterConfigurator.java index 03a2b553..1950327d 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LdapFilterConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LdapFilterConfigurator.java @@ -20,6 +20,7 @@ import javax.swing.event.TableModelListener; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.LdapFilter; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.control.table.LectureLdapFilterTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; @@ -160,6 +161,12 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { listener.stateChanged(null); } } + + public void addToChangeMonitor(DialogChangeMonitor changeMonitor) { + // TODO Auto-generated method stub + + } + } /** diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LectureCustomPermissionManager.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LectureCustomPermissionManager.java index d943d4c6..b853f7e2 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LectureCustomPermissionManager.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LectureCustomPermissionManager.java @@ -3,6 +3,8 @@ package org.openslx.dozmod.gui.control; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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; @@ -53,8 +55,7 @@ public class LectureCustomPermissionManager extends JPanel { protected JButton btnAddUser; protected JButton btnRemoveUser; - private ArrayList<UserLecturePermissions> permissionList = new ArrayList<UserLecturePermissions>(); - private Map<String, LecturePermissions> newPermissionMap; + private final ArrayList<UserLecturePermissions> permissionList = new ArrayList<UserLecturePermissions>(); private LecturePermissions defaultPermissions; @@ -108,7 +109,7 @@ public class LectureCustomPermissionManager extends JPanel { permissionList.add(new UserLecturePermissions(newUser.userId, new LecturePermissions( defaultPermissions))); permissionTable.setData(permissionList, false); - fireUserChangeEvent(new UserChangeEvent(new Object())); + fireUserChangeEvent(); } }, "Hinzufügen", ownerId); } @@ -123,7 +124,7 @@ public class LectureCustomPermissionManager extends JPanel { LOGGER.debug("Could not remove: " + selected); } permissionTable.setData(permissionList, false); - fireUserChangeEvent(new UserChangeEvent(new Object())); + fireUserChangeEvent(); } }); @@ -136,9 +137,14 @@ public class LectureCustomPermissionManager extends JPanel { btnRemoveUser.doClick(); } }); - } - public LecturePermissionTable getTable() { - return permissionTable; + permissionTable.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + // TODO: This is stupid; permissionTable should fire an event + // if one of the check boxes changes. + fireUserChangeEvent(); + } + }); } /** @@ -152,13 +158,12 @@ public class LectureCustomPermissionManager extends JPanel { public void initPanel(Map<String, LecturePermissions> permissionMap, final LecturePermissions defaultPermissions, String ownerId) { this.ownerId = ownerId; - this.newPermissionMap = permissionMap == null ? new HashMap<String, LecturePermissions>() - : permissionMap; this.defaultPermissions = defaultPermissions; - permissionList.clear(); - for (Entry<String, LecturePermissions> e : newPermissionMap.entrySet()) { - permissionList.add(new UserLecturePermissions(e.getKey(), e.getValue())); + if (permissionMap != null) { + for (Entry<String, LecturePermissions> e : permissionMap.entrySet()) { + permissionList.add(new UserLecturePermissions(e.getKey(), e.getValue())); + } } permissionTable.setData(permissionList, false); } @@ -168,12 +173,8 @@ public class LectureCustomPermissionManager extends JPanel { * * @return Map with new custom permissions, null if something went wrong */ - public Map<String, LecturePermissions> updatePermissionReferences() { - if (permissionList == null) - return null; - - newPermissionMap.clear(); - + public Map<String, LecturePermissions> getPermissions() { + Map<String, LecturePermissions> newPermissionMap = new HashMap<>(permissionList.size()); // put permissions of the list into the map for (UserLecturePermissions perm : permissionList) { newPermissionMap.put(perm.userId, perm.permissions); @@ -198,11 +199,16 @@ public class LectureCustomPermissionManager extends JPanel { * (Mostly needed for the reactToChange() stuff in LectureDetailsWindow) */ protected EventListenerList listenerList = new EventListenerList(); + + /** + * Shared instance, since there is no data attached (yet) + */ + private static final UserChangeEvent CHANGE_EVENT = new UserChangeEvent(); - public class UserChangeEvent extends EventObject { + public static class UserChangeEvent extends EventObject { - public UserChangeEvent(Object source) { - super(source); + public UserChangeEvent() { + super(new Object()); } } @@ -218,12 +224,12 @@ public class LectureCustomPermissionManager extends JPanel { listenerList.remove(UserChangeEventListener.class, listener); } - void fireUserChangeEvent(UserChangeEvent evt) { + void fireUserChangeEvent() { Object[] listeners = listenerList.getListenerList(); for (int i = 0; i < listeners.length; i++) { if (listeners[i] == UserChangeEventListener.class) { ((UserChangeEventListener) listeners[i + 1]) - .stateChanged(evt); + .stateChanged(CHANGE_EVENT); } } } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LocationSelector.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LocationSelector.java index 29a3d570..f880cf7b 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LocationSelector.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/LocationSelector.java @@ -22,6 +22,9 @@ import javax.swing.tree.TreePath; import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.Location; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.changemonitor.AbstractControlWrapper; +import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; +import org.openslx.dozmod.gui.control.JCheckBoxTree.CheckChangeEventListener; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.thrift.Session; import org.openslx.dozmod.thrift.cache.MetaDataCache; @@ -43,7 +46,8 @@ public class LocationSelector extends JPanel { private final static Logger LOGGER = Logger.getLogger(LocationSelector.class); private final JRadioButton btnLimitToLocations; - private final JRadioButton btnPrioritizeInLocations; + private final JRadioButton btnPrioritizeInLocations; + private final ButtonGroup grpLocationExclusive; /** * Flag for the initialization state */ @@ -53,10 +57,13 @@ public class LocationSelector extends JPanel { * List of IDs of locations to set the selection to when we finished * initializing */ - private List<Integer> preselection; + private List<Integer> preselection = null; + private JCheckBoxTree locationTree = new JCheckBoxTree(); private HashMap<Integer, DefaultMutableTreeNode> locationNodesMap = new HashMap<Integer, DefaultMutableTreeNode>(); + private AbstractControlWrapper<?> treeChangeHandler = null; + /** * Constructor. Initializes the grid layout, the location lists and * initializes the data @@ -68,9 +75,9 @@ public class LocationSelector extends JPanel { "Veranstaltung mit höherer Priorität in den ausgewählten Räumen anzeigen"); btnPrioritizeInLocations.setSelected(true); - ButtonGroup grpButtons = new ButtonGroup(); - grpButtons.add(btnLimitToLocations); - grpButtons.add(btnPrioritizeInLocations); + grpLocationExclusive = new ButtonGroup(); + grpLocationExclusive.add(btnLimitToLocations); + grpLocationExclusive.add(btnPrioritizeInLocations); // build the grid GridManager grid = new GridManager(this, 1); @@ -88,34 +95,29 @@ public class LocationSelector extends JPanel { init(); } - public JCheckBoxTree getTree() { - return locationTree; - } - public JRadioButton[] getButtons() { - JRadioButton[] buttons = new JRadioButton[2]; - buttons[0] = btnLimitToLocations; - buttons[1] = btnPrioritizeInLocations; - return buttons; - } - /** * Async fetching of the list of the locations from the server */ private void init() { QuickTimer.scheduleOnce(new Task() { - List<Location> locsList = null; - @Override public void fire() { - locsList = MetaDataCache.getLocations(); + final List<Location> locsList = MetaDataCache.getLocations(); + if (locsList == null) + return; Gui.asyncExec(new Runnable() { @Override public void run() { - initDone = fillLocationsList(locsList); + fillLocationsList(locsList); + initDone = true; // check if preselection was set before we were done // initialising - if (initDone && preselection != null) { + if (preselection != null) { setSelectionInternal(preselection); + preselection = null; + if (treeChangeHandler != null) { + treeChangeHandler.reset(); + } } } }); @@ -131,12 +133,8 @@ public class LocationSelector extends JPanel { * of this widget. * * @param locations list of locations to set the available list to - * @return true if setting the list worked, false otherwise */ - public boolean fillLocationsList(final List<Location> locations) { - if (locations == null) - return false; - + private void fillLocationsList(final List<Location> locations) { DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode(Session.getSatelliteAddress()); DefaultTreeModel treeModel = new DefaultTreeModel(rootNode, true); // build map containing the node object for each location @@ -184,7 +182,6 @@ public class LocationSelector extends JPanel { locationTree.setModel(treeModel); locationTree.updateUI(); locationTree.repaint(); - return true; } /** @@ -218,10 +215,14 @@ public class LocationSelector extends JPanel { LOGGER.error("No list given!"); return; } - preselection = list; - // if we are initialised, we need to explicitly set the selection if (initDone) { - setSelectionInternal(preselection); + // if we are already initialised, we need to explicitly set the selection + setSelectionInternal(list); + } else { + if (treeChangeHandler != null) { + treeChangeHandler.mute(); + } + preselection = list; } } @@ -367,6 +368,15 @@ public class LocationSelector extends JPanel { locationTree.setCheckedState(selectedPathsList, true); locationTree.repaint(); } + + public void addToChangeMonitor(DialogChangeMonitor changeMonitor) { + treeChangeHandler = changeMonitor.add(locationTree, null, null); + changeMonitor.add(grpLocationExclusive, null, null); + } + + public void addCheckChangeEventListener(CheckChangeEventListener checkChangeEventListener) { + locationTree.addCheckChangeEventListener(checkChangeEventListener); + } } @SuppressWarnings("serial") diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetshareConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetshareConfigurator.java index 317e172b..d80ba8b3 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetshareConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/NetshareConfigurator.java @@ -32,6 +32,7 @@ import org.apache.log4j.Logger; import org.openslx.bwlp.thrift.iface.NetShare; import org.openslx.bwlp.thrift.iface.NetShareAuth; import org.openslx.dozmod.gui.Gui; +import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.table.NetshareTable; import org.openslx.dozmod.gui.control.table.QScrollPane; @@ -54,17 +55,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; public NetshareConfigurator() { - super(); - - tblNetshare.getModel().addTableModelListener(new TableModelListener() { - @Override - public void tableChanged(TableModelEvent e) { - fireNetshareConfigurationChangeEvent( - new NetshareConfigurationChangeEvent(NetshareConfigurator.this)); - } - }); - tblNetshare.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { @@ -268,39 +259,13 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { tblNetshare.setData(tblNetshareData, false); return true; } - - protected EventListenerList listenerList = new EventListenerList(); - - public class NetshareConfigurationChangeEvent extends EventObject { - - private static final long serialVersionUID = -511509960878320591L; - - public NetshareConfigurationChangeEvent(Object source) { - super(source); - } - } - - public interface NetshareConfigurationChangeEventListener extends EventListener { - public void stateChanged(NetshareConfigurationChangeEvent event); - } - - public void addNetshareConfigurationChangeEventListener( - NetshareConfigurationChangeEventListener listener) { - listenerList.add(NetshareConfigurationChangeEventListener.class, listener); + + public void addTableModelListener(TableModelListener listener) { + tblNetshare.getModel().addTableModelListener(listener); } - public void removeNetshareConfigurationChangeEventListener( - NetshareConfigurationChangeEventListener listener) { - listenerList.remove(NetshareConfigurationChangeEventListener.class, listener); - } - - void fireNetshareConfigurationChangeEvent(NetshareConfigurationChangeEvent evt) { - Object[] listeners = listenerList.getListenerList(); - for (int i = 0; i < listeners.length; i++) { - if (listeners[i] == NetshareConfigurationChangeEventListener.class) { - ((NetshareConfigurationChangeEventListener) listeners[i + 1]).stateChanged(evt); - } - } + public void addToChangeMonitor(DialogChangeMonitor changeMonitor) { + changeMonitor.add(tblNetshare); } } @@ -315,14 +280,14 @@ class NetshareConfiguratorLayout extends JPanel { + " die automatisch beim Start der Veranstaltung eingebunden werden sollen." + " Der Platzhalter <em>%loginuser%</em> wird im Pfad durch den Loginnamen des Nutzers ersetzt.</html>"; - protected QLabel lblShareAuth, lblSharePath, lblShareName, lblMountPoint, lblUsername, lblPassword, + protected final QLabel lblShareAuth, lblSharePath, lblShareName, lblMountPoint, lblUsername, lblPassword, lblError; - protected NetshareTable tblNetshare = new NetshareTable(); - protected JTextField tfSharePath, tfShareName, tfUsername; - protected JPasswordField tfPassword; - protected JButton btnAdd, btnDel; - protected JCheckBox chkShowPass; - protected ComboBox<NetShareAuth> cboNetshareAuth = new ComboBox<>(new ComboBoxRenderer<NetShareAuth>() { + protected final NetshareTable tblNetshare = new NetshareTable(); + protected final JTextField tfSharePath, tfShareName, tfUsername; + protected final JPasswordField tfPassword; + protected final JButton btnAdd, btnDel; + protected final JCheckBox chkShowPass; + protected final ComboBox<NetShareAuth> cboNetshareAuth = new ComboBox<>(new ComboBoxRenderer<NetShareAuth>() { @Override public String renderItem(NetShareAuth item) { if (item == null) @@ -330,7 +295,7 @@ class NetshareConfiguratorLayout extends JPanel { return FormatHelper.netShareAuthName(item); } }); - protected ComboBox<Character> cboNetshareMountPoint = new ComboBox<>(new ComboBoxRenderer<Character>() { + protected final ComboBox<Character> cboNetshareMountPoint = new ComboBox<>(new ComboBoxRenderer<Character>() { @Override public String renderItem(Character letter) { if (letter == null) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java index d3935b62..49adce6e 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/RunscriptConfigurator.java @@ -19,6 +19,7 @@ import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.event.EventListenerList; +import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.RunscriptConfigurator.RunscriptType; import org.openslx.dozmod.gui.helper.GridManager; @@ -196,6 +197,12 @@ public class RunscriptConfigurator extends RunscriptConfiguratorLayout { } } } + + public void addToChangeMonitor(DialogChangeMonitor changeMonitor) { + changeMonitor.add(taRunScript); + changeMonitor.addEditableCombo(cboRunscriptType, null, null, null); + } + } /** |