From 11b218fdece56d2d6ea2d6d360a220124c211acc Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Thu, 21 Oct 2021 16:29:35 +0200 Subject: [PATCH] Improved UUID management --- .../informationsystem/utils/ReservedUUID.java | 41 ------------- .../informationsystem/utils/UUIDManager.java | 57 +++++++++++++++++++ .../utils/UUIDManagerTest.java | 35 ++++++++++++ 3 files changed, 92 insertions(+), 41 deletions(-) delete mode 100644 src/main/java/org/gcube/informationsystem/utils/ReservedUUID.java create mode 100644 src/main/java/org/gcube/informationsystem/utils/UUIDManager.java create mode 100644 src/test/java/org/gcube/informationsystem/utils/UUIDManagerTest.java diff --git a/src/main/java/org/gcube/informationsystem/utils/ReservedUUID.java b/src/main/java/org/gcube/informationsystem/utils/ReservedUUID.java deleted file mode 100644 index 7aeb195..0000000 --- a/src/main/java/org/gcube/informationsystem/utils/ReservedUUID.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.gcube.informationsystem.utils; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -public final class ReservedUUID { - - public static final Set RESERVED_UUID_STRING; - public static final Set RESERVED_UUID; - - static { - RESERVED_UUID_STRING = new HashSet<>(); - RESERVED_UUID = new HashSet<>(); - - String[] uuidValidCharacters = {"1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; - - for(String string : uuidValidCharacters) { - String uuidString = "00000000-0000-0000-0000-000000000000"; - uuidString.replaceAll("0", string); - RESERVED_UUID_STRING.add(uuidString); - RESERVED_UUID.add(UUID.fromString(uuidString)); - } - } - - public static boolean isReservedUUID(UUID uuid) { - return RESERVED_UUID.contains(uuid); - } - - public static boolean isReservedUUID(String uuid) { - return RESERVED_UUID_STRING.contains(uuid); - } - - public static Set allUUIDAsString(){ - return new HashSet<>(RESERVED_UUID_STRING); - } - - public static Set allUUID(){ - return new HashSet<>(RESERVED_UUID); - } -} diff --git a/src/main/java/org/gcube/informationsystem/utils/UUIDManager.java b/src/main/java/org/gcube/informationsystem/utils/UUIDManager.java new file mode 100644 index 0000000..a583580 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/UUIDManager.java @@ -0,0 +1,57 @@ +package org.gcube.informationsystem.utils; + +import java.util.HashSet; +import java.util.Set; +import java.util.TreeSet; +import java.util.UUID; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public final class UUIDManager { + + public static final Set RESERVED_UUID_STRING; + public static final Set RESERVED_UUID; + + private UUIDManager() { + + } + + static { + RESERVED_UUID_STRING = new HashSet<>(); + RESERVED_UUID = new HashSet<>(); + + String[] uuidValidCharacters = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}; + + for(String string : uuidValidCharacters) { + String uuidString = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; + uuidString = uuidString.replaceAll("X", string); + RESERVED_UUID_STRING.add(uuidString); + RESERVED_UUID.add(UUID.fromString(uuidString)); + } + } + + public static boolean isReservedUUID(UUID uuid) { + return RESERVED_UUID.contains(uuid); + } + + public static boolean isReservedUUID(String uuid) { + return RESERVED_UUID_STRING.contains(uuid); + } + + public static Set getAllReservedUUIDAsStrings(){ + return new TreeSet<>(RESERVED_UUID_STRING); + } + + public static Set getAllReservedUUID(){ + return new TreeSet<>(RESERVED_UUID); + } + + public static UUID generateValidRandomUUID() { + UUID generated = UUID.randomUUID(); + while(RESERVED_UUID.contains(generated)) { + generated = UUID.randomUUID(); + } + return generated; + } +} diff --git a/src/test/java/org/gcube/informationsystem/utils/UUIDManagerTest.java b/src/test/java/org/gcube/informationsystem/utils/UUIDManagerTest.java new file mode 100644 index 0000000..1ead5a1 --- /dev/null +++ b/src/test/java/org/gcube/informationsystem/utils/UUIDManagerTest.java @@ -0,0 +1,35 @@ +package org.gcube.informationsystem.utils; + +import java.util.Set; +import java.util.UUID; + +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class UUIDManagerTest { + + private static final Logger logger = LoggerFactory.getLogger(UUIDManagerTest.class); + + @Test + public void testReservedUUID() { + Set allUUID = UUIDManager.getAllReservedUUID(); + logger.debug("Reserved UUIDs are {}", allUUID); + + Set allUUIDAsString = UUIDManager.getAllReservedUUIDAsStrings(); + Assert.assertTrue(allUUID.size()==allUUIDAsString.size()); + Assert.assertTrue(allUUID.size()==16); + Assert.assertTrue(allUUIDAsString.size()==16); + for(UUID uuid : allUUID) { + Assert.assertTrue(UUIDManager.isReservedUUID(uuid)); + Assert.assertTrue(UUIDManager.isReservedUUID(uuid.toString())); + } + + for(String uuidString : allUUIDAsString) { + Assert.assertTrue(UUIDManager.isReservedUUID(UUID.fromString(uuidString))); + Assert.assertTrue(UUIDManager.isReservedUUID(uuidString)); + } + + } +}