Skip to content

Commit 69dbfe2

Browse files
committed
Merge branch 'lugaru1234-issue1276' into develop_2.0
2 parents e242269 + 553d55b commit 69dbfe2

17 files changed

+261
-191
lines changed

modules/swagger-core/src/main/java/io/swagger/jackson/ModelResolver.java

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@
2626
import io.swagger.models.properties.ArrayProperty;
2727
import io.swagger.models.properties.MapProperty;
2828
import io.swagger.models.properties.Property;
29+
import io.swagger.models.properties.PropertyBuilder;
2930
import io.swagger.models.properties.RefProperty;
3031
import io.swagger.models.properties.StringProperty;
3132
import io.swagger.util.PrimitiveType;
33+
import io.swagger.util.AllowableValues;
34+
import io.swagger.util.AllowableValuesUtils;
3235

3336
import org.apache.commons.lang3.StringUtils;
3437
import org.slf4j.Logger;
@@ -386,25 +389,13 @@ public Model resolve(JavaType type, ModelConverterContext context, Iterator<Mode
386389
property.setReadOnly(isReadOnly);
387390
}
388391
}
389-
390-
if (property instanceof StringProperty) {
391-
if (mp != null) {
392-
String allowableValues = mp.allowableValues();
393-
LOGGER.debug("allowableValues " + allowableValues);
394-
if (!"".equals(allowableValues)) {
395-
String[] parts = allowableValues.split(",");
396-
LOGGER.debug("found " + parts.length + " parts");
397-
for (String part : parts) {
398-
if (property instanceof StringProperty) {
399-
StringProperty sp = (StringProperty) property;
400-
sp._enum(part.trim());
401-
LOGGER.debug("added enum value " + part);
402-
}
403-
}
404-
}
392+
if (mp != null) {
393+
final AllowableValues allowableValues = AllowableValuesUtils.create(mp.allowableValues());
394+
if (allowableValues != null) {
395+
final Map<PropertyBuilder.PropertyId, Object> args = allowableValues.asPropertyArguments();
396+
PropertyBuilder.merge(property, args);
405397
}
406398
}
407-
408399
JAXBAnnotationsHelper.apply(member, property);
409400
applyBeanValidatorAnnotations(property, annotations);
410401
props.add(property);

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/AllowableEnumValues.java renamed to modules/swagger-core/src/main/java/io/swagger/util/AllowableEnumValues.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
package io.swagger.jaxrs;
1+
package io.swagger.util;
2+
3+
import io.swagger.models.properties.PropertyBuilder;
24

35
import java.util.ArrayList;
6+
import java.util.EnumMap;
47
import java.util.List;
8+
import java.util.Map;
59

6-
class AllowableEnumValues implements AllowableValues {
10+
public class AllowableEnumValues implements AllowableValues {
711

812
private final List<String> items;
913

@@ -25,4 +29,11 @@ public static AllowableEnumValues create(String allowableValues) {
2529
public List<String> getItems() {
2630
return items;
2731
}
32+
33+
@Override
34+
public Map<PropertyBuilder.PropertyId, Object> asPropertyArguments() {
35+
final Map<PropertyBuilder.PropertyId, Object> map = new EnumMap<PropertyBuilder.PropertyId, Object>(PropertyBuilder.PropertyId.class);
36+
map.put(PropertyBuilder.PropertyId.ENUM, items);
37+
return map;
38+
}
2839
}

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/AllowableRangeValues.java renamed to modules/swagger-core/src/main/java/io/swagger/util/AllowableRangeValues.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
package io.swagger.jaxrs;
1+
package io.swagger.util;
22

3+
import io.swagger.models.properties.PropertyBuilder;
4+
5+
import java.util.EnumMap;
6+
import java.util.Map;
37
import java.util.regex.Matcher;
48
import java.util.regex.Pattern;
59

6-
class AllowableRangeValues implements AllowableValues {
10+
public class AllowableRangeValues implements AllowableValues {
711

812
private static final Pattern RANGE_PATTERN = Pattern.compile("range(\\[|\\()([^,\\s]+)\\s*,\\s*([^\\]\\s]+)\\s*(\\]|\\))");
913
private static final String POSITIVE_INFINITY_KEY = "infinity";
@@ -13,10 +17,10 @@ class AllowableRangeValues implements AllowableValues {
1317

1418
private final Double minimum;
1519
private final Double maximum;
16-
private final Boolean exclusiveMinimum;
17-
private final Boolean exclusiveMaximum;
20+
private final boolean exclusiveMinimum;
21+
private final boolean exclusiveMaximum;
1822

19-
private AllowableRangeValues(Double minimum, Boolean exclusiveMinimum, Double maximum, Boolean exclusiveMaximum) {
23+
private AllowableRangeValues(Double minimum, boolean exclusiveMinimum, Double maximum, boolean exclusiveMaximum) {
2024
this.minimum = minimum;
2125
this.exclusiveMinimum = exclusiveMinimum;
2226
this.maximum = maximum;
@@ -38,7 +42,7 @@ private static Double findRangeValue(String value) {
3842
}
3943
}
4044

41-
private static Boolean isExclusiveRange(String value) {
45+
private static boolean isExclusiveRange(String value) {
4246
return OPEN_EXCLUSIVE_RANGE_KEY.equals(value) || CLOSE_EXCLUSIVE_RANGE_KEY.equals(value);
4347
}
4448

@@ -57,4 +61,18 @@ public boolean isExclusiveMinimum() {
5761
public boolean isExclusiveMaximum() {
5862
return exclusiveMaximum;
5963
}
64+
65+
@Override
66+
public Map<PropertyBuilder.PropertyId, Object> asPropertyArguments() {
67+
final Map<PropertyBuilder.PropertyId, Object> map = new EnumMap<PropertyBuilder.PropertyId, Object>(PropertyBuilder.PropertyId.class);
68+
map.put(PropertyBuilder.PropertyId.MINIMUM, minimum);
69+
map.put(PropertyBuilder.PropertyId.MAXIMUM, maximum);
70+
if (exclusiveMinimum) {
71+
map.put(PropertyBuilder.PropertyId.EXCLUSIVE_MINIMUM, exclusiveMinimum);
72+
}
73+
if (exclusiveMaximum) {
74+
map.put(PropertyBuilder.PropertyId.EXCLUSIVE_MAXIMUM, exclusiveMaximum);
75+
}
76+
return map;
77+
}
6078
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.swagger.util;
2+
3+
import io.swagger.models.properties.PropertyBuilder;
4+
5+
import java.util.Map;
6+
7+
public interface AllowableValues {
8+
Map<PropertyBuilder.PropertyId, Object> asPropertyArguments();
9+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.swagger.util;
2+
3+
import org.apache.commons.lang3.StringUtils;
4+
5+
public class AllowableValuesUtils {
6+
7+
public static AllowableValues create(String values) {
8+
AllowableValues allowableValues = null;
9+
if (StringUtils.isNotEmpty(values)) {
10+
allowableValues = AllowableRangeValues.create(values);
11+
if (allowableValues == null) {
12+
allowableValues = AllowableEnumValues.create(values);
13+
}
14+
}
15+
return allowableValues;
16+
}
17+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package io.swagger;
2+
3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.Assert.assertFalse;
5+
import static org.testng.Assert.assertNull;
6+
import static org.testng.Assert.assertTrue;
7+
8+
import io.swagger.models.properties.PropertyBuilder;
9+
import io.swagger.util.AllowableRangeValues;
10+
import io.swagger.util.AllowableEnumValues;
11+
import io.swagger.util.AllowableValuesUtils;
12+
13+
import org.testng.annotations.Test;
14+
15+
import java.util.Arrays;
16+
import java.util.EnumMap;
17+
import java.util.Map;
18+
19+
public class AllowableValuesTest {
20+
21+
@Test(description = "parse allowableValues")
22+
public void allowableValuesTest() {
23+
final AllowableRangeValues inclusiveRange = (AllowableRangeValues) AllowableValuesUtils.create("range[1, 5]");
24+
assertEquals(inclusiveRange.getMinimum(), 1.0);
25+
assertEquals(inclusiveRange.getMaximum(), 5.0);
26+
assertFalse(inclusiveRange.isExclusiveMinimum());
27+
assertFalse(inclusiveRange.isExclusiveMaximum());
28+
final Map<PropertyBuilder.PropertyId, Object> map = new EnumMap<PropertyBuilder.PropertyId, Object>(PropertyBuilder.PropertyId.class) {
29+
{
30+
put(PropertyBuilder.PropertyId.MINIMUM, 1.0);
31+
put(PropertyBuilder.PropertyId.MAXIMUM, 5.0);
32+
}
33+
};
34+
assertEquals(inclusiveRange.asPropertyArguments(), map);
35+
36+
final AllowableRangeValues exclusiveRange = (AllowableRangeValues) AllowableValuesUtils.create("range(1, 5)");
37+
assertEquals(exclusiveRange.getMinimum(), 1.0);
38+
assertEquals(exclusiveRange.getMaximum(), 5.0);
39+
assertTrue(exclusiveRange.isExclusiveMaximum());
40+
assertTrue(exclusiveRange.isExclusiveMinimum());
41+
42+
final AllowableRangeValues negativeInfinityRange = (AllowableRangeValues) AllowableValuesUtils.create("range[-infinity, 5]");
43+
assertNull(negativeInfinityRange.getMinimum());
44+
assertEquals(negativeInfinityRange.getMaximum(), 5.0);
45+
assertFalse(negativeInfinityRange.isExclusiveMaximum());
46+
assertFalse(negativeInfinityRange.isExclusiveMinimum());
47+
48+
final AllowableRangeValues positiveInfinityRange = (AllowableRangeValues) AllowableValuesUtils.create("range[1, infinity]");
49+
assertEquals(positiveInfinityRange.getMinimum(), 1.0);
50+
assertNull(positiveInfinityRange.getMaximum());
51+
assertFalse(positiveInfinityRange.isExclusiveMaximum());
52+
assertFalse(positiveInfinityRange.isExclusiveMinimum());
53+
54+
final AllowableRangeValues mixedRange = (AllowableRangeValues) AllowableValuesUtils.create("range[1.0, 8.0)");
55+
assertEquals(mixedRange.getMinimum(), 1.0);
56+
assertEquals(mixedRange.getMaximum(), 8.0);
57+
assertFalse(mixedRange.isExclusiveMinimum());
58+
assertTrue(mixedRange.isExclusiveMaximum());
59+
60+
final AllowableEnumValues stringValues = (AllowableEnumValues) AllowableValuesUtils.create("str1, str2");
61+
assertEquals(stringValues.getItems(), Arrays.asList("str1", "str2"));
62+
final Map<PropertyBuilder.PropertyId, Object> stringMap = new EnumMap<PropertyBuilder.PropertyId, Object>(PropertyBuilder.PropertyId.class) {
63+
{
64+
put(PropertyBuilder.PropertyId.ENUM, Arrays.asList("str1", "str2"));
65+
}
66+
};
67+
assertEquals(stringValues.asPropertyArguments(), stringMap);
68+
}
69+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package io.swagger;
2+
3+
import static org.testng.Assert.assertEquals;
4+
import static org.testng.Assert.assertNull;
5+
import static org.testng.Assert.assertTrue;
6+
7+
import io.swagger.converter.ModelConverters;
8+
import io.swagger.models.ModelWithRanges;
9+
import io.swagger.models.properties.DoubleProperty;
10+
import io.swagger.models.properties.IntegerProperty;
11+
import io.swagger.models.properties.Property;
12+
import io.swagger.models.properties.StringProperty;
13+
14+
import org.testng.annotations.Test;
15+
16+
import java.util.Arrays;
17+
import java.util.Map;
18+
19+
public class ModelWithRangesTest {
20+
21+
@Test(description = "test model with @ApiModelProperty.allowableValues")
22+
public void modelWithRangesTest() {
23+
final Map<String, Property> properties = ModelConverters.getInstance().read(ModelWithRanges.class).get("ModelWithRanges").getProperties();
24+
25+
final IntegerProperty inclusiveRange = (IntegerProperty) properties.get("inclusiveRange");
26+
assertEquals(inclusiveRange.getMinimum(), 1.0);
27+
assertEquals(inclusiveRange.getMaximum(), 5.0);
28+
assertNull(inclusiveRange.getExclusiveMaximum());
29+
assertNull(inclusiveRange.getExclusiveMinimum());
30+
31+
final IntegerProperty exclusiveRange = (IntegerProperty) properties.get("exclusiveRange");
32+
assertEquals(exclusiveRange.getMinimum(), 1.0);
33+
assertEquals(exclusiveRange.getMaximum(), 5.0);
34+
assertEquals(exclusiveRange.getExclusiveMinimum(), Boolean.TRUE);
35+
assertEquals(exclusiveRange.getExclusiveMaximum(), Boolean.TRUE);
36+
37+
final IntegerProperty positiveInfinityRange = (IntegerProperty) properties.get("positiveInfinityRange");
38+
assertEquals(positiveInfinityRange.getMinimum(), 1.0);
39+
assertNull(positiveInfinityRange.getMaximum());
40+
assertNull(positiveInfinityRange.getExclusiveMaximum());
41+
assertNull(positiveInfinityRange.getExclusiveMinimum());
42+
43+
final IntegerProperty negativeInfinityRange = (IntegerProperty) properties.get("negativeInfinityRange");
44+
assertNull(negativeInfinityRange.getMinimum());
45+
assertEquals(negativeInfinityRange.getMaximum(), 5.0);
46+
assertNull(negativeInfinityRange.getExclusiveMaximum());
47+
assertNull(negativeInfinityRange.getExclusiveMinimum());
48+
49+
final StringProperty stringValues = (StringProperty) properties.get("stringValues");
50+
assertEquals(stringValues.getEnum(), Arrays.asList("str1", "str2"));
51+
52+
final DoubleProperty doubleValues = (DoubleProperty) properties.get("doubleValues");
53+
assertEquals(doubleValues.getMinimum(), 1.0);
54+
assertEquals(doubleValues.getMaximum(), 8.0);
55+
assertEquals(doubleValues.getExclusiveMaximum(), Boolean.TRUE);
56+
assertNull(doubleValues.getExclusiveMinimum());
57+
}
58+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.swagger.models;
2+
3+
import io.swagger.annotations.ApiModelProperty;
4+
5+
public class ModelWithRanges {
6+
7+
@ApiModelProperty(value = "values with include range", allowableValues = "range[1, 5]")
8+
public int getInclusiveRange(){
9+
return 2;
10+
}
11+
12+
@ApiModelProperty(value = "values with include range", allowableValues = "range(1, 5)")
13+
public int getExclusiveRange(){
14+
return 2;
15+
}
16+
17+
@ApiModelProperty(value = "values with include range", allowableValues = "range[1, infinity]")
18+
public int getPositiveInfinityRange(){
19+
return 2;
20+
}
21+
22+
@ApiModelProperty(value = "values with include range", allowableValues = "range[-infinity, 5]")
23+
public int getNegativeInfinityRange(){
24+
return 2;
25+
}
26+
27+
@ApiModelProperty(value = "some string values", allowableValues = "str1, str2")
28+
public String getStringValues(){
29+
return "test";
30+
}
31+
32+
@ApiModelProperty(value = "some string values", allowableValues = "range[1.0, 8.0)")
33+
public Double getDoubleValues(){
34+
return 1.0;
35+
}
36+
}

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/AbstractAllowableValuesProcessor.java

Lines changed: 0 additions & 6 deletions
This file was deleted.

modules/swagger-jaxrs/src/main/java/io/swagger/jaxrs/AbstractEnumProcessor.java

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)