Skip to content

Commit b17bc4a

Browse files
mp911dechristophstrobl
authored andcommitted
Polishing.
Remove duplicate conversion code. Original Pull Request: #2292
1 parent 4ab1789 commit b17bc4a

24 files changed

+127
-136
lines changed

src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.apache.commons.logging.LogFactory;
2626

2727
import org.springframework.core.convert.converter.Converter;
28-
import org.springframework.data.domain.Range;
2928
import org.springframework.data.geo.Circle;
3029
import org.springframework.data.geo.Distance;
3130
import org.springframework.data.geo.GeoResults;
@@ -49,6 +48,7 @@
4948
import org.springframework.data.redis.connection.stream.StreamOffset;
5049
import org.springframework.data.redis.connection.stream.StreamReadOptions;
5150
import org.springframework.data.redis.connection.stream.StringRecord;
51+
import org.springframework.data.redis.connection.zset.Aggregate;
5252
import org.springframework.data.redis.connection.zset.DefaultTuple;
5353
import org.springframework.data.redis.connection.zset.Tuple;
5454
import org.springframework.data.redis.connection.zset.Weights;

src/main/java/org/springframework/data/redis/connection/DefaultedRedisConnection.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.Set;
2424
import java.util.concurrent.TimeUnit;
2525

26-
import org.springframework.data.domain.Range;
2726
import org.springframework.data.geo.Circle;
2827
import org.springframework.data.geo.Distance;
2928
import org.springframework.data.geo.GeoResults;
@@ -41,6 +40,7 @@
4140
import org.springframework.data.redis.connection.stream.StreamInfo.XInfoStream;
4241
import org.springframework.data.redis.connection.stream.StreamOffset;
4342
import org.springframework.data.redis.connection.stream.StreamReadOptions;
43+
import org.springframework.data.redis.connection.zset.Aggregate;
4444
import org.springframework.data.redis.connection.zset.Tuple;
4545
import org.springframework.data.redis.connection.zset.Weights;
4646
import org.springframework.data.redis.core.Cursor;

src/main/java/org/springframework/data/redis/connection/ReactiveZSetCommands.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
import org.reactivestreams.Publisher;
3434
import org.springframework.data.domain.Range;
3535
import org.springframework.data.domain.Sort.Direction;
36-
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
36+
import org.springframework.data.redis.connection.zset.Aggregate;
3737
import org.springframework.data.redis.connection.zset.DefaultTuple;
3838
import org.springframework.data.redis.connection.zset.Tuple;
3939
import org.springframework.data.redis.connection.zset.Weights;

src/main/java/org/springframework/data/redis/connection/RedisZSetCommands.java

+15-17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import java.util.Set;
2121
import java.util.concurrent.TimeUnit;
2222

23+
import org.springframework.data.redis.connection.zset.Aggregate;
2324
import org.springframework.data.redis.connection.zset.Tuple;
2425
import org.springframework.data.redis.connection.zset.Weights;
2526
import org.springframework.data.redis.core.Cursor;
@@ -41,14 +42,8 @@
4142
public interface RedisZSetCommands {
4243

4344
/**
44-
* Sort aggregation operations.
45-
*/
46-
enum Aggregate {
47-
SUM, MIN, MAX;
48-
}
49-
50-
/**
51-
* {@link Range} defines {@literal min} and {@literal max} values to retrieve from a {@literal ZSET}.
45+
* {@link org.springframework.data.domain.Range} defines {@literal min} and {@literal max} values to retrieve from a
46+
* {@literal ZSET}.
5247
*
5348
* @author Christoph Strobl
5449
* @since 1.6
@@ -61,14 +56,15 @@ class Range {
6156
@Nullable Boundary max;
6257

6358
/**
64-
* @return new {@link Range}
59+
* @return new {@link org.springframework.data.domain.Range}
6560
*/
6661
public static Range range() {
6762
return new Range();
6863
}
6964

7065
/**
71-
* @return new {@link Range} with {@literal min} and {@literal max} set to {@link Boundary#infinite()}.
66+
* @return new {@link org.springframework.data.domain.Range} with {@literal min} and {@literal max} set to
67+
* {@link Boundary#infinite()}.
7268
*/
7369
public static Range unbounded() {
7470

@@ -963,7 +959,7 @@ default Long zCount(byte[] key, double min, double max) {
963959
Long zRemRange(byte[] key, long start, long end);
964960

965961
/**
966-
* Remove all elements between the lexicographical {@link Range}.
962+
* Remove all elements between the lexicographical {@link org.springframework.data.domain.Range}.
967963
*
968964
* @param key must not be {@literal null}.
969965
* @param range must not be {@literal null}.
@@ -1299,7 +1295,8 @@ default Set<byte[]> zRangeByLex(byte[] key) {
12991295
}
13001296

13011297
/**
1302-
* Get all the elements in {@link Range} from the sorted set at {@literal key} in lexicographical ordering.
1298+
* Get all the elements in {@link org.springframework.data.domain.Range} from the sorted set at {@literal key} in
1299+
* lexicographical ordering.
13031300
*
13041301
* @param key must not be {@literal null}.
13051302
* @param range must not be {@literal null}.
@@ -1313,8 +1310,8 @@ default Set<byte[]> zRangeByLex(byte[] key, org.springframework.data.domain.Rang
13131310
}
13141311

13151312
/**
1316-
* Get all the elements in {@link Range} from the sorted set at {@literal key} in lexicographical ordering. Result is
1317-
* limited via {@link Limit}.
1313+
* Get all the elements in {@link org.springframework.data.domain.Range} from the sorted set at {@literal key} in
1314+
* lexicographical ordering. Result is limited via {@link Limit}.
13181315
*
13191316
* @param key must not be {@literal null}.
13201317
* @param range must not be {@literal null}.
@@ -1341,7 +1338,8 @@ default Set<byte[]> zRevRangeByLex(byte[] key) {
13411338
}
13421339

13431340
/**
1344-
* Get all the elements in {@link Range} from the sorted set at {@literal key} in reversed lexicographical ordering.
1341+
* Get all the elements in {@link org.springframework.data.domain.Range} from the sorted set at {@literal key} in
1342+
* reversed lexicographical ordering.
13451343
*
13461344
* @param key must not be {@literal null}.
13471345
* @param range must not be {@literal null}.
@@ -1355,8 +1353,8 @@ default Set<byte[]> zRevRangeByLex(byte[] key, org.springframework.data.domain.R
13551353
}
13561354

13571355
/**
1358-
* Get all the elements in {@link Range} from the sorted set at {@literal key} in reversed lexicographical ordering.
1359-
* Result is limited via {@link Limit}.
1356+
* Get all the elements in {@link org.springframework.data.domain.Range} from the sorted set at {@literal key} in
1357+
* reversed lexicographical ordering. Result is limited via {@link Limit}.
13601358
*
13611359
* @param key must not be {@literal null}.
13621360
* @param range must not be {@literal null}.

src/main/java/org/springframework/data/redis/connection/StringRedisConnection.java

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import org.springframework.data.redis.connection.stream.StreamReadOptions;
4242
import org.springframework.data.redis.connection.stream.StreamRecords;
4343
import org.springframework.data.redis.connection.stream.StringRecord;
44+
import org.springframework.data.redis.connection.zset.Aggregate;
4445
import org.springframework.data.redis.connection.zset.Tuple;
4546
import org.springframework.data.redis.connection.zset.Weights;
4647
import org.springframework.data.redis.core.Cursor;

src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.data.redis.connection.ClusterSlotHashUtil;
3232
import org.springframework.data.redis.connection.RedisZSetCommands;
3333
import org.springframework.data.redis.connection.convert.SetConverter;
34+
import org.springframework.data.redis.connection.zset.Aggregate;
3435
import org.springframework.data.redis.connection.zset.DefaultTuple;
3536
import org.springframework.data.redis.connection.zset.Tuple;
3637
import org.springframework.data.redis.connection.zset.Weights;

src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828

2929
import org.springframework.dao.InvalidDataAccessApiUsageException;
3030
import org.springframework.data.redis.connection.RedisZSetCommands;
31+
import org.springframework.data.redis.connection.zset.Aggregate;
3132
import org.springframework.data.redis.connection.zset.DefaultTuple;
3233
import org.springframework.data.redis.connection.zset.Tuple;
3334
import org.springframework.data.redis.connection.zset.Weights;

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java

+18-69
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.springframework.data.redis.connection.RedisListCommands.Position;
4949
import org.springframework.data.redis.connection.RedisNode.NodeType;
5050
import org.springframework.data.redis.connection.RedisStringCommands.SetOption;
51-
import org.springframework.data.redis.connection.RedisZSetCommands.Range.Boundary;
5251
import org.springframework.data.redis.connection.SortParameters.Order;
5352
import org.springframework.data.redis.connection.convert.Converters;
5453
import org.springframework.data.redis.connection.convert.StringToRedisClientInfoConverter;
@@ -257,19 +256,6 @@ public static List<RedisClientInfo> toListOfRedisClientInformation(String client
257256
return StringToRedisClientInfoConverter.INSTANCE.convert(clientList.split("\\r?\\n"));
258257
}
259258

260-
private static String boundaryToString(Boundary boundary, String inclPrefix, String exclPrefix) {
261-
262-
String prefix = boundary.isIncluding() ? inclPrefix : exclPrefix;
263-
String value = null;
264-
if (boundary.getValue() instanceof byte[]) {
265-
value = toString((byte[]) boundary.getValue());
266-
} else {
267-
value = boundary.getValue().toString();
268-
}
269-
270-
return prefix + value;
271-
}
272-
273259
/**
274260
* Convert a {@link Limit} to a Lettuce {@link io.lettuce.core.Limit}.
275261
*
@@ -290,81 +276,44 @@ public static io.lettuce.core.Limit toLimit(Limit limit) {
290276
* @since 2.0
291277
*/
292278
public static <T> Range<T> toRange(org.springframework.data.domain.Range<T> range) {
293-
return Range.from(lowerBoundaryOf(range, false), upperBoundaryOf(range, false));
279+
return toRange(range, false);
294280
}
295281

296282
/**
297-
* Convert a {@link org.springframework.data.redis.connection.RedisZSetCommands.Range} to a lettuce {@link Range}.
283+
* Convert a {@link org.springframework.data.domain.Range} to a lettuce {@link Range}.
298284
*
299285
* @param range
300286
* @param convertNumberToBytes
301287
* @return
302288
* @since 2.2
303289
*/
304-
public static <T> Range<T> toRange(org.springframework.data.domain.Range<T> range,
305-
boolean convertNumberToBytes) {
306-
return Range.from(lowerBoundaryOf(range, convertNumberToBytes), upperBoundaryOf(range, convertNumberToBytes));
290+
@SuppressWarnings({ "rawtypes", "unchecked" })
291+
public static <T> Range<T> toRange(org.springframework.data.domain.Range<T> range, boolean convertNumberToBytes) {
292+
293+
Range.Boundary upper = RangeConverter.convertBound(range.getUpperBound(), convertNumberToBytes, null,
294+
it -> it.getBytes(StandardCharsets.UTF_8));
295+
Range.Boundary lower = RangeConverter.convertBound(range.getLowerBound(), convertNumberToBytes, null,
296+
it -> it.getBytes(StandardCharsets.UTF_8));
297+
298+
return Range.from(lower, upper);
307299
}
308300

309301
/**
310-
* Convert a {@link org.springframework.data.redis.connection.RedisZSetCommands.Range} to a lettuce {@link Range} and
311-
* reverse boundaries.
302+
* Convert a {@link org.springframework.data.domain.Range} to a lettuce {@link Range} and reverse boundaries.
312303
*
313304
* @param range
314305
* @return
315306
* @since 2.0
316307
*/
308+
@SuppressWarnings({ "rawtypes", "unchecked" })
317309
public static <T> Range<T> toRevRange(org.springframework.data.domain.Range<T> range) {
318-
return Range.from(upperBoundaryOf(range, false), lowerBoundaryOf(range, false));
319-
}
320-
321-
@SuppressWarnings("unchecked")
322-
private static <T> Range.Boundary<T> lowerBoundaryOf(
323-
org.springframework.data.domain.Range<T> range, boolean convertNumberToBytes) {
324-
return (Range.Boundary<T>) rangeToBoundaryArgumentConverter(false, convertNumberToBytes).convert(range);
325-
}
326-
327-
@SuppressWarnings("unchecked")
328-
private static <T> Range.Boundary<T> upperBoundaryOf(
329-
org.springframework.data.domain.Range<T> range, boolean convertNumberToBytes) {
330-
return (Range.Boundary<T>) rangeToBoundaryArgumentConverter(true, convertNumberToBytes).convert(range);
331-
}
332310

333-
private static Converter<org.springframework.data.domain.Range<?>, Range.Boundary<?>> rangeToBoundaryArgumentConverter(
334-
boolean upper, boolean convertNumberToBytes) {
311+
Range.Boundary upper = RangeConverter.convertBound(range.getUpperBound(), false, null,
312+
it -> it.getBytes(StandardCharsets.UTF_8));
313+
Range.Boundary lower = RangeConverter.convertBound(range.getLowerBound(), false, null,
314+
it -> it.getBytes(StandardCharsets.UTF_8));
335315

336-
return (source) -> {
337-
338-
org.springframework.data.domain.Range.Bound<?> sourceBoundary = upper ? source.getUpperBound()
339-
: source.getLowerBound();
340-
if (sourceBoundary == null || !sourceBoundary.isBounded()) {
341-
return Range.Boundary.unbounded();
342-
}
343-
344-
boolean inclusive = sourceBoundary.isInclusive();
345-
Object value = sourceBoundary.getValue().get();
346-
347-
if (value instanceof Number) {
348-
349-
if (convertNumberToBytes) {
350-
value = value.toString();
351-
} else {
352-
return inclusive ? Range.Boundary.including((Number) value) : Range.Boundary.excluding((Number) value);
353-
}
354-
}
355-
356-
if (value instanceof String) {
357-
358-
if (!StringUtils.hasText((String) value) || ObjectUtils.nullSafeEquals(value, "+")
359-
|| ObjectUtils.nullSafeEquals(value, "-")) {
360-
return Range.Boundary.unbounded();
361-
}
362-
return inclusive ? Range.Boundary.including(value.toString().getBytes(StandardCharsets.UTF_8))
363-
: Range.Boundary.excluding(value.toString().getBytes(StandardCharsets.UTF_8));
364-
}
365-
366-
return inclusive ? Range.Boundary.including((byte[]) value) : Range.Boundary.excluding((byte[]) value);
367-
};
316+
return Range.from(upper, lower);
368317
}
369318

370319
/**

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceReactiveZSetCommands.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
import org.springframework.data.redis.connection.ReactiveRedisConnection.MultiValueResponse;
3838
import org.springframework.data.redis.connection.ReactiveRedisConnection.NumericResponse;
3939
import org.springframework.data.redis.connection.ReactiveZSetCommands;
40-
import org.springframework.data.redis.connection.RedisZSetCommands.Aggregate;
40+
import org.springframework.data.redis.connection.zset.Aggregate;
4141
import org.springframework.data.redis.connection.zset.DefaultTuple;
4242
import org.springframework.data.redis.connection.zset.Tuple;
4343
import org.springframework.data.redis.core.TimeoutUtils;

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.springframework.data.redis.connection.RedisZSetCommands;
3232
import org.springframework.data.redis.connection.RedisZSetCommands.ZAddArgs.Flag;
3333
import org.springframework.data.redis.connection.convert.Converters;
34+
import org.springframework.data.redis.connection.zset.Aggregate;
3435
import org.springframework.data.redis.connection.zset.Tuple;
3536
import org.springframework.data.redis.connection.zset.Weights;
3637
import org.springframework.data.redis.core.Cursor;

src/main/java/org/springframework/data/redis/connection/lettuce/RangeConverter.java

+27-24
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919
import io.lettuce.core.Range.Boundary;
2020
import io.lettuce.core.codec.StringCodec;
2121

22-
import java.nio.ByteBuffer;
23-
import java.util.function.BiFunction;
2422
import java.util.function.Function;
2523

2624
import org.springframework.data.domain.Range.Bound;
@@ -79,45 +77,50 @@ static <T> Range<T> toRangeWithDefault(org.springframework.data.domain.Range<?>
7977
@SuppressWarnings("unchecked")
8078
private static <T> Boundary<T> lowerBoundArgOf(org.springframework.data.domain.Range<?> range,
8179
@Nullable T lowerDefault, Function<String, ? extends Object> stringEncoder) {
82-
return (Boundary<T>) rangeToBoundArgumentConverter(false, stringEncoder).apply(range, lowerDefault);
80+
return (Boundary<T>) convertBound(range.getLowerBound(), false, lowerDefault, stringEncoder);
8381
}
8482

8583
@SuppressWarnings("unchecked")
8684
private static <T> Boundary<T> upperBoundArgOf(org.springframework.data.domain.Range<?> range,
8785
@Nullable T upperDefault, Function<String, ? extends Object> stringEncoder) {
88-
return (Boundary<T>) rangeToBoundArgumentConverter(true, stringEncoder).apply(range, upperDefault);
86+
return (Boundary<T>) convertBound(range.getUpperBound(), false, upperDefault, stringEncoder);
8987
}
9088

91-
private static BiFunction<org.springframework.data.domain.Range, Object, Boundary<?>> rangeToBoundArgumentConverter(
92-
boolean upper, Function<String, ? extends Object> stringEncoder) {
89+
static Boundary<?> convertBound(org.springframework.data.domain.Range.Bound source, boolean convertNumberToBytes,
90+
Object defaultValue, Function<String, ? extends Object> stringEncoder) {
9391

94-
return (source, defaultValue) -> {
92+
if (!source.isBounded()) {
93+
return Boundary.unbounded();
94+
}
9595

96-
Boolean inclusive = upper ? source.getUpperBound().isInclusive() : source.getLowerBound().isInclusive();
97-
Object value = upper ? source.getUpperBound().getValue().orElse(defaultValue)
98-
: source.getLowerBound().getValue().orElse(defaultValue);
96+
Boolean inclusive = source.isInclusive();
97+
Object value = source.getValue().orElse(defaultValue);
9998

100-
if (value instanceof Number) {
99+
if (value instanceof Number) {
100+
101+
if (convertNumberToBytes) {
102+
value = value.toString();
103+
} else {
101104
return inclusive ? Boundary.including((Number) value) : Boundary.excluding((Number) value);
102105
}
106+
}
103107

104-
if (value instanceof String) {
108+
if (value instanceof String) {
105109

106-
if (!StringUtils.hasText((String) value) || ObjectUtils.nullSafeEquals(value, "+")
107-
|| ObjectUtils.nullSafeEquals(value, "-")) {
108-
return Boundary.unbounded();
109-
}
110+
if (!StringUtils.hasText((String) value) || ObjectUtils.nullSafeEquals(value, "+")
111+
|| ObjectUtils.nullSafeEquals(value, "-")) {
112+
return Boundary.unbounded();
113+
}
110114

111-
Object encoded = stringEncoder.apply((String) value);
112-
return inclusive ? Boundary.including(encoded) : Boundary.excluding(encoded);
115+
Object encoded = stringEncoder.apply((String) value);
116+
return inclusive ? Boundary.including(encoded) : Boundary.excluding(encoded);
113117

114-
}
118+
}
115119

116-
if (value == null) {
117-
return Boundary.unbounded();
118-
}
120+
if (value == null) {
121+
return Boundary.unbounded();
122+
}
119123

120-
return inclusive ? Boundary.including((ByteBuffer) value) : Boundary.excluding((ByteBuffer) value);
121-
};
124+
return inclusive ? Boundary.including(value) : Boundary.excluding(value);
122125
}
123126
}

0 commit comments

Comments
 (0)