Skip to content

Commit 1426d45

Browse files
committed
change builder method
1 parent 89a09cf commit 1426d45

File tree

6 files changed

+36
-23
lines changed

6 files changed

+36
-23
lines changed

src/main/java/com/saasquatch/jsonschemainferrer/EnumExtractors.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,22 @@ public static <E extends Enum<E>> EnumExtractor validEnum(@Nonnull Class<E> enum
4242
/**
4343
* @return an {@link EnumExtractor} that combines the results of the given {@link EnumExtractor}s
4444
*/
45-
public static EnumExtractor chained(@Nonnull EnumExtractor... enumExtrators) {
46-
for (EnumExtractor enumExtrator : enumExtrators) {
47-
Objects.requireNonNull(enumExtrator);
45+
public static EnumExtractor chained(@Nonnull EnumExtractor... enumExtractors) {
46+
for (EnumExtractor enumExtractor : enumExtractors) {
47+
Objects.requireNonNull(enumExtractor);
4848
}
49-
switch (enumExtrators.length) {
49+
switch (enumExtractors.length) {
5050
case 0:
5151
throw new IllegalArgumentException("Empty criteria");
5252
case 1:
53-
return enumExtrators[0];
53+
return enumExtractors[0];
5454
default:
5555
break;
5656
}
5757
// Defensive copy
5858
return input -> {
59-
return Arrays.stream(enumExtrators)
59+
return Arrays.stream(enumExtractors)
6060
.flatMap(enumExtrator -> enumExtrator.extractEnums(input).stream())
61-
.filter(s -> !s.isEmpty())
6261
.collect(Collectors.toSet());
6362
};
6463
}

src/main/java/com/saasquatch/jsonschemainferrer/JsonSchemaInferrerBuilder.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public final class JsonSchemaInferrerBuilder {
2222
private SpecVersion specVersion = SpecVersion.DRAFT_04;
2323
private IntegerTypePreference integerTypePreference = IntegerTypePreference.IF_ALL;
2424
private IntegerTypeCriterion integerTypeCriterion = IntegerTypeCriteria.nonFloatingPoint();
25-
private EnumExtractor enumExtractor = EnumExtractors.noOp();
25+
@Nullable
26+
private List<EnumExtractor> enumExtractors;
2627
private TitleDescriptionGenerator titleDescriptionGenerator = TitleDescriptionGenerators.noOp();
2728
@Nullable
2829
private List<FormatInferrer> formatInferrers;
@@ -74,13 +75,18 @@ public JsonSchemaInferrerBuilder setIntegerTypeCriterion(
7475
}
7576

7677
/**
77-
* Set the {@link EnumExtractor}. The default is {@link EnumExtractors#noOp()}.
78+
* Add {@link EnumExtractor}s.
7879
*
7980
* @see EnumExtractor
8081
* @see EnumExtractors
8182
*/
82-
public JsonSchemaInferrerBuilder setEnumExtractor(@Nonnull EnumExtractor enumExtractor) {
83-
this.enumExtractor = Objects.requireNonNull(enumExtractor);
83+
public JsonSchemaInferrerBuilder addEnumExtractors(@Nonnull EnumExtractor... enumExtractors) {
84+
if (this.enumExtractors == null) {
85+
this.enumExtractors = new ArrayList<>();
86+
}
87+
for (EnumExtractor enumExtractor : enumExtractors) {
88+
this.enumExtractors.add(Objects.requireNonNull(enumExtractor));
89+
}
8490
return this;
8591
}
8692

@@ -225,6 +231,14 @@ public JsonSchemaInferrerBuilder addGenericSchemaFeatures(
225231
return this;
226232
}
227233

234+
@Nonnull
235+
private EnumExtractor getCombinedEnumExtractor() {
236+
if (enumExtractors == null) {
237+
return EnumExtractors.noOp();
238+
}
239+
return EnumExtractors.chained(enumExtractors.toArray(new EnumExtractor[0]));
240+
}
241+
228242
@Nonnull
229243
private FormatInferrer getCombinedFormatInferrer() {
230244
if (formatInferrers == null) {
@@ -267,7 +281,7 @@ private GenericSchemaFeature getCombinedGenericSchemaFeature() {
267281
*/
268282
public JsonSchemaInferrer build() {
269283
return new JsonSchemaInferrer(specVersion, integerTypePreference, integerTypeCriterion,
270-
enumExtractor, titleDescriptionGenerator, getCombinedFormatInferrer(),
284+
getCombinedEnumExtractor(), titleDescriptionGenerator, getCombinedFormatInferrer(),
271285
getCombinedGenericSchemaFeature());
272286
}
273287

src/test/java/com/saasquatch/jsonschemainferrer/JsonSchemaInferrerExamplesTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,15 +254,15 @@ private static Collection<JsonSchemaInferrer> getTestInferrers() {
254254
.setNumberRangeFeatures(EnumSet.allOf(NumberRangeFeature.class))
255255
.setExamplesPolicy(ExamplesPolicies.useFirstSamples(10))
256256
.setDefaultPolicy(defaultPolicyIter.next())
257-
.setEnumExtractor(EnumExtractors.chained(EnumExtractors.validEnum(Month.class),
257+
.addEnumExtractors(EnumExtractors.validEnum(Month.class),
258258
EnumExtractors.validEnum(DayOfWeek.class), input -> {
259259
final Set<? extends JsonNode> primitives = input.getSamples().stream()
260260
.filter(JsonNode::isValueNode).collect(Collectors.toSet());
261261
if (primitives.size() <= 3) {
262262
return Collections.singleton(primitives);
263263
}
264264
return Collections.emptySet();
265-
}))
265+
})
266266
.setTitleDescriptionGenerator(new TitleDescriptionGenerator() {
267267

268268
@Override

src/test/java/com/saasquatch/jsonschemainferrer/JsonSchemaInferrerOptionsTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -502,12 +502,12 @@ public void testEnum() {
502502
}
503503
{
504504
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder()
505-
.setEnumExtractor(EnumExtractors.validEnum(TimeUnit.class)).build();
505+
.addEnumExtractors(EnumExtractors.validEnum(TimeUnit.class)).build();
506506
final ObjectNode schema = inferrer.inferForSamples(timeUnitSamples);
507507
assertEquals(ImmutableSet.of("DAYS", "HOURS"), toStringSet(schema.get("enum")));
508508
}
509509
{
510-
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder().setEnumExtractor(
510+
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder().addEnumExtractors(
511511
EnumExtractors.chained(EnumExtractors.validEnum(DayOfWeek.class), input -> {
512512
assertNotNull(input.getSpecVersion());
513513
return Collections.emptySet();
@@ -516,7 +516,7 @@ public void testEnum() {
516516
assertEquals(ImmutableSet.of("DAYS", "HOURS"), toStringSet(schema.get("enum")));
517517
}
518518
{
519-
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder().setEnumExtractor(
519+
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder().addEnumExtractors(
520520
EnumExtractors.chained(EnumExtractors.validEnum(DayOfWeek.class), input -> {
521521
assertNotNull(input.getSpecVersion());
522522
return Collections.emptySet();
@@ -535,7 +535,7 @@ public void testEnum() {
535535
}
536536
{
537537
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder()
538-
.setEnumExtractor(EnumExtractors.chained(EnumExtractors.validEnum(Month.class),
538+
.addEnumExtractors(EnumExtractors.chained(EnumExtractors.validEnum(Month.class),
539539
EnumExtractors.validEnum(DayOfWeek.class)))
540540
.build();
541541
final ObjectNode schema =
@@ -549,7 +549,7 @@ public void testEnum() {
549549
}
550550
{
551551
final JsonSchemaInferrer inferrer = JsonSchemaInferrer.newBuilder()
552-
.setEnumExtractor(input -> Collections.singleton(Collections.emptySet())).build();
552+
.addEnumExtractors(input -> Collections.singleton(Collections.emptySet())).build();
553553
assertThrows(IllegalStateException.class, () -> inferrer.inferForSample(null));
554554
}
555555
}

src/test/java/com/saasquatch/jsonschemainferrer/examples/Example.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public class Example {
1919
.addFormatInferrers(FormatInferrers.email(), FormatInferrers.ip())
2020
.setAdditionalPropertiesPolicy(AdditionalPropertiesPolicies.notAllowed())
2121
.setRequiredPolicy(RequiredPolicies.nonNullCommonFields())
22-
.setEnumExtractor(EnumExtractors.chained(EnumExtractors.validEnum(java.time.Month.class),
23-
EnumExtractors.validEnum(java.time.DayOfWeek.class)))
22+
.addEnumExtractors(EnumExtractors.validEnum(java.time.Month.class),
23+
EnumExtractors.validEnum(java.time.DayOfWeek.class))
2424
.build();
2525

2626
public static void main(String[] args) throws Exception {

src/test/java/com/saasquatch/jsonschemainferrer/examples/Example2.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public class Example2 {
4141
.addFormatInferrers(FormatInferrers.email(), FormatInferrers.dateTime(), FormatInferrers.ip(),
4242
Example2::absoluteUriFormatInferrer)
4343
.setMultipleOfPolicy(MultipleOfPolicies.gcd())
44-
.setEnumExtractor(EnumExtractors.chained(EnumExtractors.validEnum(Month.class),
44+
.addEnumExtractors(EnumExtractors.validEnum(Month.class),
4545
EnumExtractors.validEnum(DayOfWeek.class),
4646
input -> {
4747
final Set<? extends JsonNode> primitives = input.getSamples().stream()
@@ -51,7 +51,7 @@ public class Example2 {
5151
return Collections.singleton(primitives);
5252
}
5353
return Collections.emptySet();
54-
}))
54+
})
5555
.setArrayLengthFeatures(EnumSet.allOf(ArrayLengthFeature.class))
5656
.setObjectSizeFeatures(EnumSet.allOf(ObjectSizeFeature.class))
5757
.setStringLengthFeatures(EnumSet.allOf(StringLengthFeature.class))

0 commit comments

Comments
 (0)