Skip to content

Commit bad2394

Browse files
authored
Use Keyword(s) in params classes (#3434)
* Use Keyword(s) in params classes - Removed `Params` abstract class. * breaking list doc
1 parent 9e21013 commit bad2394

Some content is hidden

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

45 files changed

+462
-655
lines changed

docs/jedis5-breaking.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,17 @@
2121
- `BYTE_ARRAY_LIST` (use `BINARY_LIST`)
2222
- `BINARY_MAP_FROM_PAIRS`
2323

24+
- `Params` abstract class is removed.
25+
- `toString()` support used by its sub-classes is now unavailable.
26+
27+
- `CommandListFilterByParams` now throws `IllegalArgumentException` (instead of `JedisDataException`) in case of unfulfilling filter.
28+
29+
- `FailoverParams` now throws `IllegalArgumentException` (instead of `IllegalStateException`) in case of unfulfilling optional arguments.
30+
31+
- `XPendingParams` now throws `IllegalArgumentException` (instead of `IllegalStateException`) in case of unfulfilling optional arguments.
32+
33+
- `getParams()` method is removed from `SortingParams` class.
34+
2435
<!--- Deprecated in Jedis 4 --->
2536

2637
- `quit()` method has been removed from `Connection` and `ServerCommands` interface and implementations.

src/main/java/redis/clients/jedis/CommandObjects.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ public final CommandObject<Long> exists(byte[]... keys) {
9191
}
9292

9393
public final CommandObject<Long> persist(String key) {
94-
return new CommandObject<>(commandArguments(PERSIST).key(key), BuilderFactory.LONG);
94+
return new CommandObject<>(commandArguments(Command.PERSIST).key(key), BuilderFactory.LONG);
9595
}
9696

9797
public final CommandObject<Long> persist(byte[] key) {
98-
return new CommandObject<>(commandArguments(PERSIST).key(key), BuilderFactory.LONG);
98+
return new CommandObject<>(commandArguments(Command.PERSIST).key(key), BuilderFactory.LONG);
9999
}
100100

101101
public final CommandObject<String> type(String key) {

src/main/java/redis/clients/jedis/Jedis.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4172,7 +4172,7 @@ public String clientKill(final String ip, final int port) {
41724172
@Override
41734173
public long clientKill(ClientKillParams params) {
41744174
checkIsInMultiOrPipeline();
4175-
connection.sendCommand(CLIENT, joinParameters(KILL.getRaw(), params.getByteParams()));
4175+
connection.sendCommand(new CommandArguments(CLIENT).add(KILL).addParams(params));
41764176
return this.connection.getIntegerReply();
41774177
}
41784178

src/main/java/redis/clients/jedis/Protocol.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,15 +285,16 @@ public static enum Keyword implements Rawable {
285285

286286
AGGREGATE, ALPHA, BY, GET, LIMIT, NO, NOSORT, ONE, SET, STORE, WEIGHTS, WITHSCORE, WITHSCORES,
287287
RESETSTAT, REWRITE, RESET, FLUSH, EXISTS, LOAD, LEN, HELP, SCHEDULE, MATCH, COUNT, TYPE, KEYS,
288-
REFCOUNT, ENCODING, IDLETIME, FREQ, REPLACE, GETNAME, SETNAME, SETINFO, LIST, ID, KILL,
288+
REFCOUNT, ENCODING, IDLETIME, FREQ, REPLACE, GETNAME, SETNAME, SETINFO, LIST, ID, KILL, PERSIST,
289289
STREAMS, CREATE, MKSTREAM, SETID, DESTROY, DELCONSUMER, MAXLEN, GROUP, IDLE, TIME, BLOCK, NOACK,
290290
RETRYCOUNT, STREAM, GROUPS, CONSUMERS, JUSTID, WITHVALUES, NOMKSTREAM, MINID, CREATECONSUMER,
291291
SETUSER, GETUSER, DELUSER, WHOAMI, USERS, CAT, GENPASS, LOG, SAVE, DRYRUN, COPY, AUTH, AUTH2,
292-
NX, XX, EX, PX, EXAT, PXAT, CH, ABSTTL, KEEPTTL, INCR, INFO, NOW, PAUSE, UNPAUSE, UNBLOCK, REV,
293-
WITHCOORD, WITHDIST, WITHHASH, ANY, FROMMEMBER, FROMLONLAT, BYRADIUS, BYBOX, BYLEX, BYSCORE,
292+
NX, XX, EX, PX, EXAT, PXAT, ABSTTL, KEEPTTL, INCR, LT, GT, CH, INFO, PAUSE, UNPAUSE, UNBLOCK,
293+
REV, WITHCOORD, WITHDIST, WITHHASH, ANY, FROMMEMBER, FROMLONLAT, BYRADIUS, BYBOX, BYLEX, BYSCORE,
294294
STOREDIST, TO, FORCE, TIMEOUT, DB, UNLOAD, ABORT, IDX, MINMATCHLEN, WITHMATCHLEN, FULL,
295295
DELETE, LIBRARYNAME, WITHCODE, DESCRIPTION, GETKEYS, GETKEYSANDFLAGS, DOCS, FILTERBY, DUMP,
296-
MODULE, ACLCAT, PATTERN, DOCTOR, USAGE, SAMPLES, PURGE, STATS, LOADEX, CONFIG, ARGS,
296+
MODULE, ACLCAT, PATTERN, DOCTOR, USAGE, SAMPLES, PURGE, STATS, LOADEX, CONFIG, ARGS, RANK,
297+
NOW, VERSION, ADDR, SKIPME, USER, LADDR,
297298
CHANNELS, NUMPAT, NUMSUB, SHARDCHANNELS, SHARDNUMSUB;
298299

299300
private final byte[] raw;

src/main/java/redis/clients/jedis/args/RawableFactory.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package redis.clients.jedis.args;
22

33
import static redis.clients.jedis.Protocol.toByteArray;
4-
import static redis.clients.jedis.util.SafeEncoder.encode;
4+
5+
import java.util.Arrays;
6+
import redis.clients.jedis.util.SafeEncoder;
57

68
/**
79
* Factory class to get {@link Rawable} objects.
@@ -52,7 +54,7 @@ public static class Raw implements Rawable {
5254
private final byte[] raw;
5355

5456
public Raw(byte[] raw) {
55-
this.raw = raw;
57+
this.raw = Arrays.copyOf(raw, raw.length);
5658
}
5759

5860
@Override
@@ -64,10 +66,17 @@ public byte[] getRaw() {
6466
/**
6567
* A {@link Rawable} wrapping a {@link String}.
6668
*/
67-
public static class RawString extends Raw {
69+
public static class RawString implements Rawable {
70+
71+
private final byte[] raw;
6872

6973
public RawString(String str) {
70-
super(encode(str));
74+
this.raw = SafeEncoder.encode(str);
75+
}
76+
77+
@Override
78+
public byte[] getRaw() {
79+
return raw;
7180
}
7281
}
7382

src/main/java/redis/clients/jedis/params/BitPosParams.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,18 @@ public BitPosParams start(long start) {
3333
return this;
3434
}
3535

36+
/**
37+
* {@link BitPosParams#start(long) START} must be set for END option.
38+
*/
3639
public BitPosParams end(long end) {
3740
this.end = end;
3841
return this;
3942
}
4043

44+
/**
45+
* Both {@link BitPosParams#start(long) START} and {@link BitPosParams#end(long) END} both must be
46+
* set for MODIFIER option.
47+
*/
4148
public BitPosParams modifier(BitCountOption modifier) {
4249
this.modifier = modifier;
4350
return this;
Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,74 @@
11
package redis.clients.jedis.params;
22

3-
import redis.clients.jedis.args.ClientType;
3+
import java.util.ArrayList;
44

5-
public class ClientKillParams extends Params {
5+
import redis.clients.jedis.CommandArguments;
6+
import redis.clients.jedis.Protocol.Keyword;
7+
import redis.clients.jedis.args.ClientType;
8+
import redis.clients.jedis.util.KeyValue;
69

7-
private static final String ID = "ID";
8-
private static final String TYPE = "TYPE";
9-
private static final String ADDR = "ADDR";
10-
private static final String SKIPME = "SKIPME";
11-
private static final String USER = "USER";
12-
private static final String LADDR = "LADDR";
10+
public class ClientKillParams implements IParams {
1311

1412
public static enum SkipMe {
1513
YES, NO;
1614
}
1715

16+
private final ArrayList<KeyValue<Keyword, Object>> params = new ArrayList<>();
17+
1818
public ClientKillParams() {
1919
}
2020

2121
public static ClientKillParams clientKillParams() {
2222
return new ClientKillParams();
2323
}
2424

25-
public ClientKillParams id(String clientId) {
26-
addParam(ID, clientId);
25+
private ClientKillParams addParam(Keyword key, Object value) {
26+
params.add(KeyValue.of(key, value));
2727
return this;
2828
}
2929

30+
public ClientKillParams id(String clientId) {
31+
return addParam(Keyword.ID, clientId);
32+
}
33+
3034
public ClientKillParams id(byte[] clientId) {
31-
addParam(ID, clientId);
32-
return this;
35+
return addParam(Keyword.ID, clientId);
3336
}
3437

3538
public ClientKillParams type(ClientType type) {
36-
addParam(TYPE, type);
37-
return this;
39+
return addParam(Keyword.TYPE, type);
3840
}
3941

4042
public ClientKillParams addr(String ipPort) {
41-
addParam(ADDR, ipPort);
42-
return this;
43+
return addParam(Keyword.ADDR, ipPort);
4344
}
4445

4546
public ClientKillParams addr(byte[] ipPort) {
46-
addParam(ADDR, ipPort);
47-
return this;
47+
return addParam(Keyword.ADDR, ipPort);
4848
}
4949

5050
public ClientKillParams addr(String ip, int port) {
51-
addParam(ADDR, ip + ':' + port);
52-
return this;
51+
return addParam(Keyword.ADDR, ip + ':' + port);
5352
}
5453

5554
public ClientKillParams skipMe(SkipMe skipMe) {
56-
addParam(SKIPME, skipMe);
57-
return this;
55+
return addParam(Keyword.SKIPME, skipMe);
5856
}
5957

6058
public ClientKillParams user(String username) {
61-
addParam(USER, username);
62-
return this;
59+
return addParam(Keyword.USER, username);
6360
}
6461

6562
public ClientKillParams laddr(String ipPort) {
66-
addParam(LADDR, ipPort);
67-
return this;
63+
return addParam(Keyword.LADDR, ipPort);
6864
}
6965

7066
public ClientKillParams laddr(String ip, int port) {
71-
addParam(LADDR, ip + ':' + port);
72-
return this;
67+
return addParam(Keyword.LADDR, ip + ':' + port);
68+
}
69+
70+
@Override
71+
public void addParams(CommandArguments args) {
72+
params.forEach(kv -> args.add(kv.getKey()).add(kv.getValue()));
7373
}
7474
}

src/main/java/redis/clients/jedis/params/CommandListFilterByParams.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
package redis.clients.jedis.params;
22

33
import redis.clients.jedis.CommandArguments;
4-
import redis.clients.jedis.exceptions.JedisDataException;
5-
6-
import static redis.clients.jedis.Protocol.Keyword.FILTERBY;
7-
import static redis.clients.jedis.Protocol.Keyword.MODULE;
8-
import static redis.clients.jedis.Protocol.Keyword.ACLCAT;
9-
import static redis.clients.jedis.Protocol.Keyword.PATTERN;
4+
import redis.clients.jedis.Protocol.Keyword;
105

116
public class CommandListFilterByParams implements IParams {
7+
128
private String moduleName;
139
private String category;
1410
private String pattern;
@@ -34,19 +30,20 @@ public CommandListFilterByParams filterByPattern(String pattern) {
3430

3531
@Override
3632
public void addParams(CommandArguments args) {
37-
args.add(FILTERBY);
33+
args.add(Keyword.FILTERBY);
3834

3935
if (moduleName != null && category == null && pattern == null) {
40-
args.add(MODULE);
36+
args.add(Keyword.MODULE);
4137
args.add(moduleName);
4238
} else if (moduleName == null && category != null && pattern == null) {
43-
args.add(ACLCAT);
39+
args.add(Keyword.ACLCAT);
4440
args.add(category);
4541
} else if (moduleName == null && category == null && pattern != null) {
46-
args.add(PATTERN);
42+
args.add(Keyword.PATTERN);
4743
args.add(pattern);
4844
} else {
49-
throw new JedisDataException("Must choose exactly one filter");
45+
throw new IllegalArgumentException("Must choose exactly one filter in "
46+
+ getClass().getSimpleName());
5047
}
5148
}
5249
}

src/main/java/redis/clients/jedis/params/FailoverParams.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
package redis.clients.jedis.params;
22

3-
import static redis.clients.jedis.Protocol.Keyword.FORCE;
4-
import static redis.clients.jedis.Protocol.Keyword.TIMEOUT;
5-
import static redis.clients.jedis.Protocol.Keyword.TO;
6-
import static redis.clients.jedis.Protocol.toByteArray;
7-
83
import redis.clients.jedis.CommandArguments;
94
import redis.clients.jedis.HostAndPort;
5+
import redis.clients.jedis.Protocol.Keyword;
106

117
public class FailoverParams implements IParams {
128

@@ -30,7 +26,9 @@ public FailoverParams to(HostAndPort to) {
3026
}
3127

3228
/**
33-
* WARNING: FORCE option can be used only if both TO and TIMEOUT options are specified.
29+
* Both TO ({@link FailoverParams#to(redis.clients.jedis.HostAndPort)} or
30+
* {@link FailoverParams#to(java.lang.String, int)}) and
31+
* {@link FailoverParams#timeout(long) TIMEOUT} must be set in order for FORCE option.
3432
*/
3533
public FailoverParams force() {
3634
this.force = true;
@@ -46,19 +44,18 @@ public FailoverParams timeout(long timeout) {
4644
public void addParams(CommandArguments args) {
4745

4846
if (to != null) {
49-
args.add(TO);
50-
args.add(to.getHost()).add(toByteArray(to.getPort()));
47+
args.add(Keyword.TO).add(to.getHost()).add(to.getPort());
5148
}
5249

5350
if (force) {
5451
if (to == null || timeout == null) {
55-
throw new IllegalStateException("ERR FAILOVER with force option requires both a timeout and target HOST and IP.");
52+
throw new IllegalArgumentException("FAILOVER with force option requires both a timeout and target HOST and IP.");
5653
}
57-
args.add(FORCE);
54+
args.add(Keyword.FORCE);
5855
}
5956

6057
if (timeout != null) {
61-
args.add(TIMEOUT).add(toByteArray(timeout));
58+
args.add(Keyword.TIMEOUT).add(timeout);
6259
}
6360

6461
}

src/main/java/redis/clients/jedis/params/GeoAddParams.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package redis.clients.jedis.params;
22

3-
import static redis.clients.jedis.Protocol.Keyword.CH;
4-
import static redis.clients.jedis.Protocol.Keyword.NX;
5-
import static redis.clients.jedis.Protocol.Keyword.XX;
6-
73
import redis.clients.jedis.CommandArguments;
4+
import redis.clients.jedis.Protocol.Keyword;
85

96
public class GeoAddParams implements IParams {
107

@@ -50,13 +47,13 @@ public GeoAddParams ch() {
5047
@Override
5148
public void addParams(CommandArguments args) {
5249
if (nx) {
53-
args.add(NX);
50+
args.add(Keyword.NX);
5451
} else if (xx) {
55-
args.add(XX);
52+
args.add(Keyword.XX);
5653
}
5754

5855
if (ch) {
59-
args.add(CH);
56+
args.add(Keyword.CH);
6057
}
6158
}
6259

0 commit comments

Comments
 (0)