diff options
| author | Jonathan Bauer | 2015-08-21 13:32:45 +0200 |
|---|---|---|
| committer | Jonathan Bauer | 2015-08-21 13:32:45 +0200 |
| commit | 7b1c316bd9bd8abcbfb8792a1ee939b378d6da82 (patch) | |
| tree | 0a85890bdc1a5b4aa7384337f498bbf9d3976a41 | |
| parent | [client] support deletion of image base in ThriftActions (diff) | |
| download | tutor-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.java | 57 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java | 79 |
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); + } + } + }); + } + }); + } + /* ******************************************************************************* * |
