]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.api.uuid/src/org/argeo/api/uuid/GUID.java
All typed UUIDs implemented (except v2).
[lgpl/argeo-commons.git] / org.argeo.api.uuid / src / org / argeo / api / uuid / GUID.java
diff --git a/org.argeo.api.uuid/src/org/argeo/api/uuid/GUID.java b/org.argeo.api.uuid/src/org/argeo/api/uuid/GUID.java
new file mode 100644 (file)
index 0000000..a9a5af1
--- /dev/null
@@ -0,0 +1,52 @@
+package org.argeo.api.uuid;
+
+import java.util.UUID;
+
+/**
+ * A variant 6 {@link UUID}.
+ * 
+ * @see https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.1
+ */
+public class GUID extends TypedUuid {
+       private static final long serialVersionUID = APM.SERIAL;
+
+       /** Constructor based on a {@link UUID}. */
+       public GUID(UUID uuid) {
+               super(uuid);
+               if (uuid.variant() != 6)
+                       throw new IllegalArgumentException("The provided UUID is not a GUID.");
+       }
+
+       /**
+        * Formats N, D, B, P are supported:
+        * <ul>
+        * <li>D: 1db31359-bdd8-5a0f-b672-30c247d582c5</li>
+        * <li>N: 1db31359bdd85a0fb67230c247d582c5</li>
+        * <li>B: {1db31359-bdd8-5a0f-b672-30c247d582c5}</li>
+        * <li>P: (1db31359-bdd8-5a0f-b672-30c247d582c5)</li>
+        * </ul>
+        * 
+        * @see https://docs.microsoft.com/en-us/dotnet/api/system.guid.tostring
+        */
+       public static String toString(UUID uuid, char format, boolean upperCase) {
+               String str;
+               switch (format) {
+               case 'D':
+                       str = uuid.toString();
+                       break;
+               case 'N':
+                       str = UuidBinaryUtils.toCompact(uuid);
+                       break;
+               case 'B':
+                       str = "{" + uuid.toString() + "}";
+                       break;
+               case 'P':
+                       str = "(" + uuid.toString() + ")";
+                       break;
+               default:
+                       throw new IllegalArgumentException("Unsupported format : " + format);
+               }
+               return upperCase ? str.toUpperCase() : str;
+       }
+
+}