Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 1b2026c

Browse files
authored
Adds uuid handling (#283)
1 parent 9cfae72 commit 1b2026c

File tree

8 files changed

+82
-2
lines changed

8 files changed

+82
-2
lines changed

samples/client/petstore/java/.openapi-generator/FILES

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ src/main/java/org/openapijsonschematools/schemas/Schema.java
2525
src/main/java/org/openapijsonschematools/schemas/SchemaValidator.java
2626
src/main/java/org/openapijsonschematools/schemas/StringSchema.java
2727
src/main/java/org/openapijsonschematools/schemas/UnsetAnyTypeSchema.java
28+
src/main/java/org/openapijsonschematools/schemas/UuidSchema.java
2829
src/main/java/org/openapijsonschematools/schemas/ValidationMetadata.java
2930
src/main/java/org/openapijsonschematools/schemas/validators/AdditionalPropertiesValidator.java
3031
src/main/java/org/openapijsonschematools/schemas/validators/FormatValidator.java

samples/client/petstore/java/src/main/java/org/openapijsonschematools/schemas/Schema.java

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Map;
1616
import java.util.Objects;
1717
import java.util.Set;
18+
import java.util.UUID;
1819

1920
public interface Schema extends SchemaValidator {
2021
private static Object castToAllowedTypes(Object arg, List<Object> pathToItem, PathToTypeMap pathToType) {
@@ -69,6 +70,9 @@ private static Object castToAllowedTypes(Object arg, List<Object> pathToItem, Pa
6970
} else if (arg instanceof LocalDate) {
7071
pathToType.put(pathToItem, String.class);
7172
return arg.toString();
73+
} else if (arg instanceof UUID) {
74+
pathToType.put(pathToItem, String.class);
75+
return arg.toString();
7276
} else {
7377
Class<?> argClass = arg.getClass();
7478
throw new RuntimeException("Invalid type passed in got input="+arg+" type="+argClass);
@@ -197,6 +201,10 @@ static String validate(Class<?> cls, LocalDate arg, SchemaConfiguration configur
197201
return (String) validateObject(cls, arg, configuration);
198202
}
199203

204+
static String validate(Class<?> cls, UUID arg, SchemaConfiguration configuration) {
205+
return (String) validateObject(cls, arg, configuration);
206+
}
207+
200208
static <T extends FrozenMap> T validate(Class<?> cls, Map<String, Object> arg, SchemaConfiguration configuration) {
201209
return (T) validateObject(cls, arg, configuration);
202210
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.openapijsonschematools.schemas;
2+
3+
import org.openapijsonschematools.configurations.SchemaConfiguration;
4+
5+
import java.util.LinkedHashSet;
6+
import java.util.UUID;
7+
8+
public record UuidSchema(LinkedHashSet<Class<?>> type, String format) implements Schema {
9+
public static UuidSchema withDefaults() {
10+
LinkedHashSet<Class<?>> type = new LinkedHashSet<>();
11+
type.add(String.class);
12+
String format = "uuid";
13+
return new UuidSchema(type, format);
14+
}
15+
16+
public static String validate(String arg, SchemaConfiguration configuration) {
17+
return Schema.validate(UuidSchema.class, arg, configuration);
18+
}
19+
20+
public static String validate(UUID arg, SchemaConfiguration configuration) {
21+
return Schema.validate(UuidSchema.class, arg, configuration);
22+
}
23+
}

samples/client/petstore/java/src/main/java/org/openapijsonschematools/schemas/validators/FormatValidator.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.math.BigDecimal;
99
import java.time.format.DateTimeParseException;
10+
import java.util.UUID;
1011

1112
public class FormatValidator implements KeywordValidator {
1213
private final static BigDecimal int32InclusiveMinimum = BigDecimal.valueOf(-2147483648);
@@ -62,7 +63,14 @@ private Void validateNumericFormat(BigDecimal arg, String format, ValidationMeta
6263

6364
private Void validateStringFormat(String arg, String format, ValidationMetadata validationMetadata) {
6465
if (format.equals("uuid")) {
65-
// todo
66+
try {
67+
UUID.fromString(arg);
68+
} catch (IllegalArgumentException e) {
69+
throw new RuntimeException(
70+
"Value cannot be converted to a UUID. Invalid value "+
71+
arg+" for format uuid at "+validationMetadata.pathToItem()
72+
);
73+
}
6674
return null;
6775
} else if (format.equals("number")) {
6876
try {

src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java

+1
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ public void processOpts() {
285285
schemaSupportingFiles.add("SchemaValidator");
286286
schemaSupportingFiles.add("StringSchema");
287287
schemaSupportingFiles.add("UnsetAnyTypeSchema");
288+
schemaSupportingFiles.add("UuidSchema");
288289
schemaSupportingFiles.add("ValidationMetadata");
289290
for (String schemaSupportingFile: schemaSupportingFiles) {
290291
supportingFiles.add(new SupportingFile(

src/main/resources/java/src/main/java/org/openapitools/schemas/Schema.hbs

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import java.util.List;
1515
import java.util.Map;
1616
import java.util.Objects;
1717
import java.util.Set;
18+
import java.util.UUID;
1819

1920
public interface Schema extends SchemaValidator {
2021
private static Object castToAllowedTypes(Object arg, List<Object> pathToItem, PathToTypeMap pathToType) {
@@ -69,6 +70,9 @@ public interface Schema extends SchemaValidator {
6970
} else if (arg instanceof LocalDate) {
7071
pathToType.put(pathToItem, String.class);
7172
return arg.toString();
73+
} else if (arg instanceof UUID) {
74+
pathToType.put(pathToItem, String.class);
75+
return arg.toString();
7276
} else {
7377
Class<?> argClass = arg.getClass();
7478
throw new RuntimeException("Invalid type passed in got input="+arg+" type="+argClass);
@@ -197,6 +201,10 @@ public interface Schema extends SchemaValidator {
197201
return (String) validateObject(cls, arg, configuration);
198202
}
199203

204+
static String validate(Class<?> cls, UUID arg, SchemaConfiguration configuration) {
205+
return (String) validateObject(cls, arg, configuration);
206+
}
207+
200208
static <T extends FrozenMap> T validate(Class<?> cls, Map<String, Object> arg, SchemaConfiguration configuration) {
201209
return (T) validateObject(cls, arg, configuration);
202210
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package {{{packageName}}}.schemas;
2+
3+
import {{{packageName}}}.configurations.SchemaConfiguration;
4+
5+
import java.util.LinkedHashSet;
6+
import java.util.UUID;
7+
8+
public record UuidSchema(LinkedHashSet<Class<?>> type, String format) implements Schema {
9+
public static UuidSchema withDefaults() {
10+
LinkedHashSet<Class<?>> type = new LinkedHashSet<>();
11+
type.add(String.class);
12+
String format = "uuid";
13+
return new UuidSchema(type, format);
14+
}
15+
16+
public static String validate(String arg, SchemaConfiguration configuration) {
17+
return Schema.validate(UuidSchema.class, arg, configuration);
18+
}
19+
20+
public static String validate(UUID arg, SchemaConfiguration configuration) {
21+
return Schema.validate(UuidSchema.class, arg, configuration);
22+
}
23+
}

src/main/resources/java/src/main/java/org/openapitools/schemas/validators/FormatValidator.hbs

+9-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {{{packageName}}}.schemas.ValidationMetadata;
77

88
import java.math.BigDecimal;
99
import java.time.format.DateTimeParseException;
10+
import java.util.UUID;
1011

1112
public class FormatValidator implements KeywordValidator {
1213
private final static BigDecimal int32InclusiveMinimum = BigDecimal.valueOf(-2147483648);
@@ -62,7 +63,14 @@ public class FormatValidator implements KeywordValidator {
6263

6364
private Void validateStringFormat(String arg, String format, ValidationMetadata validationMetadata) {
6465
if (format.equals("uuid")) {
65-
// todo
66+
try {
67+
UUID.fromString(arg);
68+
} catch (IllegalArgumentException e) {
69+
throw new RuntimeException(
70+
"Value cannot be converted to a UUID. Invalid value "+
71+
arg+" for format uuid at "+validationMetadata.pathToItem()
72+
);
73+
}
6674
return null;
6775
} else if (format.equals("number")) {
6876
try {

0 commit comments

Comments
 (0)