diff src/org/dancres/blitz/util/Time.java @ 0:3dc0c5604566

Initial checkin of blitz 2.0 fcs - no installer yet.
author Dan Creswell <dan.creswell@gmail.com>
date Sat, 21 Mar 2009 11:00:06 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/dancres/blitz/util/Time.java	Sat Mar 21 11:00:06 2009 +0000
@@ -0,0 +1,75 @@
+package org.dancres.blitz.util;
+
+import net.jini.core.lease.Lease;
+import net.jini.core.lease.LeaseDeniedException;
+
+/**
+   Various methods/classes must cope with the JINI time model.  This class
+   provides useful methods for dealing with that model.
+ */
+public class Time {
+    /**
+       Computes an expiry time based on the passed in wait time which might
+       be a suitable value or it might be Lease.FOREVER
+     */
+    public static long getAbsoluteTime(long aWaitTime) {
+        if (aWaitTime == Lease.FOREVER)
+            return Long.MAX_VALUE;
+
+        long myTime = System.currentTimeMillis() + aWaitTime;
+
+        if (myTime < 0)
+            return Long.MAX_VALUE;
+        else
+            return myTime;
+    }
+
+    /**
+       Compute the actual time to relative wait time based on the passed
+       argument.  This will typically used by read/take variants.
+     */
+    public static long getWaitTime(long aWaitTime) {
+        if (aWaitTime == Lease.FOREVER)
+            return Long.MAX_VALUE;
+        else
+            return aWaitTime;
+    }
+
+    /**
+       Computes a lease duration given a lease duration which
+       could be a legitimate duration, Lease.FOREVER or Lease.ANY
+
+       @param aTime the desired lease length
+       @param aBound the maximum lease length allowed.  If aBound is zero,
+       then the max time is assumed to be Lease.FOREVER
+     */
+    public static long getLeaseDuration(long aTime, long aBound) {
+
+        long myBound;
+        long myDuration = aTime;
+
+        // Convert the bound to something sane
+        if (aBound == 0)
+            myBound = Lease.FOREVER;
+        else
+            myBound = aBound;
+
+        // Allow FOREVER or not, based on bound
+        if (aTime == Lease.FOREVER) {
+            if (aBound == 0)
+                return Long.MAX_VALUE;
+            else
+                return myBound;
+        }
+
+        // If ANY, use the sanitized bound
+        if (aTime == Lease.ANY) {
+            myDuration = myBound;
+        }
+
+        if (myDuration > myBound)
+            return myBound;
+        else
+            return myDuration;
+    }
+}