Skip to content

Commit 3bc14fc

Browse files
authored
feat: add uuid-v7 generator (and a bunch of others) (#194)
1 parent 3eb3ff3 commit 3bc14fc

9 files changed

Lines changed: 198 additions & 0 deletions

File tree

core/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<ksuid.version>4.1.1</ksuid.version>
2121
<tsid.version>5.2.6</tsid.version>
2222
<ulid.version>5.2.3</ulid.version>
23+
<uuid.version>6.1.1</uuid.version>
2324
<micrometer.version>1.15.5</micrometer.version>
2425
<micrometer-tracing.version>1.5.5</micrometer-tracing.version>
2526
</properties>
@@ -37,6 +38,12 @@
3738
<version>${tsid.version}</version>
3839
</dependency>
3940

41+
<dependency>
42+
<groupId>com.github.f4b6a3</groupId>
43+
<artifactId>uuid-creator</artifactId>
44+
<version>${uuid.version}</version>
45+
</dependency>
46+
4047
<dependency>
4148
<groupId>com.github.f4b6a3</groupId>
4249
<artifactId>ulid-creator</artifactId>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
5+
public class UUIDv1Generator implements UIDGenerator
6+
{
7+
public static final UIDGenerator INSTANCE = new UUIDv1Generator();
8+
9+
@Override
10+
public String generate()
11+
{
12+
return UuidCreator.getTimeBased().toString();
13+
}
14+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
import com.github.f4b6a3.uuid.enums.UuidLocalDomain;
5+
6+
public class UUIDv2Generator implements UIDGenerator
7+
{
8+
private final UuidLocalDomain localDomain;
9+
private final int localIdentifier;
10+
11+
public UUIDv2Generator(UuidLocalDomain localDomain, int localIdentifier)
12+
{
13+
this.localDomain = localDomain;
14+
this.localIdentifier = localIdentifier;
15+
}
16+
17+
@Override
18+
public String generate()
19+
{
20+
return UuidCreator.getDceSecurity(this.localDomain, this.localIdentifier).toString();
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
import com.github.f4b6a3.uuid.enums.UuidNamespace;
5+
6+
public class UUIDv3Generator implements UIDGenerator
7+
{
8+
private final UuidNamespace namespace;
9+
private final String url;
10+
11+
public UUIDv3Generator(UuidNamespace namespace, String url)
12+
{
13+
this.namespace = namespace;
14+
this.url = url;
15+
}
16+
17+
@Override
18+
public String generate()
19+
{
20+
return UuidCreator.getNameBasedMd5(this.namespace, this.url).toString();
21+
}
22+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
5+
public class UUIDv4Generator implements UIDGenerator
6+
{
7+
public static final UIDGenerator INSTANCE = new UUIDv4Generator();
8+
9+
@Override
10+
public String generate()
11+
{
12+
return UuidCreator.getRandomBased().toString();
13+
}
14+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
import com.github.f4b6a3.uuid.enums.UuidNamespace;
5+
6+
public class UUIDv5Generator implements UIDGenerator
7+
{
8+
private final UuidNamespace namespace;
9+
private final String url;
10+
11+
public UUIDv5Generator(UuidNamespace namespace, String url)
12+
{
13+
this.namespace = namespace;
14+
this.url = url;
15+
}
16+
17+
@Override
18+
public String generate()
19+
{
20+
return UuidCreator.getNameBasedSha1(this.namespace, this.url).toString();
21+
}
22+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
5+
public class UUIDv6Generator implements UIDGenerator
6+
{
7+
public static final UIDGenerator INSTANCE = new UUIDv6Generator();
8+
9+
@Override
10+
public String generate()
11+
{
12+
return UuidCreator.getTimeOrdered().toString();
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package tech.illuin.pipeline.input.uid_generator;
2+
3+
import com.github.f4b6a3.uuid.UuidCreator;
4+
5+
public class UUIDv7Generator implements UIDGenerator
6+
{
7+
public static final UIDGenerator INSTANCE = new UUIDv7Generator();
8+
9+
@Override
10+
public String generate()
11+
{
12+
return UuidCreator.getTimeOrderedEpoch().toString();
13+
}
14+
}

core/src/test/java/tech/illuin/pipeline/input/uid_generator/UIDGeneratorTest.java

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.github.f4b6a3.ksuid.Ksuid;
44
import com.github.f4b6a3.tsid.Tsid;
55
import com.github.f4b6a3.ulid.Ulid;
6+
import com.github.f4b6a3.uuid.enums.UuidLocalDomain;
7+
import com.github.f4b6a3.uuid.enums.UuidNamespace;
68
import org.junit.jupiter.api.Assertions;
79
import org.junit.jupiter.api.Test;
810
import org.slf4j.Logger;
@@ -25,6 +27,7 @@ public class UIDGeneratorTest
2527
public void test__ksuid()
2628
{
2729
String uid = Assertions.assertDoesNotThrow(() -> KSUIDGenerator.INSTANCE.generate());
30+
logger.info("Generated KSUID: {}", uid);
2831
Assertions.assertEquals(27, uid.length());
2932
Assertions.assertEquals(Ksuid.from(uid).toString(), uid);
3033
}
@@ -33,6 +36,7 @@ public void test__ksuid()
3336
public void test__tsid()
3437
{
3538
String uid = Assertions.assertDoesNotThrow(() -> TSIDGenerator.INSTANCE.generate());
39+
logger.info("Generated TSID: {}", uid);
3640
Assertions.assertEquals(13, uid.length());
3741
Assertions.assertEquals(Tsid.from(uid).toString(), uid);
3842
}
@@ -41,6 +45,7 @@ public void test__tsid()
4145
public void test__ulid()
4246
{
4347
String uid = Assertions.assertDoesNotThrow(() -> ULIDGenerator.INSTANCE.generate());
48+
logger.info("Generated ULID: {}", uid);
4449
Assertions.assertEquals(26, uid.length());
4550
Assertions.assertEquals(Ulid.from(uid).toString(), uid);
4651
}
@@ -49,6 +54,70 @@ public void test__ulid()
4954
public void test__uuid()
5055
{
5156
String uid = Assertions.assertDoesNotThrow(() -> UUIDGenerator.INSTANCE.generate());
57+
logger.info("Generated UUID: {}", uid);
58+
Assertions.assertEquals(36, uid.length());
59+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
60+
}
61+
62+
@Test
63+
public void test__uuidv1()
64+
{
65+
String uid = Assertions.assertDoesNotThrow(() -> UUIDv1Generator.INSTANCE.generate());
66+
logger.info("Generated UUIDV1: {}", uid);
67+
Assertions.assertEquals(36, uid.length());
68+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
69+
}
70+
71+
@Test
72+
public void test__uuidv2()
73+
{
74+
String uid = Assertions.assertDoesNotThrow(() -> new UUIDv2Generator(UuidLocalDomain.LOCAL_DOMAIN_ORG, 0).generate());
75+
logger.info("Generated UUIDV2: {}", uid);
76+
Assertions.assertEquals(36, uid.length());
77+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
78+
}
79+
80+
@Test
81+
public void test__uuidv3()
82+
{
83+
String uid = Assertions.assertDoesNotThrow(() -> new UUIDv3Generator(UuidNamespace.NAMESPACE_DNS, "illuin.tech").generate());
84+
logger.info("Generated UUIDV3: {}", uid);
85+
Assertions.assertEquals(36, uid.length());
86+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
87+
}
88+
89+
@Test
90+
public void test__uuidv4()
91+
{
92+
String uid = Assertions.assertDoesNotThrow(() -> UUIDv4Generator.INSTANCE.generate());
93+
logger.info("Generated UUIDV4: {}", uid);
94+
Assertions.assertEquals(36, uid.length());
95+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
96+
}
97+
98+
@Test
99+
public void test__uuidv5()
100+
{
101+
String uid = Assertions.assertDoesNotThrow(() -> new UUIDv5Generator(UuidNamespace.NAMESPACE_DNS, "illuin.tech").generate());
102+
logger.info("Generated UUIDV5: {}", uid);
103+
Assertions.assertEquals(36, uid.length());
104+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
105+
}
106+
107+
@Test
108+
public void test__uuidv6()
109+
{
110+
String uid = Assertions.assertDoesNotThrow(() -> UUIDv6Generator.INSTANCE.generate());
111+
logger.info("Generated UUIDV6: {}", uid);
112+
Assertions.assertEquals(36, uid.length());
113+
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
114+
}
115+
116+
@Test
117+
public void test__uuidv7()
118+
{
119+
String uid = Assertions.assertDoesNotThrow(() -> UUIDv7Generator.INSTANCE.generate());
120+
logger.info("Generated UUIDV7: {}", uid);
52121
Assertions.assertEquals(36, uid.length());
53122
Assertions.assertEquals(UUID.fromString(uid).toString(), uid);
54123
}

0 commit comments

Comments
 (0)