summaryrefslogtreecommitdiffstats
path: root/dozentenmodul
diff options
context:
space:
mode:
authorJonathan Bauer2018-11-28 22:45:31 +0100
committerJonathan Bauer2018-11-28 22:45:31 +0100
commit57737b4cf19458fc2ebad6c12b878d8fe6ea6e3f (patch)
tree6a6577c0305553c6e3862b901bd3cc14d710ba97 /dozentenmodul
parent[client] fix bad equals() in CheckListTable (diff)
downloadtutor-module-57737b4cf19458fc2ebad6c12b878d8fe6ea6e3f.tar.gz
tutor-module-57737b4cf19458fc2ebad6c12b878d8fe6ea6e3f.tar.xz
tutor-module-57737b4cf19458fc2ebad6c12b878d8fe6ea6e3f.zip
[client] support predefined netshares 1.0
Diffstat (limited to 'dozentenmodul')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java131
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/control/table/NetshareTable.java9
2 files changed, 100 insertions, 40 deletions
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<NetShare> shareList = null;
public static final Character EMPTY_MARKER = '-';
public static final String PRINTER_MARKER = "<printer>";
@@ -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<NetShare> newEntry = new Wrapper<NetShare>(input, false);
+ Wrapper<NetShare> oldEntry = tblNetshare.getSelectedItem();
+ List<Wrapper<NetShare>> 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<NetShare> selection = tblNetshare.getSelectedItem();
if (selection == null) {
return;
}
+ List<Wrapper<NetShare>> 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<NetShare> getState() {
- return shareList;
+ List<Wrapper<NetShare>> list = tblNetshare.getData();
+ List<NetShare> ret = new ArrayList<>();
+ for (Wrapper<NetShare> item : list) {
+ if (item.isChecked() || item.item.shareId == 0) {
+ ret.add(item.item);
+ }
+ }
+ return ret;
}
public boolean setState(List<NetShare> data) {
if (data == null)
return false;
- if (shareList == null) {
- shareList = new ArrayList<>();
+ List<NetShare> shareList = new ArrayList<>(data);
+ List<NetShare> predef = MetaDataCache.getPredefinedNetshares();
+ Set<NetShare> 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<NetShare> {
+public class NetshareTable extends CheckListTable<NetShare> {
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<NetShare> {
}
@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<NetShare> {
}
throw new IndexOutOfBoundsException();
}
+
+ @Override
+ protected boolean isItemCheckable(NetShare item) {
+ return item.shareId > 0;
+ }
}