diff options
| author | Stephan Schwaer | 2015-08-19 17:04:28 +0200 |
|---|---|---|
| committer | Stephan Schwaer | 2015-08-19 17:04:28 +0200 |
| commit | dc0ced3c49e4801802aac392c26ef57758e5c560 (patch) | |
| tree | 600469924b8e0948ecd776d22572efda89a20d66 | |
| parent | [client] improved question txt if download filename already exists (diff) | |
| download | tutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.tar.gz tutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.tar.xz tutor-module-dc0ced3c49e4801802aac392c26ef57758e5c560.zip | |
[client] Added custom permissions options to image details.
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)); |
