KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > util > IdGenerator


1 /*
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * "The contents of this file are subject to the Mozilla Public License
5  * Version 1.1 (the "License"); you may not use this file except in
6  * compliance with the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS"
10  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11  * License for the specific language governing rights and limitations under
12  * the License.
13  *
14  * The Original Code is ICEfaces 1.5 open source software code, released
15  * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16  * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17  * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18  *
19  * Contributor(s): _____________________.
20  *
21  * Alternatively, the contents of this file may be used under the terms of
22  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23  * License), in which case the provisions of the LGPL License are
24  * applicable instead of those above. If you wish to allow use of your
25  * version of this file only under the terms of the LGPL License and not to
26  * allow others to use your version of this file under the MPL, indicate
27  * your decision by deleting the provisions above and replace them with
28  * the notice and other provisions required by the LGPL License. If you do
29  * not delete the provisions above, a recipient may use your version of
30  * this file under either the MPL or the LGPL License."
31  *
32  */

33
34 package com.icesoft.util;
35
36 import com.icesoft.util.encoding.Base64;
37
38 import java.net.InetAddress JavaDoc;
39 import java.net.UnknownHostException JavaDoc;
40 import java.security.MessageDigest JavaDoc;
41 import java.security.NoSuchAlgorithmException JavaDoc;
42 import java.util.Random JavaDoc;
43
44 import org.apache.commons.logging.Log;
45 import org.apache.commons.logging.LogFactory;
46
47 /**
48  * The <code>IdGenerator</code> is responsible for generating a unique ID based
49  * on a counter, the current time in milliseconds, an arbitrary string, the IP
50  * address of the localhost, and a random number. </p>
51  */

52 public class IdGenerator {
53     private String JavaDoc seed;
54     private long counter;
55     private String JavaDoc ipAddress;
56     private static MessageDigest JavaDoc md5;
57
58
59     public IdGenerator() {
60         this(String.valueOf(new Random JavaDoc().nextInt()));
61     }
62
63     public IdGenerator(String JavaDoc seed) {
64         this.seed = seed.trim();
65         this.counter = 0;
66         try {
67             ipAddress = InetAddress.getLocalHost().getHostAddress();
68             md5 = MessageDigest.getInstance("MD5");
69         } catch (NoSuchAlgorithmException JavaDoc e) {
70             throw new RuntimeException JavaDoc(e);
71         } catch (UnknownHostException JavaDoc e) {
72             throw new RuntimeException JavaDoc(e);
73         }
74     }
75
76     /**
77      * Creates a unique ID based on the specified <code>string</code>. </p>
78      * @return a unique ID.
79      */

80     public synchronized String JavaDoc newIdentifier() {
81         StringBuffer JavaDoc buffer = new StringBuffer JavaDoc();
82         buffer.append(++counter);
83         buffer.append(System.currentTimeMillis());
84         buffer.append(seed);
85         buffer.append(ipAddress);
86         buffer.append(Math.random());
87         byte[] digest = md5.digest(buffer.toString().getBytes());
88         byte[] encodedDigest = Base64.encodeForURL(digest);
89         return new String JavaDoc(encodedDigest);
90     }
91 }
92
Popular Tags