KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > codehaus > aspectwerkz > proxy > Uuid


1 /**************************************************************************************
2  * Copyright (c) Jonas Bonér, Alexandre Vasseur. All rights reserved. *
3  * http://aspectwerkz.codehaus.org *
4  * ---------------------------------------------------------------------------------- *
5  * The software in this package is published under the terms of the LGPL license *
6  * a copy of which has been included with this distribution in the license.txt file. *
7  **************************************************************************************/

8 package org.codehaus.aspectwerkz.proxy;
9
10 /**
11  * NOTE:
12  * <p/>
13  * This code is based on code from the [Plasmid Replication Engine] project.
14  * <br/>
15  * Licensed under [Mozilla Public License 1.0 (MPL)].
16  * <p/>
17  * Original JavaDoc:
18  * <p/>
19  * Our distributed objects are generally named most efficiently (and cleanly)
20  * by their UUID's. This class provides some static helpers for using UUID's.
21  * If it was efficient to do in Java, I would make the uuid an normal class
22  * and use instances of it. However, in current JVM's, we would end up using an
23  * Object to represent a long, which is pretty expensive. Maybe someday. ###
24  * <p/>
25  * UUID format: currently using currentTimeMillis() for the low bits. This uses
26  * about 40 bits for the next 1000 years, leaving 24 bits for debugging
27  * and consistency data. I'm using 8 of those for a magic asci 'U' byte.
28  * <p/>
29  * Future: use one instance of Uuid per type of object for better performance
30  * and more detailed info (instance could be matched to its uuid's via a map or
31  * array). This all static version bites.###
32  */

33 public final class Uuid {
34
35     public static final long UUID_NONE = 0;
36     public static final long UUID_WILD = -1;
37     public static final long UUID_MAGICMASK = 0xff << 56;
38     public static final long UUID_MAGIC = 'U' << 56;
39
40     protected static long lastTime;
41
42     /**
43      * Generate and return a new Universally Unique ID.
44      * Happens to be monotonically increasing.
45      */

46     public synchronized static long newUuid() {
47         long time = System.currentTimeMillis();
48
49         if (time <= lastTime) {
50             time = lastTime + 1;
51         }
52         lastTime = time;
53         return UUID_MAGIC | time;
54     }
55
56     /**
57      * Returns true if uuid could have been generated by Uuid.
58      */

59     public static boolean isValid(final long uuid) {
60         return (uuid & UUID_MAGICMASK) == UUID_MAGIC
61                && (uuid & ~UUID_MAGICMASK) != 0;
62     }
63 }
64
65
Popular Tags