Mercurial > hg > blitz_condensed
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; + } +}