diff options
author | Jonathan Bauer | 2015-09-07 12:39:04 +0200 |
---|---|---|
committer | Jonathan Bauer | 2015-09-07 12:39:04 +0200 |
commit | 4eff859b143c824cb93a0497e685182459fa102f (patch) | |
tree | 76eefc38fc697170de3e509a450e8887fe642c0f /dozentenmodul/src/main/java/org/openslx/dozmod/util/ClientVersion.java | |
parent | [client] Enable/Disable isactive & internet access (diff) | |
download | tutor-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.java | 167 |
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; } } |