Mega Code Archive

 
Categories / Java / Development Class
 

Generator for Globally unique Strings

/**  * Licensed to the Apache Software Foundation (ASF) under one or more  * contributor license agreements.  See the NOTICE file distributed with  * this work for additional information regarding copyright ownership.  * The ASF licenses this file to You under the Apache License, Version 2.0  * (the "License"); you may not use this file except in compliance with  * the License.  You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */ import java.net.InetAddress; import java.net.ServerSocket; /**  * Generator for Globally unique Strings.  */ public class UuidGenerator {     private static final String UNIQUE_STUB;     private static int instanceCount;     private static String hostName;     private String seed;     private long sequence;     static {         String stub = "";         boolean canAccessSystemProps = true;         try {             SecurityManager sm = System.getSecurityManager();             if (sm != null) {                 sm.checkPropertiesAccess();             }         } catch (SecurityException se) {             canAccessSystemProps = false;         }         if (canAccessSystemProps) {             try {                 hostName = InetAddress.getLocalHost().getHostName();                 ServerSocket ss = new ServerSocket(0);                 stub = "/" + ss.getLocalPort() + "-" + System.currentTimeMillis() + "/";                 Thread.sleep(100);                 ss.close();             } catch (Exception ioe) {                 System.out.println("Could not generate unique stub" + ioe);             }         } else {             hostName = "localhost";             stub = "-1-" + System.currentTimeMillis() + "-";         }         UNIQUE_STUB = generateSanitizedId(stub);     }     public UuidGenerator(String prefix) {         synchronized (UNIQUE_STUB) {             this.seed = generateSanitizedId(prefix + UNIQUE_STUB + (instanceCount++) + "-");         }     }     public UuidGenerator() {         this("ID-" + hostName);     }     /**      * As we have to find the hostname as a side-affect of generating a unique      * stub, we allow it's easy retrevial here      *       * @return the local host name      */     public static String getHostName() {         return hostName;     }     /**      * Generate a unqiue id      */     public synchronized String generateId() {         return this.seed + (this.sequence++);     }     /**      * Generate a unique ID - that is friendly for a URL or file system      *       * @return a unique id      */     public String generateSanitizedId() {         return generateSanitizedId(generateId());     }     /**      * Ensures that the id is friendly for a URL or file system      *      * @param id the unique id      * @return the id as file friendly id      */     public static String generateSanitizedId(String id) {         id = id.replace(':', '-');         id = id.replace('_', '-');         id = id.replace('.', '-');         id = id.replace('/', '-');         id = id.replace('\\', '-');         return id;     } }