summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-19 17:28:32 +0200
committerJonathan Bauer2015-08-19 17:28:32 +0200
commita7463549ce8cfbe4eee15ea6227e572e4e2ebe70 (patch)
tree9d047d39c05988d5f64d9b71291724ca16461ee5 /dozentenmodul/src/main/java
parent[client] chagned deleteLatestVersion of imagelistwindow to use ThriftActions (diff)
parent[client] Fix javadoc and formatting (diff)
downloadtutor-module-a7463549ce8cfbe4eee15ea6227e572e4e2ebe70.tar.gz
tutor-module-a7463549ce8cfbe4eee15ea6227e572e4e2ebe70.tar.xz
tutor-module-a7463549ce8cfbe4eee15ea6227e572e4e2ebe70.zip
Merge branch 'v1.1' of git.openslx.org:openslx-ng/tutor-module into v1.1
Diffstat (limited to 'dozentenmodul/src/main/java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java4
-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.java71
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java6
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java18
6 files changed, 225 insertions, 12 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
index 03abada4..ba236c58 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/filetransfer/DownloadTask.java
@@ -3,9 +3,7 @@ package org.openslx.dozmod.filetransfer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.TransferState;
@@ -37,7 +35,7 @@ public class DownloadTask extends TransferTask {
private boolean fileWritable = true;
public DownloadTask(String host, int port, String downloadToken, File destinationFile, long fileSize,
- List<ByteBuffer> sha1Sums) throws FileNotFoundException {
+ List<byte[]> sha1Sums) throws FileNotFoundException {
super(destinationFile, fileSize);
this.host = host;
this.port = port;
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..8c48a8f1
--- /dev/null
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/CustomImagePermissionWindowLayout.java
@@ -0,0 +1,71 @@
+package org.openslx.dozmod.gui.window.layout;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.Frame;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.apache.log4j.Logger;
+import org.openslx.dozmod.gui.control.table.ImagePermissionTable;
+
+
+@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);
+
+ JPanel tablePane = new JPanel();
+ tablePane.setLayout(new BorderLayout());
+ tablePane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
+ permissionTable = new ImagePermissionTable();
+ tablePane.add(new JScrollPane(permissionTable), BorderLayout.CENTER);
+ JPanel userButtonPane = new JPanel();
+ btnAddUser = new JButton("Benutzer hinzufügern");
+ userButtonPane.add(btnAddUser);
+ btnRemoveUser = new JButton("Benutzer entfernen");
+ userButtonPane.add(btnRemoveUser);
+ tablePane.add(userButtonPane, BorderLayout.SOUTH);
+
+ // spaced buttons
+ JPanel buttonPane = new JPanel();
+ buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
+ buttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
+ btnSave = new JButton("Änderungen speichern");
+ buttonPane.add(btnSave);
+ buttonPane.add(Box.createGlue());
+ btnClose = new JButton("Abbrechen");
+ buttonPane.add(btnClose);
+
+ // pack it all
+ Container contentPane = getContentPane();
+ contentPane.add(tablePane, 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));
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
index 458498c0..e57a9310 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -142,31 +142,33 @@ public class ThriftActions {
return fileName;
}
+ public interface DeleteCallback {
+ void isDeleted(boolean success);
+ }
+
/********************************************************************************
*
* DELETE ACTION
*
- * Deletes a specific image version or the latest if none is specified
+ * Deletes a specific image version
*
********************************************************************************/
- public interface DeleteCallback {
- void isDeleted(boolean success);
- }
- public static void deleteImageVersion(final Frame frame, final String imageBaseId, final String imageVersionId, final DeleteCallback callback) {
+ public static void deleteImageVersion(final Frame frame, final String imageBaseId,
+ final String imageVersionId, final DeleteCallback callback) {
// requires confirmation of the user
- if (!Gui.showMessageBox(frame, "Wollen Sie die Version dieses Images wirklich löschen?",
+ if (!Gui.showMessageBox(frame, "Wollen Sie diese Image-Version wirklich löschen?",
MessageType.QUESTION_YESNO, LOGGER, null))
return;
// try to actually delete this version of the image
QuickTimer.scheduleOnce(new Task() {
boolean success = false;
+
@Override
public void fire() {
try {
ThriftManager.getSatClient().deleteImageVersion(Session.getSatelliteToken(),
imageVersionId);
- LOGGER.info("Deleted version '" + imageVersionId + "' of image '"
- + imageBaseId + "'.");
+ LOGGER.info("Deleted version '" + imageVersionId + "' of image '" + imageBaseId + "'.");
success = true;
} catch (TException e) {
ThriftError.showMessage(frame, LOGGER, e, "Das Löschen der Version ist gescheitert");