Skip to content

Commit 7c4f178

Browse files
committed
Merge branch '2.3.x' into 2.4.x
2 parents 2aa1c97 + 3b48526 commit 7c4f178

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);
@@ -167,27 +163,16 @@ static void addToEnvironment(ConfigurableEnvironment environment, Log logger) {
167163

168164
static final class Range<T extends Number> {
169165

166+
private final String value;
167+
170168
private final T min;
171169

172170
private final T max;
173171

174-
private Range(T min, T max) {
172+
private Range(String value, T min, T max) {
173+
this.value = value;
175174
this.min = min;
176175
this.max = max;
177-
178-
}
179-
180-
static <T extends Number> Range<T> get(String range, Function<String, T> parse, Predicate<T> boundValidator,
181-
T defaultMin, BiPredicate<T, T> rangeValidator) {
182-
String[] tokens = StringUtils.commaDelimitedListToStringArray(range);
183-
T token1 = parse.apply(tokens[0]);
184-
if (tokens.length == 1) {
185-
Assert.isTrue(boundValidator.test(token1), "Bound must be positive.");
186-
return new Range<>(defaultMin, token1);
187-
}
188-
T token2 = parse.apply(tokens[1]);
189-
Assert.isTrue(rangeValidator.test(token1, token2), "Lower bound must be less than upper bound.");
190-
return new Range<>(token1, token2);
191176
}
192177

193178
T getMin() {
@@ -198,6 +183,24 @@ T getMax() {
198183
return this.max;
199184
}
200185

186+
@Override
187+
public String toString() {
188+
return this.value;
189+
}
190+
191+
static <T extends Number & Comparable<T>> Range<T> of(String value, Function<String, T> parse) {
192+
T zero = parse.apply("0");
193+
String[] tokens = StringUtils.commaDelimitedListToStringArray(value);
194+
T min = parse.apply(tokens[0]);
195+
if (tokens.length == 1) {
196+
Assert.isTrue(min.compareTo(zero) > 0, "Bound must be positive.");
197+
return new Range<>(value, zero, min);
198+
}
199+
T max = parse.apply(tokens[1]);
200+
Assert.isTrue(min.compareTo(max) < 0, "Lower bound must be less than upper bound.");
201+
return new Range<>(value, min, max);
202+
}
203+
201204
}
202205

203206
}

0 commit comments

Comments
 (0)