summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
diff options
context:
space:
mode:
authorJonathan Bauer2015-09-07 12:39:04 +0200
committerJonathan Bauer2015-09-07 12:39:04 +0200
commit4eff859b143c824cb93a0497e685182459fa102f (patch)
tree76eefc38fc697170de3e509a450e8887fe642c0f /dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
parent[client] Enable/Disable isactive & internet access (diff)
downloadtutor-module-4eff859b143c824cb93a0497e685182459fa102f.tar.gz
tutor-module-4eff859b143c824cb93a0497e685182459fa102f.tar.xz
tutor-module-4eff859b143c824cb93a0497e685182459fa102f.zip
[client] more work on client update stuff
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java')
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java167
1 files changed, 108 insertions, 59 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
index a1a86692..f7b75abf 100644
--- a/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
+++ b/dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java
@@ -1,70 +1,75 @@
package org.openslx.dozmod.util;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
import java.net.URL;
-import java.util.Scanner;
import java.util.jar.Attributes;
import java.util.jar.Manifest;
import org.apache.log4j.Logger;
+import com.google.gson.Gson;
+
// ClientVersion is a bad name, TODO find better suited one :)
public class ClientVersion {
private static final Logger LOGGER = Logger.getLogger(ClientVersion.class);
-
- private static String remoteVersion = null;
+
private static Long localRevisionTime = null;
private static Long remoteRevisionTime = null;
- private static String revision = null;
+ private static String localRevision = null;
+ private static String remoteRevision = null;
private static void init() {
- // load local version information from the jar's MANIFEST.MF
- String manifestRev = null;
- String manifestRevTime = null;
- try {
- Attributes attributes = getAttr();
- if (attributes == null)
- return;
- manifestRev = attributes.getValue("Build-Revision");
- manifestRevTime = attributes.getValue("Build-Revision-Timestamp");
- if (manifestRev != null)
- revision = manifestRev;
- if (manifestRevTime != null)
- localRevisionTime = Long.valueOf(manifestRevTime);
- } catch ( NumberFormatException e) {
- LOGGER.warn("Error while reading version: ", e);
- }
- LOGGER.info("Local version timestamp: " + localRevisionTime);
- // load the remote version information
- URL remoteVersionUrl = null;
- Scanner scanner = null;
- try {
- remoteVersionUrl = new URL("http://132.230.4.25/dozmod.version");
- scanner = new Scanner(remoteVersionUrl.openStream());
- } catch (Exception e) {
- // TODO shouldn't happen anyways
- LOGGER.error("Could not download remote version from: " + remoteVersionUrl.getPath(), e);
- }
- // process only one line for now
- Long remoteTime = null;
- if (scanner.hasNextLong()) {
- remoteTime = scanner.nextLong();
+ loadLocalVersion();
+ loadRemoteVersion();
+ }
+ public static long getLocalRevTimestamp() {
+ if (localRevisionTime == null) {
+ init();
+ if (localRevisionTime == null)
+ // fallback for dev purposes...
+ localRevisionTime = 0L;
}
- scanner.close();
- if (remoteTime != null) {
- remoteRevisionTime = remoteTime;
+ return localRevisionTime;
+ }
+ public static long getRemoteRevTimestamp() {
+ if (remoteRevisionTime == null)
+ init();
+ return remoteRevisionTime;
+ }
+ public static String getLocalRevision() {
+ if (localRevision == null) {
+ init();
+ if (localRevision == null)
+ // fallback for dev purposes...
+ localRevision = "dev";
}
- LOGGER.info("Remote version timestamp: " + remoteRevisionTime);
-
+ return localRevision;
+ }
+ public static String getRemoteRevision() {
+ if (remoteRevision == null)
+ init();
+ return remoteRevision;
+ }
+ public static boolean isNewest() {
+ if (localRevisionTime == null || remoteRevisionTime == null)
+ init();
+ // fallback if the above did not work: fail
+ if (localRevisionTime == null || remoteRevisionTime == null)
+ return true;
+ return localRevisionTime >= remoteRevisionTime;
}
- private static Attributes getAttr() {
+ private static void loadLocalVersion() {
+ // load local version information from the jar's MANIFEST.MF
Class clazz = ClientVersion.class;
String className = clazz.getSimpleName() + ".class";
String classPath = clazz.getResource(className).toString();
if (!classPath.startsWith("jar")) {
- // Class not from JAR
- return null;
+ // Class not from JAR
+ return;
}
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
"/META-INF/MANIFEST.MF";
@@ -73,25 +78,69 @@ public class ClientVersion {
manifest = new Manifest(new URL(manifestPath).openStream());
} catch (Exception e) {
LOGGER.error("Could not open MANIFEST", e);
- return null;
+ return;
}
- Attributes attr = manifest.getMainAttributes();
- return attr;
- }
- public static String getNewVersion() {
- return getRevision();
+ Attributes attributes = manifest.getMainAttributes();
+ // if attr are null, then we couldn't open the jar's MANIFEST
+ // since we are probably not in a jar context, just do nothing
+ if (attributes == null)
+ return;
+ String manifestRev = null;
+ String manifestRevTime = null;
+ try {
+ manifestRev = attributes.getValue("Build-Revision");
+ manifestRevTime = attributes.getValue("Build-Revision-Timestamp");
+ } catch (IllegalArgumentException e) {
+ LOGGER.warn("Error while reading version: ", e);
+ return;
+ }
+ if (manifestRev != null)
+ localRevision = manifestRev;
+ if (manifestRevTime != null)
+ localRevisionTime = Long.valueOf(manifestRevTime);
+
+ LOGGER.info("Local revision: " + localRevision);
+ LOGGER.info("Local revision timestamp: " + localRevisionTime);
}
- public static String getRevision() {
- if (revision == null)
- init();
- return revision;
+ // per GSON
+ private static void loadRemoteVersion() {
+ Gson gson = new Gson();
+ String json = null;
+ BufferedReader reader = null;
+ try {
+ URL url = new URL("http://132.230.4.25/dozmod.version");
+ reader = new BufferedReader(new InputStreamReader(url.openStream()));
+ StringBuffer buffer = new StringBuffer();
+ int read;
+ char[] chars = new char[1024];
+ while ((read = reader.read(chars)) != -1)
+ buffer.append(chars, 0, read);
+ json = buffer.toString();
+ } catch (Exception e) {
+ LOGGER.error("Could not fetch remote version", e);
+ return;
+ } finally {
+ if (reader != null)
+ try {
+ reader.close();
+ } catch (IOException e) {
+ }
+ }
+
+ VersionQuery query = gson.fromJson(json, VersionQuery.class);
+ if (query.revision != null)
+ remoteRevision = query.revision;
+ if (query.timestamp != null)
+ remoteRevisionTime = query.timestamp;
+ LOGGER.debug("Remote revision: " + remoteRevision);
+ LOGGER.debug("Remote timestamp: " + remoteRevisionTime);
}
- public static boolean isNewest() {
- if (localRevisionTime == null || remoteRevisionTime == null)
- init();
- if (localRevisionTime == null || remoteRevisionTime == null)
- return true; // hax
- return localRevisionTime >= remoteRevisionTime;
+ /**
+ * Class for GSON json parsing
+ */
+ static class VersionQuery {
+ Long timestamp;
+ String revision;
}
}