You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tr...@apache.org on 2004/06/14 14:50:50 UTC
cvs commit: jakarta-commons-sandbox/id/src/java/org/apache/commons/id/uuid UUID.java
treilly 2004/06/14 05:50:50
Modified: id/src/java/org/apache/commons/id/uuid UUID.java
Log:
Added nameUUIDFromString(String name) name and namespace UUID
Revision Changes Path
1.8 +22 -7 jakarta-commons-sandbox/id/src/java/org/apache/commons/id/uuid/UUID.java
Index: UUID.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/id/src/java/org/apache/commons/id/uuid/UUID.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- UUID.java 31 May 2004 07:07:31 -0000 1.7
+++ UUID.java 14 Jun 2004 12:50:50 -0000 1.8
@@ -23,6 +23,8 @@
import org.apache.commons.id.IdentifierUtils;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.digest.DigestUtils;
+
/**
* <p><code>UUID</code> represents a Universally Unique Identifier per IETF
@@ -424,12 +426,25 @@
}
/**
- * <p>Returns a new version 3 UUID, based upon a name and namespace.</p>
+ * <p>Returns a new version three UUID given a name and the namespace's UUID.</p>
*
- * @return a new version 3 UUID, based upon a name and namespace.
- */
- static UUID nameUUID() {
- /* @TODO */
- return null;
+ * @param name String the name to calculate the UUID for.
+ * @param namespace UUID assigned to this namespace.
+ * @return a new version three UUID given a name and the namespace's UUID.
+ */
+ static UUID nameUUIDFromString(String name, UUID namespace) {
+ byte[] nameAsBytes = name.getBytes();
+ byte[] concat = new byte[UUID_BYTE_LENGTH + nameAsBytes.length];
+ System.arraycopy(namespace.getRawBytes(), 0, concat, 0, UUID_BYTE_LENGTH);
+ System.arraycopy(nameAsBytes, 0, concat, UUID_BYTE_LENGTH, nameAsBytes.length);
+ byte[] raw = DigestUtils.md5(concat);
+ //Set version
+ raw[TIME_HI_AND_VERSION_BYTE_6] &= 0x0F;
+ raw[TIME_HI_AND_VERSION_BYTE_6] |= (UUID.VERSION_THREE << 4);
+ //Set variant
+ raw[CLOCK_SEQ_HI_AND_RESERVED_BYTE_8] &= 0x3F; //0011 1111
+ raw[CLOCK_SEQ_HI_AND_RESERVED_BYTE_8] |= 0x80; //1000 0000
+
+ return new UUID(raw);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org