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