summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Bauer2015-08-21 13:32:45 +0200
committerJonathan Bauer2015-08-21 13:32:45 +0200
commit7b1c316bd9bd8abcbfb8792a1ee939b378d6da82 (patch)
tree0a85890bdc1a5b4aa7384337f498bbf9d3976a41
parent[client] support deletion of image base in ThriftActions (diff)
downloadtutor-module-7b1c316bd9bd8abcbfb8792a1ee939b378d6da82.tar.gz
tutor-module-7b1c316bd9bd8abcbfb8792a1ee939b378d6da82.tar.xz
tutor-module-7b1c316bd9bd8abcbfb8792a1ee939b378d6da82.zip
[client] ThriftActions for Image Metadata (details + permissions) and use these in imageDetailsWindow
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java57
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java79
2 files changed, 106 insertions, 30 deletions
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 3ca4a90f..bf8fd2ba 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
@@ -42,6 +42,7 @@ import org.openslx.dozmod.permissions.ImagePerms;
import org.openslx.dozmod.thrift.Session;
import org.openslx.dozmod.thrift.ThriftActions;
import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback;
+import org.openslx.dozmod.thrift.ThriftActions.MetadataCallback;
import org.openslx.dozmod.thrift.ThriftError;
import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.dozmod.thrift.cache.UserCache;
@@ -220,39 +221,37 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
* @param imageBaseId the id of the image to be displayed
*/
public void setImage(final String imageBaseId) {
- QuickTimer.scheduleOnce(new Task() {
- @Override
- public void fire() {
- Exception error = null;
- try {
- synchronized (me) {
- if (image != null)
- return;
- image = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(),
- imageBaseId);
- permissionMap = ThriftManager.getSatClient().getImagePermissions(Session.getSatelliteToken(), imageBaseId);
+ synchronized (me) {
+ if (image != null)
+ return;
+ // Just prime the cache...
+ MetaDataCache.getOperatingSystems();
+ MetaDataCache.getVirtualizers();
+ final MetadataCallback callback = new MetadataCallback() {
+ @Override
+ public void fetchedImageDetails(ImageDetailsRead details) {
+ LOGGER.debug("detail cb: " + details);
+ if (details != null) {
+ image = details;
+ if (permissionMap != null)
+ fill();
+ // TODO else still show what we have?
}
- } catch (Exception e) {
- error = e;
}
- // Just prime the cache...
- MetaDataCache.getOperatingSystems();
- MetaDataCache.getVirtualizers();
- final Exception e = error;
- Gui.asyncExec(new Runnable() {
- @Override
- public void run() {
- if (e != null || image == null) {
- Gui.showMessageBox(null, "Konnte Daten des Images nicht abrufen",
- MessageType.ERROR, LOGGER, e);
- dispose();
- } else {
+ @Override
+ public void fetchedImagePermissions(Map<String, ImagePermissions> permissions) {
+ LOGGER.debug("perms cb: " + permissions);
+ if (permissions != null) {
+ permissionMap = permissions;
+ if (image != null)
fill();
- }
}
- });
- }
- });
+ }
+ };
+ final Frame parentFrame = JOptionPane.getFrameForComponent(me);
+ ThriftActions.getImageDetails(parentFrame, imageBaseId, callback);
+ ThriftActions.getImagePermissions(parentFrame, imageBaseId, callback);
+ }
}
/**
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 8b8ceb90..9b9179cb 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -7,11 +7,14 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.security.NoSuchAlgorithmException;
import java.util.List;
+import java.util.Map;
import javax.swing.JFileChooser;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
+import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
+import org.openslx.bwlp.thrift.iface.ImagePermissions;
import org.openslx.bwlp.thrift.iface.ImageVersionWrite;
import org.openslx.bwlp.thrift.iface.TAuthorizationException;
import org.openslx.bwlp.thrift.iface.TImageDataException;
@@ -25,10 +28,11 @@ import org.openslx.dozmod.gui.Gui.GuiCallable;
import org.openslx.dozmod.gui.MainWindow;
import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.gui.helper.QFileChooser;
+import org.openslx.dozmod.thrift.cache.MetaDataCache;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.QuickTimer;
-import org.openslx.util.Util;
import org.openslx.util.QuickTimer.Task;
+import org.openslx.util.Util;
public class ThriftActions {
@@ -305,6 +309,79 @@ public class ThriftActions {
}
Gui.showMessageBox(frame, "Neue Version erfolgreich erstellt", MessageType.INFO, LOGGER, null);
}
+
+ /* *******************************************************************************
+ *
+ * IMAGE METADATA QUERY
+ *
+ * Fetches image details or permissions
+ *
+ ********************************************************************************/
+ public interface MetadataCallback {
+ void fetchedImageDetails(ImageDetailsRead details);
+ void fetchedImagePermissions(Map<String, ImagePermissions> permissions);
+// void fetchedLectureDetails(LectureRead details);
+// void fetchedLecturePermissions(Map<String, ImagePermissions> permissions);
+ }
+
+ public static void getImageDetails(final Frame frame, final String imageBaseId, final MetadataCallback callback) {
+ QuickTimer.scheduleOnce(new Task() {
+ ImageDetailsRead details = null;
+ @Override
+ public void fire() {
+ try {
+ details = ThriftManager.getSatClient().getImageDetails(Session.getSatelliteToken(),
+ imageBaseId);
+ } catch (TException e) {
+ ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Lesen der Metadaten");
+ if (callback != null)
+ callback.fetchedImageDetails(details);
+ return;
+ }
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (callback != null) {
+ callback.fetchedImageDetails(details);
+ }
+ }
+ });
+ }
+ });
+ }
+ /**
+ * @param frame
+ * @param imageBaseId
+ * @param callback
+ */
+ public static void getImagePermissions(final Frame frame, final String imageBaseId, final MetadataCallback callback) {
+ QuickTimer.scheduleOnce(new Task() {
+ Map<String, ImagePermissions> permissionMap = null;
+ @Override
+ public void fire() {
+ try {
+ permissionMap = ThriftManager.getSatClient().getImagePermissions(Session.getSatelliteToken(), imageBaseId);
+ LOGGER.debug("Received: " + permissionMap);
+ if (permissionMap == null)
+ LOGGER.debug("And NULL");
+ } catch (TException e) {
+ ThriftError.showMessage(frame, LOGGER, e, "Fehler beim Lesen der Metadaten");
+ if (callback != null)
+ callback.fetchedImagePermissions(null);
+ return;
+ }
+ Gui.asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ if (callback != null) {
+ callback.fetchedImagePermissions(permissionMap);
+ }
+ }
+ });
+ }
+ });
+ }
+
/* *******************************************************************************
*