You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/02/01 17:48:04 UTC

svn commit: r1239201 - in /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util: IO.java UpdateChecker.java

Author: rmannibucau
Date: Wed Feb  1 16:48:04 2012
New Revision: 1239201

URL: http://svn.apache.org/viewvc?rev=1239201&view=rev
Log:
adding UpdateChecker -> need to be added in the startup

Added:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java
Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/IO.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/IO.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/IO.java?rev=1239201&r1=1239200&r2=1239201&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/IO.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/IO.java Wed Feb  1 16:48:04 2012
@@ -34,6 +34,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.URL;
+import java.net.URLConnection;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
@@ -41,6 +42,24 @@ import java.util.zip.ZipOutputStream;
  * @version $Revision$ $Date$
  */
 public class IO {
+    private static final int MAX_TIMEOUT = Integer.getInteger("openejb.io.util.timeout", 5000);
+
+    public static String readFileAsString(final URL url) throws IOException {
+        final URLConnection connection = url.openConnection();
+        connection.setConnectTimeout(MAX_TIMEOUT);
+        final InputStream in = connection.getInputStream();
+        final StringBuilder builder = new StringBuilder("");
+        String line;
+        try {
+            final BufferedReader reader = new BufferedReader(new InputStreamReader(in));
+            while ((line = reader.readLine()) != null) {
+                builder.append(line);
+            }
+        } finally {
+            close(in);
+        }
+        return builder.toString();
+    }
 
     public static String readString(URL url) throws IOException {
         final InputStream in = url.openStream();

Added: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java?rev=1239201&view=auto
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java (added)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/UpdateChecker.java Wed Feb  1 16:48:04 2012
@@ -0,0 +1,90 @@
+package org.apache.openejb.util;
+
+import java.net.URL;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
+
+public class UpdateChecker implements Runnable {
+    private static final String SKIP_CHECK = "openen.version.check.skip";
+    private static final String REPO_URL = System.getProperty("openejb.version.check.repo.url", "http://repo1.maven.org/maven2/org/apache/openejb/");
+    private static final String URL = System.getProperty("openejb.version.check.url", REPO_URL + "openejb/maven-metadata.xml");
+    private static final String TAG = "latest";
+    private static final AtomicBoolean DONE = new AtomicBoolean(false);
+    private static final AtomicReference<String> RESULT = new AtomicReference<String>("");
+    private static final CountDownLatch LATCH = new CountDownLatch(1);
+    private static final String ERROR_MESSAGE = "can't check last version";
+    public static final String UNDEFINED = "undefined";
+
+    @Override
+    public void run() {
+        if (DONE.get() || isSkipped()) {
+            return;
+        }
+
+        try {
+            final URL url = new URL(URL);
+            final String metaData = IO.readFileAsString(url);
+            final String latest = extractLatest(metaData);
+            RESULT.set(message(latest, OpenEjbVersion.get().getVersion()));
+        } catch (Exception e) {
+            DONE.set(true);
+            RESULT.set(ERROR_MESSAGE);
+        }
+        LATCH.countDown();
+    }
+
+    private static String message(final String latest, final String version) {
+        if (UNDEFINED.equals(latest)) {
+            return "can't determine latest version";
+        }
+        if (version.equals(latest)) {
+            return "running on the latest version";
+        }
+        return new StringBuilder("current version => ").append(version)
+                .append(", latest stable version ").append(latest).append(" is available ")
+                .append(" on ").append(REPO_URL).toString();
+    }
+
+    private static String extractLatest(final String metaData) {
+        if (metaData != null) {
+            boolean found = false;
+            for (String s : metaData.replace(">", ">\n").split("\n")) {
+                if (found) {
+                    return trim(s).replace("</" + TAG + ">", "");
+                }
+                if (!s.isEmpty() && trim(s).endsWith("<" + TAG + ">")) {
+                    found = true;
+                }
+            }
+        }
+        return UNDEFINED;
+    }
+
+    private static String trim(final String s) {
+        return s.replace("\t", "").replace(" ", "");
+    }
+
+    public static String message() {
+        if (isSkipped()) {
+            return "version check is skipped";
+        }
+
+        try {
+            LATCH.await();
+        } catch (InterruptedException e) {
+            return ERROR_MESSAGE;
+        }
+        return RESULT.get();
+    }
+
+    public static boolean isSkipped() {
+        return System.getProperty(SKIP_CHECK) != null;
+    }
+
+    public static void main(String[] args) {
+        UpdateChecker checker = new UpdateChecker();
+        checker.run();
+        System.out.println(UpdateChecker.message());
+    }
+}