Skip to content

Commit 3b48526

Browse files
committed
Polish
1 parent 456fcac commit 3b48526

File tree

1 file changed

+34
-31
lines changed

1 file changed

+34
-31
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/env/RandomValuePropertySource.java

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
import java.util.OptionalLong;
2121
import java.util.Random;
2222
import java.util.UUID;
23-
import java.util.function.BiPredicate;
2423
import java.util.function.Function;
25-
import java.util.function.Predicate;
2624

2725
import org.apache.commons.logging.Log;
2826
import org.apache.commons.logging.LogFactory;
@@ -98,11 +96,11 @@ private Object getRandomValue(String type) {
9896
}
9997
String range = getRange(type, "int");
10098
if (range != null) {
101-
return getNextIntInRange(range);
99+
return getNextIntInRange(Range.of(range, Integer::parseInt));
102100
}
103101
range = getRange(type, "long");
104102
if (range != null) {
105-
return getNextLongInRange(range);
103+
return getNextLongInRange(Range.of(range, Long::parseLong));
106104
}
107105
if (type.equals("uuid")) {
108106
return UUID.randomUUID().toString();
@@ -120,24 +118,22 @@ private String getRange(String type, String prefix) {
120118
return null;
121119
}
122120

123-
private int getNextIntInRange(String range) {
124-
Range<Integer> intRange = Range.get(range, Integer::parseInt, (t) -> t > 0, 0, (t1, t2) -> t1 < t2);
125-
OptionalInt first = getSource().ints(1, intRange.getMin(), intRange.getMax()).findFirst();
126-
if (!first.isPresent()) {
127-
throw new RuntimeException("Could not get random number for range '" + range + "'");
128-
}
121+
private int getNextIntInRange(Range<Integer> range) {
122+
OptionalInt first = getSource().ints(1, range.getMin(), range.getMax()).findFirst();
123+
assertPresent(first.isPresent(), range);
129124
return first.getAsInt();
130125
}
131126

132-
private long getNextLongInRange(String range) {
133-
Range<Long> longRange = Range.get(range, Long::parseLong, (t) -> t > 0L, 0L, (t1, t2) -> t1 < t2);
134-
OptionalLong first = getSource().longs(1, longRange.getMin(), longRange.getMax()).findFirst();
135-
if (!first.isPresent()) {
136-
throw new RuntimeException("Could not get random number for range '" + range + "'");
137-
}
127+
private long getNextLongInRange(Range<Long> range) {
128+
OptionalLong first = getSource().longs(1, range.getMin(), range.getMax()).findFirst();
129+
assertPresent(first.isPresent(), range);
138130
return first.getAsLong();
139131
}
140132

133+
private void assertPresent(boolean present, Range<?> range) {
134+
Assert.state(present, () -> "Could not get random number for range '" + range + "'");
135+
}
136+
141137
private Object getRandomBytes() {
142138
byte[] bytes = new byte[32];
143139
getSource().nextBytes(bytes);
@@ -152,27 +148,16 @@ public static void addToEnvironment(ConfigurableEnvironment environment) {
152148

153149
static final class Range<T extends Number> {
154150

151+
private final String value;
152+
155153
private final T min;
156154

157155
private final T max;
158156

159-
private Range(T min, T max) {
157+
private Range(String value, T min, T max) {
158+
this.value = value;
160159
this.min = min;
161160
this.max = max;
162-
163-
}
164-
165-
static <T extends Number> Range<T> get(String range, Function<String, T> parse, Predicate<T> boundValidator,
166-
T defaultMin, BiPredicate<T, T> rangeValidator) {
167-
String[] tokens = StringUtils.commaDelimitedListToStringArray(range);
168-
T token1 = parse.apply(tokens[0]);
169-
if (tokens.length == 1) {
170-
Assert.isTrue(boundValidator.test(token1), "Bound must be positive.");
171-
return new Range<>(defaultMin, token1);
172-
}
173-
T token2 = parse.apply(tokens[1]);
174-
Assert.isTrue(rangeValidator.test(token1, token2), "Lower bound must be less than upper bound.");
175-
return new Range<>(token1, token2);
176161
}
177162

178163
T getMin() {
@@ -183,6 +168,24 @@ T getMax() {
183168
return this.max;
184169
}
185170

171+
@Override
172+
public String toString() {
173+
return this.value;
174+
}
175+
176+
static <T extends Number & Comparable<T>> Range<T> of(String value, Function<String, T> parse) {
177+
T zero = parse.apply("0");
178+
String[] tokens = StringUtils.commaDelimitedListToStringArray(value);
179+
T min = parse.apply(tokens[0]);
180+
if (tokens.length == 1) {
181+
Assert.isTrue(min.compareTo(zero) > 0, "Bound must be positive.");
182+
return new Range<>(value, zero, min);
183+
}
184+
T max = parse.apply(tokens[1]);
185+
Assert.isTrue(min.compareTo(max) < 0, "Lower bound must be less than upper bound.");
186+
return new Range<>(value, min, max);
187+
}
188+
186189
}
187190

188191
}

0 commit comments

Comments
 (0)