| UID.java |
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.util.id;
import org.jboss.util.MuLong;
/**
* A unique identifier (uniqueness only guarantied inside of the virtual
* machine in which it was created).
*
* <p>The identifier is composed of:
* <ol>
* <li>A long generated from the current system time (in milliseconds).</li>
* <li>A long generated from a counter (which is the number of UID objects
* that have been created durring the life of the executing virtual
* machine).</li>
* </ol>
*
* <pre>
* [ time ] - [ counter ]
* </pre>
*
* <p>Numbers are converted to radix(Character.MAX_RADIX) when converting
* to strings.
*
* <p>This <i>should</i> provide adequate uniqueness for most purposes.
*
* @version <tt>$Revision: 1.4 $</tt>
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
*/
public class UID
implements ID
{
/** A counter for generating identity values */
protected static final MuLong COUNTER = new MuLong(0);
/** The time portion of the UID */
protected final long time;
/** The identity portion of the UID */
protected final long id;
/**
* Construct a new UID.
*/
public UID() {
time = System.currentTimeMillis();
synchronized (COUNTER) {
id = COUNTER.increment();
}
}
/**
* Copy a UID.
*/
protected UID(final UID uid) {
time = uid.time;
id = uid.id;
}
/**
* Get the time portion of this UID.
*
* @return The time portion of this UID.
*/
public final long getTime() {
return time;
}
/**
* Get the identity portion of this UID.
*
* @return The identity portion of this UID.
*/
public final long getID() {
return id;
}
/**
* Return a string representation of this UID.
*
* @return A string representation of this UID.
*/
public String toString() {
return
Long.toString(time, Character.MAX_RADIX) +
"-" +
Long.toString(id, Character.MAX_RADIX);
}
/**
* Return the hash code of this UID.
*
* @return The hash code of this UID.
*/
public int hashCode() {
return (int)((time ^ id) >> 32);
}
/**
* Checks if the given object is equal to this UID.
*
* @param obj Object to test equality with.
* @return True if object is equal to this UID.
*/
public boolean equals(final Object obj) {
if (obj == this) return true;
if (obj != null && obj.getClass() == getClass()) {
UID uid = (UID)obj;
return
uid.time == time &&
uid.id == id;
}
return false;
}
/**
* Returns a copy of this UID.
*
* @return A copy of this UID.
*/
public Object clone() {
try {
return super.clone();
}
catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
/**
* Returns a UID as a string.
*
* @return UID as a string.
*/
public static String asString() {
return new UID().toString();
}
}
| UID.java |