Package org.w3c.util

Source Code of org.w3c.util.UUID

// UUID.java
// $Id: UUID.java,v 1.2 2000/10/18 14:52:49 bmahe Exp $
// (c) COPYRIGHT MIT, INRIA and Keio, 2000.
// Please first read the full copyright statement in file COPYRIGHT.html
package org.w3c.util;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.w3c.tools.crypt.Md5;

/**
* A UUID (from java.rmi.server.UID)
* @version $Revision: 1.2 $
* @author  Beno�t Mah� (bmahe@w3.org)
*/
public final class UUID {

    /**
     * @serial Integer that helps create a unique UID.
     */
    private int unique;

    /**
     * @serial Long used to record the time.  The <code>time</code>
     * will be used to create a unique UID.
     */
    private long time;

    /**
     * InetAddress to make the UID globally unique
     */
    private static String address;

    /**
     * a random number
     */
    private static int hostUnique;

    /**
     * Used for synchronization
     */
    private static Object mutex;

    private static long lastTime;
    private static long DELAY;

    private static String generateNoNetworkID() {
  Thread current = Thread.currentThread();
  String nid = current.activeCount()+
      System.getProperty("os.version")+
      System.getProperty("user.name")+
      System.getProperty("java.version");
  System.out.println(nid);
  Md5 md5 = new Md5(nid);
  md5.processString();
  return md5.getStringDigest();
    }

    static {
  hostUnique = (new Object()).hashCode();
  mutex      = new Object();
  lastTime   = System.currentTimeMillis();
  DELAY      = 10; // in milliseconds
  try {
      String s   = InetAddress.getLocalHost().getHostAddress();
      Md5    md5 = new Md5(s);
      md5.processString();
      address = md5.getStringDigest();
  } catch (UnknownHostException ex) {
      address = generateNoNetworkID();
  }
    }

    public UUID() {
  synchronized (mutex) {
      boolean done = false;
      while (!done) {
    time = System.currentTimeMillis();
    if (time < lastTime+DELAY) {
        // pause for a second to wait for time to change
        try {
      Thread.currentThread().sleep(DELAY);
        } catch (java.lang.InterruptedException e) {
        }  // ignore exception
        continue;
    } else {
        lastTime = time;
        done = true;
    }
      }
      unique = hostUnique;
  }
    }

    public String toString() {
  return
      Integer.toString(unique,16)+ "-"+
      Long.toString(time,16) + "-" +
      address;
    }

    public boolean equals(Object obj) {
  if ((obj != null) && (obj instanceof UUID)) {
      UUID uuid = (UUID)obj;
      return (unique == uuid.unique &&
        time == uuid.time &&
        address.equals(uuid.address));
  } else {
      return false;
  }
    }
   
    public static void main(String args[]) {
  System.out.println(new UUID());
  System.out.println(new UUID());
  System.out.println(new UUID());
  System.out.println(new UUID());
    }

}
TOP

Related Classes of org.w3c.util.UUID

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.