|
1 | 1 | package redis.clients.jedis; |
2 | 2 |
|
| 3 | +import java.nio.ByteBuffer; |
3 | 4 | import static redis.clients.jedis.Protocol.Keyword.COUNT; |
4 | 5 | import static redis.clients.jedis.Protocol.Keyword.MATCH; |
| 6 | +import redis.clients.jedis.Protocol.Keyword; |
5 | 7 |
|
6 | 8 | import java.util.ArrayList; |
7 | 9 | import java.util.Collection; |
8 | 10 | import java.util.Collections; |
| 11 | +import java.util.EnumMap; |
9 | 12 | import java.util.List; |
| 13 | +import java.util.Map; |
10 | 14 |
|
11 | 15 | import redis.clients.util.SafeEncoder; |
12 | 16 |
|
13 | 17 | public class ScanParams { |
14 | | - private List<byte[]> params = new ArrayList<byte[]>(); |
| 18 | + |
| 19 | + private final Map<Keyword, ByteBuffer> params = new EnumMap<Keyword, ByteBuffer>(Keyword.class); |
| 20 | + |
15 | 21 | public final static String SCAN_POINTER_START = String.valueOf(0); |
16 | 22 | public final static byte[] SCAN_POINTER_START_BINARY = SafeEncoder.encode(SCAN_POINTER_START); |
17 | 23 |
|
18 | 24 | public ScanParams match(final byte[] pattern) { |
19 | | - params.add(MATCH.raw); |
20 | | - params.add(pattern); |
| 25 | + params.put(MATCH, ByteBuffer.wrap(pattern)); |
21 | 26 | return this; |
22 | 27 | } |
23 | 28 |
|
24 | 29 | public ScanParams match(final String pattern) { |
25 | | - params.add(MATCH.raw); |
26 | | - params.add(SafeEncoder.encode(pattern)); |
| 30 | + params.put(MATCH, ByteBuffer.wrap(SafeEncoder.encode(pattern))); |
27 | 31 | return this; |
28 | 32 | } |
29 | 33 |
|
30 | | - public ScanParams count(final int count) { |
31 | | - params.add(COUNT.raw); |
32 | | - params.add(Protocol.toByteArray(count)); |
| 34 | + public ScanParams count(final Integer count) { |
| 35 | + params.put(COUNT, ByteBuffer.wrap(Protocol.toByteArray(count))); |
33 | 36 | return this; |
34 | 37 | } |
35 | 38 |
|
36 | 39 | public Collection<byte[]> getParams() { |
37 | | - return Collections.unmodifiableCollection(params); |
| 40 | + List<byte[]> paramsList = new ArrayList<byte[]>(params.size()); |
| 41 | + for (Map.Entry<Keyword, ByteBuffer> param : params.entrySet()) { |
| 42 | + paramsList.add(param.getKey().raw); |
| 43 | + paramsList.add(param.getValue().array()); |
| 44 | + } |
| 45 | + return Collections.unmodifiableCollection(paramsList); |
| 46 | + } |
| 47 | + |
| 48 | + String match() { |
| 49 | + if (params.containsKey(MATCH)) { |
| 50 | + return new String(params.get(MATCH).array()); |
| 51 | + } else { |
| 52 | + return null; |
| 53 | + } |
| 54 | + } |
| 55 | + |
| 56 | + Integer count() { |
| 57 | + if (params.containsKey(COUNT)) { |
| 58 | + return params.get(COUNT).getInt(); |
| 59 | + } else { |
| 60 | + return null; |
| 61 | + } |
38 | 62 | } |
39 | 63 | } |
0 commit comments