summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/thrift
diff options
context:
space:
mode:
authorJonathan Bauer2016-05-04 18:21:47 +0200
committerJonathan Bauer2016-05-04 18:21:47 +0200
commit2420003d435ba1800c6ec0874c08bef1c1cd9a7a (patch)
tree288c9058f308d16fd719ac3bd223b1f7244d6419 /dozentenmodul/src/main/java/org/openslx/dozmod/thrift
parent[client] only switch to 'Advanced' tab if its input fields contain errors (diff)
downloadtutor-module-2420003d435ba1800c6ec0874c08bef1c1cd9a7a.tar.gz
tutor-module-2420003d435ba1800c6ec0874c08bef1c1cd9a7a.tar.xz
tutor-module-2420003d435ba1800c6ec0874c08bef1c1cd9a7a.zip
[client] publish image stuff 2.0
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/thrift')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java53
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageDetailsActions.java12
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java52
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImagePublishedDetailsActions.java30
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java16
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java10
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/thrift/cache/ImagePublishedCache.java27
7 files changed, 128 insertions, 72 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java
index 26e11504..b8ceb6b5 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/GuiErrorCallback.java
@@ -3,7 +3,10 @@ package org.openslx.dozmod.thrift;
import java.awt.Frame;
import org.apache.log4j.Logger;
+import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
+import org.openslx.bwlp.thrift.iface.AuthorizationError;
+import org.openslx.bwlp.thrift.iface.TAuthorizationException;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.Gui.GuiCallable;
import org.openslx.dozmod.gui.helper.MessageType;
@@ -25,7 +28,7 @@ public class GuiErrorCallback implements ErrorCallback {
@Override
public boolean thriftError(int failCount, final String method, final Throwable t) {
// if it's not a transport exception, do not retry
- if (t != null && !(t instanceof TTransportException))
+ if (t != null && !(t instanceof TException))
return false;
// if it's the first fail, retry immediately
if (failCount == 1)
@@ -33,20 +36,40 @@ public class GuiErrorCallback implements ErrorCallback {
// Some methods are non-critical, so don't show a pop-up
if (ThriftError.failSilently(method))
return failCount == 2; // As it's silent, give it a second try...
- // Otherwise, ask user if we should retry
- final TTransportException tex = (TTransportException) t;
- return Gui.syncExec(new GuiCallable<Boolean>() {
- @Override
- public Boolean run() {
- String errMsg = null;
- if (tex != null) {
- errMsg = " (Fehler " + tex.getType() + ")";
- }
- return Gui.showMessageBox(parent, "Die Kommunikation mit " + serverString + " ist"
- + " gestört. Der Aufruf der Funktion " + method + " ist fehlgeschlagen" + errMsg
- + ".\n\n" + "Möchten Sie den Aufruf wiederholen?", MessageType.ERROR_RETRY, LOGGER, t);
+ if (t instanceof TAuthorizationException) {
+ final TAuthorizationException taex = (TAuthorizationException) t;
+ if (taex.getNumber() == AuthorizationError.NOT_AUTHENTICATED || taex.getNumber() == AuthorizationError.INVALID_TOKEN) {
+ // TODO somehow reauth the user :)
+ return Gui.syncExec(new GuiCallable<Boolean>() {
+ @Override
+ public Boolean run() {
+ if (Gui.showMessageBox(parent, "Ungültiges Sitzungstoken oder fehlerhafte Authentifizierung am " + serverString + "!" +
+ //"\n" + errMsg + "\n" +
+ "\nBitte starten Sie das Programm neu. Jetzt beenden?", MessageType.ERROR_RETRY, LOGGER, t)) {
+ // user confirmed exit
+ Gui.exit(0);
+ }
+ return false;
+ }
+ });
}
- });
+ }
+ if (t instanceof TTransportException) {
+ // Otherwise, ask user if we should retry
+ final TTransportException tex = (TTransportException) t;
+ return Gui.syncExec(new GuiCallable<Boolean>() {
+ @Override
+ public Boolean run() {
+ String errMsg = null;
+ if (tex != null) {
+ errMsg = " (Fehler " + tex.getType() + ")";
+ }
+ return Gui.showMessageBox(parent, "Die Kommunikation mit " + serverString + " ist"
+ + " gestört. Der Aufruf der Funktion " + method + " ist fehlgeschlagen" + errMsg
+ + ".\n\n" + "Möchten Sie den Aufruf wiederholen?", MessageType.ERROR_RETRY, LOGGER, t);
+ }
+ });
+ }
+ return false;
}
-
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageDetailsActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageDetailsActions.java
index 2f8ad062..71615723 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageDetailsActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageDetailsActions.java
@@ -1,6 +1,5 @@
package org.openslx.dozmod.thrift;
-import java.awt.Frame;
import java.util.Map;
import org.apache.thrift.TException;
@@ -12,16 +11,13 @@ import org.openslx.bwlp.thrift.iface.TInvocationException;
import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback;
-import org.openslx.dozmod.thrift.ThriftActions.DownloadCallback;
import org.openslx.dozmod.thrift.ThriftActions.ImageMetaCallback;
public interface ImageDetailsActions {
- public void getImageDetails(final Frame parent, final String imageBaseId, final ImageMetaCallback callback);
- public boolean setImageOwner(final Frame parent, final String imageBaseId, final UserInfo user);
+ public void getImageDetails(final String imageBaseId, final ImageMetaCallback callback);
+ public boolean setImageOwner(final String imageBaseId, final UserInfo user);
public void updateImageBase(final String imageBaseId, final ImageBaseWrite data) throws TException, TAuthorizationException, TNotFoundException, TInvocationException;
public void writeImagePermissions(final String imageBaseId, Map<String, ImagePermissions> customPermissions) throws TException, TAuthorizationException, TNotFoundException, TInvocationException;
- public void initDownload(final Frame frame, final String imageVersionId, final String imageName,
- final String virtualizerId, final int osId, final long imageSize, final DownloadCallback callback);
- public void deleteImageVersion(final Frame frame, final ImageVersionDetails version, final DeleteCallback callback);
- // TODO button enable function
+ public void deleteImageVersion(final ImageVersionDetails version, final DeleteCallback callback);
+ public boolean canPublish();
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java
index c72ad67e..64ee8d25 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImageLocalDetailsActions.java
@@ -3,6 +3,7 @@ package org.openslx.dozmod.thrift;
import java.awt.Frame;
import java.util.Map;
+import org.apache.log4j.Logger;
import org.apache.thrift.TException;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
@@ -14,15 +15,21 @@ import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback;
-import org.openslx.dozmod.thrift.ThriftActions.DownloadCallback;
import org.openslx.dozmod.thrift.ThriftActions.ImageMetaCallback;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
public class ImageLocalDetailsActions implements ImageDetailsActions {
+ private final static Logger LOGGER = Logger.getLogger(ImageLocalDetailsActions.class);
+ private final Frame parent;
+ public ImageLocalDetailsActions(final Frame parent) {
+ this.parent = parent;
+ }
+
@Override
- public void getImageDetails(final Frame parent, final String imageBaseId, final ImageMetaCallback callback) {
+ public void getImageDetails(final String imageBaseId,
+ final ImageMetaCallback callback) {
QuickTimer.scheduleOnce(new Task() {
ImageDetailsRead details = null;
Map<String, ImagePermissions> permissions = null;
@@ -30,7 +37,8 @@ public class ImageLocalDetailsActions implements ImageDetailsActions {
@Override
public void fire() {
details = ThriftActions.getImageDetails(parent, imageBaseId);
- permissions = ThriftActions.getImagePermissions(parent, imageBaseId);
+ permissions = ThriftActions.getImagePermissions(parent,
+ imageBaseId);
Gui.asyncExec(new Runnable() {
@Override
public void run() {
@@ -44,35 +52,45 @@ public class ImageLocalDetailsActions implements ImageDetailsActions {
}
@Override
- public boolean setImageOwner(final Frame parent, final String imageBaseId, final UserInfo user) {
+ public boolean setImageOwner(final String imageBaseId, final UserInfo user) {
return ThriftActions.setImageOwner(parent, imageBaseId, user);
}
@Override
- public void updateImageBase(final String imageBaseId, final ImageBaseWrite data) throws TException, TAuthorizationException, TNotFoundException, TInvocationException {
+ public void updateImageBase(final String imageBaseId,
+ final ImageBaseWrite data) throws TException,
+ TAuthorizationException, TNotFoundException, TInvocationException {
ThriftActions.updateImageBase(imageBaseId, data);
}
@Override
- public void writeImagePermissions(final String imageBaseId, Map<String, ImagePermissions> customPermissions) throws TException {
+ public void writeImagePermissions(final String imageBaseId,
+ final Map<String, ImagePermissions> customPermissions) throws TException {
+ QuickTimer.scheduleOnce(new Task() {
+ @Override
+ public void fire() {
+ try {
+ ThriftActions.writeImagePermissions(imageBaseId, customPermissions);
+ } catch (TException e) {
+ ThriftError.showMessage(parent, LOGGER, e, "Could not write permissions");
+ }
+ }
+ });
ThriftActions.writeImagePermissions(imageBaseId, customPermissions);
}
@Override
- public void initDownload(final Frame parent, final String imageVersionId,
- final String imageName, final String virtualizerId, final int osId, final long imageSize,
- final DownloadCallback callback) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void deleteImageVersion(final Frame parent, final ImageVersionDetails version,
+ public void deleteImageVersion(final ImageVersionDetails version,
final DeleteCallback callback) {
ThriftActions.deleteImageVersion(parent, version, callback);
-
+
}
+ @Override
+ public boolean canPublish() {
+ // check that the API of the satellite server is at least 3
+ // (anything > 3 supports publications of images)
+ return Session.getSatApiVersion() >= 3;
+ }
-
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImagePublishedDetailsActions.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImagePublishedDetailsActions.java
index c60b2dfa..81d8332c 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImagePublishedDetailsActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ImagePublishedDetailsActions.java
@@ -3,6 +3,7 @@ package org.openslx.dozmod.thrift;
import java.awt.Frame;
import java.util.Map;
+import org.apache.log4j.Logger;
import org.openslx.bwlp.thrift.iface.ImageBaseWrite;
import org.openslx.bwlp.thrift.iface.ImageDetailsRead;
import org.openslx.bwlp.thrift.iface.ImagePermissions;
@@ -10,22 +11,25 @@ import org.openslx.bwlp.thrift.iface.ImageVersionDetails;
import org.openslx.bwlp.thrift.iface.UserInfo;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback;
-import org.openslx.dozmod.thrift.ThriftActions.DownloadCallback;
import org.openslx.dozmod.thrift.ThriftActions.ImageMetaCallback;
import org.openslx.util.QuickTimer;
import org.openslx.util.QuickTimer.Task;
-public class ImagePublishedDetailsActions implements ImageDetailsActions{
+public class ImagePublishedDetailsActions implements ImageDetailsActions {
+
+ private final static Logger LOGGER = Logger.getLogger(ImagePublishedDetailsActions.class);
+
+ public ImagePublishedDetailsActions(final Frame parent) {
+ }
@Override
- public void getImageDetails(final Frame parent, final String imageBaseId, final ImageMetaCallback callback) {
+ public void getImageDetails(final String imageBaseId, final ImageMetaCallback callback) {
QuickTimer.scheduleOnce(new Task() {
ImageDetailsRead details = null;
@Override
public void fire() {
details = ThriftActions.getPublishedImageDetails(imageBaseId);
-
Gui.asyncExec(new Runnable() {
@Override
public void run() {
@@ -37,11 +41,10 @@ public class ImagePublishedDetailsActions implements ImageDetailsActions{
});
}
});
-
}
@Override
- public boolean setImageOwner(Frame parent, String imageBaseId, UserInfo user) {
+ public boolean setImageOwner(String imageBaseId, UserInfo user) {
return false;
}
@@ -57,18 +60,13 @@ public class ImagePublishedDetailsActions implements ImageDetailsActions{
}
@Override
- public void initDownload(Frame frame, String imageVersionId,
- String imageName, String virtualizerId, int osId, long imageSize,
- DownloadCallback callback) {
- // TODO download stuff
- }
-
- @Override
- public void deleteImageVersion(Frame frame, ImageVersionDetails version,
+ public void deleteImageVersion(ImageVersionDetails version,
DeleteCallback callback) {
return;
}
-
-
+ @Override
+ public boolean canPublish() {
+ return false;
+ }
}
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java
index 2f5059b5..c5170681 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/Session.java
@@ -14,13 +14,17 @@ public class Session {
private static WhoamiInfo data = null;
+ private static String satelliteAddress = null;
+
private static String satelliteToken = null;
private static String masterToken = null;
- private static String satelliteAddress = null;
+ private static long satelliteApiVersion = -1;
+
+ private static SatelliteConfig satConf = null;
- public static void initialize(WhoamiInfo whoami, String satAddress, String satToken, String masToken) {
+ public static void initialize(WhoamiInfo whoami, String satAddress, String satToken, String masToken, long satApiVersion) {
if (whoami == null || whoami.user == null || whoami.user.userId == null) {
throw new IllegalArgumentException(
"Cannot initialize session: whoami-Information from satellite incomplete");
@@ -33,6 +37,7 @@ public class Session {
masterToken = masToken;
satelliteToken = satToken;
satelliteAddress = satAddress;
+ satelliteApiVersion = satApiVersion;
}
/**
@@ -121,7 +126,12 @@ public class Session {
return satelliteAddress;
}
- private static SatelliteConfig satConf = null;
+ /**
+ * @return the satellite server's API version
+ */
+ public static long getSatApiVersion() {
+ return satelliteApiVersion;
+ }
/**
* Query the satellite server for its configuration and default values.
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 3467e4e9..78d2e416 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/ThriftActions.java
@@ -68,9 +68,9 @@ public class ThriftActions {
/* *******************************************************************************
*
- * LOGIN
+ * SESSION
*
- * Login methods
+ * Session initialization
*
* *******************************************************************************
*/
@@ -90,6 +90,7 @@ public class ThriftActions {
String address = null;
String satToken = null;
String masterToken = null;
+ long remoteVersion = -1;
if (interactive && !forceCustomSatellite && (data.satellites == null || data.satellites.isEmpty())) {
Gui.asyncMessageBox("Login erfolgreich, aber es wurde kein Satelliten-Server gefunden.\n"
@@ -154,7 +155,6 @@ public class ThriftActions {
address, App.THRIFT_SSL_PORT, 5000);
// RPC version check
- long remoteVersion = -1;
if (client != null) {
try {
remoteVersion = client.getVersion(Version.VERSION);
@@ -175,7 +175,7 @@ public class ThriftActions {
return false;
}
- if (remoteVersion != Version.VERSION) {
+ if (remoteVersion < Version.MIN_VERSION || remoteVersion > Version.VERSION) {
if (interactive) {
Gui.asyncMessageBox("Das von Ihnen verwendete Dozentenmodul ist nicht mit dem"
+ " gewählten Satelliten-Server kompatibel.\n" + "Ihre Version: "
@@ -215,7 +215,7 @@ public class ThriftActions {
} while (interactive && whoami == null);
if (whoami != null) {
- Session.initialize(whoami, address, satToken, masterToken);
+ Session.initialize(whoami, address, satToken, masterToken, remoteVersion);
ThriftManager.setSatelliteAddress(
GraphicalCertHandler.getSslContext(Session.getSatelliteAddress()),
Session.getSatelliteAddress(), App.THRIFT_SSL_PORT, App.THRIFT_TIMEOUT_MS);
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/cache/ImagePublishedCache.java b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/cache/ImagePublishedCache.java
index e57a4a24..a137d84e 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/cache/ImagePublishedCache.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/thrift/cache/ImagePublishedCache.java
@@ -4,11 +4,13 @@ import java.util.List;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
-import org.openslx.bwlp.thrift.iface.ImagePublishData;
import org.openslx.bwlp.thrift.iface.ImageSummaryRead;
import org.openslx.bwlp.thrift.iface.TAuthorizationException;
import org.openslx.bwlp.thrift.iface.TInvocationException;
-import org.openslx.dozmod.gui.window.ImageListWindow;
+import org.openslx.dozmod.Config;
+import org.openslx.dozmod.gui.Gui;
+import org.openslx.dozmod.gui.MainWindow;
+import org.openslx.dozmod.gui.helper.MessageType;
import org.openslx.dozmod.thrift.Session;
import org.openslx.thrifthelper.ThriftManager;
import org.openslx.util.GenericDataCache;
@@ -16,7 +18,8 @@ import org.openslx.util.GenericDataCache.CacheMode;
public class ImagePublishedCache {
- private final static Logger LOGGER = Logger.getLogger(ImagePublishedCache.class);
+ private final static Logger LOGGER = Logger
+ .getLogger(ImagePublishedCache.class);
private static final int CACHE_TIME_LIST_MS = 30 * 1000;
@@ -30,11 +33,19 @@ public class ImagePublishedCache {
int pageSize = Session.getSatelliteConfig().pageSize;
for (int i = 0;; ++i) {
List<ImageSummaryRead> page = null;
- try {
- page = ThriftManager.getMasterClient().getPublicImages(Session.getMasterToken(), i);
- } catch (TException e) {
- LOGGER.error("Could not get the list of public images from the masterserver.", e);
- }
+// try {
+ page = ThriftManager.getMasterClient().getPublicImages(
+ Session.getMasterToken(), i);
+// } catch (TAuthorizationException e) {
+// if (Gui.showMessageBox(
+// "Sitzung abgelaufen. Um diese Funktion zu nutzen, melden Sie sich erneut ein. Jetzt abmelden und beenden?",
+// MessageType.QUESTION_YESNO, LOGGER, e)) {
+// Config.saveCurrentSession("", "", "");
+//
+// }
+//
+// return null;
+// }
if (result == null) {
result = page;
} else {