information-system-model/src/main/java/org/gcube/informationsystem/utils/UUIDManager.java

82 lines
1.8 KiB
Java
Raw Normal View History

2021-10-21 16:29:35 +02:00
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 {
2023-04-18 17:51:23 +02:00
private static final Set<String> RESERVED_UUID_STRING;
private static final Set<UUID> RESERVED_UUID;
private static UUIDManager uuidManager;
public static UUIDManager getInstance() {
if(uuidManager==null) {
uuidManager = new UUIDManager();
}
return uuidManager;
}
2021-10-21 16:29:35 +02:00
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));
}
}
2023-04-18 17:51:23 +02:00
public boolean isReservedUUID(UUID uuid) {
2021-10-21 16:29:35 +02:00
return RESERVED_UUID.contains(uuid);
}
2023-04-18 17:51:23 +02:00
public boolean isReservedUUID(String uuid) {
2021-10-21 16:29:35 +02:00
return RESERVED_UUID_STRING.contains(uuid);
}
2023-04-18 17:51:23 +02:00
public Set<String> getAllReservedUUIDAsStrings(){
2021-10-21 16:29:35 +02:00
return new TreeSet<>(RESERVED_UUID_STRING);
}
2023-04-18 17:51:23 +02:00
public Set<UUID> getAllReservedUUID(){
2021-10-21 16:29:35 +02:00
return new TreeSet<>(RESERVED_UUID);
}
2023-04-21 15:56:44 +02:00
public UUID generateValidUUID() {
return generateValidUUID(null);
2023-04-20 10:00:46 +02:00
}
2023-04-21 15:56:44 +02:00
public UUID generateValidUUID(UUID uuid) {
uuid = uuid==null ? UUID.randomUUID() : uuid;
while(RESERVED_UUID.contains(uuid)) {
uuid = UUID.randomUUID();
2021-10-21 16:29:35 +02:00
}
2023-04-21 15:56:44 +02:00
return uuid;
2021-10-21 16:29:35 +02:00
}
2023-04-18 17:51:23 +02:00
2023-04-21 15:56:44 +02:00
public UUID validateUUID(UUID uuid) throws Exception {
if(RESERVED_UUID.contains(uuid)) {
throw new Exception(uuid.toString() + " UUID is reserved. All the following UUID are reserved " + getAllReservedUUIDAsStrings().toString());
}
return uuid;
}
2023-04-18 17:51:23 +02:00
2021-10-21 16:29:35 +02:00
}