diff options
author | Simon Rettberg | 2018-06-21 15:41:44 +0200 |
---|---|---|
committer | Simon Rettberg | 2018-06-21 15:41:44 +0200 |
commit | c0003a559a36dfca1bdc4add0034e67bd22824ed (patch) | |
tree | d0f03daa4eb8b94cbfb9472213a109eade52a0dc /dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java | |
parent | [client] Refactor change monitor classes, better error message handling (diff) | |
download | tutor-module-c0003a559a36dfca1bdc4add0034e67bd22824ed.tar.gz tutor-module-c0003a559a36dfca1bdc4add0034e67bd22824ed.tar.xz tutor-module-c0003a559a36dfca1bdc4add0034e67bd22824ed.zip |
[client] Sanitize class/var names, split up control package
All configurators have moved from *.control to *.configurator
*.control should be used for simple controls that feel like
they're really just one thing. The configurators are more like
a group of controls.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java')
-rwxr-xr-x | dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java | 221 |
1 files changed, 221 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java new file mode 100755 index 00000000..3727b50e --- /dev/null +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java @@ -0,0 +1,221 @@ +package org.openslx.dozmod.gui.configurator; + +import java.awt.GridBagConstraints; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.event.ChangeListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.event.TableModelEvent; +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.QLabel; +import org.openslx.dozmod.gui.control.WordWrapLabel; +import org.openslx.dozmod.gui.control.table.LectureLdapFilterTable; +import org.openslx.dozmod.gui.control.table.QScrollPane; +import org.openslx.dozmod.gui.helper.GridManager; +import org.openslx.dozmod.gui.helper.MessageType; + +/** + * Widget for network share configuration of lectures + */ +public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { + + private static final long serialVersionUID = -3336605759245603655L; + private final static Logger LOGGER = Logger.getLogger(LdapFilterConfigurator.class); + private List<LdapFilter> filterList = null; + + public LdapFilterConfigurator() { + + super(); + + tblFilters.getModel().addTableModelListener(new TableModelListener() { + @Override + public void tableChanged(TableModelEvent e) { + fireChangeEvent(); + } + }); + + tblFilters.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + LdapFilter item = tblFilters.getSelectedItem(); + if (item == null) { + clearInputFields(); + return; + } + // share from the list is selected: fill bottom form and change "Add" to "Apply" + btnDel.setEnabled(true); + txtAttribute.setText(item.attribute); + txtValue.setText(item.value); + btnAdd.setText("Ändern"); + } + }); + + btnAdd.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // check if we are editing an existing share entry or + // creating a new one, check for input either way + LdapFilter input = new LdapFilter(); + + input.attribute = txtAttribute.getText(); + if (input.attribute == null || input.attribute.isEmpty()) { + Gui.showMessageBox("Kein Attribut angegeben", MessageType.ERROR, null, null); + return; + } + input.value = txtValue.getText(); + if (input.value == null) { + input.value = ""; + } + + // either we delete the existing share from the data or we are + // creating a new one, either way add it to the list and update + // the table, if its not present already + if (filterList.contains(input)) { + Gui.showMessageBox("Eintrag bereits vorhanden", MessageType.ERROR, null, null); + return; + } + // now decide whether to create a new entry or update existing one + LdapFilter oldEntry = tblFilters.getSelectedItem(); + if (oldEntry != null) { + // editing existing one, delete it from the internal data + filterList.remove(oldEntry); + } + filterList.add(input); + tblFilters.setData(filterList, false); + clearInputFields(); + } + }); + + btnDel.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // try to delete the selected share + LdapFilter selection = tblFilters.getSelectedItem(); + if (selection == null) { + return; + } + try { + if (!filterList.remove(selection)) { + // false if it was not found + LOGGER.error("Could not remove non-existent filter '" + selection.toString() + + "' from the table data: " + filterList.toString()); + return; + } + // refresh table data + tblFilters.setData(filterList, false); + } catch (Exception ex) { + LOGGER.debug("Failed to remove " + selection.toString() + " from the table data.", ex); + return; + } + } + }); + btnDel.setEnabled(false); + } + + private void clearInputFields() { + btnDel.setEnabled(false); + txtAttribute.setText(null); + txtValue.setText(null); + btnAdd.setText("Hinzufügen"); + } + + public List<LdapFilter> getState() { + return filterList; + } + + public boolean setState(List<LdapFilter> data) { + if (data == null) + return false; + if (filterList == null) { + filterList = new ArrayList<>(); + } + filterList = data; + tblFilters.setData(filterList, false); + return true; + } + + protected List<ChangeListener> listenerList = new ArrayList<>(); + + public void addLdapFilterListTableContentConfigurationChangeEventListener(ChangeListener listener) { + listenerList.add(listener); + } + + public void removeNetshareConfigurationChangeEventListener(ChangeListener listener) { + listenerList.remove(listener); + } + + void fireChangeEvent() { + for (ChangeListener listener : new ArrayList<>(listenerList)) { + listener.stateChanged(null); + } + } + + public void addToChangeMonitor(DialogChangeMonitor changeMonitor) { + changeMonitor.add(tblFilters); + } + +} + +/** + * Internal layout class for this widget + */ +class LdapFilterConfiguratorLayout extends JPanel { + + private static final long serialVersionUID = 6479838641542743622L; + + private final static String HELPTEXT = "Geben Sie hier LDAP Filter ein, die die Sichtbarkeit" + + " der Veranstaltung abhängig vom angemeldeten Benutzer einschränken. Eine Veranstaltung" + + " ist sichtbar, sobald einer der angegebenen Filter zutrifft. Zusätzliche Raumbeschränkungen" + + " greifen weiterhin."; + + protected final LectureLdapFilterTable tblFilters = new LectureLdapFilterTable(); + protected final JTextField txtAttribute, txtValue; + protected final JButton btnAdd, btnDel; + + public LdapFilterConfiguratorLayout() { + GridManager grid = new GridManager(this, 1, true, new Insets(3, 3, 3, 3)); + // top info panel + grid.add(new WordWrapLabel(HELPTEXT)).fill(true, false).expand(true, false); + grid.nextRow(); + // middle filter list + grid.add(new QScrollPane(tblFilters)).fill(true, true).expand(true, true); + grid.nextRow(); + + btnDel = new JButton("Entfernen"); + grid.add(btnDel).anchor(GridBagConstraints.EAST); + grid.nextRow(); + + JPanel pnlNewShare = new JPanel(); + GridManager gridNewFilter = new GridManager(pnlNewShare, 2, true); + pnlNewShare.setBorder(BorderFactory.createTitledBorder("Filter definieren")); + gridNewFilter.add(new QLabel("Attribut")); + txtAttribute = new JTextField(); + gridNewFilter.add(txtAttribute).fill(true, false).expand(true, false); + gridNewFilter.nextRow(); + gridNewFilter.add(new QLabel("Wert")); + txtValue = new JTextField(); + gridNewFilter.add(txtValue).fill(true, false).expand(true, false); + gridNewFilter.nextRow(); + btnAdd = new JButton("Hinzufügen"); + gridNewFilter.add(btnAdd, 2).anchor(GridBagConstraints.EAST); + gridNewFilter.nextRow(); + gridNewFilter.finish(false); + grid.add(pnlNewShare).fill(true, false).expand(true, false); + grid.nextRow(); + grid.finish(false); + } +} |