Skip to content

Commit a24645d

Browse files
committed
Tightened the builder api
1 parent a88bf57 commit a24645d

42 files changed

Lines changed: 527 additions & 474 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

springfox-bean-validators/src/test/groovy/springfox/bean/validators/plugins/parameter/ExpandedParameterMinMaxAnnotationPluginSpec.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import springfox.bean.validators.plugins.ReflectionSupport
99
import springfox.documentation.builders.ParameterBuilder
1010
import springfox.documentation.builders.RequestParameterBuilder
1111
import springfox.documentation.schema.NumericElementFacet
12+
import springfox.documentation.schema.ScalarType
1213
import springfox.documentation.service.AllowableRangeValues
1314
import springfox.documentation.service.ParameterType
1415
import springfox.documentation.spi.DocumentationType
@@ -54,10 +55,11 @@ class ExpandedParameterMinMaxAnnotationPluginSpec
5455
def numericRange = context.requestParameterBuilder
5556
.name("test")
5657
.in(ParameterType.QUERY)
58+
.query { q -> q.model { it.scalarModel(ScalarType.STRING) } }
5759
.build()
5860
.parameterSpecification
5961
?.getQuery()
60-
?.flatMap {p -> p.facetOfType(NumericElementFacet) }
62+
?.flatMap { p -> p.facetOfType(NumericElementFacet) }
6163
?.orElse(null)
6264

6365

@@ -72,7 +74,7 @@ class ExpandedParameterMinMaxAnnotationPluginSpec
7274
numericRange?.maximum == expectedMax ?: new BigDecimal(expectedMax)
7375
numericRange?.exclusiveMaximum == exclusiveMax
7476
numericRange?.minimum == expectedMin ?: new BigDecimal(expectedMin)
75-
numericRange?.exclusiveMinimum == exclusiveMin
77+
numericRange?.exclusiveMinimum == exclusiveMin
7678

7779
where:
7880
fieldName | expectedMin | exclusiveMin | expectedMax | exclusiveMax

springfox-bean-validators/src/test/groovy/springfox/bean/validators/plugins/parameter/MinMaxAnnotationPluginSpec.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import spock.lang.Specification
55
import spock.lang.Unroll
66
import springfox.bean.validators.plugins.AnnotationsSupport
77
import springfox.documentation.schema.NumericElementFacet
8+
import springfox.documentation.schema.ScalarType
89
import springfox.documentation.service.AllowableRangeValues
910
import springfox.documentation.service.ParameterType
1011
import springfox.documentation.service.ResolvedMethodParameter
@@ -42,6 +43,7 @@ class MinMaxAnnotationPluginSpec extends Specification implements AnnotationsSup
4243
def numericRange = context.requestParameterBuilder()
4344
.name("test")
4445
.in(ParameterType.QUERY)
46+
.query { q -> q.model { it.scalarModel(ScalarType.LONG) } }
4547
.build()
4648
.parameterSpecification
4749
?.getQuery()

springfox-core/src/main/java/springfox/documentation/builders/AlternateTypeBuilder.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,12 @@
2121
import net.bytebuddy.ByteBuddy;
2222
import net.bytebuddy.dynamic.DynamicType;
2323
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
24+
import org.springframework.lang.NonNull;
2425

2526
import java.lang.annotation.Annotation;
2627
import java.util.ArrayList;
2728
import java.util.List;
29+
import java.util.function.Consumer;
2830

2931
public class AlternateTypeBuilder {
3032
private String fullyQualifiedClassName;
@@ -36,13 +38,24 @@ public AlternateTypeBuilder fullyQualifiedClassName(String fullyQualifiedClassNa
3638
return this;
3739
}
3840

41+
/**
42+
* @param property - properties for the alternate type
43+
* @return AlternateTypeBuilder
44+
* @see AlternateTypeBuilder#property(Consumer) instead
45+
* @deprecated @since 3.0.0
46+
*/
47+
@Deprecated
3948
public AlternateTypeBuilder property(AlternateTypePropertyBuilder property) {
4049
this.properties.add(property);
4150
return this;
4251
}
4352

44-
public AlternateTypeBuilder properties(List<AlternateTypePropertyBuilder> properties) {
45-
this.properties.addAll(properties);
53+
@SuppressWarnings("deprecation")
54+
//Will go away when constructor becomes package private
55+
public AlternateTypeBuilder property(@NonNull Consumer<AlternateTypePropertyBuilder> property) {
56+
AlternateTypePropertyBuilder builder = new AlternateTypePropertyBuilder();
57+
property.accept(builder);
58+
this.properties.add(builder);
4659
return this;
4760
}
4861

@@ -51,7 +64,6 @@ public AlternateTypeBuilder annotations(List<Annotation> annotations) {
5164
return this;
5265
}
5366

54-
5567
/**
5668
* @param properties - properties for the alternate type
5769
* @return AlternateTypeBuilder

springfox-core/src/main/java/springfox/documentation/builders/AlternateTypePropertyBuilder.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,30 @@
2121
import net.bytebuddy.description.modifier.Visibility;
2222
import net.bytebuddy.dynamic.DynamicType;
2323
import net.bytebuddy.implementation.FieldAccessor;
24-
import springfox.documentation.annotations.Incubating;
2524

2625
import java.lang.annotation.Annotation;
2726
import java.util.ArrayList;
2827
import java.util.List;
2928

3029
import static org.springframework.util.StringUtils.*;
3130

32-
@Incubating("2.7.0")
3331
public class AlternateTypePropertyBuilder {
3432
private Class<?> clazz;
3533
private String name;
3634
private boolean canRead;
3735
private boolean canWrite;
3836
private List<Annotation> annotations;
3937

38+
39+
/**
40+
* Should use available fluent builders
41+
*
42+
* @deprecated @since 3.0.0
43+
*/
44+
@Deprecated
45+
public AlternateTypePropertyBuilder() {
46+
}
47+
4048
public AlternateTypePropertyBuilder type(Class<?> clazz) {
4149
this.clazz = clazz;
4250
return this;

springfox-core/src/main/java/springfox/documentation/builders/AuthorizationCodeGrantBuilder.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919

2020
package springfox.documentation.builders;
2121

22+
import org.springframework.lang.NonNull;
2223
import springfox.documentation.service.AuthorizationCodeGrant;
2324
import springfox.documentation.service.TokenEndpoint;
2425
import springfox.documentation.service.TokenRequestEndpoint;
2526

27+
import java.util.function.Consumer;
28+
2629
public class AuthorizationCodeGrantBuilder {
2730
private TokenRequestEndpoint tokenRequestEndpoint;
2831
private TokenEndpoint tokenEndpoint;
@@ -32,23 +35,56 @@ public class AuthorizationCodeGrantBuilder {
3235
*
3336
* @param tokenRequestEndpoint - represents the token request endpoint along with the client id and secret
3437
* @return this
38+
* @deprecated @since 3.0.0
39+
* Prefer fluent builder api {@link AuthorizationCodeGrantBuilder#tokenRequestEndpoint(Consumer)}
3540
*/
41+
@Deprecated
3642
public AuthorizationCodeGrantBuilder tokenRequestEndpoint(TokenRequestEndpoint tokenRequestEndpoint) {
3743
this.tokenRequestEndpoint = BuilderDefaults.defaultIfAbsent(tokenRequestEndpoint, this.tokenRequestEndpoint);
3844
return this;
3945
}
4046

47+
/**
48+
* Updates token request endpoint
49+
*
50+
* @param consumer - represents the token request endpoint along with the client id and secret
51+
* @return this
52+
*/
53+
public AuthorizationCodeGrantBuilder tokenRequestEndpoint(@NonNull Consumer<TokenRequestEndpointBuilder> consumer) {
54+
TokenRequestEndpointBuilder endpoint = new TokenRequestEndpointBuilder();
55+
consumer.accept(endpoint);
56+
this.tokenRequestEndpoint = BuilderDefaults.defaultIfAbsent(endpoint.build(), this.tokenRequestEndpoint);
57+
return this;
58+
}
59+
4160
/**
4261
* Updates token endpoint
4362
*
4463
* @param tokenEndpoint - represents the token endpoint along with the token name
4564
* @return this
65+
* @deprecated @since 3.0.0
66+
* Prefer fluent builder api {@link AuthorizationCodeGrantBuilder#tokenEndpoint(Consumer)}
4667
*/
68+
@Deprecated
4769
public AuthorizationCodeGrantBuilder tokenEndpoint(TokenEndpoint tokenEndpoint) {
4870
this.tokenEndpoint = BuilderDefaults.defaultIfAbsent(tokenEndpoint, this.tokenEndpoint);
4971
return this;
5072
}
5173

74+
/**
75+
* Updates token endpoint
76+
*
77+
* @param consumer - represents the token endpoint along with the token name
78+
* @return this
79+
*/
80+
public AuthorizationCodeGrantBuilder tokenEndpoint(@NonNull Consumer<TokenEndpointBuilder> consumer) {
81+
TokenEndpointBuilder endpoint = new TokenEndpointBuilder();
82+
consumer.accept(endpoint);
83+
this.tokenEndpoint = BuilderDefaults.defaultIfAbsent(endpoint.build(), this.tokenEndpoint);
84+
return this;
85+
}
86+
87+
5288
public AuthorizationCodeGrant build() {
5389
return new AuthorizationCodeGrant(tokenRequestEndpoint, tokenEndpoint);
5490
}

springfox-core/src/main/java/springfox/documentation/builders/BodyParameterSpecificationProvider.java

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -27,52 +27,52 @@ public ParameterSpecification create(ParameterSpecificationContext context) {
2727
Collection<MediaType> accepts = new HashSet<>(context.getAccepts());
2828
if (contentParameter != null) {
2929
accepts.addAll(contentParameter.getRepresentations().stream()
30-
.map(Representation::getMediaType)
31-
.collect(Collectors.toSet()));
30+
.map(Representation::getMediaType)
31+
.collect(Collectors.toSet()));
3232
}
3333
if (accepts.isEmpty()) {
3434
accepts.add(MediaType.ALL);
3535
}
3636

3737
accepts.stream()
38-
.filter(mediaType -> !mediaType.equalsTypeAndSubtype(MediaType.APPLICATION_FORM_URLENCODED))
39-
.forEach(
40-
each -> {
41-
if (simpleParameter != null && simpleParameter.getModel() != null) {
42-
context.getContentSpecificationBuilder()
43-
.copyOf(contentParameter)
44-
.requestBody(true)
45-
.representation(each)
46-
.apply(r -> r
47-
.model(m -> m.copyOf(simpleParameter.getModel()))
48-
.encodings(null));
49-
} else if (contentParameter != null) {
50-
Optional<Representation> mediaType = contentParameter.representationFor(each);
51-
context.getContentSpecificationBuilder()
52-
.copyOf(contentParameter)
53-
.requestBody(true)
54-
.representation(each)
55-
.apply(r -> r.model(m -> m.copyOf(mediaType
56-
.map(Representation::getModel)
57-
.orElse(new ModelSpecificationBuilder()
58-
.name(context.getName())
59-
.scalarModel(ScalarType.STRING)
60-
.build())))
61-
.encodings(null));
38+
.filter(mediaType -> !mediaType.equalsTypeAndSubtype(MediaType.APPLICATION_FORM_URLENCODED))
39+
.forEach(
40+
each -> {
41+
if (simpleParameter != null && simpleParameter.getModel() != null) {
42+
context.getContentSpecificationBuilder()
43+
.copyOf(contentParameter)
44+
.requestBody(true)
45+
.representation(each)
46+
.apply(r -> r
47+
.model(m -> m.copyOf(simpleParameter.getModel()))
48+
.clearEncodings());
49+
} else if (contentParameter != null) {
50+
Optional<Representation> mediaType = contentParameter.representationFor(each);
51+
context.getContentSpecificationBuilder()
52+
.copyOf(contentParameter)
53+
.requestBody(true)
54+
.representation(each)
55+
.apply(r -> r.model(m -> m.copyOf(mediaType
56+
.map(Representation::getModel)
57+
.orElse(new ModelSpecificationBuilder()
58+
.name(context.getName())
59+
.scalarModel(ScalarType.STRING)
60+
.build())))
61+
.clearEncodings());
6262

63-
} else {
64-
LOGGER.warn("Parameter should either be a simple or a content type");
65-
context.getContentSpecificationBuilder()
66-
.requestBody(true)
67-
.representation(each)
68-
.apply(r -> r.model(m -> m
69-
.copyOf(new ModelSpecificationBuilder()
70-
.name(context.getName())
71-
.scalarModel(ScalarType.STRING)
72-
.build()))
73-
.encodings(null));
74-
}
75-
});
63+
} else {
64+
LOGGER.warn("Parameter should either be a simple or a content type");
65+
context.getContentSpecificationBuilder()
66+
.requestBody(true)
67+
.representation(each)
68+
.apply(r -> r.model(m -> m
69+
.copyOf(new ModelSpecificationBuilder()
70+
.name(context.getName())
71+
.scalarModel(ScalarType.STRING)
72+
.build()))
73+
.clearEncodings());
74+
}
75+
});
7676
return new ParameterSpecification(null, context.getContentSpecificationBuilder().build());
7777
}
7878
}

0 commit comments

Comments
 (0)