From 57737b4cf19458fc2ebad6c12b878d8fe6ea6e3f Mon Sep 17 00:00:00 2001 From: Jonathan Bauer Date: Wed, 28 Nov 2018 22:45:31 +0100 Subject: [client] support predefined netshares 1.0 --- .../gui/configurator/NetshareConfigurator.java | 131 +++++++++++++++------ .../dozmod/gui/control/table/NetshareTable.java | 9 +- 2 files changed, 100 insertions(+), 40 deletions(-) (limited to 'dozentenmodul') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java index fcac8dfc..56649bfe 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java @@ -8,7 +8,9 @@ import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import javax.swing.BorderFactory; import javax.swing.Box; @@ -32,10 +34,12 @@ import org.openslx.dozmod.gui.changemonitor.DialogChangeMonitor; import org.openslx.dozmod.gui.control.ComboBox; import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer; import org.openslx.dozmod.gui.control.QLabel; +import org.openslx.dozmod.gui.control.table.CheckListTable.Wrapper; import org.openslx.dozmod.gui.control.table.NetshareTable; import org.openslx.dozmod.gui.control.table.QScrollPane; import org.openslx.dozmod.gui.helper.GridManager; import org.openslx.dozmod.gui.helper.MessageType; +import org.openslx.dozmod.thrift.cache.MetaDataCache; import org.openslx.dozmod.util.FormatHelper; /** @@ -45,7 +49,6 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { private static final long serialVersionUID = -3336605759245603655L; private final static Logger LOGGER = Logger.getLogger(NetshareConfigurator.class); - private List shareList = null; public static final Character EMPTY_MARKER = '-'; public static final String PRINTER_MARKER = ""; @@ -60,23 +63,40 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { tblNetshare.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { - NetShare item = tblNetshare.getSelectedItem(); + NetShare item = tblNetshare.getSelectedItem2(); // ugly block-wise sets, but only one test needed compared to // doing lots of item != null ? ... : ... if (item == null) { clearInputFields(); return; } - // share from the list is selected: fill bottom form and change "Add" to "Apply" - btnDel.setEnabled(true); + // only activate form fields if netshare is not predefined + boolean editable = (item.shareId == 0); + + // first set the fields to let any listener trigger tfSharePath.setText(item.path); - tfShareName.setText(item.displayname.equals(String.valueOf(EMPTY_MARKER)) ? "" : item.displayname); + if (item.displayname != null) + tfShareName.setText(String.valueOf(EMPTY_MARKER).equals(item.displayname) ? "" : item.displayname); tfUsername.setText(item.username); tfPassword.setText(item.password); cboNetshareAuth.setSelectedItem(item.auth); - cboNetshareMountPoint.setSelectedItem(Character.valueOf(item.mountpoint.charAt(0))); - chkIsPrinter.setSelected(item.mountpoint.equals(PRINTER_MARKER)); - btnAdd.setText("Ändern"); + if (item.mountpoint != null) { + cboNetshareMountPoint.setSelectedItem(Character.valueOf(item.mountpoint.charAt(0))); + chkIsPrinter.setSelected(item.mountpoint.equals(PRINTER_MARKER)); + } + // now disable as needed + btnDel.setEnabled(editable); + btnAdd.setEnabled(editable); + tfSharePath.setEnabled(editable); + tfShareName.setEnabled(editable); + tfUsername.setEnabled(editable); + tfPassword.setEnabled(editable); + cboNetshareAuth.setEnabled(editable); + cboNetshareMountPoint.setEnabled(editable); + chkIsPrinter.setEnabled(editable); + chkShowPass.setEnabled(editable); + if (editable) + btnAdd.setText("Ändern"); } }); @@ -157,6 +177,7 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { LOGGER.debug("Bad input, aborting."); return; } + // process mount point and printer check box Character inputMountPoint = cboNetshareMountPoint .getItemAt(cboNetshareMountPoint.getSelectedIndex()); @@ -170,40 +191,45 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { input.mountpoint = PRINTER_MARKER; } + // if a password is set, warn the user about its unsafe storage + // which we might want to implement one day... + if (input.password != null && !input.password.isEmpty()) { + if (!Gui.showMessageBox( + "Das eingebene Passwort wird im Klartext gespeichert " + + "und ist in der VM für jeden Nutzer sichtbar.\n" + + "Verwenden Sie auf keinen Fall sicherheitskritische Passwörter!" + + "\n\nMöchten Sie diesen Netzlaufwerk trotzdem hinzufügen?", + MessageType.QUESTION_YESNO, LOGGER, null)) { + return; + } + } + + Wrapper newEntry = new Wrapper(input, false); + Wrapper oldEntry = tblNetshare.getSelectedItem(); + List> oldList = new ArrayList<>(tblNetshare.getData()); + // now decide whether to create a new entry or update existing one - NetShare oldEntry = tblNetshare.getSelectedItem(); - if (oldEntry != null) { + if (oldEntry != null && oldList.contains(oldEntry)) { // editing existing one, delete it from the internal data - if (!shareList.remove(oldEntry)) { + if (!oldList.remove(oldEntry)) { lblError.setText("Änderung fehlgeschlagen!"); LOGGER.error("Failed to remove selected share for replacement: " + oldEntry); return; } - tblNetshare.setData(shareList, false); } - // either we delete the existing share from the data or we are + + // either we deleted 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 (shareList.contains(input)) { + if (oldList.contains(newEntry)) { lblError.setText("Existiert bereits!"); LOGGER.error("Network share already in the list, aborting."); return; } - // if a password is set, warn the user about its unsafe storage - // which we might want to implement one day... - if (input.password != null && !input.password.isEmpty()) { - if (!Gui.showMessageBox( - "Das eingebene Passwort wird im Klartext gespeichert " - + "und ist in der VM für jeden Nutzer sichtbar.\n" - + "Verwenden Sie auf keinen Fall sicherheitskritische Passwörter!" - + "\n\nMöchten Sie diesen Netzlaufwerk trotzdem hinzufügen?", - MessageType.QUESTION_YESNO, LOGGER, null)) { - return; - } - } + lblError.setText(null); - shareList.add(input); - tblNetshare.setData(shareList, false); + oldList.add(newEntry); + tblNetshare.setData(oldList, false); clearInputFields(); } }); @@ -212,19 +238,20 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { @Override public void actionPerformed(ActionEvent e) { // try to delete the selected share - NetShare selection = tblNetshare.getSelectedItem(); + Wrapper selection = tblNetshare.getSelectedItem(); if (selection == null) { return; } + List> oldList = new ArrayList<>(tblNetshare.getData()); try { - if (!shareList.remove(selection)) { + if (!oldList.remove(selection)) { // false if it was not found LOGGER.error("Could not remove non-existant network share '" + selection.toString() - + "' from the table data: " + shareList.toString()); + + "' from the table data: " + oldList.toString()); return; } // refresh table data - tblNetshare.getModel().setData(shareList); + tblNetshare.setData(oldList, true); } catch (Exception ex) { LOGGER.debug("Failed to remove " + selection.toString() + " from the table data.", ex); return; @@ -261,17 +288,45 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { btnAdd.setText("Hinzufügen"); } public List getState() { - return shareList; + List> list = tblNetshare.getData(); + List ret = new ArrayList<>(); + for (Wrapper item : list) { + if (item.isChecked() || item.item.shareId == 0) { + ret.add(item.item); + } + } + return ret; } public boolean setState(List data) { if (data == null) return false; - if (shareList == null) { - shareList = new ArrayList<>(); + List shareList = new ArrayList<>(data); + List predef = MetaDataCache.getPredefinedNetshares(); + Set checked = new HashSet<>(); + for (NetShare item : data) { + if (item.shareId == 0) + continue; + boolean ok = false; + for (NetShare share : predef) { + if (share.shareId == item.shareId) { + checked.add(share); + ok = true; + break; + } + } + if (!ok) { + item.shareId = 0; + } + } + // Now add remaining filters + for (NetShare share : predef) { + if (!checked.contains(share)) { + shareList.add(share); + LOGGER.info("Adding " + share.shareId); + } } - shareList = data; - tblNetshare.setData(shareList, false); + tblNetshare.setData(shareList, checked, false); return true; } @@ -331,7 +386,7 @@ class NetshareConfiguratorLayout extends JPanel { JPanel pnlNewShare = new JPanel(); GridManager gridNewShare = new GridManager(pnlNewShare, 6, true, new Insets(0, 3, 0, 3)); - pnlNewShare.setBorder(BorderFactory.createTitledBorder("Details")); + pnlNewShare.setBorder(BorderFactory.createTitledBorder("Eigenes Netzlaufwerk definieren")); JPanel pnlSharePath = new JPanel(); pnlSharePath.setLayout(new BoxLayout(pnlSharePath, BoxLayout.LINE_AXIS)); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java index 7284f3ed..67191cd9 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java @@ -7,7 +7,7 @@ import org.openslx.dozmod.thrift.Sorters; import org.openslx.dozmod.util.FormatHelper; @SuppressWarnings("serial") -public class NetshareTable extends ListTable { +public class NetshareTable extends CheckListTable { public static final ListTableColumn COL_NAME = new ListTableColumn("Name"); public static final ListTableColumn COL_MOUNT = new ListTableColumn("Ziel"); @@ -22,7 +22,7 @@ public class NetshareTable extends ListTable { } @Override - protected Object getValueAtInternal(NetShare item, ListTableColumn columnIndex) { + protected Object getValueAtInternal2(NetShare item, ListTableColumn columnIndex) { if (columnIndex == COL_NAME) return item.displayname; if (columnIndex == COL_MOUNT) @@ -62,4 +62,9 @@ public class NetshareTable extends ListTable { } throw new IndexOutOfBoundsException(); } + + @Override + protected boolean isItemCheckable(NetShare item) { + return item.shareId > 0; + } } -- cgit v1.2.3-55-g7522