Development Class Java

/*************************************************************************
 *                                                                       *
 *  EJBCA: The OpenSource Certificate Authority                          *
 *                                                                       *
 *  This software is free software; you can redistribute it and/or       *
 *  modify it under the terms of the GNU Lesser General Public           *
 *  License as published by the Free Software Foundation; either         *
 *  version 2.1 of the License, or any later version.                    *
 *                                                                       *
 *  See terms of license at gnu.org.                                     *
 *                                                                       *
 *************************************************************************/
/** Shamelessly ripped from generated XDoclet source, because I don't want to generate util classes.
 * 
 * @author XDoclet.sf.net
 * @version $Id: GUIDGenerator.java 5585 2008-05-01 20:55:00Z anatom $
 */
public class GUIDGenerator {
     /** Cached per JVM server IP. */
     private static String hexServerIP = null;
     // initialise the secure random instance
     private static final java.security.SecureRandom seeder = new java.security.SecureRandom();
     
     /**
      * A 32 byte GUID generator (Globally Unique ID). These artificial keys SHOULD NOT  be seen by the user,
      * not even touched by the DBA but with very rare exceptions, just manipulated by the database and the programs.
      *
      * Usage: Add an id field (type java.lang.String) to your EJB, and add setId(XXXUtil.generateGUID(this)); to the ejbCreate method.
      */
     public static final String generateGUID(Object o) {
         StringBuffer tmpBuffer = new StringBuffer(16);
         if (hexServerIP == null) {
             java.net.InetAddress localInetAddress = null;
             try {
                 localInetAddress = java.net.InetAddress.getLocalHost();
             } catch (java.net.UnknownHostException uhe) {
                 return null;
             }
             byte serverIP[] = localInetAddress.getAddress();
             hexServerIP = hexFormat(getInt(serverIP), 8);
         }
         String hashcode = hexFormat(System.identityHashCode(o), 8);
         tmpBuffer.append(hexServerIP);
         tmpBuffer.append(hashcode);
         long timeNow      = System.currentTimeMillis();
         int timeLow       = (int)timeNow & 0xFFFFFFFF;
         int node          = seeder.nextInt();
         StringBuffer guid = new StringBuffer(32);
         guid.append(hexFormat(timeLow, 8));
         guid.append(tmpBuffer.toString());
         guid.append(hexFormat(node, 8));
         return guid.toString();
     }
     
     private static int getInt(byte bytes[]) {
         int i = 0;
         int j = 24;
         for (int k = 0; j >= 0; k++) {
             int l = bytes[k] & 0xff;
             i += l << j;
             j -= 8;
         }
         return i;
     }
     private static String hexFormat(int i, int j) {
         String s = Integer.toHexString(i);
         return padHex(s, j) + s;
     }
     private static String padHex(String s, int i) {
         StringBuffer tmpBuffer = new StringBuffer();
         if (s.length() < i) {
             for (int j = 0; j < i - s.length(); j++) {
                 tmpBuffer.append('0');
             }
         }
         return tmpBuffer.toString();
     }
}