summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Schwaer2015-08-19 17:04:28 +0200
committerStephan Schwaer2015-08-19 17:04:28 +0200
commitdc0ced3c49e4801802aac392c26ef57758e5c560 (patch)
tree600469924b8e0948ecd776d22572efda89a20d66
parent[client] improved question txt if download filename already exists (diff)
downloadtutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.tar.gz
tutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.tar.xz
tutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.zip
[client] Added custom permissions options to image details.
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/CustomImagePermissionWindow.java123
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java15
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CustomImagePermissionWindowLayout.java85
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java6
4 files changed, 228 insertions, 1 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/CustomImagePermissionWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/CustomImagePermissionWindow.java
new file mode 100644
index 00000000..f096163f
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/CustomImagePermissionWindow.java
@@ -0,0 +1,123 @@
+package org.openslx.dozmod.gui.window;
+
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import javax.swing.JOptionPane;
+
+import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
+import org.openslx.bwlp.thrift.iface.ImagePermissions;
+import org.openslx.bwlp.thrift.iface.UserInfo;
+import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.control.table.ImagePermissionTable.UserImagePermissions;
+import org.openslx.dozmod.gui.helper.MessageType;
+import org.openslx.dozmod.gui.window.UserListWindow.UserAddedCallback;
+import org.openslx.dozmod.gui.window.layout.CustomImagePermissionWindowLayout;
+import org.openslx.dozmod.thrift.Session;
+import org.openslx.thrifthelper.ThriftManager;
+
+
+@SuppressWarnings("serial")
+public class CustomImagePermissionWindow extends CustomImagePermissionWindowLayout {
+
+ private static final Logger LOGGER = Logger.getLogger(CustomImagePermissionWindow.class);
+
+
+ private final CustomImagePermissionWindow me;
+ private ArrayList<UserImagePermissions> permissionList = new ArrayList<>();
+
+ protected CustomImagePermissionWindow(final Frame modalParent, final Map<String, ImagePermissions> permissionMap, final ImagePermissions defaultPermissions, final String imageBaseId) {
+ super(modalParent);
+ me = this;
+
+
+ for (Entry<String, ImagePermissions> e : permissionMap.entrySet()) {
+ permissionList.add(new UserImagePermissions(e.getKey(), e.getValue()));
+ }
+
+ permissionTable.setData(permissionList, false);
+
+ // add user button adapter
+ btnAddUser.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // TODO again: which frame to giev? JOptionPane.getFrameForComponent(me) sounds cool at least :)
+ UserListWindow.open(JOptionPane.getFrameForComponent(me), new UserAddedCallback() {
+ @Override
+ public void userAdded(final UserInfo newUser, UserListWindow window) {
+
+ // check if we have this user already
+ for (UserImagePermissions current : permissionList) {
+ if (current.userId.equals(newUser.userId)) {
+ LOGGER.debug("User already present in the list, skipping!");
+ return;
+ }
+ }
+ // add it to the list with default permissions
+ permissionList.add(new UserImagePermissions(newUser.userId, new ImagePermissions(defaultPermissions)));
+ LOGGER.debug("User added: " + newUser);
+ permissionTable.setData(permissionList, false);
+ }
+ }, "Hinzufügen");
+ }
+ });
+ // delete user button adapter
+ btnRemoveUser.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ final UserImagePermissions selected = permissionTable.getSelectedItem();
+ LOGGER.debug("Removing: " + selected);
+ if (!permissionList.remove(selected)) {
+ LOGGER.debug("Could not remove: " + selected);
+ }
+ permissionTable.setData(permissionList, false);
+ }
+ });
+
+ btnClose.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ dispose();
+ }
+ });
+
+ btnSave.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ // save the table stuff to our upload wizard state
+ if (permissionList == null || permissionList.isEmpty())
+ return;
+
+ permissionMap.clear();
+
+ // put permissions of the list into the map to upload
+ for (UserImagePermissions perm : permissionList) {
+ permissionMap.put(perm.userId, perm.permissions);
+ }
+
+ // TODO allow admin permission changes?
+ // push permissions to satellite server
+ try {
+ ThriftManager.getSatClient().writeImagePermissions(Session.getSatelliteToken(),
+ imageBaseId, permissionMap);
+ } catch (TException er) {
+ Gui.showMessageBox(me, "Konnte Berechtigungen nicht an den Satelliten übertragen: ", MessageType.ERROR, LOGGER, er);
+ }
+ dispose();
+ }
+ });
+
+ }
+
+ public static void open(Frame modalParent, Map<String, ImagePermissions> permissionMap, ImagePermissions defaultPermissions, String imageBaseId) {
+ new CustomImagePermissionWindow(modalParent, permissionMap, defaultPermissions, imageBaseId).setVisible(true);
+ }
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
index 9d6e56e5..8a46b4dd 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java
@@ -10,6 +10,7 @@ import java.awt.event.MouseEvent;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
@@ -20,6 +21,7 @@ import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
+import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
@@ -70,6 +72,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
* Image that this window shows the details of
*/
private ImageDetailsRead image = null;
+
+ private Map<String, ImagePermissions> permissionMap;
/**
* Popup menu items
@@ -123,6 +127,15 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}, "Besitzer festlegen");
}
});
+ btnCustomPermissions.addActionListener(new ActionListener() {
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ CustomImagePermissionWindow.open(JOptionPane.getFrameForComponent(me), permissionMap, image.defaultPermissions, image.imageBaseId);
+
+
+ }
+ });
/**
* Popup menu for the version table on the right side
@@ -213,6 +226,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
return;
image = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(),
imageBaseId);
+ permissionMap = ThriftManager.getSatClient().getImagePermissions(Session.getSatelliteToken(), imageBaseId);
}
} catch (Exception e) {
error = e;
@@ -456,6 +470,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
txtTags.setEditable(editable);
cboOperatingSystem.setEnabled(editable);
cboShareMode.setEnabled(editable);
+ btnCustomPermissions.setEnabled(editable);
btnChangeOwner.setEnabled(editable && ImagePerms.canAdmin(image));
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CustomImagePermissionWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CustomImagePermissionWindowLayout.java
new file mode 100644
index 00000000..76ea4108
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CustomImagePermissionWindowLayout.java
@@ -0,0 +1,85 @@
+package org.openslx.dozmod.gui.window.layout;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.GridBagLayout;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextField;
+
+import org.apache.log4j.Logger;
+import org.openslx.bwlp.thrift.iface.UserInfo;
+import org.openslx.dozmod.gui.control.table.ImagePermissionTable;
+import org.openslx.dozmod.gui.control.table.ListTable;
+import org.openslx.dozmod.gui.control.table.UserTable;
+import org.openslx.dozmod.gui.helper.GridPos;
+
+
+@SuppressWarnings("serial")
+public class CustomImagePermissionWindowLayout extends JDialog {
+
+ private static final Logger LOGGER = Logger.getLogger(CustomImagePermissionWindowLayout.class);
+
+ protected final ImagePermissionTable permissionTable;
+
+ protected final JButton btnSave;
+ protected final JButton btnClose;
+ protected final JButton btnAddUser;
+ protected final JButton btnRemoveUser;
+
+ protected boolean imagePermPage;
+
+
+ private static String title = "Benutzerdefinierte Berechtigungen";
+
+ protected CustomImagePermissionWindowLayout(Frame modalParent) {
+ super(modalParent, title, modalParent != null ? ModalityType.APPLICATION_MODAL
+ : ModalityType.MODELESS);
+
+ btnClose = new JButton("Abbrechen");
+ btnSave = new JButton("Änderungen speichern");
+ permissionTable = new ImagePermissionTable();
+
+ JPanel listPane = new JPanel();
+ listPane.setLayout(new BoxLayout(listPane, BoxLayout.PAGE_AXIS));
+ listPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+ listPane.add(new JScrollPane(permissionTable));
+ JPanel userButtonPane = new JPanel();
+ btnAddUser = new JButton("Benutzer hinzufügern");
+ btnRemoveUser = new JButton("Benutzer entfernen");
+ userButtonPane.add(btnAddUser);
+ userButtonPane.add(btnRemoveUser);
+ listPane.add(userButtonPane);
+
+ // spaced buttons
+ JPanel buttonPane = new JPanel();
+ buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+ buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+ buttonPane.add(Box.createHorizontalGlue());
+ buttonPane.add(btnClose);
+ buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
+ buttonPane.add(btnSave);
+
+ // filter stuff
+ JPanel filterPanel = new JPanel(new GridBagLayout());
+ filterPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 0, 10));
+
+ // pack it all
+ Container contentPane = getContentPane();
+ contentPane.add(filterPanel, BorderLayout.NORTH);
+ contentPane.add(listPane, BorderLayout.CENTER);
+ contentPane.add(buttonPane, BorderLayout.PAGE_END);
+ setPreferredSize(new Dimension(480, 350));
+ pack();
+ setLocationRelativeTo( modalParent );
+ }
+}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
index b42bbd6e..54c478e3 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java
@@ -50,6 +50,7 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
protected final JTextField txtId;
protected final JTextField txtVersion;
+ protected final JButton btnCustomPermissions;
protected final JButton btnSaveChanges;
protected final JButton btnUpdateImage;
protected final JButton btnClose;
@@ -171,7 +172,10 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
grid.add(new JLabel("Image-UUID"));
grid.add(txtId, 2).expand(true, false).fill(true, false);
grid.nextRow();
-
+ btnCustomPermissions = new JButton("Benutzerdefinierte Berechtigungen");
+ grid.add(btnCustomPermissions);
+ grid.skip(2);
+ grid.nextRow();
grid.finish(true);
infoPanel.setPreferredSize(new Dimension(500, 400));