package org.itsnat.droid.impl.util; /** * Created by jmarranz on 9/06/14. */ public class UniqueIdGenerator { protected long[] counters; /** Creates a new instance of UniqueIdGenerator */ public UniqueIdGenerator() { this.counters = new long[1]; } public String generateId(String prefix) { long[] id = generateUniqueIdInternal(); // Esto se puede ejecutar en multihilo porque el id si es necesario fue clonado // ahora bien NO SACAR el objeto id fuera pues cuando no se clona es el propio objeto counters. StringBuilder code = new StringBuilder(); code.append(prefix + "_"); for(int i = 0; i < id.length; i++) { long curr = id[i]; if (i > 0) code.append("_"); code.append(Long.toString(curr)); } return code.toString(); } protected long[] generateUniqueIdInternal() { long last = counters[counters.length - 1]; if (last == Long.MAX_VALUE) // Cambia Long.MAX_VALUE a un valor pequeño para test { // Seguramente jamás pasará por aquí, pero así evitamos el "efecto año 3000" usando supercomputadores long[] oldCounters = counters; this.counters = new long[oldCounters.length + 1]; System.arraycopy(oldCounters,0,counters,0,oldCounters.length); last = counters[counters.length - 1]; } last++; // Empieza desde el uno counters[counters.length - 1] = last; return counters; } /* public static void main(String[] args) { // Cambiar antes Long.MAX_VALUE por un valor pequeño menor que 100 UniqueIdGenerator gen = new UniqueIdGenerator(); for(int i = 0; i < 100; i++) { String id = gen.generateId("n"); System.out.println(id); } } */ }