From 9679c6d97b6823ac9caa4ba11914a430e4b71c7b Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Tue, 21 Apr 2020 11:16:39 +0800 Subject: [PATCH 01/14] =?UTF-8?q?REPORT-27284=20=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E5=AF=BC=E5=87=BApdf,=E5=90=AB=E5=8A=A0=E7=B2=97=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E6=97=B6=EF=BC=8C=E8=BE=B9=E6=A1=86=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/third/com/lowagie/text/pdf/PdfGraphics2D.java | 1 + 1 file changed, 1 insertion(+) diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfGraphics2D.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfGraphics2D.java index f184556e6..9b13abc9a 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfGraphics2D.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfGraphics2D.java @@ -446,6 +446,7 @@ public class PdfGraphics2D extends Graphics2D { } cb.setGState(gs); } + paintStroke = color; cb.setColorStroke(color); } } From 4548a81355739c822a098a48e2ba2de2c64f8264 Mon Sep 17 00:00:00 2001 From: Feng Date: Tue, 21 Apr 2020 16:18:46 +0800 Subject: [PATCH 02/14] =?UTF-8?q?KERNEL-3881=20=E7=8A=B6=E6=80=81=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=99=A8+=E9=9B=86=E7=BE=A4=E9=94=81=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E4=BB=A3=E7=A0=81=E8=A7=A3=E8=80=A6=EF=BC=8C=E8=84=B1?= =?UTF-8?q?=E7=A6=BB=E4=BE=9D=E8=B5=96redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/clients/jedis/JedisCluster.java | 3924 +++++++++-------- .../redis/clients/jedis/JedisPubSub.java | 322 +- 2 files changed, 2132 insertions(+), 2114 deletions(-) diff --git a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java index 500f96acc..e66185a2c 100755 --- a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java +++ b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java @@ -20,1960 +20,1970 @@ import com.fr.third.redis.clients.jedis.params.SetParams; import com.fr.third.redis.clients.jedis.util.JedisClusterHashTagUtil; public class JedisCluster extends BinaryJedisCluster implements JedisClusterCommands, - MultiKeyJedisClusterCommands, JedisClusterScriptingCommands { - - public JedisCluster(HostAndPort node) { - this(Collections.singleton(node)); - } - - public JedisCluster(HostAndPort node, int timeout) { - this(Collections.singleton(node), timeout); - } - - public JedisCluster(HostAndPort node, int timeout, int maxAttempts) { - this(Collections.singleton(node), timeout, maxAttempts); - } - - public JedisCluster(HostAndPort node, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), poolConfig); - } - - public JedisCluster(HostAndPort node, int timeout, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), timeout, poolConfig); - } - - public JedisCluster(HostAndPort node, int timeout, int maxAttempts, - final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), timeout, maxAttempts, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); - } - - public JedisCluster(Set nodes) { - this(nodes, DEFAULT_TIMEOUT); - } - - public JedisCluster(Set nodes, int timeout) { - this(nodes, timeout, DEFAULT_MAX_ATTEMPTS); - } - - public JedisCluster(Set nodes, int timeout, int maxAttempts) { - this(nodes, timeout, maxAttempts, new GenericObjectPoolConfig()); - } - - public JedisCluster(Set nodes, final GenericObjectPoolConfig poolConfig) { - this(nodes, DEFAULT_TIMEOUT, DEFAULT_MAX_ATTEMPTS, poolConfig); - } - - public JedisCluster(Set nodes, int timeout, final GenericObjectPoolConfig poolConfig) { - this(nodes, timeout, DEFAULT_MAX_ATTEMPTS, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int timeout, int maxAttempts, - final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, timeout, maxAttempts, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); -} - - @Override - public String set(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.set(key, value); - } - }.run(key); - } - - @Override - public String set(final String key, final String value, final SetParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.set(key, value, params); - } - }.run(key); - } - - @Override - public String get(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.get(key); - } - }.run(key); - } - - @Override - public Boolean exists(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.exists(key); - } - }.run(key); - } - - @Override - public Long exists(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.exists(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long persist(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.persist(key); - } - }.run(key); - } - - @Override - public String type(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.type(key); - } - }.run(key); - } - - @Override - public byte[] dump(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public byte[] execute(Jedis connection) { - return connection.dump(key); - } - }.run(key); - } - - @Override - public String restore(final String key, final int ttl, final byte[] serializedValue) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.restore(key, ttl, serializedValue); - } - }.run(key); - } - - @Override - public Long expire(final String key, final int seconds) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.expire(key, seconds); - } - }.run(key); - } - - @Override - public Long pexpire(final String key, final long milliseconds) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pexpire(key, milliseconds); - } - }.run(key); - } - - @Override - public Long expireAt(final String key, final long unixTime) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.expireAt(key, unixTime); - } - }.run(key); - } - - @Override - public Long pexpireAt(final String key, final long millisecondsTimestamp) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pexpireAt(key, millisecondsTimestamp); - } - }.run(key); - } - - @Override - public Long ttl(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.ttl(key); - } - }.run(key); - } - - @Override - public Long pttl(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pttl(key); - } - }.run(key); - } - - @Override - public Long touch(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.touch(key); - } - }.run(key); - } - - @Override - public Long touch(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.touch(keys); - } - }.run(keys.length, keys); - } - - @Override - public Boolean setbit(final String key, final long offset, final boolean value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.setbit(key, offset, value); - } - }.run(key); - } - - @Override - public Boolean setbit(final String key, final long offset, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.setbit(key, offset, value); - } - }.run(key); - } - - @Override - public Boolean getbit(final String key, final long offset) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.getbit(key, offset); - } - }.run(key); - } - - @Override - public Long setrange(final String key, final long offset, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.setrange(key, offset, value); - } - }.run(key); - } - - @Override - public String getrange(final String key, final long startOffset, final long endOffset) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.getrange(key, startOffset, endOffset); - } - }.run(key); - } - - @Override - public String getSet(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.getSet(key, value); - } - }.run(key); - } - - @Override - public Long setnx(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.setnx(key, value); - } - }.run(key); - } - - @Override - public String setex(final String key, final int seconds, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.setex(key, seconds, value); - } - }.run(key); - } - - @Override - public String psetex(final String key, final long milliseconds, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.psetex(key, milliseconds, value); - } - }.run(key); - } - - @Override - public Long decrBy(final String key, final long decrement) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.decrBy(key, decrement); - } - }.run(key); - } - - @Override - public Long decr(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.decr(key); - } - }.run(key); - } - - @Override - public Long incrBy(final String key, final long increment) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.incrBy(key, increment); - } - }.run(key); - } - - @Override - public Double incrByFloat(final String key, final double increment) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.incrByFloat(key, increment); - } - }.run(key); - } - - @Override - public Long incr(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.incr(key); - } - }.run(key); - } - - @Override - public Long append(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.append(key, value); - } - }.run(key); - } - - @Override - public String substr(final String key, final int start, final int end) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.substr(key, start, end); - } - }.run(key); - } - - @Override - public Long hset(final String key, final String field, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hset(key, field, value); - } - }.run(key); - } - - @Override - public Long hset(final String key, final Map hash) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hset(key, hash); - } - }.run(key); - } - - @Override - public String hget(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.hget(key, field); - } - }.run(key); - } - - @Override - public Long hsetnx(final String key, final String field, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hsetnx(key, field, value); - } - }.run(key); - } - - @Override - public String hmset(final String key, final Map hash) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.hmset(key, hash); - } - }.run(key); - } - - @Override - public List hmget(final String key, final String... fields) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.hmget(key, fields); - } - }.run(key); - } - - @Override - public Long hincrBy(final String key, final String field, final long value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hincrBy(key, field, value); - } - }.run(key); - } - - @Override - public Boolean hexists(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.hexists(key, field); - } - }.run(key); - } - - @Override - public Long hdel(final String key, final String... field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hdel(key, field); - } - }.run(key); - } - - @Override - public Long hlen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hlen(key); - } - }.run(key); - } - - @Override - public Set hkeys(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.hkeys(key); - } - }.run(key); - } - - @Override - public List hvals(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.hvals(key); - } - }.run(key); - } - - @Override - public Map hgetAll(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Map execute(Jedis connection) { - return connection.hgetAll(key); - } - }.run(key); - } - - @Override - public Long rpush(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.rpush(key, string); - } - }.run(key); - } - - @Override - public Long lpush(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lpush(key, string); - } - }.run(key); - } - - @Override - public Long llen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.llen(key); - } - }.run(key); - } - - @Override - public List lrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.lrange(key, start, stop); - } - }.run(key); - } - - @Override - public String ltrim(final String key, final long start, final long stop) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.ltrim(key, start, stop); - } - }.run(key); - } - - @Override - public String lindex(final String key, final long index) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lindex(key, index); - } - }.run(key); - } - - @Override - public String lset(final String key, final long index, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lset(key, index, value); - } - }.run(key); - } - - @Override - public Long lrem(final String key, final long count, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lrem(key, count, value); - } - }.run(key); - } - - @Override - public String lpop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lpop(key); - } - }.run(key); - } - - @Override - public String rpop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rpop(key); - } - }.run(key); - } - - @Override - public Long sadd(final String key, final String... member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sadd(key, member); - } - }.run(key); - } - - @Override - public Set smembers(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.smembers(key); - } - }.run(key); - } - - @Override - public Long srem(final String key, final String... member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.srem(key, member); - } - }.run(key); - } - - @Override - public String spop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.spop(key); - } - }.run(key); - } - - @Override - public Set spop(final String key, final long count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.spop(key, count); - } - }.run(key); - } - - @Override - public Long scard(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.scard(key); - } - }.run(key); - } - - @Override - public Boolean sismember(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.sismember(key, member); - } - }.run(key); - } - - @Override - public String srandmember(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.srandmember(key); - } - }.run(key); - } - - @Override - public List srandmember(final String key, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.srandmember(key, count); - } - }.run(key); - } - - @Override - public Long strlen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.strlen(key); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final double score, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, score, member); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final double score, final String member, - final ZAddParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, score, member, params); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final Map scoreMembers) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, scoreMembers); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final Map scoreMembers, final ZAddParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, scoreMembers, params); - } - }.run(key); - } - - @Override - public Set zrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrange(key, start, stop); - } - }.run(key); - } - - @Override - public Long zrem(final String key, final String... members) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrem(key, members); - } - }.run(key); - } - - @Override - public Double zincrby(final String key, final double increment, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zincrby(key, increment, member); - } - }.run(key); - } - - @Override - public Double zincrby(final String key, final double increment, final String member, - final ZIncrByParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zincrby(key, increment, member, params); - } - }.run(key); - } - - @Override - public Long zrank(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrank(key, member); - } - }.run(key); - } - - @Override - public Long zrevrank(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrevrank(key, member); - } - }.run(key); - } - - @Override - public Set zrevrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrange(key, start, stop); - } - }.run(key); - } - - @Override - public Set zrangeWithScores(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeWithScores(key, start, stop); - } - }.run(key); - } - - @Override - public Set zrevrangeWithScores(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeWithScores(key, start, stop); - } - }.run(key); - } - - @Override - public Long zcard(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcard(key); - } - }.run(key); - } - - @Override - public Double zscore(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zscore(key, member); - } - }.run(key); - } - - @Override - public List sort(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.sort(key); - } - }.run(key); - } - - @Override - public List sort(final String key, final SortingParams sortingParameters) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.sort(key, sortingParameters); - } - }.run(key); - } - - @Override - public Long zcount(final String key, final double min, final double max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcount(key, min, max); - } - }.run(key); - } - - @Override - public Long zcount(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcount(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final double min, final double max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final double max, final double min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final double min, final double max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final double max, final double min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final double min, final double max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final double max, final double min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final double min, final double max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final String max, final String min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final double max, - final double min, final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final String max, - final String min, final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Long zremrangeByRank(final String key, final long start, final long stop) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByRank(key, start, stop); - } - }.run(key); - } - - @Override - public Long zremrangeByScore(final String key, final double min, final double max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Long zremrangeByScore(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Long zlexcount(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zlexcount(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByLex(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByLex(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByLex(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByLex(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByLex(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByLex(key, max, min); - } - }.run(key); - } - - @Override - public Set zrevrangeByLex(final String key, final String max, final String min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByLex(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Long zremrangeByLex(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByLex(key, min, max); - } - }.run(key); - } - - @Override - public Long linsert(final String key, final ListPosition where, final String pivot, - final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.linsert(key, where, pivot, value); - } - }.run(key); - } - - @Override - public Long lpushx(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lpushx(key, string); - } - }.run(key); - } - - @Override - public Long rpushx(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.rpushx(key, string); - } - }.run(key); - } - - @Override - public Long del(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.del(key); - } - }.run(key); - } - - @Override - public Long unlink(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.unlink(key); - } - }.run(key); - } - - @Override - public Long unlink(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.unlink(keys); - } - }.run(keys.length, keys); - } - - @Override - public String echo(final String string) { - // note that it'll be run from arbitary node - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.echo(string); - } - }.run(string); - } - - @Override - public Long bitcount(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitcount(key); - } - }.run(key); - } - - @Override - public Long bitcount(final String key, final long start, final long end) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitcount(key, start, end); - } - }.run(key); - } - - @Override - public Set keys(final String pattern) { - if (pattern == null || pattern.isEmpty()) { - throw new IllegalArgumentException(this.getClass().getSimpleName() - + " only supports KEYS commands with non-empty patterns"); - } - if (!JedisClusterHashTagUtil.isClusterCompliantMatchPattern(pattern)) { - throw new IllegalArgumentException(this.getClass().getSimpleName() - + " only supports KEYS commands with patterns containing hash-tags ( curly-brackets enclosed strings )"); - } - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.keys(pattern); - } - }.run(pattern); - } - - @Override - public ScanResult scan(final String cursor, final ScanParams params) { - - String matchPattern = null; - - if (params == null || (matchPattern = params.match()) == null || matchPattern.isEmpty()) { - throw new IllegalArgumentException(JedisCluster.class.getSimpleName() - + " only supports SCAN commands with non-empty MATCH patterns"); - } - - if (JedisClusterHashTagUtil.isClusterCompliantMatchPattern(matchPattern)) { - throw new IllegalArgumentException(JedisCluster.class.getSimpleName() - + " only supports SCAN commands with MATCH patterns containing hash-tags ( curly-brackets enclosed strings )"); - } - - return new JedisClusterCommand< ScanResult>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.scan(cursor, params); - } - }.run(matchPattern); - } - - @Override - public ScanResult> hscan(final String key, final String cursor) { - return new JedisClusterCommand>>(connectionHandler, - maxAttempts) { - @Override - public ScanResult> execute(Jedis connection) { - return connection.hscan(key, cursor); - } - }.run(key); - } - - @Override - public ScanResult sscan(final String key, final String cursor) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.sscan(key, cursor); - } - }.run(key); - } - - @Override - public ScanResult zscan(final String key, final String cursor) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.zscan(key, cursor); - } - }.run(key); - } - - @Override - public Long pfadd(final String key, final String... elements) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfadd(key, elements); - } - }.run(key); - } - - @Override - public long pfcount(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfcount(key); - } - }.run(key); - } - - @Override - public List blpop(final int timeout, final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.blpop(timeout, key); - } - }.run(key); - } - - @Override - public List brpop(final int timeout, final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.brpop(timeout, key); - } - }.run(key); - } - - @Override - public Long del(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.del(keys); - } - }.run(keys.length, keys); - } - - @Override - public List blpop(final int timeout, final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.blpop(timeout, keys); - } - }.run(keys.length, keys); - - } - - @Override - public List brpop(final int timeout, final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.brpop(timeout, keys); - } - }.run(keys.length, keys); - } - - @Override - public List mget(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.mget(keys); - } - }.run(keys.length, keys); - } - - @Override - public String mset(final String... keysvalues) { - String[] keys = new String[keysvalues.length / 2]; - - for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { - keys[keyIdx] = keysvalues[keyIdx * 2]; - } - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.mset(keysvalues); - } - }.run(keys.length, keys); - } - - @Override - public Long msetnx(final String... keysvalues) { - String[] keys = new String[keysvalues.length / 2]; - - for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { - keys[keyIdx] = keysvalues[keyIdx * 2]; - } - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.msetnx(keysvalues); - } - }.run(keys.length, keys); - } - - @Override - public String rename(final String oldkey, final String newkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rename(oldkey, newkey); - } - }.run(2, oldkey, newkey); - } - - @Override - public Long renamenx(final String oldkey, final String newkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.renamenx(oldkey, newkey); - } - }.run(2, oldkey, newkey); - } - - @Override - public String rpoplpush(final String srckey, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rpoplpush(srckey, dstkey); - } - }.run(2, srckey, dstkey); - } - - @Override - public Set sdiff(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sdiff(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sdiffstore(final String dstkey, final String... keys) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sdiffstore(dstkey, keys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Set sinter(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sinter(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sinterstore(final String dstkey, final String... keys) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sinterstore(dstkey, keys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long smove(final String srckey, final String dstkey, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.smove(srckey, dstkey, member); - } - }.run(2, srckey, dstkey); - } - - @Override - public Long sort(final String key, final SortingParams sortingParameters, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sort(key, sortingParameters, dstkey); - } - }.run(2, key, dstkey); - } - - @Override - public Long sort(final String key, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sort(key, dstkey); - } - }.run(2, key, dstkey); - } - - @Override - public Set sunion(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sunion(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sunionstore(final String dstkey, final String... keys) { - String[] wholeKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sunionstore(dstkey, keys); - } - }.run(wholeKeys.length, wholeKeys); - } - - @Override - public Long zinterstore(final String dstkey, final String... sets) { - String[] wholeKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zinterstore(dstkey, sets); - } - }.run(wholeKeys.length, wholeKeys); - } - - @Override - public Long zinterstore(final String dstkey, final ZParams params, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zinterstore(dstkey, params, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long zunionstore(final String dstkey, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zunionstore(dstkey, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long zunionstore(final String dstkey, final ZParams params, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zunionstore(dstkey, params, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public String brpoplpush(final String source, final String destination, final int timeout) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.brpoplpush(source, destination, timeout); - } - }.run(2, source, destination); - } - - @Override - public Long publish(final String channel, final String message) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.publish(channel, message); - } - }.runWithAnyNode(); - } - - @Override - public void subscribe(final JedisPubSub jedisPubSub, final String... channels) { - new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Integer execute(Jedis connection) { - connection.subscribe(jedisPubSub, channels); - return 0; - } - }.runWithAnyNode(); - } - - @Override - public void psubscribe(final JedisPubSub jedisPubSub, final String... patterns) { - new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Integer execute(Jedis connection) { - connection.psubscribe(jedisPubSub, patterns); - return 0; - } - }.runWithAnyNode(); - } - - @Override - public Long bitop(final BitOP op, final String destKey, final String... srcKeys) { - String[] mergedKeys = KeyMergeUtil.merge(destKey, srcKeys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitop(op, destKey, srcKeys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public String pfmerge(final String destkey, final String... sourcekeys) { - String[] mergedKeys = KeyMergeUtil.merge(destkey, sourcekeys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.pfmerge(destkey, sourcekeys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public long pfcount(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfcount(keys); - } - }.run(keys.length, keys); - } - - @Override - public Object eval(final String script, final int keyCount, final String... params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script, keyCount, params); - } - }.run(keyCount, params); - } - - @Override - public Object eval(final String script, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script); - } - }.run(sampleKey); - } - - @Override - public Object eval(final String script, final List keys, final List args) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script, keys, args); - } - }.run(keys.size(), keys.toArray(new String[keys.size()])); - } - - @Override - public Object evalsha(final String sha1, final int keyCount, final String... params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1, keyCount, params); - } - }.run(keyCount, params); - } - - @Override - public Object evalsha(final String sha1, final List keys, final List args) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1, keys, args); - } - }.run(keys.size(), keys.toArray(new String[keys.size()])); - } - - @Override - public Object evalsha(final String sha1, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1); - } - }.run(sampleKey); - } - - @Override - public Boolean scriptExists(final String sha1, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.scriptExists(sha1); - } - }.run(sampleKey); - } - - @Override - public List scriptExists(final String sampleKey, final String... sha1) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.scriptExists(sha1); - } - }.run(sampleKey); - } - - @Override - public String scriptLoad(final String script, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptLoad(script); - } - }.run(sampleKey); - } - - @Override - public String scriptFlush(final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptFlush(); - } - }.run(sampleKey); - } - - @Override - public String scriptKill(final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptKill(); - } - }.run(sampleKey); - } - - @Override - public Long geoadd(final String key, final double longitude, final double latitude, - final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.geoadd(key, longitude, latitude, member); - } - }.run(key); - } - - @Override - public Long geoadd(final String key, final Map memberCoordinateMap) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.geoadd(key, memberCoordinateMap); - } - }.run(key); - } - - @Override - public Double geodist(final String key, final String member1, final String member2) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.geodist(key, member1, member2); - } - }.run(key); - } - - @Override - public Double geodist(final String key, final String member1, final String member2, - final GeoUnit unit) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.geodist(key, member1, member2, unit); - } - }.run(key); - } - - @Override - public List geohash(final String key, final String... members) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.geohash(key, members); - } - }.run(key); - } - - @Override - public List geopos(final String key, final String... members) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.geopos(key, members); - } - }.run(key); - } - - @Override - public List georadius(final String key, final double longitude, - final double latitude, final double radius, final GeoUnit unit) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadius(key, longitude, latitude, radius, unit); - } - }.run(key); - } - - @Override - public List georadius(final String key, final double longitude, - final double latitude, final double radius, final GeoUnit unit, final GeoRadiusParam param) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadius(key, longitude, latitude, radius, unit, param); - } - }.run(key); - } - - @Override - public List georadiusByMember(final String key, final String member, - final double radius, final GeoUnit unit) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadiusByMember(key, member, radius, unit); - } - }.run(key); - } - - @Override - public List georadiusByMember(final String key, final String member, - final double radius, final GeoUnit unit, final GeoRadiusParam param) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadiusByMember(key, member, radius, unit, param); - } - }.run(key); - } - - @Override - public List bitfield(final String key, final String... arguments) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.bitfield(key, arguments); - } - }.run(key); - } - - @Override - public Long hstrlen(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hstrlen(key, field); - } - }.run(key); - } -} + MultiKeyJedisClusterCommands, JedisClusterScriptingCommands { + + public JedisCluster(HostAndPort node) { + this(Collections.singleton(node)); + } + + public JedisCluster(HostAndPort node, int timeout) { + this(Collections.singleton(node), timeout); + } + + public JedisCluster(HostAndPort node, int timeout, int maxAttempts) { + this(Collections.singleton(node), timeout, maxAttempts); + } + + public JedisCluster(HostAndPort node, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), poolConfig); + } + + public JedisCluster(HostAndPort node, int timeout, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), timeout, poolConfig); + } + + public JedisCluster(HostAndPort node, int timeout, int maxAttempts, + final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), timeout, maxAttempts, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); + } + + public JedisCluster(Set nodes) { + this(nodes, DEFAULT_TIMEOUT); + } + + public JedisCluster(Set nodes, int timeout) { + this(nodes, timeout, DEFAULT_MAX_ATTEMPTS); + } + + public JedisCluster(Set nodes, int timeout, int maxAttempts) { + this(nodes, timeout, maxAttempts, new GenericObjectPoolConfig()); + } + + public JedisCluster(Set nodes, final GenericObjectPoolConfig poolConfig) { + this(nodes, DEFAULT_TIMEOUT, DEFAULT_MAX_ATTEMPTS, poolConfig); + } + + public JedisCluster(Set nodes, int timeout, final GenericObjectPoolConfig poolConfig) { + this(nodes, timeout, DEFAULT_MAX_ATTEMPTS, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int timeout, int maxAttempts, + final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, timeout, maxAttempts, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); + } + + @Override + public String set(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.set(key, value); + } + }.run(key); + } + + @Override + public String set(final String key, final String value, final SetParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.set(key, value, params); + } + }.run(key); + } + + @Override + public String get(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.get(key); + } + }.run(key); + } + + @Override + public Boolean exists(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.exists(key); + } + }.run(key); + } + + @Override + public Long exists(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.exists(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long persist(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.persist(key); + } + }.run(key); + } + + @Override + public String type(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.type(key); + } + }.run(key); + } + + @Override + public byte[] dump(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public byte[] execute(Jedis connection) { + return connection.dump(key); + } + }.run(key); + } + + @Override + public String restore(final String key, final int ttl, final byte[] serializedValue) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.restore(key, ttl, serializedValue); + } + }.run(key); + } + + @Override + public Long expire(final String key, final int seconds) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.expire(key, seconds); + } + }.run(key); + } + + @Override + public Long pexpire(final String key, final long milliseconds) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pexpire(key, milliseconds); + } + }.run(key); + } + + @Override + public Long expireAt(final String key, final long unixTime) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.expireAt(key, unixTime); + } + }.run(key); + } + + @Override + public Long pexpireAt(final String key, final long millisecondsTimestamp) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pexpireAt(key, millisecondsTimestamp); + } + }.run(key); + } + + @Override + public Long ttl(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.ttl(key); + } + }.run(key); + } + + @Override + public Long pttl(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pttl(key); + } + }.run(key); + } + + @Override + public Long touch(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.touch(key); + } + }.run(key); + } + + @Override + public Long touch(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.touch(keys); + } + }.run(keys.length, keys); + } + + @Override + public Boolean setbit(final String key, final long offset, final boolean value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.setbit(key, offset, value); + } + }.run(key); + } + + @Override + public Boolean setbit(final String key, final long offset, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.setbit(key, offset, value); + } + }.run(key); + } + + @Override + public Boolean getbit(final String key, final long offset) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.getbit(key, offset); + } + }.run(key); + } + + @Override + public Long setrange(final String key, final long offset, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.setrange(key, offset, value); + } + }.run(key); + } + + @Override + public String getrange(final String key, final long startOffset, final long endOffset) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.getrange(key, startOffset, endOffset); + } + }.run(key); + } + + @Override + public String getSet(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.getSet(key, value); + } + }.run(key); + } + + @Override + public Long setnx(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.setnx(key, value); + } + }.run(key); + } + + @Override + public String setex(final String key, final int seconds, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.setex(key, seconds, value); + } + }.run(key); + } + + @Override + public String psetex(final String key, final long milliseconds, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.psetex(key, milliseconds, value); + } + }.run(key); + } + + @Override + public Long decrBy(final String key, final long decrement) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.decrBy(key, decrement); + } + }.run(key); + } + + @Override + public Long decr(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.decr(key); + } + }.run(key); + } + + @Override + public Long incrBy(final String key, final long increment) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.incrBy(key, increment); + } + }.run(key); + } + + @Override + public Double incrByFloat(final String key, final double increment) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.incrByFloat(key, increment); + } + }.run(key); + } + + @Override + public Long incr(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.incr(key); + } + }.run(key); + } + + @Override + public Long append(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.append(key, value); + } + }.run(key); + } + + @Override + public String substr(final String key, final int start, final int end) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.substr(key, start, end); + } + }.run(key); + } + + @Override + public Long hset(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hset(key, field, value); + } + }.run(key); + } + + @Override + public Long hset(final String key, final Map hash) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hset(key, hash); + } + }.run(key); + } + + @Override + public String hget(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.hget(key, field); + } + }.run(key); + } + + @Override + public Long hsetnx(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hsetnx(key, field, value); + } + }.run(key); + } + + @Override + public String hmset(final String key, final Map hash) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.hmset(key, hash); + } + }.run(key); + } + + @Override + public List hmget(final String key, final String... fields) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.hmget(key, fields); + } + }.run(key); + } + + @Override + public Long hincrBy(final String key, final String field, final long value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hincrBy(key, field, value); + } + }.run(key); + } + + @Override + public Boolean hexists(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.hexists(key, field); + } + }.run(key); + } + + @Override + public Long hdel(final String key, final String... field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hdel(key, field); + } + }.run(key); + } + + @Override + public Long hlen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hlen(key); + } + }.run(key); + } + + @Override + public Set hkeys(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.hkeys(key); + } + }.run(key); + } + + @Override + public List hvals(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.hvals(key); + } + }.run(key); + } + + @Override + public Map hgetAll(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Map execute(Jedis connection) { + return connection.hgetAll(key); + } + }.run(key); + } + + @Override + public Long rpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.rpush(key, string); + } + }.run(key); + } + + @Override + public Long lpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lpush(key, string); + } + }.run(key); + } + + @Override + public Long llen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.llen(key); + } + }.run(key); + } + + @Override + public List lrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.lrange(key, start, stop); + } + }.run(key); + } + + @Override + public String ltrim(final String key, final long start, final long stop) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.ltrim(key, start, stop); + } + }.run(key); + } + + @Override + public String lindex(final String key, final long index) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lindex(key, index); + } + }.run(key); + } + + @Override + public String lset(final String key, final long index, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lset(key, index, value); + } + }.run(key); + } + + @Override + public Long lrem(final String key, final long count, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lrem(key, count, value); + } + }.run(key); + } + + @Override + public String lpop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lpop(key); + } + }.run(key); + } + + @Override + public String rpop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rpop(key); + } + }.run(key); + } + + @Override + public Long sadd(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sadd(key, member); + } + }.run(key); + } + + @Override + public Set smembers(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.smembers(key); + } + }.run(key); + } + + @Override + public Long srem(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.srem(key, member); + } + }.run(key); + } + + @Override + public String spop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.spop(key); + } + }.run(key); + } + + @Override + public Set spop(final String key, final long count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.spop(key, count); + } + }.run(key); + } + + @Override + public Long scard(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.scard(key); + } + }.run(key); + } + + @Override + public Boolean sismember(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.sismember(key, member); + } + }.run(key); + } + + @Override + public String srandmember(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.srandmember(key); + } + }.run(key); + } + + @Override + public List srandmember(final String key, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.srandmember(key, count); + } + }.run(key); + } + + @Override + public Long strlen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.strlen(key); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final double score, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, score, member); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final double score, final String member, + final ZAddParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, score, member, params); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final Map scoreMembers) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, scoreMembers); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final Map scoreMembers, final ZAddParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, scoreMembers, params); + } + }.run(key); + } + + @Override + public Set zrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrange(key, start, stop); + } + }.run(key); + } + + @Override + public Long zrem(final String key, final String... members) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrem(key, members); + } + }.run(key); + } + + @Override + public Double zincrby(final String key, final double increment, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zincrby(key, increment, member); + } + }.run(key); + } + + @Override + public Double zincrby(final String key, final double increment, final String member, + final ZIncrByParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zincrby(key, increment, member, params); + } + }.run(key); + } + + @Override + public Long zrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrank(key, member); + } + }.run(key); + } + + @Override + public Long zrevrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrevrank(key, member); + } + }.run(key); + } + + @Override + public Set zrevrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrange(key, start, stop); + } + }.run(key); + } + + @Override + public Set zrangeWithScores(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeWithScores(key, start, stop); + } + }.run(key); + } + + @Override + public Set zrevrangeWithScores(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeWithScores(key, start, stop); + } + }.run(key); + } + + @Override + public Long zcard(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcard(key); + } + }.run(key); + } + + @Override + public Double zscore(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zscore(key, member); + } + }.run(key); + } + + @Override + public List sort(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.sort(key); + } + }.run(key); + } + + @Override + public List sort(final String key, final SortingParams sortingParameters) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.sort(key, sortingParameters); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final double min, final double max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcount(key, min, max); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcount(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, final double max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, final double min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, final double max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, final double min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final double min, final double max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final double max, final double min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final double min, final double max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, final String min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final double max, + final double min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final String max, + final String min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Long zremrangeByRank(final String key, final long start, final long stop) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByRank(key, start, stop); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final double min, final double max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Long zlexcount(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zlexcount(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByLex(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByLex(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByLex(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByLex(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByLex(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByLex(key, max, min); + } + }.run(key); + } + + @Override + public Set zrevrangeByLex(final String key, final String max, final String min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByLex(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Long zremrangeByLex(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByLex(key, min, max); + } + }.run(key); + } + + @Override + public Long linsert(final String key, final ListPosition where, final String pivot, + final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.linsert(key, where, pivot, value); + } + }.run(key); + } + + @Override + public Long lpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lpushx(key, string); + } + }.run(key); + } + + @Override + public Long rpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.rpushx(key, string); + } + }.run(key); + } + + @Override + public Long del(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.del(key); + } + }.run(key); + } + + @Override + public Long unlink(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.unlink(key); + } + }.run(key); + } + + @Override + public Long unlink(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.unlink(keys); + } + }.run(keys.length, keys); + } + + @Override + public String echo(final String string) { + // note that it'll be run from arbitary node + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.echo(string); + } + }.run(string); + } + + @Override + public Long bitcount(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitcount(key); + } + }.run(key); + } + + @Override + public Long bitcount(final String key, final long start, final long end) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitcount(key, start, end); + } + }.run(key); + } + + @Override + public Set keys(final String pattern) { + if (pattern == null || pattern.isEmpty()) { + throw new IllegalArgumentException(this.getClass().getSimpleName() + + " only supports KEYS commands with non-empty patterns"); + } + if (!JedisClusterHashTagUtil.isClusterCompliantMatchPattern(pattern)) { + throw new IllegalArgumentException(this.getClass().getSimpleName() + + " only supports KEYS commands with patterns containing hash-tags ( curly-brackets enclosed strings )"); + } + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.keys(pattern); + } + }.run(pattern); + } + + @Override + public ScanResult scan(final String cursor, final ScanParams params) { + + String matchPattern = null; + + if (params == null || (matchPattern = params.match()) == null || matchPattern.isEmpty()) { + throw new IllegalArgumentException(JedisCluster.class.getSimpleName() + + " only supports SCAN commands with non-empty MATCH patterns"); + } + + if (JedisClusterHashTagUtil.isClusterCompliantMatchPattern(matchPattern)) { + throw new IllegalArgumentException(JedisCluster.class.getSimpleName() + + " only supports SCAN commands with MATCH patterns containing hash-tags ( curly-brackets enclosed strings )"); + } + + return new JedisClusterCommand< ScanResult>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.scan(cursor, params); + } + }.run(matchPattern); + } + + @Override + public ScanResult> hscan(final String key, final String cursor) { + return new JedisClusterCommand>>(connectionHandler, + maxAttempts) { + @Override + public ScanResult> execute(Jedis connection) { + return connection.hscan(key, cursor); + } + }.run(key); + } + + @Override + public ScanResult sscan(final String key, final String cursor) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.sscan(key, cursor); + } + }.run(key); + } + + @Override + public ScanResult zscan(final String key, final String cursor) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.zscan(key, cursor); + } + }.run(key); + } + + @Override + public Long pfadd(final String key, final String... elements) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfadd(key, elements); + } + }.run(key); + } + + @Override + public long pfcount(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfcount(key); + } + }.run(key); + } + + @Override + public List blpop(final int timeout, final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.blpop(timeout, key); + } + }.run(key); + } + + @Override + public List brpop(final int timeout, final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.brpop(timeout, key); + } + }.run(key); + } + + @Override + public Long del(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.del(keys); + } + }.run(keys.length, keys); + } + + @Override + public List blpop(final int timeout, final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.blpop(timeout, keys); + } + }.run(keys.length, keys); + + } + + @Override + public List brpop(final int timeout, final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.brpop(timeout, keys); + } + }.run(keys.length, keys); + } + + @Override + public List mget(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.mget(keys); + } + }.run(keys.length, keys); + } + + @Override + public String mset(final String... keysvalues) { + String[] keys = new String[keysvalues.length / 2]; + + for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { + keys[keyIdx] = keysvalues[keyIdx * 2]; + } + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.mset(keysvalues); + } + }.run(keys.length, keys); + } + + @Override + public Long msetnx(final String... keysvalues) { + String[] keys = new String[keysvalues.length / 2]; + + for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { + keys[keyIdx] = keysvalues[keyIdx * 2]; + } + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.msetnx(keysvalues); + } + }.run(keys.length, keys); + } + + @Override + public String rename(final String oldkey, final String newkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rename(oldkey, newkey); + } + }.run(2, oldkey, newkey); + } + + @Override + public Long renamenx(final String oldkey, final String newkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.renamenx(oldkey, newkey); + } + }.run(2, oldkey, newkey); + } + + @Override + public String rpoplpush(final String srckey, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rpoplpush(srckey, dstkey); + } + }.run(2, srckey, dstkey); + } + + @Override + public Set sdiff(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sdiff(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sdiffstore(final String dstkey, final String... keys) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sdiffstore(dstkey, keys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Set sinter(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sinter(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sinterstore(final String dstkey, final String... keys) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sinterstore(dstkey, keys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long smove(final String srckey, final String dstkey, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.smove(srckey, dstkey, member); + } + }.run(2, srckey, dstkey); + } + + @Override + public Long sort(final String key, final SortingParams sortingParameters, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sort(key, sortingParameters, dstkey); + } + }.run(2, key, dstkey); + } + + @Override + public Long sort(final String key, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sort(key, dstkey); + } + }.run(2, key, dstkey); + } + + @Override + public Set sunion(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sunion(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sunionstore(final String dstkey, final String... keys) { + String[] wholeKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sunionstore(dstkey, keys); + } + }.run(wholeKeys.length, wholeKeys); + } + + @Override + public Long zinterstore(final String dstkey, final String... sets) { + String[] wholeKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zinterstore(dstkey, sets); + } + }.run(wholeKeys.length, wholeKeys); + } + + @Override + public Long zinterstore(final String dstkey, final ZParams params, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zinterstore(dstkey, params, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long zunionstore(final String dstkey, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zunionstore(dstkey, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long zunionstore(final String dstkey, final ZParams params, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zunionstore(dstkey, params, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public String brpoplpush(final String source, final String destination, final int timeout) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.brpoplpush(source, destination, timeout); + } + }.run(2, source, destination); + } + + @Override + public Long publish(final String channel, final String message) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.publish(channel, message); + } + }.runWithAnyNode(); + } + + @Override + public void subscribe(final JedisPubSub jedisPubSub, final String... channels) { + new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Integer execute(Jedis connection) { + connection.subscribe(jedisPubSub, channels); + return 0; + } + }.runWithAnyNode(); + } + + @Override + public void psubscribe(final JedisPubSub jedisPubSub, final String... patterns) { + new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Integer execute(Jedis connection) { + connection.psubscribe(jedisPubSub, patterns); + return 0; + } + }.runWithAnyNode(); + } + + @Override + public Long bitop(final BitOP op, final String destKey, final String... srcKeys) { + String[] mergedKeys = KeyMergeUtil.merge(destKey, srcKeys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitop(op, destKey, srcKeys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public String pfmerge(final String destkey, final String... sourcekeys) { + String[] mergedKeys = KeyMergeUtil.merge(destkey, sourcekeys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.pfmerge(destkey, sourcekeys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public long pfcount(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfcount(keys); + } + }.run(keys.length, keys); + } + + @Override + public Object eval(final String script, final int keyCount, final String... params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script, keyCount, params); + } + }.run(keyCount, params); + } + + @Override + public Object eval(final String script, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script); + } + }.run(sampleKey); + } + + @Override + public Object eval(final String script, final List keys, final List args) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script, keys, args); + } + }.run(keys.size(), keys.toArray(new String[keys.size()])); + } + + @Override + public Object evalsha(final String sha1, final int keyCount, final String... params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1, keyCount, params); + } + }.run(keyCount, params); + } + + @Override + public Object evalsha(final String sha1, final List keys, final List args) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1, keys, args); + } + }.run(keys.size(), keys.toArray(new String[keys.size()])); + } + + @Override + public Object evalsha(final String sha1, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1); + } + }.run(sampleKey); + } + + @Override + public Boolean scriptExists(final String sha1, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.scriptExists(sha1); + } + }.run(sampleKey); + } + + @Override + public List scriptExists(final String sampleKey, final String... sha1) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.scriptExists(sha1); + } + }.run(sampleKey); + } + + @Override + public String scriptLoad(final String script, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptLoad(script); + } + }.run(sampleKey); + } + + @Override + public String scriptFlush(final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptFlush(); + } + }.run(sampleKey); + } + + @Override + public String scriptKill(final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptKill(); + } + }.run(sampleKey); + } + + @Override + public Long geoadd(final String key, final double longitude, final double latitude, + final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.geoadd(key, longitude, latitude, member); + } + }.run(key); + } + + @Override + public Long geoadd(final String key, final Map memberCoordinateMap) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.geoadd(key, memberCoordinateMap); + } + }.run(key); + } + + @Override + public Double geodist(final String key, final String member1, final String member2) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.geodist(key, member1, member2); + } + }.run(key); + } + + @Override + public Double geodist(final String key, final String member1, final String member2, + final GeoUnit unit) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.geodist(key, member1, member2, unit); + } + }.run(key); + } + + @Override + public List geohash(final String key, final String... members) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.geohash(key, members); + } + }.run(key); + } + + @Override + public List geopos(final String key, final String... members) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.geopos(key, members); + } + }.run(key); + } + + @Override + public List georadius(final String key, final double longitude, + final double latitude, final double radius, final GeoUnit unit) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadius(key, longitude, latitude, radius, unit); + } + }.run(key); + } + + @Override + public List georadius(final String key, final double longitude, + final double latitude, final double radius, final GeoUnit unit, final GeoRadiusParam param) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadius(key, longitude, latitude, radius, unit, param); + } + }.run(key); + } + + @Override + public List georadiusByMember(final String key, final String member, + final double radius, final GeoUnit unit) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadiusByMember(key, member, radius, unit); + } + }.run(key); + } + + @Override + public List georadiusByMember(final String key, final String member, + final double radius, final GeoUnit unit, final GeoRadiusParam param) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadiusByMember(key, member, radius, unit, param); + } + }.run(key); + } + + @Override + public List bitfield(final String key, final String... arguments) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.bitfield(key, arguments); + } + }.run(key); + } + + @Override + public Long hstrlen(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hstrlen(key, field); + } + }.run(key); + } + + //暴露出Client, 方便上层解耦 + public Client getClient() { + + Jedis jedis = this.connectionHandler.getConnection(); + if (jedis != null) { + return jedis.getClient(); + } + return null; + } +} \ No newline at end of file diff --git a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java index 4520bb9af..c29dbbad1 100755 --- a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java +++ b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java @@ -17,163 +17,171 @@ import com.fr.third.redis.clients.jedis.util.SafeEncoder; public abstract class JedisPubSub { - private static final String JEDIS_SUBSCRIPTION_MESSAGE = "JedisPubSub is not subscribed to a Jedis instance."; - private int subscribedChannels = 0; - private volatile Client client; + private static final String JEDIS_SUBSCRIPTION_MESSAGE = "JedisPubSub is not subscribed to a Jedis instance."; + private int subscribedChannels = 0; + private volatile Client client; - public void onMessage(String channel, String message) { - } + public JedisPubSub() { - public void onPMessage(String pattern, String channel, String message) { - } + } + + public JedisPubSub(Client client) { + this.client = client; + } + + public void onMessage(String channel, String message) { + } + + public void onPMessage(String pattern, String channel, String message) { + } + + public void onSubscribe(String channel, int subscribedChannels) { + } + + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void onSubscribe(String channel, int subscribedChannels) { - } - - public void onUnsubscribe(String channel, int subscribedChannels) { - } - - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } - - public void onPSubscribe(String pattern, int subscribedChannels) { - } - - public void onPong(String pattern) { - - } - - public void unsubscribe() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.unsubscribe(); - client.flush(); - } - - public void unsubscribe(String... channels) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.unsubscribe(channels); - client.flush(); - } - - public void subscribe(String... channels) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.subscribe(channels); - client.flush(); - } - - public void psubscribe(String... patterns) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.psubscribe(patterns); - client.flush(); - } - - public void punsubscribe() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.punsubscribe(); - client.flush(); - } - - public void punsubscribe(String... patterns) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.punsubscribe(patterns); - client.flush(); - } - - public void ping() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.ping(); - client.flush(); - } - - public boolean isSubscribed() { - return subscribedChannels > 0; - } - - public void proceedWithPatterns(Client client, String... patterns) { - this.client = client; - client.psubscribe(patterns); - client.flush(); - process(client); - } - - public void proceed(Client client, String... channels) { - this.client = client; - client.subscribe(channels); - client.flush(); - process(client); - } - - private void process(Client client) { - - do { - List reply = client.getRawObjectMultiBulkReply(); - final Object firstObj = reply.get(0); - if (!(firstObj instanceof byte[])) { - throw new JedisException("Unknown message type: " + firstObj); - } - final byte[] resp = (byte[]) firstObj; - if (Arrays.equals(SUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - onSubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - onUnsubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(MESSAGE.raw, resp)) { - final byte[] bchannel = (byte[]) reply.get(1); - final byte[] bmesg = (byte[]) reply.get(2); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); - onMessage(strchannel, strmesg); - } else if (Arrays.equals(PMESSAGE.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final byte[] bchannel = (byte[]) reply.get(2); - final byte[] bmesg = (byte[]) reply.get(3); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); - onPMessage(strpattern, strchannel, strmesg); - } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPSubscribe(strpattern, subscribedChannels); - } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPUnsubscribe(strpattern, subscribedChannels); - } else if (Arrays.equals(PONG.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPong(strpattern); - } else { - throw new JedisException("Unknown message type: " + firstObj); - } - } while (isSubscribed()); - - /* Invalidate instance since this thread is no longer listening */ - this.client = null; - } - - public int getSubscribedChannels() { - return subscribedChannels; - } -} + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } + + public void onPSubscribe(String pattern, int subscribedChannels) { + } + + public void onPong(String pattern) { + + } + + public void unsubscribe() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.unsubscribe(); + client.flush(); + } + + public void unsubscribe(String... channels) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.unsubscribe(channels); + client.flush(); + } + + public void subscribe(String... channels) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.subscribe(channels); + client.flush(); + } + + public void psubscribe(String... patterns) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.psubscribe(patterns); + client.flush(); + } + + public void punsubscribe() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.punsubscribe(); + client.flush(); + } + + public void punsubscribe(String... patterns) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.punsubscribe(patterns); + client.flush(); + } + + public void ping() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.ping(); + client.flush(); + } + + public boolean isSubscribed() { + return subscribedChannels > 0; + } + + public void proceedWithPatterns(Client client, String... patterns) { + this.client = client; + client.psubscribe(patterns); + client.flush(); + process(client); + } + + public void proceed(Client client, String... channels) { + this.client = client; + client.subscribe(channels); + client.flush(); + process(client); + } + + private void process(Client client) { + + do { + List reply = client.getRawObjectMultiBulkReply(); + final Object firstObj = reply.get(0); + if (!(firstObj instanceof byte[])) { + throw new JedisException("Unknown message type: " + firstObj); + } + final byte[] resp = (byte[]) firstObj; + if (Arrays.equals(SUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + onSubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + onUnsubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(MESSAGE.raw, resp)) { + final byte[] bchannel = (byte[]) reply.get(1); + final byte[] bmesg = (byte[]) reply.get(2); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); + onMessage(strchannel, strmesg); + } else if (Arrays.equals(PMESSAGE.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final byte[] bchannel = (byte[]) reply.get(2); + final byte[] bmesg = (byte[]) reply.get(3); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); + onPMessage(strpattern, strchannel, strmesg); + } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPSubscribe(strpattern, subscribedChannels); + } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPUnsubscribe(strpattern, subscribedChannels); + } else if (Arrays.equals(PONG.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPong(strpattern); + } else { + throw new JedisException("Unknown message type: " + firstObj); + } + } while (isSubscribed()); + + /* Invalidate instance since this thread is no longer listening */ + this.client = null; + } + + public int getSubscribedChannels() { + return subscribedChannels; + } +} \ No newline at end of file From a28e8da37d086d70aa98183a97f0e2c008b0d2d9 Mon Sep 17 00:00:00 2001 From: Feng Date: Tue, 21 Apr 2020 16:54:39 +0800 Subject: [PATCH 03/14] =?UTF-8?q?KERNEL-3881=20=20=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8+=E9=9B=86=E7=BE=A4=E9=94=81?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E8=A7=A3=E8=80=A6=EF=BC=8C?= =?UTF-8?q?=E8=84=B1=E7=A6=BB=E4=BE=9D=E8=B5=96redis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/clients/jedis/JedisCluster.java | 3916 ++++++++--------- .../redis/clients/jedis/JedisPubSub.java | 314 +- 2 files changed, 2115 insertions(+), 2115 deletions(-) diff --git a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java index e66185a2c..beebc6998 100755 --- a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java +++ b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisCluster.java @@ -20,1964 +20,1964 @@ import com.fr.third.redis.clients.jedis.params.SetParams; import com.fr.third.redis.clients.jedis.util.JedisClusterHashTagUtil; public class JedisCluster extends BinaryJedisCluster implements JedisClusterCommands, - MultiKeyJedisClusterCommands, JedisClusterScriptingCommands { - - public JedisCluster(HostAndPort node) { - this(Collections.singleton(node)); - } - - public JedisCluster(HostAndPort node, int timeout) { - this(Collections.singleton(node), timeout); - } - - public JedisCluster(HostAndPort node, int timeout, int maxAttempts) { - this(Collections.singleton(node), timeout, maxAttempts); - } - - public JedisCluster(HostAndPort node, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), poolConfig); - } - - public JedisCluster(HostAndPort node, int timeout, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), timeout, poolConfig); - } - - public JedisCluster(HostAndPort node, int timeout, int maxAttempts, - final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), timeout, maxAttempts, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, poolConfig); - } - - public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, - int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { - this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); - } - - public JedisCluster(Set nodes) { - this(nodes, DEFAULT_TIMEOUT); - } - - public JedisCluster(Set nodes, int timeout) { - this(nodes, timeout, DEFAULT_MAX_ATTEMPTS); - } - - public JedisCluster(Set nodes, int timeout, int maxAttempts) { - this(nodes, timeout, maxAttempts, new GenericObjectPoolConfig()); - } - - public JedisCluster(Set nodes, final GenericObjectPoolConfig poolConfig) { - this(nodes, DEFAULT_TIMEOUT, DEFAULT_MAX_ATTEMPTS, poolConfig); - } - - public JedisCluster(Set nodes, int timeout, final GenericObjectPoolConfig poolConfig) { - this(nodes, timeout, DEFAULT_MAX_ATTEMPTS, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int timeout, int maxAttempts, - final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, timeout, maxAttempts, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig); - } - - public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, - int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { - super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); - } - - @Override - public String set(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.set(key, value); - } - }.run(key); - } - - @Override - public String set(final String key, final String value, final SetParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.set(key, value, params); - } - }.run(key); - } - - @Override - public String get(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.get(key); - } - }.run(key); - } - - @Override - public Boolean exists(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.exists(key); - } - }.run(key); - } - - @Override - public Long exists(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.exists(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long persist(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.persist(key); - } - }.run(key); - } - - @Override - public String type(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.type(key); - } - }.run(key); - } - - @Override - public byte[] dump(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public byte[] execute(Jedis connection) { - return connection.dump(key); - } - }.run(key); - } - - @Override - public String restore(final String key, final int ttl, final byte[] serializedValue) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.restore(key, ttl, serializedValue); - } - }.run(key); - } - - @Override - public Long expire(final String key, final int seconds) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.expire(key, seconds); - } - }.run(key); - } - - @Override - public Long pexpire(final String key, final long milliseconds) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pexpire(key, milliseconds); - } - }.run(key); - } - - @Override - public Long expireAt(final String key, final long unixTime) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.expireAt(key, unixTime); - } - }.run(key); - } - - @Override - public Long pexpireAt(final String key, final long millisecondsTimestamp) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pexpireAt(key, millisecondsTimestamp); - } - }.run(key); - } - - @Override - public Long ttl(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.ttl(key); - } - }.run(key); - } - - @Override - public Long pttl(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pttl(key); - } - }.run(key); - } - - @Override - public Long touch(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.touch(key); - } - }.run(key); - } - - @Override - public Long touch(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.touch(keys); - } - }.run(keys.length, keys); - } - - @Override - public Boolean setbit(final String key, final long offset, final boolean value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.setbit(key, offset, value); - } - }.run(key); - } - - @Override - public Boolean setbit(final String key, final long offset, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.setbit(key, offset, value); - } - }.run(key); - } - - @Override - public Boolean getbit(final String key, final long offset) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.getbit(key, offset); - } - }.run(key); - } - - @Override - public Long setrange(final String key, final long offset, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.setrange(key, offset, value); - } - }.run(key); - } - - @Override - public String getrange(final String key, final long startOffset, final long endOffset) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.getrange(key, startOffset, endOffset); - } - }.run(key); - } - - @Override - public String getSet(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.getSet(key, value); - } - }.run(key); - } - - @Override - public Long setnx(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.setnx(key, value); - } - }.run(key); - } - - @Override - public String setex(final String key, final int seconds, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.setex(key, seconds, value); - } - }.run(key); - } - - @Override - public String psetex(final String key, final long milliseconds, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.psetex(key, milliseconds, value); - } - }.run(key); - } - - @Override - public Long decrBy(final String key, final long decrement) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.decrBy(key, decrement); - } - }.run(key); - } - - @Override - public Long decr(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.decr(key); - } - }.run(key); - } - - @Override - public Long incrBy(final String key, final long increment) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.incrBy(key, increment); - } - }.run(key); - } - - @Override - public Double incrByFloat(final String key, final double increment) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.incrByFloat(key, increment); - } - }.run(key); - } - - @Override - public Long incr(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.incr(key); - } - }.run(key); - } - - @Override - public Long append(final String key, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.append(key, value); - } - }.run(key); - } - - @Override - public String substr(final String key, final int start, final int end) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.substr(key, start, end); - } - }.run(key); - } - - @Override - public Long hset(final String key, final String field, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hset(key, field, value); - } - }.run(key); - } - - @Override - public Long hset(final String key, final Map hash) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hset(key, hash); - } - }.run(key); - } - - @Override - public String hget(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.hget(key, field); - } - }.run(key); - } - - @Override - public Long hsetnx(final String key, final String field, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hsetnx(key, field, value); - } - }.run(key); - } - - @Override - public String hmset(final String key, final Map hash) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.hmset(key, hash); - } - }.run(key); - } - - @Override - public List hmget(final String key, final String... fields) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.hmget(key, fields); - } - }.run(key); - } - - @Override - public Long hincrBy(final String key, final String field, final long value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hincrBy(key, field, value); - } - }.run(key); - } - - @Override - public Boolean hexists(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.hexists(key, field); - } - }.run(key); - } - - @Override - public Long hdel(final String key, final String... field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hdel(key, field); - } - }.run(key); - } - - @Override - public Long hlen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hlen(key); - } - }.run(key); - } - - @Override - public Set hkeys(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.hkeys(key); - } - }.run(key); - } - - @Override - public List hvals(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.hvals(key); - } - }.run(key); - } - - @Override - public Map hgetAll(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Map execute(Jedis connection) { - return connection.hgetAll(key); - } - }.run(key); - } - - @Override - public Long rpush(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.rpush(key, string); - } - }.run(key); - } - - @Override - public Long lpush(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lpush(key, string); - } - }.run(key); - } - - @Override - public Long llen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.llen(key); - } - }.run(key); - } - - @Override - public List lrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.lrange(key, start, stop); - } - }.run(key); - } - - @Override - public String ltrim(final String key, final long start, final long stop) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.ltrim(key, start, stop); - } - }.run(key); - } - - @Override - public String lindex(final String key, final long index) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lindex(key, index); - } - }.run(key); - } - - @Override - public String lset(final String key, final long index, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lset(key, index, value); - } - }.run(key); - } - - @Override - public Long lrem(final String key, final long count, final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lrem(key, count, value); - } - }.run(key); - } - - @Override - public String lpop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.lpop(key); - } - }.run(key); - } - - @Override - public String rpop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rpop(key); - } - }.run(key); - } - - @Override - public Long sadd(final String key, final String... member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sadd(key, member); - } - }.run(key); - } - - @Override - public Set smembers(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.smembers(key); - } - }.run(key); - } - - @Override - public Long srem(final String key, final String... member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.srem(key, member); - } - }.run(key); - } - - @Override - public String spop(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.spop(key); - } - }.run(key); - } - - @Override - public Set spop(final String key, final long count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.spop(key, count); - } - }.run(key); - } - - @Override - public Long scard(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.scard(key); - } - }.run(key); - } - - @Override - public Boolean sismember(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.sismember(key, member); - } - }.run(key); - } - - @Override - public String srandmember(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.srandmember(key); - } - }.run(key); - } - - @Override - public List srandmember(final String key, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.srandmember(key, count); - } - }.run(key); - } - - @Override - public Long strlen(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.strlen(key); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final double score, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, score, member); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final double score, final String member, - final ZAddParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, score, member, params); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final Map scoreMembers) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, scoreMembers); - } - }.run(key); - } - - @Override - public Long zadd(final String key, final Map scoreMembers, final ZAddParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zadd(key, scoreMembers, params); - } - }.run(key); - } - - @Override - public Set zrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrange(key, start, stop); - } - }.run(key); - } - - @Override - public Long zrem(final String key, final String... members) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrem(key, members); - } - }.run(key); - } - - @Override - public Double zincrby(final String key, final double increment, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zincrby(key, increment, member); - } - }.run(key); - } - - @Override - public Double zincrby(final String key, final double increment, final String member, - final ZIncrByParams params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zincrby(key, increment, member, params); - } - }.run(key); - } - - @Override - public Long zrank(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrank(key, member); - } - }.run(key); - } - - @Override - public Long zrevrank(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zrevrank(key, member); - } - }.run(key); - } - - @Override - public Set zrevrange(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrange(key, start, stop); - } - }.run(key); - } - - @Override - public Set zrangeWithScores(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeWithScores(key, start, stop); - } - }.run(key); - } - - @Override - public Set zrevrangeWithScores(final String key, final long start, final long stop) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeWithScores(key, start, stop); - } - }.run(key); - } - - @Override - public Long zcard(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcard(key); - } - }.run(key); - } - - @Override - public Double zscore(final String key, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.zscore(key, member); - } - }.run(key); - } - - @Override - public List sort(final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.sort(key); - } - }.run(key); - } - - @Override - public List sort(final String key, final SortingParams sortingParameters) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.sort(key, sortingParameters); - } - }.run(key); - } - - @Override - public Long zcount(final String key, final double min, final double max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcount(key, min, max); - } - }.run(key); - } - - @Override - public Long zcount(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zcount(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final double min, final double max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final double max, final double min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final double min, final double max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScore(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScore(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final double max, final double min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final double min, final double max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final double max, final double min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final double min, final double max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScore(final String key, final String max, final String min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScore(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min); - } - }.run(key); - } - - @Override - public Set zrangeByScoreWithScores(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByScoreWithScores(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final double max, - final double min, final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByScoreWithScores(final String key, final String max, - final String min, final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Long zremrangeByRank(final String key, final long start, final long stop) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByRank(key, start, stop); - } - }.run(key); - } - - @Override - public Long zremrangeByScore(final String key, final double min, final double max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Long zremrangeByScore(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByScore(key, min, max); - } - }.run(key); - } - - @Override - public Long zlexcount(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zlexcount(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByLex(final String key, final String min, final String max) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByLex(key, min, max); - } - }.run(key); - } - - @Override - public Set zrangeByLex(final String key, final String min, final String max, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrangeByLex(key, min, max, offset, count); - } - }.run(key); - } - - @Override - public Set zrevrangeByLex(final String key, final String max, final String min) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByLex(key, max, min); - } - }.run(key); - } - - @Override - public Set zrevrangeByLex(final String key, final String max, final String min, - final int offset, final int count) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.zrevrangeByLex(key, max, min, offset, count); - } - }.run(key); - } - - @Override - public Long zremrangeByLex(final String key, final String min, final String max) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zremrangeByLex(key, min, max); - } - }.run(key); - } - - @Override - public Long linsert(final String key, final ListPosition where, final String pivot, - final String value) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.linsert(key, where, pivot, value); - } - }.run(key); - } - - @Override - public Long lpushx(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.lpushx(key, string); - } - }.run(key); - } - - @Override - public Long rpushx(final String key, final String... string) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.rpushx(key, string); - } - }.run(key); - } - - @Override - public Long del(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.del(key); - } - }.run(key); - } - - @Override - public Long unlink(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.unlink(key); - } - }.run(key); - } - - @Override - public Long unlink(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.unlink(keys); - } - }.run(keys.length, keys); - } - - @Override - public String echo(final String string) { - // note that it'll be run from arbitary node - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.echo(string); - } - }.run(string); - } - - @Override - public Long bitcount(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitcount(key); - } - }.run(key); - } - - @Override - public Long bitcount(final String key, final long start, final long end) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitcount(key, start, end); - } - }.run(key); - } - - @Override - public Set keys(final String pattern) { - if (pattern == null || pattern.isEmpty()) { - throw new IllegalArgumentException(this.getClass().getSimpleName() - + " only supports KEYS commands with non-empty patterns"); - } - if (!JedisClusterHashTagUtil.isClusterCompliantMatchPattern(pattern)) { - throw new IllegalArgumentException(this.getClass().getSimpleName() - + " only supports KEYS commands with patterns containing hash-tags ( curly-brackets enclosed strings )"); - } - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.keys(pattern); - } - }.run(pattern); - } - - @Override - public ScanResult scan(final String cursor, final ScanParams params) { - - String matchPattern = null; - - if (params == null || (matchPattern = params.match()) == null || matchPattern.isEmpty()) { - throw new IllegalArgumentException(JedisCluster.class.getSimpleName() - + " only supports SCAN commands with non-empty MATCH patterns"); - } - - if (JedisClusterHashTagUtil.isClusterCompliantMatchPattern(matchPattern)) { - throw new IllegalArgumentException(JedisCluster.class.getSimpleName() - + " only supports SCAN commands with MATCH patterns containing hash-tags ( curly-brackets enclosed strings )"); - } - - return new JedisClusterCommand< ScanResult>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.scan(cursor, params); - } - }.run(matchPattern); - } - - @Override - public ScanResult> hscan(final String key, final String cursor) { - return new JedisClusterCommand>>(connectionHandler, - maxAttempts) { - @Override - public ScanResult> execute(Jedis connection) { - return connection.hscan(key, cursor); - } - }.run(key); - } - - @Override - public ScanResult sscan(final String key, final String cursor) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.sscan(key, cursor); - } - }.run(key); - } - - @Override - public ScanResult zscan(final String key, final String cursor) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public ScanResult execute(Jedis connection) { - return connection.zscan(key, cursor); - } - }.run(key); - } - - @Override - public Long pfadd(final String key, final String... elements) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfadd(key, elements); - } - }.run(key); - } - - @Override - public long pfcount(final String key) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfcount(key); - } - }.run(key); - } - - @Override - public List blpop(final int timeout, final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.blpop(timeout, key); - } - }.run(key); - } - - @Override - public List brpop(final int timeout, final String key) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.brpop(timeout, key); - } - }.run(key); - } - - @Override - public Long del(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.del(keys); - } - }.run(keys.length, keys); - } - - @Override - public List blpop(final int timeout, final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.blpop(timeout, keys); - } - }.run(keys.length, keys); - - } - - @Override - public List brpop(final int timeout, final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.brpop(timeout, keys); - } - }.run(keys.length, keys); - } - - @Override - public List mget(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.mget(keys); - } - }.run(keys.length, keys); - } - - @Override - public String mset(final String... keysvalues) { - String[] keys = new String[keysvalues.length / 2]; - - for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { - keys[keyIdx] = keysvalues[keyIdx * 2]; - } - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.mset(keysvalues); - } - }.run(keys.length, keys); - } - - @Override - public Long msetnx(final String... keysvalues) { - String[] keys = new String[keysvalues.length / 2]; - - for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { - keys[keyIdx] = keysvalues[keyIdx * 2]; - } - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.msetnx(keysvalues); - } - }.run(keys.length, keys); - } - - @Override - public String rename(final String oldkey, final String newkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rename(oldkey, newkey); - } - }.run(2, oldkey, newkey); - } - - @Override - public Long renamenx(final String oldkey, final String newkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.renamenx(oldkey, newkey); - } - }.run(2, oldkey, newkey); - } - - @Override - public String rpoplpush(final String srckey, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.rpoplpush(srckey, dstkey); - } - }.run(2, srckey, dstkey); - } - - @Override - public Set sdiff(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sdiff(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sdiffstore(final String dstkey, final String... keys) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sdiffstore(dstkey, keys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Set sinter(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sinter(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sinterstore(final String dstkey, final String... keys) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sinterstore(dstkey, keys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long smove(final String srckey, final String dstkey, final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.smove(srckey, dstkey, member); - } - }.run(2, srckey, dstkey); - } - - @Override - public Long sort(final String key, final SortingParams sortingParameters, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sort(key, sortingParameters, dstkey); - } - }.run(2, key, dstkey); - } - - @Override - public Long sort(final String key, final String dstkey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sort(key, dstkey); - } - }.run(2, key, dstkey); - } - - @Override - public Set sunion(final String... keys) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public Set execute(Jedis connection) { - return connection.sunion(keys); - } - }.run(keys.length, keys); - } - - @Override - public Long sunionstore(final String dstkey, final String... keys) { - String[] wholeKeys = KeyMergeUtil.merge(dstkey, keys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.sunionstore(dstkey, keys); - } - }.run(wholeKeys.length, wholeKeys); - } - - @Override - public Long zinterstore(final String dstkey, final String... sets) { - String[] wholeKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zinterstore(dstkey, sets); - } - }.run(wholeKeys.length, wholeKeys); - } - - @Override - public Long zinterstore(final String dstkey, final ZParams params, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zinterstore(dstkey, params, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long zunionstore(final String dstkey, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zunionstore(dstkey, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public Long zunionstore(final String dstkey, final ZParams params, final String... sets) { - String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.zunionstore(dstkey, params, sets); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public String brpoplpush(final String source, final String destination, final int timeout) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.brpoplpush(source, destination, timeout); - } - }.run(2, source, destination); - } - - @Override - public Long publish(final String channel, final String message) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.publish(channel, message); - } - }.runWithAnyNode(); - } - - @Override - public void subscribe(final JedisPubSub jedisPubSub, final String... channels) { - new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Integer execute(Jedis connection) { - connection.subscribe(jedisPubSub, channels); - return 0; - } - }.runWithAnyNode(); - } - - @Override - public void psubscribe(final JedisPubSub jedisPubSub, final String... patterns) { - new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Integer execute(Jedis connection) { - connection.psubscribe(jedisPubSub, patterns); - return 0; - } - }.runWithAnyNode(); - } - - @Override - public Long bitop(final BitOP op, final String destKey, final String... srcKeys) { - String[] mergedKeys = KeyMergeUtil.merge(destKey, srcKeys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.bitop(op, destKey, srcKeys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public String pfmerge(final String destkey, final String... sourcekeys) { - String[] mergedKeys = KeyMergeUtil.merge(destkey, sourcekeys); - - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.pfmerge(destkey, sourcekeys); - } - }.run(mergedKeys.length, mergedKeys); - } - - @Override - public long pfcount(final String... keys) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.pfcount(keys); - } - }.run(keys.length, keys); - } - - @Override - public Object eval(final String script, final int keyCount, final String... params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script, keyCount, params); - } - }.run(keyCount, params); - } - - @Override - public Object eval(final String script, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script); - } - }.run(sampleKey); - } - - @Override - public Object eval(final String script, final List keys, final List args) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.eval(script, keys, args); - } - }.run(keys.size(), keys.toArray(new String[keys.size()])); - } - - @Override - public Object evalsha(final String sha1, final int keyCount, final String... params) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1, keyCount, params); - } - }.run(keyCount, params); - } - - @Override - public Object evalsha(final String sha1, final List keys, final List args) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1, keys, args); - } - }.run(keys.size(), keys.toArray(new String[keys.size()])); - } - - @Override - public Object evalsha(final String sha1, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Object execute(Jedis connection) { - return connection.evalsha(sha1); - } - }.run(sampleKey); - } - - @Override - public Boolean scriptExists(final String sha1, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Boolean execute(Jedis connection) { - return connection.scriptExists(sha1); - } - }.run(sampleKey); - } - - @Override - public List scriptExists(final String sampleKey, final String... sha1) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.scriptExists(sha1); - } - }.run(sampleKey); - } - - @Override - public String scriptLoad(final String script, final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptLoad(script); - } - }.run(sampleKey); - } - - @Override - public String scriptFlush(final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptFlush(); - } - }.run(sampleKey); - } - - @Override - public String scriptKill(final String sampleKey) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public String execute(Jedis connection) { - return connection.scriptKill(); - } - }.run(sampleKey); - } - - @Override - public Long geoadd(final String key, final double longitude, final double latitude, - final String member) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.geoadd(key, longitude, latitude, member); - } - }.run(key); - } - - @Override - public Long geoadd(final String key, final Map memberCoordinateMap) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.geoadd(key, memberCoordinateMap); - } - }.run(key); - } - - @Override - public Double geodist(final String key, final String member1, final String member2) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.geodist(key, member1, member2); - } - }.run(key); - } - - @Override - public Double geodist(final String key, final String member1, final String member2, - final GeoUnit unit) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Double execute(Jedis connection) { - return connection.geodist(key, member1, member2, unit); - } - }.run(key); - } - - @Override - public List geohash(final String key, final String... members) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.geohash(key, members); - } - }.run(key); - } - - @Override - public List geopos(final String key, final String... members) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.geopos(key, members); - } - }.run(key); - } - - @Override - public List georadius(final String key, final double longitude, - final double latitude, final double radius, final GeoUnit unit) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadius(key, longitude, latitude, radius, unit); - } - }.run(key); - } - - @Override - public List georadius(final String key, final double longitude, - final double latitude, final double radius, final GeoUnit unit, final GeoRadiusParam param) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadius(key, longitude, latitude, radius, unit, param); - } - }.run(key); - } - - @Override - public List georadiusByMember(final String key, final String member, - final double radius, final GeoUnit unit) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadiusByMember(key, member, radius, unit); - } - }.run(key); - } - - @Override - public List georadiusByMember(final String key, final String member, - final double radius, final GeoUnit unit, final GeoRadiusParam param) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.georadiusByMember(key, member, radius, unit, param); - } - }.run(key); - } - - @Override - public List bitfield(final String key, final String... arguments) { - return new JedisClusterCommand>(connectionHandler, maxAttempts) { - @Override - public List execute(Jedis connection) { - return connection.bitfield(key, arguments); - } - }.run(key); - } - - @Override - public Long hstrlen(final String key, final String field) { - return new JedisClusterCommand(connectionHandler, maxAttempts) { - @Override - public Long execute(Jedis connection) { - return connection.hstrlen(key, field); - } - }.run(key); - } - - //暴露出Client, 方便上层解耦 + MultiKeyJedisClusterCommands, JedisClusterScriptingCommands { + + public JedisCluster(HostAndPort node) { + this(Collections.singleton(node)); + } + + public JedisCluster(HostAndPort node, int timeout) { + this(Collections.singleton(node), timeout); + } + + public JedisCluster(HostAndPort node, int timeout, int maxAttempts) { + this(Collections.singleton(node), timeout, maxAttempts); + } + + public JedisCluster(HostAndPort node, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), poolConfig); + } + + public JedisCluster(HostAndPort node, int timeout, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), timeout, poolConfig); + } + + public JedisCluster(HostAndPort node, int timeout, int maxAttempts, + final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), timeout, maxAttempts, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, poolConfig); + } + + public JedisCluster(HostAndPort node, int connectionTimeout, int soTimeout, + int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { + this(Collections.singleton(node), connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); + } + + public JedisCluster(Set nodes) { + this(nodes, DEFAULT_TIMEOUT); + } + + public JedisCluster(Set nodes, int timeout) { + this(nodes, timeout, DEFAULT_MAX_ATTEMPTS); + } + + public JedisCluster(Set nodes, int timeout, int maxAttempts) { + this(nodes, timeout, maxAttempts, new GenericObjectPoolConfig()); + } + + public JedisCluster(Set nodes, final GenericObjectPoolConfig poolConfig) { + this(nodes, DEFAULT_TIMEOUT, DEFAULT_MAX_ATTEMPTS, poolConfig); + } + + public JedisCluster(Set nodes, int timeout, final GenericObjectPoolConfig poolConfig) { + this(nodes, timeout, DEFAULT_MAX_ATTEMPTS, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int timeout, int maxAttempts, + final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, timeout, maxAttempts, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, String password, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, poolConfig); + } + + public JedisCluster(Set jedisClusterNode, int connectionTimeout, int soTimeout, + int maxAttempts, String password, String clientName, final GenericObjectPoolConfig poolConfig) { + super(jedisClusterNode, connectionTimeout, soTimeout, maxAttempts, password, clientName, poolConfig); +} + + @Override + public String set(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.set(key, value); + } + }.run(key); + } + + @Override + public String set(final String key, final String value, final SetParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.set(key, value, params); + } + }.run(key); + } + + @Override + public String get(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.get(key); + } + }.run(key); + } + + @Override + public Boolean exists(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.exists(key); + } + }.run(key); + } + + @Override + public Long exists(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.exists(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long persist(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.persist(key); + } + }.run(key); + } + + @Override + public String type(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.type(key); + } + }.run(key); + } + + @Override + public byte[] dump(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public byte[] execute(Jedis connection) { + return connection.dump(key); + } + }.run(key); + } + + @Override + public String restore(final String key, final int ttl, final byte[] serializedValue) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.restore(key, ttl, serializedValue); + } + }.run(key); + } + + @Override + public Long expire(final String key, final int seconds) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.expire(key, seconds); + } + }.run(key); + } + + @Override + public Long pexpire(final String key, final long milliseconds) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pexpire(key, milliseconds); + } + }.run(key); + } + + @Override + public Long expireAt(final String key, final long unixTime) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.expireAt(key, unixTime); + } + }.run(key); + } + + @Override + public Long pexpireAt(final String key, final long millisecondsTimestamp) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pexpireAt(key, millisecondsTimestamp); + } + }.run(key); + } + + @Override + public Long ttl(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.ttl(key); + } + }.run(key); + } + + @Override + public Long pttl(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pttl(key); + } + }.run(key); + } + + @Override + public Long touch(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.touch(key); + } + }.run(key); + } + + @Override + public Long touch(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.touch(keys); + } + }.run(keys.length, keys); + } + + @Override + public Boolean setbit(final String key, final long offset, final boolean value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.setbit(key, offset, value); + } + }.run(key); + } + + @Override + public Boolean setbit(final String key, final long offset, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.setbit(key, offset, value); + } + }.run(key); + } + + @Override + public Boolean getbit(final String key, final long offset) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.getbit(key, offset); + } + }.run(key); + } + + @Override + public Long setrange(final String key, final long offset, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.setrange(key, offset, value); + } + }.run(key); + } + + @Override + public String getrange(final String key, final long startOffset, final long endOffset) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.getrange(key, startOffset, endOffset); + } + }.run(key); + } + + @Override + public String getSet(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.getSet(key, value); + } + }.run(key); + } + + @Override + public Long setnx(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.setnx(key, value); + } + }.run(key); + } + + @Override + public String setex(final String key, final int seconds, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.setex(key, seconds, value); + } + }.run(key); + } + + @Override + public String psetex(final String key, final long milliseconds, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.psetex(key, milliseconds, value); + } + }.run(key); + } + + @Override + public Long decrBy(final String key, final long decrement) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.decrBy(key, decrement); + } + }.run(key); + } + + @Override + public Long decr(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.decr(key); + } + }.run(key); + } + + @Override + public Long incrBy(final String key, final long increment) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.incrBy(key, increment); + } + }.run(key); + } + + @Override + public Double incrByFloat(final String key, final double increment) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.incrByFloat(key, increment); + } + }.run(key); + } + + @Override + public Long incr(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.incr(key); + } + }.run(key); + } + + @Override + public Long append(final String key, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.append(key, value); + } + }.run(key); + } + + @Override + public String substr(final String key, final int start, final int end) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.substr(key, start, end); + } + }.run(key); + } + + @Override + public Long hset(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hset(key, field, value); + } + }.run(key); + } + + @Override + public Long hset(final String key, final Map hash) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hset(key, hash); + } + }.run(key); + } + + @Override + public String hget(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.hget(key, field); + } + }.run(key); + } + + @Override + public Long hsetnx(final String key, final String field, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hsetnx(key, field, value); + } + }.run(key); + } + + @Override + public String hmset(final String key, final Map hash) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.hmset(key, hash); + } + }.run(key); + } + + @Override + public List hmget(final String key, final String... fields) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.hmget(key, fields); + } + }.run(key); + } + + @Override + public Long hincrBy(final String key, final String field, final long value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hincrBy(key, field, value); + } + }.run(key); + } + + @Override + public Boolean hexists(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.hexists(key, field); + } + }.run(key); + } + + @Override + public Long hdel(final String key, final String... field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hdel(key, field); + } + }.run(key); + } + + @Override + public Long hlen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hlen(key); + } + }.run(key); + } + + @Override + public Set hkeys(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.hkeys(key); + } + }.run(key); + } + + @Override + public List hvals(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.hvals(key); + } + }.run(key); + } + + @Override + public Map hgetAll(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Map execute(Jedis connection) { + return connection.hgetAll(key); + } + }.run(key); + } + + @Override + public Long rpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.rpush(key, string); + } + }.run(key); + } + + @Override + public Long lpush(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lpush(key, string); + } + }.run(key); + } + + @Override + public Long llen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.llen(key); + } + }.run(key); + } + + @Override + public List lrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.lrange(key, start, stop); + } + }.run(key); + } + + @Override + public String ltrim(final String key, final long start, final long stop) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.ltrim(key, start, stop); + } + }.run(key); + } + + @Override + public String lindex(final String key, final long index) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lindex(key, index); + } + }.run(key); + } + + @Override + public String lset(final String key, final long index, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lset(key, index, value); + } + }.run(key); + } + + @Override + public Long lrem(final String key, final long count, final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lrem(key, count, value); + } + }.run(key); + } + + @Override + public String lpop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.lpop(key); + } + }.run(key); + } + + @Override + public String rpop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rpop(key); + } + }.run(key); + } + + @Override + public Long sadd(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sadd(key, member); + } + }.run(key); + } + + @Override + public Set smembers(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.smembers(key); + } + }.run(key); + } + + @Override + public Long srem(final String key, final String... member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.srem(key, member); + } + }.run(key); + } + + @Override + public String spop(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.spop(key); + } + }.run(key); + } + + @Override + public Set spop(final String key, final long count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.spop(key, count); + } + }.run(key); + } + + @Override + public Long scard(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.scard(key); + } + }.run(key); + } + + @Override + public Boolean sismember(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.sismember(key, member); + } + }.run(key); + } + + @Override + public String srandmember(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.srandmember(key); + } + }.run(key); + } + + @Override + public List srandmember(final String key, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.srandmember(key, count); + } + }.run(key); + } + + @Override + public Long strlen(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.strlen(key); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final double score, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, score, member); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final double score, final String member, + final ZAddParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, score, member, params); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final Map scoreMembers) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, scoreMembers); + } + }.run(key); + } + + @Override + public Long zadd(final String key, final Map scoreMembers, final ZAddParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zadd(key, scoreMembers, params); + } + }.run(key); + } + + @Override + public Set zrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrange(key, start, stop); + } + }.run(key); + } + + @Override + public Long zrem(final String key, final String... members) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrem(key, members); + } + }.run(key); + } + + @Override + public Double zincrby(final String key, final double increment, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zincrby(key, increment, member); + } + }.run(key); + } + + @Override + public Double zincrby(final String key, final double increment, final String member, + final ZIncrByParams params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zincrby(key, increment, member, params); + } + }.run(key); + } + + @Override + public Long zrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrank(key, member); + } + }.run(key); + } + + @Override + public Long zrevrank(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zrevrank(key, member); + } + }.run(key); + } + + @Override + public Set zrevrange(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrange(key, start, stop); + } + }.run(key); + } + + @Override + public Set zrangeWithScores(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeWithScores(key, start, stop); + } + }.run(key); + } + + @Override + public Set zrevrangeWithScores(final String key, final long start, final long stop) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeWithScores(key, start, stop); + } + }.run(key); + } + + @Override + public Long zcard(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcard(key); + } + }.run(key); + } + + @Override + public Double zscore(final String key, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.zscore(key, member); + } + }.run(key); + } + + @Override + public List sort(final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.sort(key); + } + }.run(key); + } + + @Override + public List sort(final String key, final SortingParams sortingParameters) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.sort(key, sortingParameters); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final double min, final double max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcount(key, min, max); + } + }.run(key); + } + + @Override + public Long zcount(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zcount(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, final double max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, final double min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final double min, final double max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScore(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScore(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final double max, final double min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final double min, final double max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final double max, final double min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final double min, final double max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScore(final String key, final String max, final String min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScore(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min); + } + }.run(key); + } + + @Override + public Set zrangeByScoreWithScores(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByScoreWithScores(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final double max, + final double min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByScoreWithScores(final String key, final String max, + final String min, final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByScoreWithScores(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Long zremrangeByRank(final String key, final long start, final long stop) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByRank(key, start, stop); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final double min, final double max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Long zremrangeByScore(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByScore(key, min, max); + } + }.run(key); + } + + @Override + public Long zlexcount(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zlexcount(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByLex(final String key, final String min, final String max) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByLex(key, min, max); + } + }.run(key); + } + + @Override + public Set zrangeByLex(final String key, final String min, final String max, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrangeByLex(key, min, max, offset, count); + } + }.run(key); + } + + @Override + public Set zrevrangeByLex(final String key, final String max, final String min) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByLex(key, max, min); + } + }.run(key); + } + + @Override + public Set zrevrangeByLex(final String key, final String max, final String min, + final int offset, final int count) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.zrevrangeByLex(key, max, min, offset, count); + } + }.run(key); + } + + @Override + public Long zremrangeByLex(final String key, final String min, final String max) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zremrangeByLex(key, min, max); + } + }.run(key); + } + + @Override + public Long linsert(final String key, final ListPosition where, final String pivot, + final String value) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.linsert(key, where, pivot, value); + } + }.run(key); + } + + @Override + public Long lpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.lpushx(key, string); + } + }.run(key); + } + + @Override + public Long rpushx(final String key, final String... string) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.rpushx(key, string); + } + }.run(key); + } + + @Override + public Long del(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.del(key); + } + }.run(key); + } + + @Override + public Long unlink(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.unlink(key); + } + }.run(key); + } + + @Override + public Long unlink(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.unlink(keys); + } + }.run(keys.length, keys); + } + + @Override + public String echo(final String string) { + // note that it'll be run from arbitary node + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.echo(string); + } + }.run(string); + } + + @Override + public Long bitcount(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitcount(key); + } + }.run(key); + } + + @Override + public Long bitcount(final String key, final long start, final long end) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitcount(key, start, end); + } + }.run(key); + } + + @Override + public Set keys(final String pattern) { + if (pattern == null || pattern.isEmpty()) { + throw new IllegalArgumentException(this.getClass().getSimpleName() + + " only supports KEYS commands with non-empty patterns"); + } + if (!JedisClusterHashTagUtil.isClusterCompliantMatchPattern(pattern)) { + throw new IllegalArgumentException(this.getClass().getSimpleName() + + " only supports KEYS commands with patterns containing hash-tags ( curly-brackets enclosed strings )"); + } + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.keys(pattern); + } + }.run(pattern); + } + + @Override + public ScanResult scan(final String cursor, final ScanParams params) { + + String matchPattern = null; + + if (params == null || (matchPattern = params.match()) == null || matchPattern.isEmpty()) { + throw new IllegalArgumentException(JedisCluster.class.getSimpleName() + + " only supports SCAN commands with non-empty MATCH patterns"); + } + + if (JedisClusterHashTagUtil.isClusterCompliantMatchPattern(matchPattern)) { + throw new IllegalArgumentException(JedisCluster.class.getSimpleName() + + " only supports SCAN commands with MATCH patterns containing hash-tags ( curly-brackets enclosed strings )"); + } + + return new JedisClusterCommand< ScanResult>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.scan(cursor, params); + } + }.run(matchPattern); + } + + @Override + public ScanResult> hscan(final String key, final String cursor) { + return new JedisClusterCommand>>(connectionHandler, + maxAttempts) { + @Override + public ScanResult> execute(Jedis connection) { + return connection.hscan(key, cursor); + } + }.run(key); + } + + @Override + public ScanResult sscan(final String key, final String cursor) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.sscan(key, cursor); + } + }.run(key); + } + + @Override + public ScanResult zscan(final String key, final String cursor) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public ScanResult execute(Jedis connection) { + return connection.zscan(key, cursor); + } + }.run(key); + } + + @Override + public Long pfadd(final String key, final String... elements) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfadd(key, elements); + } + }.run(key); + } + + @Override + public long pfcount(final String key) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfcount(key); + } + }.run(key); + } + + @Override + public List blpop(final int timeout, final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.blpop(timeout, key); + } + }.run(key); + } + + @Override + public List brpop(final int timeout, final String key) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.brpop(timeout, key); + } + }.run(key); + } + + @Override + public Long del(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.del(keys); + } + }.run(keys.length, keys); + } + + @Override + public List blpop(final int timeout, final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.blpop(timeout, keys); + } + }.run(keys.length, keys); + + } + + @Override + public List brpop(final int timeout, final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.brpop(timeout, keys); + } + }.run(keys.length, keys); + } + + @Override + public List mget(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.mget(keys); + } + }.run(keys.length, keys); + } + + @Override + public String mset(final String... keysvalues) { + String[] keys = new String[keysvalues.length / 2]; + + for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { + keys[keyIdx] = keysvalues[keyIdx * 2]; + } + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.mset(keysvalues); + } + }.run(keys.length, keys); + } + + @Override + public Long msetnx(final String... keysvalues) { + String[] keys = new String[keysvalues.length / 2]; + + for (int keyIdx = 0; keyIdx < keys.length; keyIdx++) { + keys[keyIdx] = keysvalues[keyIdx * 2]; + } + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.msetnx(keysvalues); + } + }.run(keys.length, keys); + } + + @Override + public String rename(final String oldkey, final String newkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rename(oldkey, newkey); + } + }.run(2, oldkey, newkey); + } + + @Override + public Long renamenx(final String oldkey, final String newkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.renamenx(oldkey, newkey); + } + }.run(2, oldkey, newkey); + } + + @Override + public String rpoplpush(final String srckey, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.rpoplpush(srckey, dstkey); + } + }.run(2, srckey, dstkey); + } + + @Override + public Set sdiff(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sdiff(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sdiffstore(final String dstkey, final String... keys) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sdiffstore(dstkey, keys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Set sinter(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sinter(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sinterstore(final String dstkey, final String... keys) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sinterstore(dstkey, keys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long smove(final String srckey, final String dstkey, final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.smove(srckey, dstkey, member); + } + }.run(2, srckey, dstkey); + } + + @Override + public Long sort(final String key, final SortingParams sortingParameters, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sort(key, sortingParameters, dstkey); + } + }.run(2, key, dstkey); + } + + @Override + public Long sort(final String key, final String dstkey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sort(key, dstkey); + } + }.run(2, key, dstkey); + } + + @Override + public Set sunion(final String... keys) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public Set execute(Jedis connection) { + return connection.sunion(keys); + } + }.run(keys.length, keys); + } + + @Override + public Long sunionstore(final String dstkey, final String... keys) { + String[] wholeKeys = KeyMergeUtil.merge(dstkey, keys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.sunionstore(dstkey, keys); + } + }.run(wholeKeys.length, wholeKeys); + } + + @Override + public Long zinterstore(final String dstkey, final String... sets) { + String[] wholeKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zinterstore(dstkey, sets); + } + }.run(wholeKeys.length, wholeKeys); + } + + @Override + public Long zinterstore(final String dstkey, final ZParams params, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zinterstore(dstkey, params, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long zunionstore(final String dstkey, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zunionstore(dstkey, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public Long zunionstore(final String dstkey, final ZParams params, final String... sets) { + String[] mergedKeys = KeyMergeUtil.merge(dstkey, sets); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.zunionstore(dstkey, params, sets); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public String brpoplpush(final String source, final String destination, final int timeout) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.brpoplpush(source, destination, timeout); + } + }.run(2, source, destination); + } + + @Override + public Long publish(final String channel, final String message) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.publish(channel, message); + } + }.runWithAnyNode(); + } + + @Override + public void subscribe(final JedisPubSub jedisPubSub, final String... channels) { + new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Integer execute(Jedis connection) { + connection.subscribe(jedisPubSub, channels); + return 0; + } + }.runWithAnyNode(); + } + + @Override + public void psubscribe(final JedisPubSub jedisPubSub, final String... patterns) { + new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Integer execute(Jedis connection) { + connection.psubscribe(jedisPubSub, patterns); + return 0; + } + }.runWithAnyNode(); + } + + @Override + public Long bitop(final BitOP op, final String destKey, final String... srcKeys) { + String[] mergedKeys = KeyMergeUtil.merge(destKey, srcKeys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.bitop(op, destKey, srcKeys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public String pfmerge(final String destkey, final String... sourcekeys) { + String[] mergedKeys = KeyMergeUtil.merge(destkey, sourcekeys); + + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.pfmerge(destkey, sourcekeys); + } + }.run(mergedKeys.length, mergedKeys); + } + + @Override + public long pfcount(final String... keys) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.pfcount(keys); + } + }.run(keys.length, keys); + } + + @Override + public Object eval(final String script, final int keyCount, final String... params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script, keyCount, params); + } + }.run(keyCount, params); + } + + @Override + public Object eval(final String script, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script); + } + }.run(sampleKey); + } + + @Override + public Object eval(final String script, final List keys, final List args) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.eval(script, keys, args); + } + }.run(keys.size(), keys.toArray(new String[keys.size()])); + } + + @Override + public Object evalsha(final String sha1, final int keyCount, final String... params) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1, keyCount, params); + } + }.run(keyCount, params); + } + + @Override + public Object evalsha(final String sha1, final List keys, final List args) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1, keys, args); + } + }.run(keys.size(), keys.toArray(new String[keys.size()])); + } + + @Override + public Object evalsha(final String sha1, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Object execute(Jedis connection) { + return connection.evalsha(sha1); + } + }.run(sampleKey); + } + + @Override + public Boolean scriptExists(final String sha1, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Boolean execute(Jedis connection) { + return connection.scriptExists(sha1); + } + }.run(sampleKey); + } + + @Override + public List scriptExists(final String sampleKey, final String... sha1) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.scriptExists(sha1); + } + }.run(sampleKey); + } + + @Override + public String scriptLoad(final String script, final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptLoad(script); + } + }.run(sampleKey); + } + + @Override + public String scriptFlush(final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptFlush(); + } + }.run(sampleKey); + } + + @Override + public String scriptKill(final String sampleKey) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public String execute(Jedis connection) { + return connection.scriptKill(); + } + }.run(sampleKey); + } + + @Override + public Long geoadd(final String key, final double longitude, final double latitude, + final String member) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.geoadd(key, longitude, latitude, member); + } + }.run(key); + } + + @Override + public Long geoadd(final String key, final Map memberCoordinateMap) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.geoadd(key, memberCoordinateMap); + } + }.run(key); + } + + @Override + public Double geodist(final String key, final String member1, final String member2) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.geodist(key, member1, member2); + } + }.run(key); + } + + @Override + public Double geodist(final String key, final String member1, final String member2, + final GeoUnit unit) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Double execute(Jedis connection) { + return connection.geodist(key, member1, member2, unit); + } + }.run(key); + } + + @Override + public List geohash(final String key, final String... members) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.geohash(key, members); + } + }.run(key); + } + + @Override + public List geopos(final String key, final String... members) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.geopos(key, members); + } + }.run(key); + } + + @Override + public List georadius(final String key, final double longitude, + final double latitude, final double radius, final GeoUnit unit) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadius(key, longitude, latitude, radius, unit); + } + }.run(key); + } + + @Override + public List georadius(final String key, final double longitude, + final double latitude, final double radius, final GeoUnit unit, final GeoRadiusParam param) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadius(key, longitude, latitude, radius, unit, param); + } + }.run(key); + } + + @Override + public List georadiusByMember(final String key, final String member, + final double radius, final GeoUnit unit) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadiusByMember(key, member, radius, unit); + } + }.run(key); + } + + @Override + public List georadiusByMember(final String key, final String member, + final double radius, final GeoUnit unit, final GeoRadiusParam param) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.georadiusByMember(key, member, radius, unit, param); + } + }.run(key); + } + + @Override + public List bitfield(final String key, final String... arguments) { + return new JedisClusterCommand>(connectionHandler, maxAttempts) { + @Override + public List execute(Jedis connection) { + return connection.bitfield(key, arguments); + } + }.run(key); + } + + @Override + public Long hstrlen(final String key, final String field) { + return new JedisClusterCommand(connectionHandler, maxAttempts) { + @Override + public Long execute(Jedis connection) { + return connection.hstrlen(key, field); + } + }.run(key); + } + + //暴露出Client, 方便上层解耦 public Client getClient() { Jedis jedis = this.connectionHandler.getConnection(); diff --git a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java index c29dbbad1..b9d287091 100755 --- a/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java +++ b/fine-jedis/src/com/fr/third/redis/clients/jedis/JedisPubSub.java @@ -17,171 +17,171 @@ import com.fr.third.redis.clients.jedis.util.SafeEncoder; public abstract class JedisPubSub { - private static final String JEDIS_SUBSCRIPTION_MESSAGE = "JedisPubSub is not subscribed to a Jedis instance."; - private int subscribedChannels = 0; - private volatile Client client; + private static final String JEDIS_SUBSCRIPTION_MESSAGE = "JedisPubSub is not subscribed to a Jedis instance."; + private int subscribedChannels = 0; + private volatile Client client; - public JedisPubSub() { + public JedisPubSub() { } - public JedisPubSub(Client client) { - this.client = client; - } - - public void onMessage(String channel, String message) { - } - - public void onPMessage(String pattern, String channel, String message) { - } - - public void onSubscribe(String channel, int subscribedChannels) { - } - - public void onUnsubscribe(String channel, int subscribedChannels) { - } - - public void onPUnsubscribe(String pattern, int subscribedChannels) { - } - - public void onPSubscribe(String pattern, int subscribedChannels) { - } - - public void onPong(String pattern) { - - } - - public void unsubscribe() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.unsubscribe(); - client.flush(); - } + public JedisPubSub(Client client) { + this.client = client; + } - public void unsubscribe(String... channels) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.unsubscribe(channels); - client.flush(); - } + public void onMessage(String channel, String message) { + } - public void subscribe(String... channels) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.subscribe(channels); - client.flush(); - } + public void onPMessage(String pattern, String channel, String message) { + } - public void psubscribe(String... patterns) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.psubscribe(patterns); - client.flush(); - } + public void onSubscribe(String channel, int subscribedChannels) { + } - public void punsubscribe() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.punsubscribe(); - client.flush(); - } + public void onUnsubscribe(String channel, int subscribedChannels) { + } - public void punsubscribe(String... patterns) { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.punsubscribe(patterns); - client.flush(); - } - - public void ping() { - if (client == null) { - throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); - } - client.ping(); - client.flush(); - } + public void onPUnsubscribe(String pattern, int subscribedChannels) { + } - public boolean isSubscribed() { - return subscribedChannels > 0; - } - - public void proceedWithPatterns(Client client, String... patterns) { - this.client = client; - client.psubscribe(patterns); - client.flush(); - process(client); - } - - public void proceed(Client client, String... channels) { - this.client = client; - client.subscribe(channels); - client.flush(); - process(client); - } - - private void process(Client client) { - - do { - List reply = client.getRawObjectMultiBulkReply(); - final Object firstObj = reply.get(0); - if (!(firstObj instanceof byte[])) { - throw new JedisException("Unknown message type: " + firstObj); - } - final byte[] resp = (byte[]) firstObj; - if (Arrays.equals(SUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - onSubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bchannel = (byte[]) reply.get(1); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - onUnsubscribe(strchannel, subscribedChannels); - } else if (Arrays.equals(MESSAGE.raw, resp)) { - final byte[] bchannel = (byte[]) reply.get(1); - final byte[] bmesg = (byte[]) reply.get(2); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); - onMessage(strchannel, strmesg); - } else if (Arrays.equals(PMESSAGE.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final byte[] bchannel = (byte[]) reply.get(2); - final byte[] bmesg = (byte[]) reply.get(3); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); - final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); - onPMessage(strpattern, strchannel, strmesg); - } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPSubscribe(strpattern, subscribedChannels); - } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { - subscribedChannels = ((Long) reply.get(2)).intValue(); - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPUnsubscribe(strpattern, subscribedChannels); - } else if (Arrays.equals(PONG.raw, resp)) { - final byte[] bpattern = (byte[]) reply.get(1); - final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); - onPong(strpattern); - } else { - throw new JedisException("Unknown message type: " + firstObj); - } - } while (isSubscribed()); - - /* Invalidate instance since this thread is no longer listening */ - this.client = null; - } - - public int getSubscribedChannels() { - return subscribedChannels; - } + public void onPSubscribe(String pattern, int subscribedChannels) { + } + + public void onPong(String pattern) { + + } + + public void unsubscribe() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.unsubscribe(); + client.flush(); + } + + public void unsubscribe(String... channels) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.unsubscribe(channels); + client.flush(); + } + + public void subscribe(String... channels) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.subscribe(channels); + client.flush(); + } + + public void psubscribe(String... patterns) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.psubscribe(patterns); + client.flush(); + } + + public void punsubscribe() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.punsubscribe(); + client.flush(); + } + + public void punsubscribe(String... patterns) { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.punsubscribe(patterns); + client.flush(); + } + + public void ping() { + if (client == null) { + throw new JedisConnectionException(JEDIS_SUBSCRIPTION_MESSAGE); + } + client.ping(); + client.flush(); + } + + public boolean isSubscribed() { + return subscribedChannels > 0; + } + + public void proceedWithPatterns(Client client, String... patterns) { + this.client = client; + client.psubscribe(patterns); + client.flush(); + process(client); + } + + public void proceed(Client client, String... channels) { + this.client = client; + client.subscribe(channels); + client.flush(); + process(client); + } + + private void process(Client client) { + + do { + List reply = client.getRawObjectMultiBulkReply(); + final Object firstObj = reply.get(0); + if (!(firstObj instanceof byte[])) { + throw new JedisException("Unknown message type: " + firstObj); + } + final byte[] resp = (byte[]) firstObj; + if (Arrays.equals(SUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + onSubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(UNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bchannel = (byte[]) reply.get(1); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + onUnsubscribe(strchannel, subscribedChannels); + } else if (Arrays.equals(MESSAGE.raw, resp)) { + final byte[] bchannel = (byte[]) reply.get(1); + final byte[] bmesg = (byte[]) reply.get(2); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); + onMessage(strchannel, strmesg); + } else if (Arrays.equals(PMESSAGE.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final byte[] bchannel = (byte[]) reply.get(2); + final byte[] bmesg = (byte[]) reply.get(3); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + final String strchannel = (bchannel == null) ? null : SafeEncoder.encode(bchannel); + final String strmesg = (bmesg == null) ? null : SafeEncoder.encode(bmesg); + onPMessage(strpattern, strchannel, strmesg); + } else if (Arrays.equals(PSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPSubscribe(strpattern, subscribedChannels); + } else if (Arrays.equals(PUNSUBSCRIBE.raw, resp)) { + subscribedChannels = ((Long) reply.get(2)).intValue(); + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPUnsubscribe(strpattern, subscribedChannels); + } else if (Arrays.equals(PONG.raw, resp)) { + final byte[] bpattern = (byte[]) reply.get(1); + final String strpattern = (bpattern == null) ? null : SafeEncoder.encode(bpattern); + onPong(strpattern); + } else { + throw new JedisException("Unknown message type: " + firstObj); + } + } while (isSubscribed()); + + /* Invalidate instance since this thread is no longer listening */ + this.client = null; + } + + public int getSubscribedChannels() { + return subscribedChannels; + } } \ No newline at end of file From 470ca7784dc80df5a2d23769ca8c0922ab1f001a Mon Sep 17 00:00:00 2001 From: "Bruce.Deng" Date: Thu, 23 Apr 2020 14:54:52 +0800 Subject: [PATCH 04/14] =?UTF-8?q?REPORT-29182=20&=20REPORT-29600=20weblogi?= =?UTF-8?q?c=E9=83=A8=E7=BD=B2=E5=AF=BC=E5=87=BAexcel=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fine-poi/src/com/fr/third/v2/org/apache/poi/util/TempFile.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fine-poi/src/com/fr/third/v2/org/apache/poi/util/TempFile.java b/fine-poi/src/com/fr/third/v2/org/apache/poi/util/TempFile.java index 77ee75f69..838554a50 100644 --- a/fine-poi/src/com/fr/third/v2/org/apache/poi/util/TempFile.java +++ b/fine-poi/src/com/fr/third/v2/org/apache/poi/util/TempFile.java @@ -93,7 +93,8 @@ public final class TempFile { @Override public File createTempFile(String prefix, String suffix) throws IOException { // Identify and create our temp dir, if needed - if (dir == null) + // 这里判断下路径是否存在,省的再排查temp目录丢失的问题 + if (dir == null || !dir.exists()) { dir = new File(System.getProperty("java.io.tmpdir"), "poifiles"); dir.mkdir(); From 72d6364e04c1aa805392593f608988bfcfb60124 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Tue, 28 Apr 2020 11:35:55 +0800 Subject: [PATCH 05/14] =?UTF-8?q?REPORT-30379=20bouncycastle=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98=EF=BC=8Cfine-itex?= =?UTF-8?q?t=E3=80=81fine-itext-old=20=E9=80=82=E9=85=8D=E9=AB=98=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../text/pdf/OcspClientBouncyCastle.java | 368 +++++++------- .../third/com/lowagie/text/pdf/PdfPKCS7.java | 268 +++++----- .../text/pdf/PdfPublicKeySecurityHandler.java | 45 +- .../third/com/lowagie/text/pdf/PdfReader.java | 40 +- .../text/pdf/TSAClientBouncyCastle.java | 460 +++++++++--------- .../lowagie/text/pdf/crypto/AESCipher.java | 12 +- .../text/pdf/OcspClientBouncyCastle.java | 370 +++++++------- .../third/v2/lowagie/text/pdf/PdfPKCS7.java | 266 +++++----- .../text/pdf/PdfPublicKeySecurityHandler.java | 45 +- .../third/v2/lowagie/text/pdf/PdfReader.java | 40 +- .../text/pdf/TSAClientBouncyCastle.java | 460 +++++++++--------- .../v2/lowagie/text/pdf/crypto/AESCipher.java | 12 +- 12 files changed, 1194 insertions(+), 1192 deletions(-) diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/OcspClientBouncyCastle.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/OcspClientBouncyCastle.java index 280573a94..d7fa18ac3 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/OcspClientBouncyCastle.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/OcspClientBouncyCastle.java @@ -1,184 +1,184 @@ -/* - * $Id: OcspClientBouncyCastle.java 3959 2009-06-09 08:31:05Z blowagie $ - * - * Copyright 2009 Paulo Soares - * - * The contents of this file are subject to the Mozilla Public License Version 1.1 - * (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the License. - * - * The Original Code is 'iText, a free JAVA-PDF library'. - * - * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by - * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. - * All Rights Reserved. - * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer - * are Copyright (C) 2009 by Paulo Soares. All Rights Reserved. - * - * Contributor(s): all the names of the contributors are added in the source code - * where applicable. - * - * Alternatively, the contents of this file may be used under the terms of the - * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the - * provisions of LGPL are applicable instead of those above. If you wish to - * allow use of your version of this file only under the terms of the LGPL - * License and not to allow others to use your version of this file under - * the MPL, indicate your decision by deleting the provisions above and - * replace them with the notice and other provisions required by the LGPL. - * If you do not delete the provisions above, a recipient may use your version - * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the MPL as stated above or under the terms of the GNU - * Library General Public License as published by the Free Software Foundation; - * either version 2 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more - * details. - * - * If you didn't download this code from the following link, you should check if - * you aren't using an obsolete version: - * http://www.lowagie.com/iText/ - */ - -package com.fr.third.com.lowagie.text.pdf; - -import com.fr.third.com.lowagie.text.ExceptionConverter; -import java.io.BufferedOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigInteger; -import java.net.HttpURLConnection; -import java.net.URL; -import java.security.Security; -import java.security.cert.X509Certificate; -import java.util.Vector; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; -import org.bouncycastle.asn1.x509.X509Extension; -import org.bouncycastle.asn1.x509.X509Extensions; -import org.bouncycastle.ocsp.BasicOCSPResp; -import org.bouncycastle.ocsp.CertificateID; -import org.bouncycastle.ocsp.CertificateStatus; -import org.bouncycastle.ocsp.OCSPException; -import org.bouncycastle.ocsp.OCSPReq; -import org.bouncycastle.ocsp.OCSPReqGenerator; -import org.bouncycastle.ocsp.OCSPResp; -import org.bouncycastle.ocsp.SingleResp; - -/** - * OcspClient implementation using BouncyCastle. - * @author psoares - * @since 2.1.6 - */ -public class OcspClientBouncyCastle implements OcspClient { - /** root certificate */ - private X509Certificate rootCert; - /** check certificate */ - private X509Certificate checkCert; - /** OCSP URL */ - private String url; - - /** - * Creates an instance of an OcspClient that will be using BouncyCastle. - * @param checkCert the check certificate - * @param rootCert the root certificate - * @param url the OCSP URL - */ - public OcspClientBouncyCastle(X509Certificate checkCert, X509Certificate rootCert, String url) { - this.checkCert = checkCert; - this.rootCert = rootCert; - this.url = url; - } - - /** - * Generates an OCSP request using BouncyCastle. - * @param issuerCert certificate of the issues - * @param serialNumber serial number - * @return an OCSP request - * @throws OCSPException - * @throws IOException - */ - private static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber) throws OCSPException, IOException { - //Add provider BC - Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); - - // Generate the id for the certificate we are looking for - CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber); - - // basic request generation with nonce - OCSPReqGenerator gen = new OCSPReqGenerator(); - - gen.addRequest(id); - - // create details for nonce extension - Vector oids = new Vector(); - Vector values = new Vector(); - - oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); - values.add(new X509Extension(false, new DEROctetString(new DEROctetString(PdfEncryption.createDocumentId()).getEncoded()))); - - gen.setRequestExtensions(new X509Extensions(oids, values)); - - return gen.generate(); - } - - /** - * @return a byte array - * @see com.fr.third.com.lowagie.text.pdf.OcspClient#getEncoded() - */ - public byte[] getEncoded() { - try { - OCSPReq request = generateOCSPRequest(rootCert, checkCert.getSerialNumber()); - byte[] array = request.getEncoded(); - URL urlt = new URL(url); - HttpURLConnection con = (HttpURLConnection)urlt.openConnection(); - con.setRequestProperty("Content-Type", "application/ocsp-request"); - con.setRequestProperty("Accept", "application/ocsp-response"); - con.setDoOutput(true); - OutputStream out = con.getOutputStream(); - DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out)); - dataOut.write(array); - dataOut.flush(); - dataOut.close(); - if (con.getResponseCode() / 100 != 2) { - throw new IOException("Invalid HTTP response"); - } - //Get Response - InputStream in = (InputStream) con.getContent(); - OCSPResp ocspResponse = new OCSPResp(in); - - if (ocspResponse.getStatus() != 0) - throw new IOException("Invalid status: " + ocspResponse.getStatus()); - BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); - if (basicResponse != null) { - SingleResp[] responses = basicResponse.getResponses(); - if (responses.length == 1) { - SingleResp resp = responses[0]; - Object status = resp.getCertStatus(); - if (status == CertificateStatus.GOOD) { - return basicResponse.getEncoded(); - } - else if (status instanceof org.bouncycastle.ocsp.RevokedStatus) { - throw new IOException("OCSP Status is revoked!"); - } - else { - throw new IOException("OCSP Status is unknown!"); - } - } - } - } - catch (Exception ex) { - throw new ExceptionConverter(ex); - } - return null; - } -} +///* +// * $Id: OcspClientBouncyCastle.java 3959 2009-06-09 08:31:05Z blowagie $ +// * +// * Copyright 2009 Paulo Soares +// * +// * The contents of this file are subject to the Mozilla Public License Version 1.1 +// * (the "License"); you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at http://www.mozilla.org/MPL/ +// * +// * Software distributed under the License is distributed on an "AS IS" basis, +// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// * for the specific language governing rights and limitations under the License. +// * +// * The Original Code is 'iText, a free JAVA-PDF library'. +// * +// * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by +// * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. +// * All Rights Reserved. +// * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer +// * are Copyright (C) 2009 by Paulo Soares. All Rights Reserved. +// * +// * Contributor(s): all the names of the contributors are added in the source code +// * where applicable. +// * +// * Alternatively, the contents of this file may be used under the terms of the +// * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the +// * provisions of LGPL are applicable instead of those above. If you wish to +// * allow use of your version of this file only under the terms of the LGPL +// * License and not to allow others to use your version of this file under +// * the MPL, indicate your decision by deleting the provisions above and +// * replace them with the notice and other provisions required by the LGPL. +// * If you do not delete the provisions above, a recipient may use your version +// * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. +// * +// * This library is free software; you can redistribute it and/or modify it +// * under the terms of the MPL as stated above or under the terms of the GNU +// * Library General Public License as published by the Free Software Foundation; +// * either version 2 of the License, or any later version. +// * +// * This library is distributed in the hope that it will be useful, but WITHOUT +// * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more +// * details. +// * +// * If you didn't download this code from the following link, you should check if +// * you aren't using an obsolete version: +// * http://www.lowagie.com/iText/ +// */ +// +//package com.fr.third.com.lowagie.text.pdf; +// +//import com.fr.third.com.lowagie.text.ExceptionConverter; +//import java.io.BufferedOutputStream; +//import java.io.DataOutputStream; +//import java.io.IOException; +//import java.io.InputStream; +//import java.io.OutputStream; +//import java.math.BigInteger; +//import java.net.HttpURLConnection; +//import java.net.URL; +//import java.security.Security; +//import java.security.cert.X509Certificate; +//import java.util.Vector; +//import org.bouncycastle.asn1.DEROctetString; +//import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +//import org.bouncycastle.asn1.x509.X509Extension; +//import org.bouncycastle.asn1.x509.X509Extensions; +//import org.bouncycastle.ocsp.BasicOCSPResp; +//import org.bouncycastle.ocsp.CertificateID; +//import org.bouncycastle.ocsp.CertificateStatus; +//import org.bouncycastle.ocsp.OCSPException; +//import org.bouncycastle.ocsp.OCSPReq; +//import org.bouncycastle.ocsp.OCSPReqGenerator; +//import org.bouncycastle.ocsp.OCSPResp; +//import org.bouncycastle.ocsp.SingleResp; +// +///** +// * OcspClient implementation using BouncyCastle. +// * @author psoares +// * @since 2.1.6 +// */ +//public class OcspClientBouncyCastle implements OcspClient { +// /** root certificate */ +// private X509Certificate rootCert; +// /** check certificate */ +// private X509Certificate checkCert; +// /** OCSP URL */ +// private String url; +// +// /** +// * Creates an instance of an OcspClient that will be using BouncyCastle. +// * @param checkCert the check certificate +// * @param rootCert the root certificate +// * @param url the OCSP URL +// */ +// public OcspClientBouncyCastle(X509Certificate checkCert, X509Certificate rootCert, String url) { +// this.checkCert = checkCert; +// this.rootCert = rootCert; +// this.url = url; +// } +// +// /** +// * Generates an OCSP request using BouncyCastle. +// * @param issuerCert certificate of the issues +// * @param serialNumber serial number +// * @return an OCSP request +// * @throws OCSPException +// * @throws IOException +// */ +// private static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber) throws OCSPException, IOException { +// //Add provider BC +// Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); +// +// // Generate the id for the certificate we are looking for +// CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber); +// +// // basic request generation with nonce +// OCSPReqGenerator gen = new OCSPReqGenerator(); +// +// gen.addRequest(id); +// +// // create details for nonce extension +// Vector oids = new Vector(); +// Vector values = new Vector(); +// +// oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); +// values.add(new X509Extension(false, new DEROctetString(new DEROctetString(PdfEncryption.createDocumentId()).getEncoded()))); +// +// gen.setRequestExtensions(new X509Extensions(oids, values)); +// +// return gen.generate(); +// } +// +// /** +// * @return a byte array +// * @see com.fr.third.com.lowagie.text.pdf.OcspClient#getEncoded() +// */ +// public byte[] getEncoded() { +// try { +// OCSPReq request = generateOCSPRequest(rootCert, checkCert.getSerialNumber()); +// byte[] array = request.getEncoded(); +// URL urlt = new URL(url); +// HttpURLConnection con = (HttpURLConnection)urlt.openConnection(); +// con.setRequestProperty("Content-Type", "application/ocsp-request"); +// con.setRequestProperty("Accept", "application/ocsp-response"); +// con.setDoOutput(true); +// OutputStream out = con.getOutputStream(); +// DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out)); +// dataOut.write(array); +// dataOut.flush(); +// dataOut.close(); +// if (con.getResponseCode() / 100 != 2) { +// throw new IOException("Invalid HTTP response"); +// } +// //Get Response +// InputStream in = (InputStream) con.getContent(); +// OCSPResp ocspResponse = new OCSPResp(in); +// +// if (ocspResponse.getStatus() != 0) +// throw new IOException("Invalid status: " + ocspResponse.getStatus()); +// BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); +// if (basicResponse != null) { +// SingleResp[] responses = basicResponse.getResponses(); +// if (responses.length == 1) { +// SingleResp resp = responses[0]; +// Object status = resp.getCertStatus(); +// if (status == CertificateStatus.GOOD) { +// return basicResponse.getEncoded(); +// } +// else if (status instanceof org.bouncycastle.ocsp.RevokedStatus) { +// throw new IOException("OCSP Status is revoked!"); +// } +// else { +// throw new IOException("OCSP Status is unknown!"); +// } +// } +// } +// } +// catch (Exception ex) { +// throw new ExceptionConverter(ex); +// } +// return null; +// } +//} diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPKCS7.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPKCS7.java index 099674b60..7c87ec2f2 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPKCS7.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPKCS7.java @@ -46,6 +46,8 @@ */ package com.fr.third.com.lowagie.text.pdf; +import com.fr.third.org.bouncycastle.asn1.ASN1Object; +import com.fr.third.org.bouncycastle.asn1.ASN1String; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -75,43 +77,41 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1OutputStream; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEREnumerated; -import org.bouncycastle.asn1.DERInteger; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DERObject; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DEROutputStream; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.DERString; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.cms.AttributeTable; -import org.bouncycastle.asn1.cms.Attribute; -import org.bouncycastle.asn1.ocsp.BasicOCSPResponse; -import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; -import org.bouncycastle.jce.provider.X509CRLParser; -import org.bouncycastle.jce.provider.X509CertParser; +import com.fr.third.org.bouncycastle.asn1.ASN1Encodable; +import com.fr.third.org.bouncycastle.asn1.ASN1EncodableVector; +import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; +import com.fr.third.org.bouncycastle.asn1.ASN1OutputStream; +import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; +import com.fr.third.org.bouncycastle.asn1.ASN1Set; +import com.fr.third.org.bouncycastle.asn1.ASN1TaggedObject; +import com.fr.third.org.bouncycastle.asn1.DEREnumerated; +import com.fr.third.org.bouncycastle.asn1.DERInteger; +import com.fr.third.org.bouncycastle.asn1.DERNull; +import com.fr.third.org.bouncycastle.asn1.DERObjectIdentifier; +import com.fr.third.org.bouncycastle.asn1.DEROctetString; +import com.fr.third.org.bouncycastle.asn1.DEROutputStream; +import com.fr.third.org.bouncycastle.asn1.DERSequence; +import com.fr.third.org.bouncycastle.asn1.DERSet; +import com.fr.third.org.bouncycastle.asn1.DERTaggedObject; +import com.fr.third.org.bouncycastle.asn1.DERUTCTime; +import com.fr.third.org.bouncycastle.asn1.cms.AttributeTable; +import com.fr.third.org.bouncycastle.asn1.cms.Attribute; +import com.fr.third.org.bouncycastle.asn1.ocsp.BasicOCSPResponse; +import com.fr.third.org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +import com.fr.third.org.bouncycastle.jce.provider.X509CRLParser; +import com.fr.third.org.bouncycastle.jce.provider.X509CertParser; import com.fr.third.com.lowagie.text.ExceptionConverter; import java.security.cert.CertificateParsingException; import java.util.Date; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.cms.ContentInfo; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.tsp.MessageImprint; -import org.bouncycastle.asn1.x509.X509Extensions; -import org.bouncycastle.ocsp.BasicOCSPResp; -import org.bouncycastle.ocsp.CertificateID; -import org.bouncycastle.ocsp.SingleResp; -import org.bouncycastle.tsp.TimeStampToken; +import com.fr.third.org.bouncycastle.asn1.ASN1OctetString; +import com.fr.third.org.bouncycastle.asn1.cms.ContentInfo; +import com.fr.third.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import com.fr.third.org.bouncycastle.asn1.tsp.MessageImprint; +import com.fr.third.org.bouncycastle.asn1.x509.X509Extensions; +//import org.bouncycastle.ocsp.BasicOCSPResp; +//import org.bouncycastle.ocsp.CertificateID; +//import org.bouncycastle.ocsp.SingleResp; +//import org.bouncycastle.tsp.TimeStampToken; /** * This class does all the processing related to signing and verifying a PKCS#7 @@ -167,7 +167,7 @@ public class PdfPKCS7 { */ private String signName; - private TimeStampToken timeStampToken; +// private TimeStampToken timeStampToken; private static final HashMap digestNames = new HashMap(); private static final HashMap algorithmNames = new HashMap(); @@ -273,23 +273,23 @@ public class PdfPKCS7 { * @return the timestamp token or null * @since 2.1.6 */ - public TimeStampToken getTimeStampToken() { - return timeStampToken; - } +// public TimeStampToken getTimeStampToken() { +// return timeStampToken; +// } /** * Gets the timestamp date * @return a date * @since 2.1.6 */ - public Calendar getTimeStampDate() { - if (timeStampToken == null) - return null; - Calendar cal = new GregorianCalendar(); - Date date = timeStampToken.getTimeStampInfo().getGenTime(); - cal.setTime(date); - return cal; - } +// public Calendar getTimeStampDate() { +// if (timeStampToken == null) +// return null; +// Calendar cal = new GregorianCalendar(); +// Date date = timeStampToken.getTimeStampInfo().getGenTime(); +// cal.setTime(date); +// return cal; +// } /** * Verifies a signature using the sub-filter adbe.x509.rsa_sha1. @@ -319,19 +319,19 @@ public class PdfPKCS7 { } } - private BasicOCSPResp basicResp; +// private BasicOCSPResp basicResp; /** * Gets the OCSP basic response if there is one. * @return the OCSP basic response or null * @since 2.1.6 */ - public BasicOCSPResp getOcsp() { - return basicResp; - } +// public BasicOCSPResp getOcsp() { +// return basicResp; +// } private void findOcsp(ASN1Sequence seq) throws IOException { - basicResp = null; +// basicResp = null; boolean ret = false; while (true) { if ((seq.getObjectAt(0) instanceof DERObjectIdentifier) @@ -362,7 +362,7 @@ public class PdfPKCS7 { DEROctetString os = (DEROctetString)seq.getObjectAt(1); ASN1InputStream inp = new ASN1InputStream(os.getOctets()); BasicOCSPResponse resp = BasicOCSPResponse.getInstance(inp.readObject()); - basicResp = new BasicOCSPResp(resp); +// basicResp = new BasicOCSPResp(resp); } /** @@ -379,7 +379,7 @@ public class PdfPKCS7 { // // Basic checks to make sure it's a PKCS#7 SignedData Object // - DERObject pkcs; + ASN1Object pkcs; try { pkcs = din.readObject(); @@ -464,7 +464,7 @@ public class PdfPKCS7 { if (signerInfo.getObjectAt(next) instanceof ASN1TaggedObject) { ASN1TaggedObject tagsig = (ASN1TaggedObject)signerInfo.getObjectAt(next); ASN1Set sseq = ASN1Set.getInstance(tagsig, false); - sigAttr = sseq.getEncoded(ASN1Encodable.DER); + sigAttr = sseq.getEncoded("DER"); for (int k = 0; k < sseq.size(); ++k) { ASN1Sequence seq2 = (ASN1Sequence)sseq.getObjectAt(k); @@ -499,7 +499,7 @@ public class PdfPKCS7 { ASN1Set attributeValues = ts.getAttrValues(); ASN1Sequence tokenSequence = ASN1Sequence.getInstance(attributeValues.getObjectAt(0)); ContentInfo contentInfo = new ContentInfo(tokenSequence); - this.timeStampToken = new TimeStampToken(contentInfo); +// this.timeStampToken = new TimeStampToken(contentInfo); } } if (RSAdata != null || digestAttr != null) { @@ -641,15 +641,15 @@ public class PdfPKCS7 { * @return true if it checks false otherwise * @since 2.1.6 */ - public boolean verifyTimestampImprint() throws NoSuchAlgorithmException { - if (timeStampToken == null) - return false; - MessageImprint imprint = timeStampToken.getTimeStampInfo().toTSTInfo().getMessageImprint(); - byte[] md = MessageDigest.getInstance("SHA-1").digest(digest); - byte[] imphashed = imprint.getHashedMessage(); - boolean res = Arrays.equals(md, imphashed); - return res; - } +// public boolean verifyTimestampImprint() throws NoSuchAlgorithmException { +// if (timeStampToken == null) +// return false; +// MessageImprint imprint = timeStampToken.getTimeStampInfo().toTSTInfo().getMessageImprint(); +// byte[] md = MessageDigest.getInstance("SHA-1").digest(digest); +// byte[] imphashed = imprint.getHashedMessage(); +// boolean res = Arrays.equals(md, imphashed); +// return res; +// } /** * Get all the X.509 certificates associated with this PKCS#7 object in no particular order. @@ -888,27 +888,27 @@ public class PdfPKCS7 { * @return true is a certificate was found * @since 2.1.6 */ - public static boolean verifyOcspCertificates(BasicOCSPResp ocsp, KeyStore keystore, String provider) { - if (provider == null) - provider = "BC"; - try { - for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { - try { - String alias = (String)aliases.nextElement(); - if (!keystore.isCertificateEntry(alias)) - continue; - X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); - if (ocsp.verify(certStoreX509.getPublicKey(), provider)) - return true; - } - catch (Exception ex) { - } - } - } - catch (Exception e) { - } - return false; - } +// public static boolean verifyOcspCertificates(BasicOCSPResp ocsp, KeyStore keystore, String provider) { +// if (provider == null) +// provider = "BC"; +// try { +// for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { +// try { +// String alias = (String)aliases.nextElement(); +// if (!keystore.isCertificateEntry(alias)) +// continue; +// X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); +// if (ocsp.verify(certStoreX509.getPublicKey(), provider)) +// return true; +// } +// catch (Exception ex) { +// } +// } +// } +// catch (Exception e) { +// } +// return false; +// } /** * Verifies a timestamp against a KeyStore. @@ -918,27 +918,27 @@ public class PdfPKCS7 { * @return true is a certificate was found * @since 2.1.6 */ - public static boolean verifyTimestampCertificates(TimeStampToken ts, KeyStore keystore, String provider) { - if (provider == null) - provider = "BC"; - try { - for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { - try { - String alias = (String)aliases.nextElement(); - if (!keystore.isCertificateEntry(alias)) - continue; - X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); - ts.validate(certStoreX509, provider); - return true; - } - catch (Exception ex) { - } - } - } - catch (Exception e) { - } - return false; - } +// public static boolean verifyTimestampCertificates(TimeStampToken ts, KeyStore keystore, String provider) { +// if (provider == null) +// provider = "BC"; +// try { +// for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { +// try { +// String alias = (String)aliases.nextElement(); +// if (!keystore.isCertificateEntry(alias)) +// continue; +// X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); +// ts.validate(certStoreX509, provider); +// return true; +// } +// catch (Exception ex) { +// } +// } +// } +// catch (Exception e) { +// } +// return false; +// } /** * Retrieves the OCSP URL from the given certificate. @@ -949,7 +949,7 @@ public class PdfPKCS7 { */ public static String getOCSPURL(X509Certificate certificate) throws CertificateParsingException { try { - DERObject obj = getExtensionValue(certificate, X509Extensions.AuthorityInfoAccess.getId()); + ASN1Object obj = getExtensionValue(certificate, X509Extensions.AuthorityInfoAccess.getId()); if (obj == null) { return null; } @@ -961,7 +961,7 @@ public class PdfPKCS7 { continue; } else { if ((AccessDescription.getObjectAt(0) instanceof DERObjectIdentifier) && ((DERObjectIdentifier)AccessDescription.getObjectAt(0)).getId().equals("1.3.6.1.5.5.7.48.1")) { - String AccessLocation = getStringFromGeneralName((DERObject)AccessDescription.getObjectAt(1)); + String AccessLocation = getStringFromGeneralName((ASN1Object)AccessDescription.getObjectAt(1)); if ( AccessLocation == null ) { return "" ; } else { @@ -980,26 +980,26 @@ public class PdfPKCS7 { * @return true if it checks false otherwise * @since 2.1.6 */ - public boolean isRevocationValid() { - if (basicResp == null) - return false; - if (signCerts.size() < 2) - return false; - try { - X509Certificate[] cs = (X509Certificate[])getSignCertificateChain(); - SingleResp sr = basicResp.getResponses()[0]; - CertificateID cid = sr.getCertID(); - X509Certificate sigcer = getSigningCertificate(); - X509Certificate isscer = cs[1]; - CertificateID tis = new CertificateID(CertificateID.HASH_SHA1, isscer, sigcer.getSerialNumber()); - return tis.equals(cid); - } - catch (Exception ex) { - } - return false; - } +// public boolean isRevocationValid() { +// if (basicResp == null) +// return false; +// if (signCerts.size() < 2) +// return false; +// try { +// X509Certificate[] cs = (X509Certificate[])getSignCertificateChain(); +// SingleResp sr = basicResp.getResponses()[0]; +// CertificateID cid = sr.getCertID(); +// X509Certificate sigcer = getSigningCertificate(); +// X509Certificate isscer = cs[1]; +// CertificateID tis = new CertificateID(CertificateID.HASH_SHA1, isscer, sigcer.getSerialNumber()); +// return tis.equals(cid); +// } +// catch (Exception ex) { +// } +// return false; +// } - private static DERObject getExtensionValue(X509Certificate cert, String oid) throws IOException { + private static ASN1Object getExtensionValue(X509Certificate cert, String oid) throws IOException { byte[] bytes = cert.getExtensionValue(oid); if (bytes == null) { return null; @@ -1010,7 +1010,7 @@ public class PdfPKCS7 { return aIn.readObject(); } - private static String getStringFromGeneralName(DERObject names) throws IOException { + private static String getStringFromGeneralName(ASN1Object names) throws IOException { DERTaggedObject taggedObject = (DERTaggedObject) names ; return new String(ASN1OctetString.getInstance(taggedObject, false).getOctets(), "ISO-8859-1"); } @@ -1020,11 +1020,11 @@ public class PdfPKCS7 { * @param enc a TBSCertificate in a byte array * @return a DERObject */ - private static DERObject getIssuer(byte[] enc) { + private static ASN1Object getIssuer(byte[] enc) { try { ASN1InputStream in = new ASN1InputStream(new ByteArrayInputStream(enc)); ASN1Sequence seq = (ASN1Sequence)in.readObject(); - return (DERObject)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 3 : 2); + return (ASN1Object)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 3 : 2); } catch (IOException e) { throw new ExceptionConverter(e); @@ -1036,11 +1036,11 @@ public class PdfPKCS7 { * @param enc A TBSCertificate in a byte array * @return a DERObject */ - private static DERObject getSubject(byte[] enc) { + private static ASN1Object getSubject(byte[] enc) { try { ASN1InputStream in = new ASN1InputStream(new ByteArrayInputStream(enc)); ASN1Sequence seq = (ASN1Sequence)in.readObject(); - return (DERObject)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 5 : 4); + return (ASN1Object)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 5 : 4); } catch (IOException e) { throw new ExceptionConverter(e); @@ -1340,7 +1340,7 @@ public class PdfPKCS7 { */ public byte[] getAuthenticatedAttributeBytes(byte secondDigest[], Calendar signingTime, byte[] ocsp) { try { - return getAuthenticatedAttributeSet(secondDigest, signingTime, ocsp).getEncoded(ASN1Encodable.DER); + return getAuthenticatedAttributeSet(secondDigest, signingTime, ocsp).getEncoded("DER"); } catch (Exception e) { throw new ExceptionConverter(e); @@ -1575,7 +1575,7 @@ public class PdfPKCS7 { vs = new ArrayList(); values.put(id, vs); } - vs.add(((DERString)s.getObjectAt(1)).getString()); + vs.add(((ASN1String)s.getObjectAt(1)).getString()); } } } diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPublicKeySecurityHandler.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPublicKeySecurityHandler.java index 0abe0dd9d..4a0b9aae4 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPublicKeySecurityHandler.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfPublicKeySecurityHandler.java @@ -89,6 +89,8 @@ package com.fr.third.com.lowagie.text.pdf; +import com.fr.third.org.bouncycastle.asn1.ASN1Object; +import com.fr.third.org.bouncycastle.asn1.ASN1Set; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -107,22 +109,21 @@ import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.DERObject; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DEROutputStream; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.cms.ContentInfo; -import org.bouncycastle.asn1.cms.EncryptedContentInfo; -import org.bouncycastle.asn1.cms.EnvelopedData; -import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; -import org.bouncycastle.asn1.cms.KeyTransRecipientInfo; -import org.bouncycastle.asn1.cms.RecipientIdentifier; -import org.bouncycastle.asn1.cms.RecipientInfo; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.TBSCertificateStructure; +import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; +import com.fr.third.org.bouncycastle.asn1.DERObjectIdentifier; +import com.fr.third.org.bouncycastle.asn1.DEROctetString; +import com.fr.third.org.bouncycastle.asn1.DEROutputStream; +import com.fr.third.org.bouncycastle.asn1.DERSet; +import com.fr.third.org.bouncycastle.asn1.cms.ContentInfo; +import com.fr.third.org.bouncycastle.asn1.cms.EncryptedContentInfo; +import com.fr.third.org.bouncycastle.asn1.cms.EnvelopedData; +import com.fr.third.org.bouncycastle.asn1.cms.IssuerAndSerialNumber; +import com.fr.third.org.bouncycastle.asn1.cms.KeyTransRecipientInfo; +import com.fr.third.org.bouncycastle.asn1.cms.RecipientIdentifier; +import com.fr.third.org.bouncycastle.asn1.cms.RecipientInfo; +import com.fr.third.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import com.fr.third.org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import com.fr.third.org.bouncycastle.asn1.x509.TBSCertificateStructure; /** * @author Aiken Sam (aikensam@ieee.org) @@ -244,7 +245,7 @@ public class PdfPublicKeySecurityHandler { pkcs7input[22] = two; pkcs7input[23] = one; - DERObject obj = createDERForRecipient(pkcs7input, (X509Certificate)certificate); + ASN1Object obj = createDERForRecipient(pkcs7input, (X509Certificate)certificate); ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -276,7 +277,7 @@ public class PdfPublicKeySecurityHandler { return EncodedRecipients; } - private DERObject createDERForRecipient(byte[] in, X509Certificate cert) + private ASN1Object createDERForRecipient(byte[] in, X509Certificate cert) throws IOException, GeneralSecurityException { @@ -287,7 +288,7 @@ public class PdfPublicKeySecurityHandler { AlgorithmParameters algorithmparameters = algorithmparametergenerator.generateParameters(); ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(algorithmparameters.getEncoded("ASN.1")); ASN1InputStream asn1inputstream = new ASN1InputStream(bytearrayinputstream); - DERObject derobject = asn1inputstream.readObject(); + ASN1Object derobject = asn1inputstream.readObject(); KeyGenerator keygenerator = KeyGenerator.getInstance(s); keygenerator.init(128); SecretKey secretkey = keygenerator.generateKey(); @@ -300,10 +301,10 @@ public class PdfPublicKeySecurityHandler { AlgorithmIdentifier algorithmidentifier = new AlgorithmIdentifier(new DERObjectIdentifier(s), derobject); EncryptedContentInfo encryptedcontentinfo = new EncryptedContentInfo(PKCSObjectIdentifiers.data, algorithmidentifier, deroctetstring); - EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo, null); + EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo,(ASN1Set) null); ContentInfo contentinfo = new ContentInfo(PKCSObjectIdentifiers.envelopedData, env); - return contentinfo.getDERObject(); + return contentinfo.getContentType(); } private KeyTransRecipientInfo computeRecipientInfo(X509Certificate x509certificate, byte[] abyte0) @@ -318,7 +319,7 @@ public class PdfPublicKeySecurityHandler { new IssuerAndSerialNumber( tbscertificatestructure.getIssuer(), tbscertificatestructure.getSerialNumber().getValue()); - Cipher cipher = Cipher.getInstance(algorithmidentifier.getObjectId().getId()); + Cipher cipher = Cipher.getInstance(algorithmidentifier.getAlgorithm().getId()); cipher.init(1, x509certificate); DEROctetString deroctetstring = new DEROctetString(cipher.doFinal(abyte0)); RecipientIdentifier recipId = new RecipientIdentifier(issuerandserialnumber); diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfReader.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfReader.java index f29c9b222..bd911a832 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfReader.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/PdfReader.java @@ -78,8 +78,8 @@ import com.fr.third.com.lowagie.text.exceptions.UnsupportedPdfException; import com.fr.third.com.lowagie.text.pdf.interfaces.PdfViewerPreferences; import com.fr.third.com.lowagie.text.pdf.internal.PdfViewerPreferencesImp; -import org.bouncycastle.cms.CMSEnvelopedData; -import org.bouncycastle.cms.RecipientInformation; +//import com.fr.third.org.bouncycastle.cms.CMSEnvelopedData; +//import com.fr.third.org.bouncycastle.cms.RecipientInformation; /** Reads a PDF document. * @author Paulo Soares (psoares@consiste.pt) @@ -709,24 +709,24 @@ public class PdfReader implements PdfViewerPreferences { PdfObject recipient = recipients.getPdfObject(i); strings.remove(recipient); - CMSEnvelopedData data = null; - try { - data = new CMSEnvelopedData(recipient.getBytes()); - - Iterator recipientCertificatesIt = data.getRecipientInfos().getRecipients().iterator(); - - while (recipientCertificatesIt.hasNext()) { - RecipientInformation recipientInfo = (RecipientInformation)recipientCertificatesIt.next(); - - if (recipientInfo.getRID().match(certificate) && !foundRecipient) { - envelopedData = recipientInfo.getContent(certificateKey, certificateKeyProvider); - foundRecipient = true; - } - } - } - catch (Exception f) { - throw new ExceptionConverter(f); - } +// CMSEnvelopedData data = null; +// try { +// data = new CMSEnvelopedData(recipient.getBytes()); +// +// Iterator recipientCertificatesIt = data.getRecipientInfos().getRecipients().iterator(); +// +// while (recipientCertificatesIt.hasNext()) { +// RecipientInformation recipientInfo = (RecipientInformation)recipientCertificatesIt.next(); +// +// if (recipientInfo.getRID().match(certificate) && !foundRecipient) { +// envelopedData = recipientInfo.getContent(certificateKey, certificateKeyProvider); +// foundRecipient = true; +// } +// } +// } +// catch (Exception f) { +// throw new ExceptionConverter(f); +// } } if(!foundRecipient || envelopedData == null) { diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/TSAClientBouncyCastle.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/TSAClientBouncyCastle.java index 626b2b3b8..c5077f3a0 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/TSAClientBouncyCastle.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/TSAClientBouncyCastle.java @@ -1,230 +1,230 @@ -/* - * $Id: TSAClientBouncyCastle.java 3973 2009-06-16 10:30:31Z psoares33 $ - * - * Copyright 2009 Martin Brunecky, Aiken Sam - * - * The contents of this file are subject to the Mozilla Public License Version 1.1 - * (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the License. - * - * The Original Code is 'iText, a free JAVA-PDF library'. - * - * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by - * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. - * All Rights Reserved. - * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer - * are Copyright (C) 2009 by Martin Brunecky. All Rights Reserved. - * - * Contributor(s): all the names of the contributors are added in the source code - * where applicable. - * - * Alternatively, the contents of this file may be used under the terms of the - * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the - * provisions of LGPL are applicable instead of those above. If you wish to - * allow use of your version of this file only under the terms of the LGPL - * License and not to allow others to use your version of this file under - * the MPL, indicate your decision by deleting the provisions above and - * replace them with the notice and other provisions required by the LGPL. - * If you do not delete the provisions above, a recipient may use your version - * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the MPL as stated above or under the terms of the GNU - * Library General Public License as published by the Free Software Foundation; - * either version 2 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more - * details. - * - * If you didn't download this code from the following link, you should check if - * you aren't using an obsolete version: - * http://www.lowagie.com/iText/ - */ - -package com.fr.third.com.lowagie.text.pdf; - -import java.io.*; -import java.math.*; -import java.net.*; - -import org.bouncycastle.asn1.cmp.*; -import org.bouncycastle.asn1.x509.*; -import org.bouncycastle.tsp.*; - -import com.fr.third.com.lowagie.text.pdf.codec.Base64; - -/** - * Time Stamp Authority Client interface implementation using Bouncy Castle - * org.bouncycastle.tsp package. - *

- * Created by Aiken Sam, 2006-11-15, refactored by Martin Brunecky, 07/15/2007 - * for ease of subclassing. - *

- * @since 2.1.6 - */ -public class TSAClientBouncyCastle implements TSAClient { - /** URL of the Time Stamp Authority */ - protected String tsaURL; - /** TSA Username */ - protected String tsaUsername; - /** TSA password */ - protected String tsaPassword; - /** Estimate of the received time stamp token */ - protected int tokSzEstimate; - - /** - * Creates an instance of a TSAClient that will use BouncyCastle. - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - */ - public TSAClientBouncyCastle(String url) { - this(url, null, null, 4096); - } - - /** - * Creates an instance of a TSAClient that will use BouncyCastle. - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - * @param username String - user(account) name - * @param password String - password - */ - public TSAClientBouncyCastle(String url, String username, String password) { - this(url, username, password, 4096); - } - - /** - * Constructor. - * Note the token size estimate is updated by each call, as the token - * size is not likely to change (as long as we call the same TSA using - * the same imprint length). - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - * @param username String - user(account) name - * @param password String - password - * @param tokSzEstimate int - estimated size of received time stamp token (DER encoded) - */ - public TSAClientBouncyCastle(String url, String username, String password, int tokSzEstimate) { - this.tsaURL = url; - this.tsaUsername = username; - this.tsaPassword = password; - this.tokSzEstimate = tokSzEstimate; - } - - /** - * Get the token size estimate. - * Returned value reflects the result of the last succesfull call, padded - * @return an estimate of the token size - */ - public int getTokenSizeEstimate() { - return tokSzEstimate; - } - - /** - * Get RFC 3161 timeStampToken. - * Method may return null indicating that timestamp should be skipped. - * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) - * @param imprint byte[] - data imprint to be time-stamped - * @return byte[] - encoded, TSA signed data of the timeStampToken - * @throws Exception - TSA request failed - * @see com.fr.third.com.lowagie.text.pdf.TSAClient#getTimeStampToken(com.fr.third.com.lowagie.text.pdf.PdfPKCS7, byte[]) - */ - public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception { - return getTimeStampToken(imprint); - } - - /** - * Get timestamp token - Bouncy Castle request encoding / decoding layer - */ - protected byte[] getTimeStampToken(byte[] imprint) throws Exception { - byte[] respBytes = null; - try { - // Setup the time stamp request - TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); - tsqGenerator.setCertReq(true); - // tsqGenerator.setReqPolicy("1.3.6.1.4.1.601.10.3.1"); - BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); - TimeStampRequest request = tsqGenerator.generate(X509ObjectIdentifiers.id_SHA1.getId() , imprint, nonce); - byte[] requestBytes = request.getEncoded(); - - // Call the communications layer - respBytes = getTSAResponse(requestBytes); - - // Handle the TSA response - TimeStampResponse response = new TimeStampResponse(respBytes); - - // validate communication level attributes (RFC 3161 PKIStatus) - response.validate(request); - PKIFailureInfo failure = response.getFailInfo(); - int value = (failure == null) ? 0 : failure.intValue(); - if (value != 0) { - // @todo: Translate value of 15 error codes defined by PKIFailureInfo to string - throw new Exception("Invalid TSA '" + tsaURL + "' response, code " + value); - } - // @todo: validate the time stap certificate chain (if we want - // assure we do not sign using an invalid timestamp). - - // extract just the time stamp token (removes communication status info) - TimeStampToken tsToken = response.getTimeStampToken(); - if (tsToken == null) { - throw new Exception("TSA '" + tsaURL + "' failed to return time stamp token: " + response.getStatusString()); - } - TimeStampTokenInfo info = tsToken.getTimeStampInfo(); // to view details - byte[] encoded = tsToken.getEncoded(); - long stop = System.currentTimeMillis(); - - // Update our token size estimate for the next call (padded to be safe) - this.tokSzEstimate = encoded.length + 32; - return encoded; - } catch (Exception e) { - throw e; - } catch (Throwable t) { - throw new Exception("Failed to get TSA response from '" + tsaURL +"'", t); - } - } - - /** - * Get timestamp token - communications layer - * @return - byte[] - TSA response, raw bytes (RFC 3161 encoded) - */ - protected byte[] getTSAResponse(byte[] requestBytes) throws Exception { - // Setup the TSA connection - URL url = new URL(tsaURL); - URLConnection tsaConnection; - tsaConnection = (URLConnection) url.openConnection(); - - tsaConnection.setDoInput(true); - tsaConnection.setDoOutput(true); - tsaConnection.setUseCaches(false); - tsaConnection.setRequestProperty("Content-Type", "application/timestamp-query"); - //tsaConnection.setRequestProperty("Content-Transfer-Encoding", "base64"); - tsaConnection.setRequestProperty("Content-Transfer-Encoding", "binary"); - - if ((tsaUsername != null) && !tsaUsername.equals("") ) { - String userPassword = tsaUsername + ":" + tsaPassword; - tsaConnection.setRequestProperty("Authorization", "Basic " + - new String(Base64.encodeBytes(userPassword.getBytes()))); - } - OutputStream out = tsaConnection.getOutputStream(); - out.write(requestBytes); - out.close(); - - // Get TSA response as a byte array - InputStream inp = tsaConnection.getInputStream(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int bytesRead = 0; - while ((bytesRead = inp.read(buffer, 0, buffer.length)) >= 0) { - baos.write(buffer, 0, bytesRead); - } - byte[] respBytes = baos.toByteArray(); - - String encoding = tsaConnection.getContentEncoding(); - if (encoding != null && encoding.equalsIgnoreCase("base64")) { - respBytes = Base64.decode(new String(respBytes)); - } - return respBytes; - } -} \ No newline at end of file +///* +// * $Id: TSAClientBouncyCastle.java 3973 2009-06-16 10:30:31Z psoares33 $ +// * +// * Copyright 2009 Martin Brunecky, Aiken Sam +// * +// * The contents of this file are subject to the Mozilla Public License Version 1.1 +// * (the "License"); you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at http://www.mozilla.org/MPL/ +// * +// * Software distributed under the License is distributed on an "AS IS" basis, +// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// * for the specific language governing rights and limitations under the License. +// * +// * The Original Code is 'iText, a free JAVA-PDF library'. +// * +// * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by +// * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. +// * All Rights Reserved. +// * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer +// * are Copyright (C) 2009 by Martin Brunecky. All Rights Reserved. +// * +// * Contributor(s): all the names of the contributors are added in the source code +// * where applicable. +// * +// * Alternatively, the contents of this file may be used under the terms of the +// * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the +// * provisions of LGPL are applicable instead of those above. If you wish to +// * allow use of your version of this file only under the terms of the LGPL +// * License and not to allow others to use your version of this file under +// * the MPL, indicate your decision by deleting the provisions above and +// * replace them with the notice and other provisions required by the LGPL. +// * If you do not delete the provisions above, a recipient may use your version +// * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. +// * +// * This library is free software; you can redistribute it and/or modify it +// * under the terms of the MPL as stated above or under the terms of the GNU +// * Library General Public License as published by the Free Software Foundation; +// * either version 2 of the License, or any later version. +// * +// * This library is distributed in the hope that it will be useful, but WITHOUT +// * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more +// * details. +// * +// * If you didn't download this code from the following link, you should check if +// * you aren't using an obsolete version: +// * http://www.lowagie.com/iText/ +// */ +// +//package com.fr.third.com.lowagie.text.pdf; +// +//import java.io.*; +//import java.math.*; +//import java.net.*; +// +//import org.bouncycastle.asn1.cmp.*; +//import org.bouncycastle.asn1.x509.*; +//import org.bouncycastle.tsp.*; +// +//import com.fr.third.com.lowagie.text.pdf.codec.Base64; +// +///** +// * Time Stamp Authority Client interface implementation using Bouncy Castle +// * org.bouncycastle.tsp package. +// *

+// * Created by Aiken Sam, 2006-11-15, refactored by Martin Brunecky, 07/15/2007 +// * for ease of subclassing. +// *

+// * @since 2.1.6 +// */ +//public class TSAClientBouncyCastle implements TSAClient { +// /** URL of the Time Stamp Authority */ +// protected String tsaURL; +// /** TSA Username */ +// protected String tsaUsername; +// /** TSA password */ +// protected String tsaPassword; +// /** Estimate of the received time stamp token */ +// protected int tokSzEstimate; +// +// /** +// * Creates an instance of a TSAClient that will use BouncyCastle. +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// */ +// public TSAClientBouncyCastle(String url) { +// this(url, null, null, 4096); +// } +// +// /** +// * Creates an instance of a TSAClient that will use BouncyCastle. +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// * @param username String - user(account) name +// * @param password String - password +// */ +// public TSAClientBouncyCastle(String url, String username, String password) { +// this(url, username, password, 4096); +// } +// +// /** +// * Constructor. +// * Note the token size estimate is updated by each call, as the token +// * size is not likely to change (as long as we call the same TSA using +// * the same imprint length). +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// * @param username String - user(account) name +// * @param password String - password +// * @param tokSzEstimate int - estimated size of received time stamp token (DER encoded) +// */ +// public TSAClientBouncyCastle(String url, String username, String password, int tokSzEstimate) { +// this.tsaURL = url; +// this.tsaUsername = username; +// this.tsaPassword = password; +// this.tokSzEstimate = tokSzEstimate; +// } +// +// /** +// * Get the token size estimate. +// * Returned value reflects the result of the last succesfull call, padded +// * @return an estimate of the token size +// */ +// public int getTokenSizeEstimate() { +// return tokSzEstimate; +// } +// +// /** +// * Get RFC 3161 timeStampToken. +// * Method may return null indicating that timestamp should be skipped. +// * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) +// * @param imprint byte[] - data imprint to be time-stamped +// * @return byte[] - encoded, TSA signed data of the timeStampToken +// * @throws Exception - TSA request failed +// * @see com.fr.third.com.lowagie.text.pdf.TSAClient#getTimeStampToken(com.fr.third.com.lowagie.text.pdf.PdfPKCS7, byte[]) +// */ +// public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception { +// return getTimeStampToken(imprint); +// } +// +// /** +// * Get timestamp token - Bouncy Castle request encoding / decoding layer +// */ +// protected byte[] getTimeStampToken(byte[] imprint) throws Exception { +// byte[] respBytes = null; +// try { +// // Setup the time stamp request +// TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); +// tsqGenerator.setCertReq(true); +// // tsqGenerator.setReqPolicy("1.3.6.1.4.1.601.10.3.1"); +// BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); +// TimeStampRequest request = tsqGenerator.generate(X509ObjectIdentifiers.id_SHA1.getId() , imprint, nonce); +// byte[] requestBytes = request.getEncoded(); +// +// // Call the communications layer +// respBytes = getTSAResponse(requestBytes); +// +// // Handle the TSA response +// TimeStampResponse response = new TimeStampResponse(respBytes); +// +// // validate communication level attributes (RFC 3161 PKIStatus) +// response.validate(request); +// PKIFailureInfo failure = response.getFailInfo(); +// int value = (failure == null) ? 0 : failure.intValue(); +// if (value != 0) { +// // @todo: Translate value of 15 error codes defined by PKIFailureInfo to string +// throw new Exception("Invalid TSA '" + tsaURL + "' response, code " + value); +// } +// // @todo: validate the time stap certificate chain (if we want +// // assure we do not sign using an invalid timestamp). +// +// // extract just the time stamp token (removes communication status info) +// TimeStampToken tsToken = response.getTimeStampToken(); +// if (tsToken == null) { +// throw new Exception("TSA '" + tsaURL + "' failed to return time stamp token: " + response.getStatusString()); +// } +// TimeStampTokenInfo info = tsToken.getTimeStampInfo(); // to view details +// byte[] encoded = tsToken.getEncoded(); +// long stop = System.currentTimeMillis(); +// +// // Update our token size estimate for the next call (padded to be safe) +// this.tokSzEstimate = encoded.length + 32; +// return encoded; +// } catch (Exception e) { +// throw e; +// } catch (Throwable t) { +// throw new Exception("Failed to get TSA response from '" + tsaURL +"'", t); +// } +// } +// +// /** +// * Get timestamp token - communications layer +// * @return - byte[] - TSA response, raw bytes (RFC 3161 encoded) +// */ +// protected byte[] getTSAResponse(byte[] requestBytes) throws Exception { +// // Setup the TSA connection +// URL url = new URL(tsaURL); +// URLConnection tsaConnection; +// tsaConnection = (URLConnection) url.openConnection(); +// +// tsaConnection.setDoInput(true); +// tsaConnection.setDoOutput(true); +// tsaConnection.setUseCaches(false); +// tsaConnection.setRequestProperty("Content-Type", "application/timestamp-query"); +// //tsaConnection.setRequestProperty("Content-Transfer-Encoding", "base64"); +// tsaConnection.setRequestProperty("Content-Transfer-Encoding", "binary"); +// +// if ((tsaUsername != null) && !tsaUsername.equals("") ) { +// String userPassword = tsaUsername + ":" + tsaPassword; +// tsaConnection.setRequestProperty("Authorization", "Basic " + +// new String(Base64.encodeBytes(userPassword.getBytes()))); +// } +// OutputStream out = tsaConnection.getOutputStream(); +// out.write(requestBytes); +// out.close(); +// +// // Get TSA response as a byte array +// InputStream inp = tsaConnection.getInputStream(); +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// byte[] buffer = new byte[1024]; +// int bytesRead = 0; +// while ((bytesRead = inp.read(buffer, 0, buffer.length)) >= 0) { +// baos.write(buffer, 0, bytesRead); +// } +// byte[] respBytes = baos.toByteArray(); +// +// String encoding = tsaConnection.getContentEncoding(); +// if (encoding != null && encoding.equalsIgnoreCase("base64")) { +// respBytes = Base64.decode(new String(respBytes)); +// } +// return respBytes; +// } +//} \ No newline at end of file diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/crypto/AESCipher.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/crypto/AESCipher.java index 64d0f4490..829d79d9d 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/crypto/AESCipher.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/pdf/crypto/AESCipher.java @@ -48,12 +48,12 @@ */ package com.fr.third.com.lowagie.text.pdf.crypto; -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.engines.AESFastEngine; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; +import com.fr.third.org.bouncycastle.crypto.BlockCipher; +import com.fr.third.org.bouncycastle.crypto.engines.AESFastEngine; +import com.fr.third.org.bouncycastle.crypto.modes.CBCBlockCipher; +import com.fr.third.org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; +import com.fr.third.org.bouncycastle.crypto.params.KeyParameter; +import com.fr.third.org.bouncycastle.crypto.params.ParametersWithIV; /** * Creates an AES Cipher with CBC and padding PKCS5/7. diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/OcspClientBouncyCastle.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/OcspClientBouncyCastle.java index 16e4a793f..0ca4706e2 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/OcspClientBouncyCastle.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/OcspClientBouncyCastle.java @@ -1,185 +1,185 @@ -/* - * $Id: OcspClientBouncyCastle.java 3959 2009-06-09 08:31:05Z blowagie $ - * - * Copyright 2009 Paulo Soares - * - * The contents of this file are subject to the Mozilla Public License Version 1.1 - * (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the License. - * - * The Original Code is 'iText, a free JAVA-PDF library'. - * - * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by - * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. - * All Rights Reserved. - * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer - * are Copyright (C) 2009 by Paulo Soares. All Rights Reserved. - * - * Contributor(s): all the names of the contributors are added in the source code - * where applicable. - * - * Alternatively, the contents of this file may be used under the terms of the - * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the - * provisions of LGPL are applicable instead of those above. If you wish to - * allow use of your version of this file only under the terms of the LGPL - * License and not to allow others to use your version of this file under - * the MPL, indicate your decision by deleting the provisions above and - * replace them with the notice and other provisions required by the LGPL. - * If you do not delete the provisions above, a recipient may use your version - * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the MPL as stated above or under the terms of the GNU - * Library General Public License as published by the Free Software Foundation; - * either version 2 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more - * details. - * - * If you didn't download this code from the following link, you should check if - * you aren't using an obsolete version: - * http://www.lowagie.com/iText/ - */ - -package com.fr.third.v2.lowagie.text.pdf; - -import com.fr.third.v2.lowagie.text.ExceptionConverter; - -import java.io.BufferedOutputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.math.BigInteger; -import java.net.HttpURLConnection; -import java.net.URL; -import java.security.Security; -import java.security.cert.X509Certificate; -import java.util.Vector; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; -import org.bouncycastle.asn1.x509.X509Extension; -import org.bouncycastle.asn1.x509.X509Extensions; -import org.bouncycastle.ocsp.BasicOCSPResp; -import org.bouncycastle.ocsp.CertificateID; -import org.bouncycastle.ocsp.CertificateStatus; -import org.bouncycastle.ocsp.OCSPException; -import org.bouncycastle.ocsp.OCSPReq; -import org.bouncycastle.ocsp.OCSPReqGenerator; -import org.bouncycastle.ocsp.OCSPResp; -import org.bouncycastle.ocsp.SingleResp; - -/** - * OcspClient implementation using BouncyCastle. - * @author psoares - * @since 2.1.6 - */ -public class OcspClientBouncyCastle implements OcspClient { - /** root certificate */ - private X509Certificate rootCert; - /** check certificate */ - private X509Certificate checkCert; - /** OCSP URL */ - private String url; - - /** - * Creates an instance of an OcspClient that will be using BouncyCastle. - * @param checkCert the check certificate - * @param rootCert the root certificate - * @param url the OCSP URL - */ - public OcspClientBouncyCastle(X509Certificate checkCert, X509Certificate rootCert, String url) { - this.checkCert = checkCert; - this.rootCert = rootCert; - this.url = url; - } - - /** - * Generates an OCSP request using BouncyCastle. - * @param issuerCert certificate of the issues - * @param serialNumber serial number - * @return an OCSP request - * @throws OCSPException - * @throws IOException - */ - private static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber) throws OCSPException, IOException { - //Add provider BC - Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); - - // Generate the id for the certificate we are looking for - CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber); - - // basic request generation with nonce - OCSPReqGenerator gen = new OCSPReqGenerator(); - - gen.addRequest(id); - - // create details for nonce extension - Vector oids = new Vector(); - Vector values = new Vector(); - - oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); - values.add(new X509Extension(false, new DEROctetString(new DEROctetString(PdfEncryption.createDocumentId()).getEncoded()))); - - gen.setRequestExtensions(new X509Extensions(oids, values)); - - return gen.generate(); - } - - /** - * @return a byte array - * @see OcspClient#getEncoded() - */ - public byte[] getEncoded() { - try { - OCSPReq request = generateOCSPRequest(rootCert, checkCert.getSerialNumber()); - byte[] array = request.getEncoded(); - URL urlt = new URL(url); - HttpURLConnection con = (HttpURLConnection)urlt.openConnection(); - con.setRequestProperty("Content-Type", "application/ocsp-request"); - con.setRequestProperty("Accept", "application/ocsp-response"); - con.setDoOutput(true); - OutputStream out = con.getOutputStream(); - DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out)); - dataOut.write(array); - dataOut.flush(); - dataOut.close(); - if (con.getResponseCode() / 100 != 2) { - throw new IOException("Invalid HTTP response"); - } - //Get Response - InputStream in = (InputStream) con.getContent(); - OCSPResp ocspResponse = new OCSPResp(in); - - if (ocspResponse.getStatus() != 0) - throw new IOException("Invalid status: " + ocspResponse.getStatus()); - BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); - if (basicResponse != null) { - SingleResp[] responses = basicResponse.getResponses(); - if (responses.length == 1) { - SingleResp resp = responses[0]; - Object status = resp.getCertStatus(); - if (status == CertificateStatus.GOOD) { - return basicResponse.getEncoded(); - } - else if (status instanceof org.bouncycastle.ocsp.RevokedStatus) { - throw new IOException("OCSP Status is revoked!"); - } - else { - throw new IOException("OCSP Status is unknown!"); - } - } - } - } - catch (Exception ex) { - throw new ExceptionConverter(ex); - } - return null; - } -} +///* +// * $Id: OcspClientBouncyCastle.java 3959 2009-06-09 08:31:05Z blowagie $ +// * +// * Copyright 2009 Paulo Soares +// * +// * The contents of this file are subject to the Mozilla Public License Version 1.1 +// * (the "License"); you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at http://www.mozilla.org/MPL/ +// * +// * Software distributed under the License is distributed on an "AS IS" basis, +// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// * for the specific language governing rights and limitations under the License. +// * +// * The Original Code is 'iText, a free JAVA-PDF library'. +// * +// * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by +// * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. +// * All Rights Reserved. +// * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer +// * are Copyright (C) 2009 by Paulo Soares. All Rights Reserved. +// * +// * Contributor(s): all the names of the contributors are added in the source code +// * where applicable. +// * +// * Alternatively, the contents of this file may be used under the terms of the +// * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the +// * provisions of LGPL are applicable instead of those above. If you wish to +// * allow use of your version of this file only under the terms of the LGPL +// * License and not to allow others to use your version of this file under +// * the MPL, indicate your decision by deleting the provisions above and +// * replace them with the notice and other provisions required by the LGPL. +// * If you do not delete the provisions above, a recipient may use your version +// * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. +// * +// * This library is free software; you can redistribute it and/or modify it +// * under the terms of the MPL as stated above or under the terms of the GNU +// * Library General Public License as published by the Free Software Foundation; +// * either version 2 of the License, or any later version. +// * +// * This library is distributed in the hope that it will be useful, but WITHOUT +// * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more +// * details. +// * +// * If you didn't download this code from the following link, you should check if +// * you aren't using an obsolete version: +// * http://www.lowagie.com/iText/ +// */ +// +//package com.fr.third.v2.lowagie.text.pdf; +// +//import com.fr.third.v2.lowagie.text.ExceptionConverter; +// +//import java.io.BufferedOutputStream; +//import java.io.DataOutputStream; +//import java.io.IOException; +//import java.io.InputStream; +//import java.io.OutputStream; +//import java.math.BigInteger; +//import java.net.HttpURLConnection; +//import java.net.URL; +//import java.security.Security; +//import java.security.cert.X509Certificate; +//import java.util.Vector; +//import org.bouncycastle.asn1.DEROctetString; +//import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +//import org.bouncycastle.asn1.x509.X509Extension; +//import org.bouncycastle.asn1.x509.X509Extensions; +//import org.bouncycastle.ocsp.BasicOCSPResp; +//import org.bouncycastle.ocsp.CertificateID; +//import org.bouncycastle.ocsp.CertificateStatus; +//import org.bouncycastle.ocsp.OCSPException; +//import org.bouncycastle.ocsp.OCSPReq; +//import org.bouncycastle.ocsp.OCSPReqGenerator; +//import org.bouncycastle.ocsp.OCSPResp; +//import org.bouncycastle.ocsp.SingleResp; +// +///** +// * OcspClient implementation using BouncyCastle. +// * @author psoares +// * @since 2.1.6 +// */ +//public class OcspClientBouncyCastle implements OcspClient { +// /** root certificate */ +// private X509Certificate rootCert; +// /** check certificate */ +// private X509Certificate checkCert; +// /** OCSP URL */ +// private String url; +// +// /** +// * Creates an instance of an OcspClient that will be using BouncyCastle. +// * @param checkCert the check certificate +// * @param rootCert the root certificate +// * @param url the OCSP URL +// */ +// public OcspClientBouncyCastle(X509Certificate checkCert, X509Certificate rootCert, String url) { +// this.checkCert = checkCert; +// this.rootCert = rootCert; +// this.url = url; +// } +// +// /** +// * Generates an OCSP request using BouncyCastle. +// * @param issuerCert certificate of the issues +// * @param serialNumber serial number +// * @return an OCSP request +// * @throws OCSPException +// * @throws IOException +// */ +// private static OCSPReq generateOCSPRequest(X509Certificate issuerCert, BigInteger serialNumber) throws OCSPException, IOException { +// //Add provider BC +// Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); +// +// // Generate the id for the certificate we are looking for +// CertificateID id = new CertificateID(CertificateID.HASH_SHA1, issuerCert, serialNumber); +// +// // basic request generation with nonce +// OCSPReqGenerator gen = new OCSPReqGenerator(); +// +// gen.addRequest(id); +// +// // create details for nonce extension +// Vector oids = new Vector(); +// Vector values = new Vector(); +// +// oids.add(OCSPObjectIdentifiers.id_pkix_ocsp_nonce); +// values.add(new X509Extension(false, new DEROctetString(new DEROctetString(PdfEncryption.createDocumentId()).getEncoded()))); +// +// gen.setRequestExtensions(new X509Extensions(oids, values)); +// +// return gen.generate(); +// } +// +// /** +// * @return a byte array +// * @see OcspClient#getEncoded() +// */ +// public byte[] getEncoded() { +// try { +// OCSPReq request = generateOCSPRequest(rootCert, checkCert.getSerialNumber()); +// byte[] array = request.getEncoded(); +// URL urlt = new URL(url); +// HttpURLConnection con = (HttpURLConnection)urlt.openConnection(); +// con.setRequestProperty("Content-Type", "application/ocsp-request"); +// con.setRequestProperty("Accept", "application/ocsp-response"); +// con.setDoOutput(true); +// OutputStream out = con.getOutputStream(); +// DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(out)); +// dataOut.write(array); +// dataOut.flush(); +// dataOut.close(); +// if (con.getResponseCode() / 100 != 2) { +// throw new IOException("Invalid HTTP response"); +// } +// //Get Response +// InputStream in = (InputStream) con.getContent(); +// OCSPResp ocspResponse = new OCSPResp(in); +// +// if (ocspResponse.getStatus() != 0) +// throw new IOException("Invalid status: " + ocspResponse.getStatus()); +// BasicOCSPResp basicResponse = (BasicOCSPResp) ocspResponse.getResponseObject(); +// if (basicResponse != null) { +// SingleResp[] responses = basicResponse.getResponses(); +// if (responses.length == 1) { +// SingleResp resp = responses[0]; +// Object status = resp.getCertStatus(); +// if (status == CertificateStatus.GOOD) { +// return basicResponse.getEncoded(); +// } +// else if (status instanceof org.bouncycastle.ocsp.RevokedStatus) { +// throw new IOException("OCSP Status is revoked!"); +// } +// else { +// throw new IOException("OCSP Status is unknown!"); +// } +// } +// } +// } +// catch (Exception ex) { +// throw new ExceptionConverter(ex); +// } +// return null; +// } +//} diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPKCS7.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPKCS7.java index 1497f2eeb..def996620 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPKCS7.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPKCS7.java @@ -46,6 +46,8 @@ */ package com.fr.third.v2.lowagie.text.pdf; +import com.fr.third.org.bouncycastle.asn1.ASN1Object; +import com.fr.third.org.bouncycastle.asn1.ASN1String; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -76,42 +78,40 @@ import java.util.Iterator; import java.util.Set; import com.fr.third.v2.lowagie.text.ExceptionConverter; -import org.bouncycastle.asn1.ASN1Encodable; -import org.bouncycastle.asn1.ASN1EncodableVector; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.ASN1OutputStream; -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.ASN1Set; -import org.bouncycastle.asn1.ASN1TaggedObject; -import org.bouncycastle.asn1.DEREnumerated; -import org.bouncycastle.asn1.DERInteger; -import org.bouncycastle.asn1.DERNull; -import org.bouncycastle.asn1.DERObject; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DERSequence; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.DERString; -import org.bouncycastle.asn1.DERTaggedObject; -import org.bouncycastle.asn1.DERUTCTime; -import org.bouncycastle.asn1.cms.AttributeTable; -import org.bouncycastle.asn1.cms.Attribute; -import org.bouncycastle.asn1.ocsp.BasicOCSPResponse; -import org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; -import org.bouncycastle.jce.provider.X509CRLParser; -import org.bouncycastle.jce.provider.X509CertParser; +import com.fr.third.org.bouncycastle.asn1.ASN1Encodable; +import com.fr.third.org.bouncycastle.asn1.ASN1EncodableVector; +import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; +import com.fr.third.org.bouncycastle.asn1.ASN1OutputStream; +import com.fr.third.org.bouncycastle.asn1.ASN1Sequence; +import com.fr.third.org.bouncycastle.asn1.ASN1Set; +import com.fr.third.org.bouncycastle.asn1.ASN1TaggedObject; +import com.fr.third.org.bouncycastle.asn1.DEREnumerated; +import com.fr.third.org.bouncycastle.asn1.DERInteger; +import com.fr.third.org.bouncycastle.asn1.DERNull; +import com.fr.third.org.bouncycastle.asn1.DERObjectIdentifier; +import com.fr.third.org.bouncycastle.asn1.DEROctetString; +import com.fr.third.org.bouncycastle.asn1.DERSequence; +import com.fr.third.org.bouncycastle.asn1.DERSet; +import com.fr.third.org.bouncycastle.asn1.DERTaggedObject; +import com.fr.third.org.bouncycastle.asn1.DERUTCTime; +import com.fr.third.org.bouncycastle.asn1.cms.AttributeTable; +import com.fr.third.org.bouncycastle.asn1.cms.Attribute; +import com.fr.third.org.bouncycastle.asn1.ocsp.BasicOCSPResponse; +import com.fr.third.org.bouncycastle.asn1.ocsp.OCSPObjectIdentifiers; +import com.fr.third.org.bouncycastle.jce.provider.X509CRLParser; +import com.fr.third.org.bouncycastle.jce.provider.X509CertParser; import java.security.cert.CertificateParsingException; import java.util.Date; -import org.bouncycastle.asn1.ASN1OctetString; -import org.bouncycastle.asn1.cms.ContentInfo; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.tsp.MessageImprint; -import org.bouncycastle.asn1.x509.X509Extensions; -import org.bouncycastle.ocsp.BasicOCSPResp; -import org.bouncycastle.ocsp.CertificateID; -import org.bouncycastle.ocsp.SingleResp; -import org.bouncycastle.tsp.TimeStampToken; +import com.fr.third.org.bouncycastle.asn1.ASN1OctetString; +import com.fr.third.org.bouncycastle.asn1.cms.ContentInfo; +import com.fr.third.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import com.fr.third.org.bouncycastle.asn1.tsp.MessageImprint; +import com.fr.third.org.bouncycastle.asn1.x509.X509Extensions; +//import org.bouncycastle.ocsp.BasicOCSPResp; +//import org.bouncycastle.ocsp.CertificateID; +//import org.bouncycastle.ocsp.SingleResp; +//import org.bouncycastle.tsp.TimeStampToken; /** * This class does all the processing related to signing and verifying a PKCS#7 @@ -167,7 +167,7 @@ public class PdfPKCS7 { */ private String signName; - private TimeStampToken timeStampToken; +// private TimeStampToken timeStampToken; private static final HashMap digestNames = new HashMap(); private static final HashMap algorithmNames = new HashMap(); @@ -273,23 +273,23 @@ public class PdfPKCS7 { * @return the timestamp token or null * @since 2.1.6 */ - public TimeStampToken getTimeStampToken() { - return timeStampToken; - } +// public TimeStampToken getTimeStampToken() { +// return timeStampToken; +// } /** * Gets the timestamp date * @return a date * @since 2.1.6 */ - public Calendar getTimeStampDate() { - if (timeStampToken == null) - return null; - Calendar cal = new GregorianCalendar(); - Date date = timeStampToken.getTimeStampInfo().getGenTime(); - cal.setTime(date); - return cal; - } +// public Calendar getTimeStampDate() { +// if (timeStampToken == null) +// return null; +// Calendar cal = new GregorianCalendar(); +// Date date = timeStampToken.getTimeStampInfo().getGenTime(); +// cal.setTime(date); +// return cal; +// } /** * Verifies a signature using the sub-filter adbe.x509.rsa_sha1. @@ -319,19 +319,19 @@ public class PdfPKCS7 { } } - private BasicOCSPResp basicResp; +// private BasicOCSPResp basicResp; /** * Gets the OCSP basic response if there is one. * @return the OCSP basic response or null * @since 2.1.6 */ - public BasicOCSPResp getOcsp() { - return basicResp; - } +// public BasicOCSPResp getOcsp() { +// return basicResp; +// } private void findOcsp(ASN1Sequence seq) throws IOException { - basicResp = null; +// basicResp = null; boolean ret = false; while (true) { if ((seq.getObjectAt(0) instanceof DERObjectIdentifier) @@ -362,7 +362,7 @@ public class PdfPKCS7 { DEROctetString os = (DEROctetString)seq.getObjectAt(1); ASN1InputStream inp = new ASN1InputStream(os.getOctets()); BasicOCSPResponse resp = BasicOCSPResponse.getInstance(inp.readObject()); - basicResp = new BasicOCSPResp(resp); +// basicResp = new BasicOCSPResp(resp); } /** @@ -379,7 +379,7 @@ public class PdfPKCS7 { // // Basic checks to make sure it's a PKCS#7 SignedData Object // - DERObject pkcs; + ASN1Object pkcs; try { pkcs = din.readObject(); @@ -464,7 +464,7 @@ public class PdfPKCS7 { if (signerInfo.getObjectAt(next) instanceof ASN1TaggedObject) { ASN1TaggedObject tagsig = (ASN1TaggedObject)signerInfo.getObjectAt(next); ASN1Set sseq = ASN1Set.getInstance(tagsig, false); - sigAttr = sseq.getEncoded(ASN1Encodable.DER); + sigAttr = sseq.getEncoded("DER"); for (int k = 0; k < sseq.size(); ++k) { ASN1Sequence seq2 = (ASN1Sequence)sseq.getObjectAt(k); @@ -499,7 +499,7 @@ public class PdfPKCS7 { ASN1Set attributeValues = ts.getAttrValues(); ASN1Sequence tokenSequence = ASN1Sequence.getInstance(attributeValues.getObjectAt(0)); ContentInfo contentInfo = new ContentInfo(tokenSequence); - this.timeStampToken = new TimeStampToken(contentInfo); +// this.timeStampToken = new TimeStampToken(contentInfo); } } if (RSAdata != null || digestAttr != null) { @@ -641,15 +641,15 @@ public class PdfPKCS7 { * @return true if it checks false otherwise * @since 2.1.6 */ - public boolean verifyTimestampImprint() throws NoSuchAlgorithmException { - if (timeStampToken == null) - return false; - MessageImprint imprint = timeStampToken.getTimeStampInfo().toTSTInfo().getMessageImprint(); - byte[] md = MessageDigest.getInstance("SHA-1").digest(digest); - byte[] imphashed = imprint.getHashedMessage(); - boolean res = Arrays.equals(md, imphashed); - return res; - } +// public boolean verifyTimestampImprint() throws NoSuchAlgorithmException { +// if (timeStampToken == null) +// return false; +// MessageImprint imprint = timeStampToken.getTimeStampInfo().toTSTInfo().getMessageImprint(); +// byte[] md = MessageDigest.getInstance("SHA-1").digest(digest); +// byte[] imphashed = imprint.getHashedMessage(); +// boolean res = Arrays.equals(md, imphashed); +// return res; +// } /** * Get all the X.509 certificates associated with this PKCS#7 object in no particular order. @@ -888,27 +888,27 @@ public class PdfPKCS7 { * @return true is a certificate was found * @since 2.1.6 */ - public static boolean verifyOcspCertificates(BasicOCSPResp ocsp, KeyStore keystore, String provider) { - if (provider == null) - provider = "BC"; - try { - for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { - try { - String alias = (String)aliases.nextElement(); - if (!keystore.isCertificateEntry(alias)) - continue; - X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); - if (ocsp.verify(certStoreX509.getPublicKey(), provider)) - return true; - } - catch (Exception ex) { - } - } - } - catch (Exception e) { - } - return false; - } +// public static boolean verifyOcspCertificates(BasicOCSPResp ocsp, KeyStore keystore, String provider) { +// if (provider == null) +// provider = "BC"; +// try { +// for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { +// try { +// String alias = (String)aliases.nextElement(); +// if (!keystore.isCertificateEntry(alias)) +// continue; +// X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); +// if (ocsp.verify(certStoreX509.getPublicKey(), provider)) +// return true; +// } +// catch (Exception ex) { +// } +// } +// } +// catch (Exception e) { +// } +// return false; +// } /** * Verifies a timestamp against a KeyStore. @@ -918,27 +918,27 @@ public class PdfPKCS7 { * @return true is a certificate was found * @since 2.1.6 */ - public static boolean verifyTimestampCertificates(TimeStampToken ts, KeyStore keystore, String provider) { - if (provider == null) - provider = "BC"; - try { - for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { - try { - String alias = (String)aliases.nextElement(); - if (!keystore.isCertificateEntry(alias)) - continue; - X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); - ts.validate(certStoreX509, provider); - return true; - } - catch (Exception ex) { - } - } - } - catch (Exception e) { - } - return false; - } +// public static boolean verifyTimestampCertificates(TimeStampToken ts, KeyStore keystore, String provider) { +// if (provider == null) +// provider = "BC"; +// try { +// for (Enumeration aliases = keystore.aliases(); aliases.hasMoreElements();) { +// try { +// String alias = (String)aliases.nextElement(); +// if (!keystore.isCertificateEntry(alias)) +// continue; +// X509Certificate certStoreX509 = (X509Certificate)keystore.getCertificate(alias); +// ts.validate(certStoreX509, provider); +// return true; +// } +// catch (Exception ex) { +// } +// } +// } +// catch (Exception e) { +// } +// return false; +// } /** * Retrieves the OCSP URL from the given certificate. @@ -949,7 +949,7 @@ public class PdfPKCS7 { */ public static String getOCSPURL(X509Certificate certificate) throws CertificateParsingException { try { - DERObject obj = getExtensionValue(certificate, X509Extensions.AuthorityInfoAccess.getId()); + ASN1Object obj = getExtensionValue(certificate, X509Extensions.AuthorityInfoAccess.getId()); if (obj == null) { return null; } @@ -961,7 +961,7 @@ public class PdfPKCS7 { continue; } else { if ((AccessDescription.getObjectAt(0) instanceof DERObjectIdentifier) && ((DERObjectIdentifier)AccessDescription.getObjectAt(0)).getId().equals("1.3.6.1.5.5.7.48.1")) { - String AccessLocation = getStringFromGeneralName((DERObject)AccessDescription.getObjectAt(1)); + String AccessLocation = getStringFromGeneralName((ASN1Object)AccessDescription.getObjectAt(1)); if ( AccessLocation == null ) { return "" ; } else { @@ -980,26 +980,26 @@ public class PdfPKCS7 { * @return true if it checks false otherwise * @since 2.1.6 */ - public boolean isRevocationValid() { - if (basicResp == null) - return false; - if (signCerts.size() < 2) - return false; - try { - X509Certificate[] cs = (X509Certificate[])getSignCertificateChain(); - SingleResp sr = basicResp.getResponses()[0]; - CertificateID cid = sr.getCertID(); - X509Certificate sigcer = getSigningCertificate(); - X509Certificate isscer = cs[1]; - CertificateID tis = new CertificateID(CertificateID.HASH_SHA1, isscer, sigcer.getSerialNumber()); - return tis.equals(cid); - } - catch (Exception ex) { - } - return false; - } +// public boolean isRevocationValid() { +// if (basicResp == null) +// return false; +// if (signCerts.size() < 2) +// return false; +// try { +// X509Certificate[] cs = (X509Certificate[])getSignCertificateChain(); +// SingleResp sr = basicResp.getResponses()[0]; +// CertificateID cid = sr.getCertID(); +// X509Certificate sigcer = getSigningCertificate(); +// X509Certificate isscer = cs[1]; +// CertificateID tis = new CertificateID(CertificateID.HASH_SHA1, isscer, sigcer.getSerialNumber()); +// return tis.equals(cid); +// } +// catch (Exception ex) { +// } +// return false; +// } - private static DERObject getExtensionValue(X509Certificate cert, String oid) throws IOException { + private static ASN1Object getExtensionValue(X509Certificate cert, String oid) throws IOException { byte[] bytes = cert.getExtensionValue(oid); if (bytes == null) { return null; @@ -1010,7 +1010,7 @@ public class PdfPKCS7 { return aIn.readObject(); } - private static String getStringFromGeneralName(DERObject names) throws IOException { + private static String getStringFromGeneralName(ASN1Object names) throws IOException { DERTaggedObject taggedObject = (DERTaggedObject) names ; return new String(ASN1OctetString.getInstance(taggedObject, false).getOctets(), "ISO-8859-1"); } @@ -1020,11 +1020,11 @@ public class PdfPKCS7 { * @param enc a TBSCertificate in a byte array * @return a DERObject */ - private static DERObject getIssuer(byte[] enc) { + private static ASN1Object getIssuer(byte[] enc) { try { ASN1InputStream in = new ASN1InputStream(new ByteArrayInputStream(enc)); ASN1Sequence seq = (ASN1Sequence)in.readObject(); - return (DERObject)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 3 : 2); + return (ASN1Object)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 3 : 2); } catch (IOException e) { throw new ExceptionConverter(e); @@ -1036,11 +1036,11 @@ public class PdfPKCS7 { * @param enc A TBSCertificate in a byte array * @return a DERObject */ - private static DERObject getSubject(byte[] enc) { + private static ASN1Object getSubject(byte[] enc) { try { ASN1InputStream in = new ASN1InputStream(new ByteArrayInputStream(enc)); ASN1Sequence seq = (ASN1Sequence)in.readObject(); - return (DERObject)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 5 : 4); + return (ASN1Object)seq.getObjectAt(seq.getObjectAt(0) instanceof DERTaggedObject ? 5 : 4); } catch (IOException e) { throw new ExceptionConverter(e); @@ -1340,7 +1340,7 @@ public class PdfPKCS7 { */ public byte[] getAuthenticatedAttributeBytes(byte secondDigest[], Calendar signingTime, byte[] ocsp) { try { - return getAuthenticatedAttributeSet(secondDigest, signingTime, ocsp).getEncoded(ASN1Encodable.DER); + return getAuthenticatedAttributeSet(secondDigest, signingTime, ocsp).getEncoded("DER"); } catch (Exception e) { throw new ExceptionConverter(e); @@ -1575,7 +1575,7 @@ public class PdfPKCS7 { vs = new ArrayList(); values.put(id, vs); } - vs.add(((DERString)s.getObjectAt(1)).getString()); + vs.add(((ASN1String)s.getObjectAt(1)).getString()); } } } diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPublicKeySecurityHandler.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPublicKeySecurityHandler.java index 044b9fae6..1c5fc76f1 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPublicKeySecurityHandler.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfPublicKeySecurityHandler.java @@ -89,6 +89,8 @@ package com.fr.third.v2.lowagie.text.pdf; +import com.fr.third.org.bouncycastle.asn1.ASN1Object; +import com.fr.third.org.bouncycastle.asn1.ASN1Set; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -107,22 +109,21 @@ import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.DERObject; -import org.bouncycastle.asn1.DERObjectIdentifier; -import org.bouncycastle.asn1.DEROctetString; -import org.bouncycastle.asn1.DEROutputStream; -import org.bouncycastle.asn1.DERSet; -import org.bouncycastle.asn1.cms.ContentInfo; -import org.bouncycastle.asn1.cms.EncryptedContentInfo; -import org.bouncycastle.asn1.cms.EnvelopedData; -import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; -import org.bouncycastle.asn1.cms.KeyTransRecipientInfo; -import org.bouncycastle.asn1.cms.RecipientIdentifier; -import org.bouncycastle.asn1.cms.RecipientInfo; -import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; -import org.bouncycastle.asn1.x509.AlgorithmIdentifier; -import org.bouncycastle.asn1.x509.TBSCertificateStructure; +import com.fr.third.org.bouncycastle.asn1.ASN1InputStream; +import com.fr.third.org.bouncycastle.asn1.DERObjectIdentifier; +import com.fr.third.org.bouncycastle.asn1.DEROctetString; +import com.fr.third.org.bouncycastle.asn1.DEROutputStream; +import com.fr.third.org.bouncycastle.asn1.DERSet; +import com.fr.third.org.bouncycastle.asn1.cms.ContentInfo; +import com.fr.third.org.bouncycastle.asn1.cms.EncryptedContentInfo; +import com.fr.third.org.bouncycastle.asn1.cms.EnvelopedData; +import com.fr.third.org.bouncycastle.asn1.cms.IssuerAndSerialNumber; +import com.fr.third.org.bouncycastle.asn1.cms.KeyTransRecipientInfo; +import com.fr.third.org.bouncycastle.asn1.cms.RecipientIdentifier; +import com.fr.third.org.bouncycastle.asn1.cms.RecipientInfo; +import com.fr.third.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; +import com.fr.third.org.bouncycastle.asn1.x509.AlgorithmIdentifier; +import com.fr.third.org.bouncycastle.asn1.x509.TBSCertificateStructure; /** * @author Aiken Sam (aikensam@ieee.org) @@ -244,7 +245,7 @@ public class PdfPublicKeySecurityHandler { pkcs7input[22] = two; pkcs7input[23] = one; - DERObject obj = createDERForRecipient(pkcs7input, (X509Certificate)certificate); + ASN1Object obj = createDERForRecipient(pkcs7input, (X509Certificate)certificate); ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -276,7 +277,7 @@ public class PdfPublicKeySecurityHandler { return EncodedRecipients; } - private DERObject createDERForRecipient(byte[] in, X509Certificate cert) + private ASN1Object createDERForRecipient(byte[] in, X509Certificate cert) throws IOException, GeneralSecurityException { @@ -287,7 +288,7 @@ public class PdfPublicKeySecurityHandler { AlgorithmParameters algorithmparameters = algorithmparametergenerator.generateParameters(); ByteArrayInputStream bytearrayinputstream = new ByteArrayInputStream(algorithmparameters.getEncoded("ASN.1")); ASN1InputStream asn1inputstream = new ASN1InputStream(bytearrayinputstream); - DERObject derobject = asn1inputstream.readObject(); + ASN1Object derobject = asn1inputstream.readObject(); KeyGenerator keygenerator = KeyGenerator.getInstance(s); keygenerator.init(128); SecretKey secretkey = keygenerator.generateKey(); @@ -300,10 +301,10 @@ public class PdfPublicKeySecurityHandler { AlgorithmIdentifier algorithmidentifier = new AlgorithmIdentifier(new DERObjectIdentifier(s), derobject); EncryptedContentInfo encryptedcontentinfo = new EncryptedContentInfo(PKCSObjectIdentifiers.data, algorithmidentifier, deroctetstring); - EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo, null); + EnvelopedData env = new EnvelopedData(null, derset, encryptedcontentinfo,(ASN1Set) null); ContentInfo contentinfo = new ContentInfo(PKCSObjectIdentifiers.envelopedData, env); - return contentinfo.getDERObject(); + return contentinfo.getContentType(); } private KeyTransRecipientInfo computeRecipientInfo(X509Certificate x509certificate, byte[] abyte0) @@ -318,7 +319,7 @@ public class PdfPublicKeySecurityHandler { new IssuerAndSerialNumber( tbscertificatestructure.getIssuer(), tbscertificatestructure.getSerialNumber().getValue()); - Cipher cipher = Cipher.getInstance(algorithmidentifier.getObjectId().getId()); + Cipher cipher = Cipher.getInstance(algorithmidentifier.getAlgorithm().getId()); cipher.init(1, x509certificate); DEROctetString deroctetstring = new DEROctetString(cipher.doFinal(abyte0)); RecipientIdentifier recipId = new RecipientIdentifier(issuerandserialnumber); diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfReader.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfReader.java index 81bf95987..9aafda9e2 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfReader.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfReader.java @@ -79,8 +79,8 @@ import com.fr.third.v2.lowagie.text.pdf.interfaces.PdfViewerPreferences; import com.fr.third.v2.lowagie.text.pdf.internal.PdfViewerPreferencesImp; import com.fr.third.v2.lowagie.text.exceptions.BadPasswordException; -import org.bouncycastle.cms.CMSEnvelopedData; -import org.bouncycastle.cms.RecipientInformation; +//import org.bouncycastle.cms.CMSEnvelopedData; +//import org.bouncycastle.cms.RecipientInformation; /** Reads a PDF document. * @author Paulo Soares (psoares@consiste.pt) @@ -710,24 +710,24 @@ public class PdfReader implements PdfViewerPreferences { PdfObject recipient = recipients.getPdfObject(i); strings.remove(recipient); - CMSEnvelopedData data = null; - try { - data = new CMSEnvelopedData(recipient.getBytes()); - - Iterator recipientCertificatesIt = data.getRecipientInfos().getRecipients().iterator(); - - while (recipientCertificatesIt.hasNext()) { - RecipientInformation recipientInfo = (RecipientInformation)recipientCertificatesIt.next(); - - if (recipientInfo.getRID().match(certificate) && !foundRecipient) { - envelopedData = recipientInfo.getContent(certificateKey, certificateKeyProvider); - foundRecipient = true; - } - } - } - catch (Exception f) { - throw new ExceptionConverter(f); - } +// CMSEnvelopedData data = null; +// try { +// data = new CMSEnvelopedData(recipient.getBytes()); +// +// Iterator recipientCertificatesIt = data.getRecipientInfos().getRecipients().iterator(); +// +// while (recipientCertificatesIt.hasNext()) { +// RecipientInformation recipientInfo = (RecipientInformation)recipientCertificatesIt.next(); +// +// if (recipientInfo.getRID().match(certificate) && !foundRecipient) { +// envelopedData = recipientInfo.getContent(certificateKey, certificateKeyProvider); +// foundRecipient = true; +// } +// } +// } +// catch (Exception f) { +// throw new ExceptionConverter(f); +// } } if(!foundRecipient || envelopedData == null) { diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/TSAClientBouncyCastle.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/TSAClientBouncyCastle.java index 29e65e60d..465391f63 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/TSAClientBouncyCastle.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/TSAClientBouncyCastle.java @@ -1,230 +1,230 @@ -/* - * $Id: TSAClientBouncyCastle.java 3973 2009-06-16 10:30:31Z psoares33 $ - * - * Copyright 2009 Martin Brunecky, Aiken Sam - * - * The contents of this file are subject to the Mozilla Public License Version 1.1 - * (the "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the License. - * - * The Original Code is 'iText, a free JAVA-PDF library'. - * - * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by - * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. - * All Rights Reserved. - * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer - * are Copyright (C) 2009 by Martin Brunecky. All Rights Reserved. - * - * Contributor(s): all the names of the contributors are added in the source code - * where applicable. - * - * Alternatively, the contents of this file may be used under the terms of the - * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the - * provisions of LGPL are applicable instead of those above. If you wish to - * allow use of your version of this file only under the terms of the LGPL - * License and not to allow others to use your version of this file under - * the MPL, indicate your decision by deleting the provisions above and - * replace them with the notice and other provisions required by the LGPL. - * If you do not delete the provisions above, a recipient may use your version - * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. - * - * This library is free software; you can redistribute it and/or modify it - * under the terms of the MPL as stated above or under the terms of the GNU - * Library General Public License as published by the Free Software Foundation; - * either version 2 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more - * details. - * - * If you didn't download this code from the following link, you should check if - * you aren't using an obsolete version: - * http://www.lowagie.com/iText/ - */ - -package com.fr.third.v2.lowagie.text.pdf; - -import java.io.*; -import java.math.*; -import java.net.*; - -import org.bouncycastle.asn1.cmp.*; -import org.bouncycastle.asn1.x509.*; -import org.bouncycastle.tsp.*; - -import com.fr.third.v2.lowagie.text.pdf.codec.Base64; - -/** - * Time Stamp Authority Client interface implementation using Bouncy Castle - * org.bouncycastle.tsp package. - *

- * Created by Aiken Sam, 2006-11-15, refactored by Martin Brunecky, 07/15/2007 - * for ease of subclassing. - *

- * @since 2.1.6 - */ -public class TSAClientBouncyCastle implements TSAClient { - /** URL of the Time Stamp Authority */ - protected String tsaURL; - /** TSA Username */ - protected String tsaUsername; - /** TSA password */ - protected String tsaPassword; - /** Estimate of the received time stamp token */ - protected int tokSzEstimate; - - /** - * Creates an instance of a TSAClient that will use BouncyCastle. - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - */ - public TSAClientBouncyCastle(String url) { - this(url, null, null, 4096); - } - - /** - * Creates an instance of a TSAClient that will use BouncyCastle. - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - * @param username String - user(account) name - * @param password String - password - */ - public TSAClientBouncyCastle(String url, String username, String password) { - this(url, username, password, 4096); - } - - /** - * Constructor. - * Note the token size estimate is updated by each call, as the token - * size is not likely to change (as long as we call the same TSA using - * the same imprint length). - * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") - * @param username String - user(account) name - * @param password String - password - * @param tokSzEstimate int - estimated size of received time stamp token (DER encoded) - */ - public TSAClientBouncyCastle(String url, String username, String password, int tokSzEstimate) { - this.tsaURL = url; - this.tsaUsername = username; - this.tsaPassword = password; - this.tokSzEstimate = tokSzEstimate; - } - - /** - * Get the token size estimate. - * Returned value reflects the result of the last succesfull call, padded - * @return an estimate of the token size - */ - public int getTokenSizeEstimate() { - return tokSzEstimate; - } - - /** - * Get RFC 3161 timeStampToken. - * Method may return null indicating that timestamp should be skipped. - * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) - * @param imprint byte[] - data imprint to be time-stamped - * @return byte[] - encoded, TSA signed data of the timeStampToken - * @throws Exception - TSA request failed - * @see TSAClient#getTimeStampToken(PdfPKCS7, byte[]) - */ - public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception { - return getTimeStampToken(imprint); - } - - /** - * Get timestamp token - Bouncy Castle request encoding / decoding layer - */ - protected byte[] getTimeStampToken(byte[] imprint) throws Exception { - byte[] respBytes = null; - try { - // Setup the time stamp request - TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); - tsqGenerator.setCertReq(true); - // tsqGenerator.setReqPolicy("1.3.6.1.4.1.601.10.3.1"); - BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); - TimeStampRequest request = tsqGenerator.generate(X509ObjectIdentifiers.id_SHA1.getId() , imprint, nonce); - byte[] requestBytes = request.getEncoded(); - - // Call the communications layer - respBytes = getTSAResponse(requestBytes); - - // Handle the TSA response - TimeStampResponse response = new TimeStampResponse(respBytes); - - // validate communication level attributes (RFC 3161 PKIStatus) - response.validate(request); - PKIFailureInfo failure = response.getFailInfo(); - int value = (failure == null) ? 0 : failure.intValue(); - if (value != 0) { - // @todo: Translate value of 15 error codes defined by PKIFailureInfo to string - throw new Exception("Invalid TSA '" + tsaURL + "' response, code " + value); - } - // @todo: validate the time stap certificate chain (if we want - // assure we do not sign using an invalid timestamp). - - // extract just the time stamp token (removes communication status info) - TimeStampToken tsToken = response.getTimeStampToken(); - if (tsToken == null) { - throw new Exception("TSA '" + tsaURL + "' failed to return time stamp token: " + response.getStatusString()); - } - TimeStampTokenInfo info = tsToken.getTimeStampInfo(); // to view details - byte[] encoded = tsToken.getEncoded(); - long stop = System.currentTimeMillis(); - - // Update our token size estimate for the next call (padded to be safe) - this.tokSzEstimate = encoded.length + 32; - return encoded; - } catch (Exception e) { - throw e; - } catch (Throwable t) { - throw new Exception("Failed to get TSA response from '" + tsaURL +"'", t); - } - } - - /** - * Get timestamp token - communications layer - * @return - byte[] - TSA response, raw bytes (RFC 3161 encoded) - */ - protected byte[] getTSAResponse(byte[] requestBytes) throws Exception { - // Setup the TSA connection - URL url = new URL(tsaURL); - URLConnection tsaConnection; - tsaConnection = (URLConnection) url.openConnection(); - - tsaConnection.setDoInput(true); - tsaConnection.setDoOutput(true); - tsaConnection.setUseCaches(false); - tsaConnection.setRequestProperty("Content-Type", "application/timestamp-query"); - //tsaConnection.setRequestProperty("Content-Transfer-Encoding", "base64"); - tsaConnection.setRequestProperty("Content-Transfer-Encoding", "binary"); - - if ((tsaUsername != null) && !tsaUsername.equals("") ) { - String userPassword = tsaUsername + ":" + tsaPassword; - tsaConnection.setRequestProperty("Authorization", "Basic " + - new String(Base64.encodeBytes(userPassword.getBytes()))); - } - OutputStream out = tsaConnection.getOutputStream(); - out.write(requestBytes); - out.close(); - - // Get TSA response as a byte array - InputStream inp = tsaConnection.getInputStream(); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - byte[] buffer = new byte[1024]; - int bytesRead = 0; - while ((bytesRead = inp.read(buffer, 0, buffer.length)) >= 0) { - baos.write(buffer, 0, bytesRead); - } - byte[] respBytes = baos.toByteArray(); - - String encoding = tsaConnection.getContentEncoding(); - if (encoding != null && encoding.equalsIgnoreCase("base64")) { - respBytes = Base64.decode(new String(respBytes)); - } - return respBytes; - } -} \ No newline at end of file +///* +// * $Id: TSAClientBouncyCastle.java 3973 2009-06-16 10:30:31Z psoares33 $ +// * +// * Copyright 2009 Martin Brunecky, Aiken Sam +// * +// * The contents of this file are subject to the Mozilla Public License Version 1.1 +// * (the "License"); you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at http://www.mozilla.org/MPL/ +// * +// * Software distributed under the License is distributed on an "AS IS" basis, +// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// * for the specific language governing rights and limitations under the License. +// * +// * The Original Code is 'iText, a free JAVA-PDF library'. +// * +// * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by +// * the Initial Developer are Copyright (C) 1999-2005 by Bruno Lowagie. +// * All Rights Reserved. +// * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer +// * are Copyright (C) 2009 by Martin Brunecky. All Rights Reserved. +// * +// * Contributor(s): all the names of the contributors are added in the source code +// * where applicable. +// * +// * Alternatively, the contents of this file may be used under the terms of the +// * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the +// * provisions of LGPL are applicable instead of those above. If you wish to +// * allow use of your version of this file only under the terms of the LGPL +// * License and not to allow others to use your version of this file under +// * the MPL, indicate your decision by deleting the provisions above and +// * replace them with the notice and other provisions required by the LGPL. +// * If you do not delete the provisions above, a recipient may use your version +// * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE. +// * +// * This library is free software; you can redistribute it and/or modify it +// * under the terms of the MPL as stated above or under the terms of the GNU +// * Library General Public License as published by the Free Software Foundation; +// * either version 2 of the License, or any later version. +// * +// * This library is distributed in the hope that it will be useful, but WITHOUT +// * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more +// * details. +// * +// * If you didn't download this code from the following link, you should check if +// * you aren't using an obsolete version: +// * http://www.lowagie.com/iText/ +// */ +// +//package com.fr.third.v2.lowagie.text.pdf; +// +//import java.io.*; +//import java.math.*; +//import java.net.*; +// +//import org.bouncycastle.asn1.cmp.*; +//import org.bouncycastle.asn1.x509.*; +//import org.bouncycastle.tsp.*; +// +//import com.fr.third.v2.lowagie.text.pdf.codec.Base64; +// +///** +// * Time Stamp Authority Client interface implementation using Bouncy Castle +// * org.bouncycastle.tsp package. +// *

+// * Created by Aiken Sam, 2006-11-15, refactored by Martin Brunecky, 07/15/2007 +// * for ease of subclassing. +// *

+// * @since 2.1.6 +// */ +//public class TSAClientBouncyCastle implements TSAClient { +// /** URL of the Time Stamp Authority */ +// protected String tsaURL; +// /** TSA Username */ +// protected String tsaUsername; +// /** TSA password */ +// protected String tsaPassword; +// /** Estimate of the received time stamp token */ +// protected int tokSzEstimate; +// +// /** +// * Creates an instance of a TSAClient that will use BouncyCastle. +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// */ +// public TSAClientBouncyCastle(String url) { +// this(url, null, null, 4096); +// } +// +// /** +// * Creates an instance of a TSAClient that will use BouncyCastle. +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// * @param username String - user(account) name +// * @param password String - password +// */ +// public TSAClientBouncyCastle(String url, String username, String password) { +// this(url, username, password, 4096); +// } +// +// /** +// * Constructor. +// * Note the token size estimate is updated by each call, as the token +// * size is not likely to change (as long as we call the same TSA using +// * the same imprint length). +// * @param url String - Time Stamp Authority URL (i.e. "http://tsatest1.digistamp.com/TSA") +// * @param username String - user(account) name +// * @param password String - password +// * @param tokSzEstimate int - estimated size of received time stamp token (DER encoded) +// */ +// public TSAClientBouncyCastle(String url, String username, String password, int tokSzEstimate) { +// this.tsaURL = url; +// this.tsaUsername = username; +// this.tsaPassword = password; +// this.tokSzEstimate = tokSzEstimate; +// } +// +// /** +// * Get the token size estimate. +// * Returned value reflects the result of the last succesfull call, padded +// * @return an estimate of the token size +// */ +// public int getTokenSizeEstimate() { +// return tokSzEstimate; +// } +// +// /** +// * Get RFC 3161 timeStampToken. +// * Method may return null indicating that timestamp should be skipped. +// * @param caller PdfPKCS7 - calling PdfPKCS7 instance (in case caller needs it) +// * @param imprint byte[] - data imprint to be time-stamped +// * @return byte[] - encoded, TSA signed data of the timeStampToken +// * @throws Exception - TSA request failed +// * @see TSAClient#getTimeStampToken(PdfPKCS7, byte[]) +// */ +// public byte[] getTimeStampToken(PdfPKCS7 caller, byte[] imprint) throws Exception { +// return getTimeStampToken(imprint); +// } +// +// /** +// * Get timestamp token - Bouncy Castle request encoding / decoding layer +// */ +// protected byte[] getTimeStampToken(byte[] imprint) throws Exception { +// byte[] respBytes = null; +// try { +// // Setup the time stamp request +// TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator(); +// tsqGenerator.setCertReq(true); +// // tsqGenerator.setReqPolicy("1.3.6.1.4.1.601.10.3.1"); +// BigInteger nonce = BigInteger.valueOf(System.currentTimeMillis()); +// TimeStampRequest request = tsqGenerator.generate(X509ObjectIdentifiers.id_SHA1.getId() , imprint, nonce); +// byte[] requestBytes = request.getEncoded(); +// +// // Call the communications layer +// respBytes = getTSAResponse(requestBytes); +// +// // Handle the TSA response +// TimeStampResponse response = new TimeStampResponse(respBytes); +// +// // validate communication level attributes (RFC 3161 PKIStatus) +// response.validate(request); +// PKIFailureInfo failure = response.getFailInfo(); +// int value = (failure == null) ? 0 : failure.intValue(); +// if (value != 0) { +// // @todo: Translate value of 15 error codes defined by PKIFailureInfo to string +// throw new Exception("Invalid TSA '" + tsaURL + "' response, code " + value); +// } +// // @todo: validate the time stap certificate chain (if we want +// // assure we do not sign using an invalid timestamp). +// +// // extract just the time stamp token (removes communication status info) +// TimeStampToken tsToken = response.getTimeStampToken(); +// if (tsToken == null) { +// throw new Exception("TSA '" + tsaURL + "' failed to return time stamp token: " + response.getStatusString()); +// } +// TimeStampTokenInfo info = tsToken.getTimeStampInfo(); // to view details +// byte[] encoded = tsToken.getEncoded(); +// long stop = System.currentTimeMillis(); +// +// // Update our token size estimate for the next call (padded to be safe) +// this.tokSzEstimate = encoded.length + 32; +// return encoded; +// } catch (Exception e) { +// throw e; +// } catch (Throwable t) { +// throw new Exception("Failed to get TSA response from '" + tsaURL +"'", t); +// } +// } +// +// /** +// * Get timestamp token - communications layer +// * @return - byte[] - TSA response, raw bytes (RFC 3161 encoded) +// */ +// protected byte[] getTSAResponse(byte[] requestBytes) throws Exception { +// // Setup the TSA connection +// URL url = new URL(tsaURL); +// URLConnection tsaConnection; +// tsaConnection = (URLConnection) url.openConnection(); +// +// tsaConnection.setDoInput(true); +// tsaConnection.setDoOutput(true); +// tsaConnection.setUseCaches(false); +// tsaConnection.setRequestProperty("Content-Type", "application/timestamp-query"); +// //tsaConnection.setRequestProperty("Content-Transfer-Encoding", "base64"); +// tsaConnection.setRequestProperty("Content-Transfer-Encoding", "binary"); +// +// if ((tsaUsername != null) && !tsaUsername.equals("") ) { +// String userPassword = tsaUsername + ":" + tsaPassword; +// tsaConnection.setRequestProperty("Authorization", "Basic " + +// new String(Base64.encodeBytes(userPassword.getBytes()))); +// } +// OutputStream out = tsaConnection.getOutputStream(); +// out.write(requestBytes); +// out.close(); +// +// // Get TSA response as a byte array +// InputStream inp = tsaConnection.getInputStream(); +// ByteArrayOutputStream baos = new ByteArrayOutputStream(); +// byte[] buffer = new byte[1024]; +// int bytesRead = 0; +// while ((bytesRead = inp.read(buffer, 0, buffer.length)) >= 0) { +// baos.write(buffer, 0, bytesRead); +// } +// byte[] respBytes = baos.toByteArray(); +// +// String encoding = tsaConnection.getContentEncoding(); +// if (encoding != null && encoding.equalsIgnoreCase("base64")) { +// respBytes = Base64.decode(new String(respBytes)); +// } +// return respBytes; +// } +//} \ No newline at end of file diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/crypto/AESCipher.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/crypto/AESCipher.java index 1070603b5..5702658f6 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/crypto/AESCipher.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/crypto/AESCipher.java @@ -48,12 +48,12 @@ */ package com.fr.third.v2.lowagie.text.pdf.crypto; -import org.bouncycastle.crypto.BlockCipher; -import org.bouncycastle.crypto.engines.AESFastEngine; -import org.bouncycastle.crypto.modes.CBCBlockCipher; -import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; -import org.bouncycastle.crypto.params.KeyParameter; -import org.bouncycastle.crypto.params.ParametersWithIV; +import com.fr.third.org.bouncycastle.crypto.BlockCipher; +import com.fr.third.org.bouncycastle.crypto.engines.AESFastEngine; +import com.fr.third.org.bouncycastle.crypto.modes.CBCBlockCipher; +import com.fr.third.org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; +import com.fr.third.org.bouncycastle.crypto.params.KeyParameter; +import com.fr.third.org.bouncycastle.crypto.params.ParametersWithIV; /** * Creates an AES Cipher with CBC and padding PKCS5/7. From 6cd81513732d90c9d3b05bf4b3aa9462a2eff42b Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Tue, 28 Apr 2020 18:03:56 +0800 Subject: [PATCH 06/14] =?UTF-8?q?REPORT-30379=20=E5=9C=A8third=E4=B8=AD?= =?UTF-8?q?=E5=8A=A0=E4=B8=80=E4=B8=AA=20third=EF=BC=88=E4=B8=8D=E5=9C=A8?= =?UTF-8?q?=E6=89=93=E5=8C=85=E8=8C=83=E5=9B=B4=E5=86=85=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E8=87=AA=E5=B7=B1=E6=B7=BB=E5=8A=A0junit=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E6=89=8D=E8=83=BD=E8=B7=91=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../text/pdf/PdfEncryptDecryptTest.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java diff --git a/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java b/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java new file mode 100644 index 000000000..a9b73c9be --- /dev/null +++ b/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java @@ -0,0 +1,74 @@ +package com.fr.third.com.lowagie.text.pdf; + +import com.fr.third.com.lowagie.text.Document; +import com.fr.third.com.lowagie.text.DocumentException; +import com.fr.third.com.lowagie.text.Paragraph; +import com.fr.third.com.lowagie.text.exceptions.BadPasswordException; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import org.junit.Test; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.fail; + +/** + * @author Hugh.C + * @version 1.0 + * Created by Hugh.C on 2020/4/28 + */ +public class PdfEncryptDecryptTest { + + @Test + public void testPdfEncryption() { + + try { + byte[] bytes = createPdfEncryptionDocumentByteArray("123"); + assertTrue(bytes.length > 0); + } catch (Exception e) { + fail(); + } + } + + @Test + public void testPdfDecrypt() { + + try { + //沒報錯,解密成功 + new PdfReader(createPdfEncryptionDocumentByteArray("123"), "123".getBytes()); + } catch (Exception e) { + fail(); + } + + boolean result = false; + try { + //報錯,解密失敗 + new PdfReader(createPdfEncryptionDocumentByteArray("123"), "234".getBytes()); + } catch (Exception e) { + assertTrue(e instanceof BadPasswordException); + result = true; + } + assertTrue(result); + } + + /** + * 創建加密過後的pdf document 數組 + * + * @param passWord pdf密碼 + * @return + * @throws DocumentException + * @throws IOException + */ + private byte[] createPdfEncryptionDocumentByteArray(String passWord) throws DocumentException, IOException { + ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream(); + Document document = new Document(); + PdfWriter write = PdfWriter.getInstance(document, byteOutputStream); + String userPassword = "老王"; + write.setEncryption(userPassword.getBytes(), passWord.getBytes(), PdfWriter.ALLOW_ASSEMBLY, PdfWriter.ENCRYPTION_AES_128); + document.open(); + document.add(new Paragraph("ABCDEFG")); + document.close(); + write.close(); + byteOutputStream.flush(); + return byteOutputStream.toByteArray(); + } +} From 6554afe92b2a73ea215074b4f8d6c04920492ee0 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Tue, 28 Apr 2020 18:07:44 +0800 Subject: [PATCH 07/14] =?UTF-8?q?REPORT-30379=20test=E8=A1=A5=E5=85=85?= =?UTF-8?q?=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java b/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java index a9b73c9be..f7c5b6356 100644 --- a/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java +++ b/fine-itext-old/test/com/fr/third/com/lowagie/text/pdf/PdfEncryptDecryptTest.java @@ -12,7 +12,7 @@ import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.fail; /** - * @author Hugh.C + * @author Hugh.C 不在打包范围内,只是留个凭证,需要自己添加junit 依赖才能跑 * @version 1.0 * Created by Hugh.C on 2020/4/28 */ From 17c98f54ce9779a2003480cc7073495d42a856c3 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Thu, 7 May 2020 16:48:40 +0800 Subject: [PATCH 08/14] =?UTF-8?q?REPORT-31053=20PDF=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=EF=BC=8C
=E6=A0=87=E7=AD=BE=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java index 72ae7d640..149aaa007 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfLine.java @@ -177,7 +177,7 @@ public class PdfLine { if (chunk.isBreakTag()) { addToLine(chunk); width = 0; - return null; + return new PdfChunk("", chunk); } // we split the chunk to be added From 77fd915ee1e2ce9d9a90793dd97f46846ed00b58 Mon Sep 17 00:00:00 2001 From: lidongy <1879087903@qq.com> Date: Sat, 9 May 2020 11:53:03 +0800 Subject: [PATCH 09/14] =?UTF-8?q?DEC-13199=20websocket=E5=BA=8F=E5=88=97?= =?UTF-8?q?=E5=8C=96=E6=97=B6=E5=8C=BA=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/third/socketio/protocol/JacksonJsonSupport.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java b/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java index 7737ff291..9f607705f 100644 --- a/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java +++ b/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.TimeZone; import com.fr.third.socketio.AckCallback; import com.fr.third.socketio.MultiTypeAckCallback; @@ -324,6 +325,8 @@ public class JacksonJsonSupport implements JsonSupport { objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); objectMapper.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + objectMapper.setTimeZone(TimeZone.getDefault()); } @Override From 89c2c8e7ed4ce21e25e9fab7eeebd833b9c82910 Mon Sep 17 00:00:00 2001 From: lidongy <1879087903@qq.com> Date: Sat, 9 May 2020 11:59:01 +0800 Subject: [PATCH 10/14] 111 --- .../src/com/fr/third/socketio/protocol/JacksonJsonSupport.java | 1 + 1 file changed, 1 insertion(+) diff --git a/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java b/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java index 9f607705f..fa2779be3 100644 --- a/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java +++ b/fine-socketio/src/com/fr/third/socketio/protocol/JacksonJsonSupport.java @@ -326,6 +326,7 @@ public class JacksonJsonSupport implements JsonSupport { objectMapper.configure(SerializationFeature.WRITE_BIGDECIMAL_AS_PLAIN, true); objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + //时区设置,防止含有Data类型变量时序列化后,前台显示的data内时间不准确 objectMapper.setTimeZone(TimeZone.getDefault()); } From 7eb5d71ff4183f16d5ba897cdbabc8edd9ee2955 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Wed, 13 May 2020 18:16:21 +0800 Subject: [PATCH 11/14] =?UTF-8?q?REPORT-31421=20=E9=97=B4=E8=B7=9D?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=AF=BC=E8=87=B4=E5=88=87=E5=89=B2=E5=90=8E?= =?UTF-8?q?=E7=9A=84HTML=20=E5=90=AB=E6=9C=89line-height=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v2/lowagie/text/html/simpleparser/FactoryProperties.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java b/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java index cf53266c4..b2e3ccf4f 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/FactoryProperties.java @@ -140,6 +140,9 @@ public class FactoryProperties { if(props.hasProperty("line-height")){ p.setAttribute("line-height", props.getProperty("line-height")); } + if (props.hasProperty("noexist-attrid")) { + p.setAttribute("noexist-attrid", props.getProperty("noexist-attrid")); + } for(String margin : HtmlConstants.MARGIN){ if(props.hasPropertyInChain("div", margin)){ String ss = props.getPropertyFromChain("div", margin); From be04f46cfc4f23dd5e001b6ada4c6f69a976885e Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Mon, 18 May 2020 16:38:23 +0800 Subject: [PATCH 12/14] =?UTF-8?q?REPORT-29654=20jgit=20=E6=89=93=E5=8C=85?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=E5=B0=91=E4=BA=86=20resources?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.third_step1-jdk11.gradle | 1 + build.third_step1.gradle | 1 + 2 files changed, 2 insertions(+) diff --git a/build.third_step1-jdk11.gradle b/build.third_step1-jdk11.gradle index 6279a3f14..1a83280cc 100644 --- a/build.third_step1-jdk11.gradle +++ b/build.third_step1-jdk11.gradle @@ -120,6 +120,7 @@ def resourceDirs = [ "${srcDir}/fine-jboss-transaction-api/src", "${srcDir}/fine-jetbrains/src", "${srcDir}/fine-jgit/src", + "${srcDir}/fine-jgit/resources", "${srcDir}/fine-jna/jna/src/main/resources", "${srcDir}/fine-jna/jna/src/main/java", "${srcDir}/fine-jna/jna-platform/src/main/java", diff --git a/build.third_step1.gradle b/build.third_step1.gradle index a4857239b..fdc0f2cdf 100644 --- a/build.third_step1.gradle +++ b/build.third_step1.gradle @@ -161,6 +161,7 @@ task copyFiles(type:Copy,dependsOn:'compileJava'){ with dataContent.call("${srcDir}/fine-jboss-transaction-api/src") with dataContent.call("${srcDir}/fine-jetbrains/src") with dataContent.call("${srcDir}/fine-jgit/src") + with dataContent.call("${srcDir}/fine-jgit/resources") with dataContent.call("${srcDir}/fine-jna/jna/src/main/resources") with dataContent.call("${srcDir}/fine-jna/jna/src/main/java") with dataContent.call("${srcDir}/fine-jna/jna-platform/src/main/java") From 5fdcff93b5439c30fc36fd289ef2f82b8b67865d Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Wed, 20 May 2020 12:12:11 +0800 Subject: [PATCH 13/14] =?UTF-8?q?REPORT-31938=20html=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=94=AF=E6=8C=81rgba?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../third/com/lowagie/text/html/Markup.java | 2 +- .../com/lowagie/text/html/WebColors.java | 346 ++++++++++-------- .../fr/third/v2/lowagie/text/html/Markup.java | 2 +- .../third/v2/lowagie/text/html/WebColors.java | 39 +- 4 files changed, 221 insertions(+), 168 deletions(-) diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/Markup.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/Markup.java index 394ffd8a0..7907b17dc 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/Markup.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/Markup.java @@ -422,7 +422,7 @@ public class Markup { try { return WebColors.getRGBColor(s); } - catch(IllegalArgumentException iae) { + catch(Exception iae) { return null; } } diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java index 5c91ba8cb..2f7e31d2c 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java @@ -66,147 +66,170 @@ public class WebColors extends HashMap { /** HashMap containing all the names and corresponding color values. */ public static final WebColors NAMES = new WebColors(); static { - NAMES.put("aliceblue", new int[] { 0xf0, 0xf8, 0xff, 0x00 }); - NAMES.put("antiquewhite", new int[] { 0xfa, 0xeb, 0xd7, 0x00 }); - NAMES.put("aqua", new int[] { 0x00, 0xff, 0xff, 0x00 }); - NAMES.put("aquamarine", new int[] { 0x7f, 0xff, 0xd4, 0x00 }); - NAMES.put("azure", new int[] { 0xf0, 0xff, 0xff, 0x00 }); - NAMES.put("beige", new int[] { 0xf5, 0xf5, 0xdc, 0x00 }); - NAMES.put("bisque", new int[] { 0xff, 0xe4, 0xc4, 0x00 }); - NAMES.put("black", new int[] { 0x00, 0x00, 0x00, 0x00 }); - NAMES.put("blanchedalmond", new int[] { 0xff, 0xeb, 0xcd, 0x00 }); - NAMES.put("blue", new int[] { 0x00, 0x00, 0xff, 0x00 }); - NAMES.put("blueviolet", new int[] { 0x8a, 0x2b, 0xe2, 0x00 }); - NAMES.put("brown", new int[] { 0xa5, 0x2a, 0x2a, 0x00 }); - NAMES.put("burlywood", new int[] { 0xde, 0xb8, 0x87, 0x00 }); - NAMES.put("cadetblue", new int[] { 0x5f, 0x9e, 0xa0, 0x00 }); - NAMES.put("chartreuse", new int[] { 0x7f, 0xff, 0x00, 0x00 }); - NAMES.put("chocolate", new int[] { 0xd2, 0x69, 0x1e, 0x00 }); - NAMES.put("coral", new int[] { 0xff, 0x7f, 0x50, 0x00 }); - NAMES.put("cornflowerblue", new int[] { 0x64, 0x95, 0xed, 0x00 }); - NAMES.put("cornsilk", new int[] { 0xff, 0xf8, 0xdc, 0x00 }); - NAMES.put("crimson", new int[] { 0xdc, 0x14, 0x3c, 0x00 }); - NAMES.put("cyan", new int[] { 0x00, 0xff, 0xff, 0x00 }); - NAMES.put("darkblue", new int[] { 0x00, 0x00, 0x8b, 0x00 }); - NAMES.put("darkcyan", new int[] { 0x00, 0x8b, 0x8b, 0x00 }); - NAMES.put("darkgoldenrod", new int[] { 0xb8, 0x86, 0x0b, 0x00 }); - NAMES.put("darkgray", new int[] { 0xa9, 0xa9, 0xa9, 0x00 }); - NAMES.put("darkgreen", new int[] { 0x00, 0x64, 0x00, 0x00 }); - NAMES.put("darkkhaki", new int[] { 0xbd, 0xb7, 0x6b, 0x00 }); - NAMES.put("darkmagenta", new int[] { 0x8b, 0x00, 0x8b, 0x00 }); - NAMES.put("darkolivegreen", new int[] { 0x55, 0x6b, 0x2f, 0x00 }); - NAMES.put("darkorange", new int[] { 0xff, 0x8c, 0x00, 0x00 }); - NAMES.put("darkorchid", new int[] { 0x99, 0x32, 0xcc, 0x00 }); - NAMES.put("darkred", new int[] { 0x8b, 0x00, 0x00, 0x00 }); - NAMES.put("darksalmon", new int[] { 0xe9, 0x96, 0x7a, 0x00 }); - NAMES.put("darkseagreen", new int[] { 0x8f, 0xbc, 0x8f, 0x00 }); - NAMES.put("darkslateblue", new int[] { 0x48, 0x3d, 0x8b, 0x00 }); - NAMES.put("darkslategray", new int[] { 0x2f, 0x4f, 0x4f, 0x00 }); - NAMES.put("darkturquoise", new int[] { 0x00, 0xce, 0xd1, 0x00 }); - NAMES.put("darkviolet", new int[] { 0x94, 0x00, 0xd3, 0x00 }); - NAMES.put("deeppink", new int[] { 0xff, 0x14, 0x93, 0x00 }); - NAMES.put("deepskyblue", new int[] { 0x00, 0xbf, 0xff, 0x00 }); - NAMES.put("dimgray", new int[] { 0x69, 0x69, 0x69, 0x00 }); - NAMES.put("dodgerblue", new int[] { 0x1e, 0x90, 0xff, 0x00 }); - NAMES.put("firebrick", new int[] { 0xb2, 0x22, 0x22, 0x00 }); - NAMES.put("floralwhite", new int[] { 0xff, 0xfa, 0xf0, 0x00 }); - NAMES.put("forestgreen", new int[] { 0x22, 0x8b, 0x22, 0x00 }); - NAMES.put("fuchsia", new int[] { 0xff, 0x00, 0xff, 0x00 }); - NAMES.put("gainsboro", new int[] { 0xdc, 0xdc, 0xdc, 0x00 }); - NAMES.put("ghostwhite", new int[] { 0xf8, 0xf8, 0xff, 0x00 }); - NAMES.put("gold", new int[] { 0xff, 0xd7, 0x00, 0x00 }); - NAMES.put("goldenrod", new int[] { 0xda, 0xa5, 0x20, 0x00 }); - NAMES.put("gray", new int[] { 0x80, 0x80, 0x80, 0x00 }); - NAMES.put("green", new int[] { 0x00, 0x80, 0x00, 0x00 }); - NAMES.put("greenyellow", new int[] { 0xad, 0xff, 0x2f, 0x00 }); - NAMES.put("honeydew", new int[] { 0xf0, 0xff, 0xf0, 0x00 }); - NAMES.put("hotpink", new int[] { 0xff, 0x69, 0xb4, 0x00 }); - NAMES.put("indianred", new int[] { 0xcd, 0x5c, 0x5c, 0x00 }); - NAMES.put("indigo", new int[] { 0x4b, 0x00, 0x82, 0x00 }); - NAMES.put("ivory", new int[] { 0xff, 0xff, 0xf0, 0x00 }); - NAMES.put("khaki", new int[] { 0xf0, 0xe6, 0x8c, 0x00 }); - NAMES.put("lavender", new int[] { 0xe6, 0xe6, 0xfa, 0x00 }); - NAMES.put("lavenderblush", new int[] { 0xff, 0xf0, 0xf5, 0x00 }); - NAMES.put("lawngreen", new int[] { 0x7c, 0xfc, 0x00, 0x00 }); - NAMES.put("lemonchiffon", new int[] { 0xff, 0xfa, 0xcd, 0x00 }); - NAMES.put("lightblue", new int[] { 0xad, 0xd8, 0xe6, 0x00 }); - NAMES.put("lightcoral", new int[] { 0xf0, 0x80, 0x80, 0x00 }); - NAMES.put("lightcyan", new int[] { 0xe0, 0xff, 0xff, 0x00 }); - NAMES.put("lightgoldenrodyellow", new int[] { 0xfa, 0xfa, 0xd2, 0x00 }); - NAMES.put("lightgreen", new int[] { 0x90, 0xee, 0x90, 0x00 }); - NAMES.put("lightgrey", new int[] { 0xd3, 0xd3, 0xd3, 0x00 }); - NAMES.put("lightpink", new int[] { 0xff, 0xb6, 0xc1, 0x00 }); - NAMES.put("lightsalmon", new int[] { 0xff, 0xa0, 0x7a, 0x00 }); - NAMES.put("lightseagreen", new int[] { 0x20, 0xb2, 0xaa, 0x00 }); - NAMES.put("lightskyblue", new int[] { 0x87, 0xce, 0xfa, 0x00 }); - NAMES.put("lightslategray", new int[] { 0x77, 0x88, 0x99, 0x00 }); - NAMES.put("lightsteelblue", new int[] { 0xb0, 0xc4, 0xde, 0x00 }); - NAMES.put("lightyellow", new int[] { 0xff, 0xff, 0xe0, 0x00 }); - NAMES.put("lime", new int[] { 0x00, 0xff, 0x00, 0x00 }); - NAMES.put("limegreen", new int[] { 0x32, 0xcd, 0x32, 0x00 }); - NAMES.put("linen", new int[] { 0xfa, 0xf0, 0xe6, 0x00 }); - NAMES.put("magenta", new int[] { 0xff, 0x00, 0xff, 0x00 }); - NAMES.put("maroon", new int[] { 0x80, 0x00, 0x00, 0x00 }); - NAMES.put("mediumaquamarine", new int[] { 0x66, 0xcd, 0xaa, 0x00 }); - NAMES.put("mediumblue", new int[] { 0x00, 0x00, 0xcd, 0x00 }); - NAMES.put("mediumorchid", new int[] { 0xba, 0x55, 0xd3, 0x00 }); - NAMES.put("mediumpurple", new int[] { 0x93, 0x70, 0xdb, 0x00 }); - NAMES.put("mediumseagreen", new int[] { 0x3c, 0xb3, 0x71, 0x00 }); - NAMES.put("mediumslateblue", new int[] { 0x7b, 0x68, 0xee, 0x00 }); - NAMES.put("mediumspringgreen", new int[] { 0x00, 0xfa, 0x9a, 0x00 }); - NAMES.put("mediumturquoise", new int[] { 0x48, 0xd1, 0xcc, 0x00 }); - NAMES.put("mediumvioletred", new int[] { 0xc7, 0x15, 0x85, 0x00 }); - NAMES.put("midnightblue", new int[] { 0x19, 0x19, 0x70, 0x00 }); - NAMES.put("mintcream", new int[] { 0xf5, 0xff, 0xfa, 0x00 }); - NAMES.put("mistyrose", new int[] { 0xff, 0xe4, 0xe1, 0x00 }); - NAMES.put("moccasin", new int[] { 0xff, 0xe4, 0xb5, 0x00 }); - NAMES.put("navajowhite", new int[] { 0xff, 0xde, 0xad, 0x00 }); - NAMES.put("navy", new int[] { 0x00, 0x00, 0x80, 0x00 }); - NAMES.put("oldlace", new int[] { 0xfd, 0xf5, 0xe6, 0x00 }); - NAMES.put("olive", new int[] { 0x80, 0x80, 0x00, 0x00 }); - NAMES.put("olivedrab", new int[] { 0x6b, 0x8e, 0x23, 0x00 }); - NAMES.put("orange", new int[] { 0xff, 0xa5, 0x00, 0x00 }); - NAMES.put("orangered", new int[] { 0xff, 0x45, 0x00, 0x00 }); - NAMES.put("orchid", new int[] { 0xda, 0x70, 0xd6, 0x00 }); - NAMES.put("palegoldenrod", new int[] { 0xee, 0xe8, 0xaa, 0x00 }); - NAMES.put("palegreen", new int[] { 0x98, 0xfb, 0x98, 0x00 }); - NAMES.put("paleturquoise", new int[] { 0xaf, 0xee, 0xee, 0x00 }); - NAMES.put("palevioletred", new int[] { 0xdb, 0x70, 0x93, 0x00 }); - NAMES.put("papayawhip", new int[] { 0xff, 0xef, 0xd5, 0x00 }); - NAMES.put("peachpuff", new int[] { 0xff, 0xda, 0xb9, 0x00 }); - NAMES.put("peru", new int[] { 0xcd, 0x85, 0x3f, 0x00 }); - NAMES.put("pink", new int[] { 0xff, 0xc0, 0xcb, 0x00 }); - NAMES.put("plum", new int[] { 0xdd, 0xa0, 0xdd, 0x00 }); - NAMES.put("powderblue", new int[] { 0xb0, 0xe0, 0xe6, 0x00 }); - NAMES.put("purple", new int[] { 0x80, 0x00, 0x80, 0x00 }); - NAMES.put("red", new int[] { 0xff, 0x00, 0x00, 0x00 }); - NAMES.put("rosybrown", new int[] { 0xbc, 0x8f, 0x8f, 0x00 }); - NAMES.put("royalblue", new int[] { 0x41, 0x69, 0xe1, 0x00 }); - NAMES.put("saddlebrown", new int[] { 0x8b, 0x45, 0x13, 0x00 }); - NAMES.put("salmon", new int[] { 0xfa, 0x80, 0x72, 0x00 }); - NAMES.put("sandybrown", new int[] { 0xf4, 0xa4, 0x60, 0x00 }); - NAMES.put("seagreen", new int[] { 0x2e, 0x8b, 0x57, 0x00 }); - NAMES.put("seashell", new int[] { 0xff, 0xf5, 0xee, 0x00 }); - NAMES.put("sienna", new int[] { 0xa0, 0x52, 0x2d, 0x00 }); - NAMES.put("silver", new int[] { 0xc0, 0xc0, 0xc0, 0x00 }); - NAMES.put("skyblue", new int[] { 0x87, 0xce, 0xeb, 0x00 }); - NAMES.put("slateblue", new int[] { 0x6a, 0x5a, 0xcd, 0x00 }); - NAMES.put("slategray", new int[] { 0x70, 0x80, 0x90, 0x00 }); - NAMES.put("snow", new int[] { 0xff, 0xfa, 0xfa, 0x00 }); - NAMES.put("springgreen", new int[] { 0x00, 0xff, 0x7f, 0x00 }); - NAMES.put("steelblue", new int[] { 0x46, 0x82, 0xb4, 0x00 }); - NAMES.put("tan", new int[] { 0xd2, 0xb4, 0x8c, 0x00 }); - NAMES.put("transparent", new int[] { 0x00, 0x00, 0x00, 0xff }); - NAMES.put("teal", new int[] { 0x00, 0x80, 0x80, 0x00 }); - NAMES.put("thistle", new int[] { 0xd8, 0xbf, 0xd8, 0x00 }); - NAMES.put("tomato", new int[] { 0xff, 0x63, 0x47, 0x00 }); - NAMES.put("turquoise", new int[] { 0x40, 0xe0, 0xd0, 0x00 }); - NAMES.put("violet", new int[] { 0xee, 0x82, 0xee, 0x00 }); - NAMES.put("wheat", new int[] { 0xf5, 0xde, 0xb3, 0x00 }); - NAMES.put("white", new int[] { 0xff, 0xff, 0xff, 0x00 }); - NAMES.put("whitesmoke", new int[] { 0xf5, 0xf5, 0xf5, 0x00 }); - NAMES.put("yellow", new int[] { 0xff, 0xff, 0x00, 0x00 }); - NAMES.put("yellowgreen", new int[] { 0x9, 0xacd, 0x32, 0x00 }); + //比对 https://html-color-codes.info/color-names/ + //Red color names + NAMES.put("indianred", new int[]{0xcd, 0x5c, 0x5c, 0xff}); + NAMES.put("lightcoral", new int[]{0xf0, 0x80, 0x80, 0xff}); + NAMES.put("salmon", new int[]{0xfa, 0x80, 0x72, 0xff}); + NAMES.put("darksalmon", new int[]{0xe9, 0x96, 0x7a, 0xff}); + NAMES.put("lightsalmon", new int[]{0xff, 0xa0, 0x7a, 0xff}); + NAMES.put("crimson", new int[]{0xdc, 0x14, 0x3c, 0xff}); + NAMES.put("firebrick", new int[]{0xb2, 0x22, 0x22, 0xff}); + NAMES.put("darkred", new int[]{0x8b, 0x00, 0x00, 0xff}); + NAMES.put("red", new int[]{0xff, 0x00, 0x00, 0xff}); + + //Pink color names + NAMES.put("pink", new int[]{0xff, 0xc0, 0xcb, 0xff}); + NAMES.put("lightpink", new int[]{0xff, 0xb6, 0xc1, 0xff}); + NAMES.put("hotpink", new int[]{0xff, 0x69, 0xb4, 0xff}); + NAMES.put("deeppink", new int[]{0xff, 0x14, 0x93, 0xff}); + NAMES.put("mediumvioletred", new int[]{0xc7, 0x15, 0x85, 0xff}); + NAMES.put("palevioletred", new int[]{0xdb, 0x70, 0x93, 0xff}); + + //Orange color names + NAMES.put("coral", new int[]{0xff, 0x7f, 0x50, 0xff}); + NAMES.put("tomato", new int[]{0xff, 0x63, 0x47, 0xff}); + NAMES.put("orangered", new int[]{0xff, 0x45, 0x00, 0xff}); + NAMES.put("darkorange", new int[]{0xff, 0x8c, 0x00, 0xff}); + NAMES.put("orange", new int[]{0xff, 0xa5, 0x00, 0xff}); + + //Orange color names + NAMES.put("gold", new int[]{0xff, 0xd7, 0x00, 0xff}); + NAMES.put("yellow", new int[]{0xff, 0xff, 0x00, 0xff}); + NAMES.put("lightyellow", new int[]{0xff, 0xff, 0xefe, 0xff}); + NAMES.put("lemonchiffon", new int[]{0xff, 0xfa, 0xcd, 0xff}); + NAMES.put("lightgoldenrodyellow", new int[]{0xfa, 0xfa, 0xd2, 0xff}); + NAMES.put("papayawhip", new int[]{0xff, 0xef, 0xd5, 0xff}); + NAMES.put("moccasin", new int[]{0xff, 0xe4, 0xb5, 0xff}); + NAMES.put("peachpuff", new int[]{0xff, 0xda, 0xb9, 0xff}); + NAMES.put("palegoldenrod", new int[]{0xee, 0xe8, 0xaa, 0xff}); + NAMES.put("khaki", new int[]{0xf0, 0xe6, 0x8c, 0xff}); + NAMES.put("darkkhaki", new int[]{0xbd, 0xb7, 0x6b, 0xff}); + + //Purple color names + NAMES.put("lavender", new int[]{0xe6, 0xe6, 0xfa, 0xff}); + NAMES.put("thistle", new int[]{0xd8, 0xbf, 0xd8, 0xff}); + NAMES.put("plum", new int[]{0xdd, 0xa0, 0xdd, 0xff}); + NAMES.put("violet", new int[]{0xee, 0x82, 0xee, 0xff}); + NAMES.put("orchid", new int[]{0xda, 0x70, 0xd6, 0xff}); + NAMES.put("fuchsia", new int[]{0xff, 0x00, 0xff, 0xff}); + NAMES.put("magenta", new int[]{0xff, 0x00, 0xff, 0xff}); + NAMES.put("mediumorchid", new int[]{0xba, 0x55, 0xd3, 0xff}); + NAMES.put("mediumpurple", new int[]{0x93, 0x70, 0xdb, 0xff}); + NAMES.put("amethyst", new int[]{0x99, 0x66, 0xcc, 0xff}); + NAMES.put("blueviolet", new int[]{0x8a, 0x2b, 0xe2, 0xff}); + NAMES.put("darkviolet", new int[]{0x94, 0x00, 0xd3, 0xff}); + NAMES.put("darkorchid", new int[]{0x99, 0x32, 0xcc, 0xff}); + NAMES.put("darkmagenta", new int[]{0x8b, 0x00, 0x8b, 0xff}); + NAMES.put("purple", new int[]{0x80, 0x00, 0x80, 0xff}); + NAMES.put("indigo", new int[]{0x4b, 0x00, 0x82, 0xff}); + NAMES.put("slateblue", new int[]{0x6a, 0x5a, 0xcd, 0xff}); + NAMES.put("darkslateblue", new int[]{0x48, 0x3d, 0x8b, 0xff}); + NAMES.put("mediumslateblue", new int[]{0x7b, 0x68, 0xee, 0xff}); + + //Green color names + NAMES.put("greenyellow", new int[]{0xad, 0xff, 0x2f, 0xff}); + NAMES.put("chartreuse", new int[]{0x7f, 0xff, 0x00, 0xff}); + NAMES.put("lawngreen", new int[]{0x7c, 0xfc, 0x00, 0xff}); + NAMES.put("lime", new int[]{0x00, 0xff, 0x00, 0xff}); + NAMES.put("limegreen", new int[]{0x32, 0xcd, 0x32, 0xff}); + NAMES.put("palegreen", new int[]{0x98, 0xfb, 0x98, 0xff}); + NAMES.put("lightgreen", new int[]{0x90, 0xee, 0x90, 0xff}); + NAMES.put("mediumspringgreen", new int[]{0x00, 0xfa, 0x9a, 0xff}); + NAMES.put("springgreen", new int[]{0x00, 0xff, 0x7f, 0xff}); + NAMES.put("mediumseagreen", new int[]{0x3c, 0xb3, 0x71, 0xff}); + NAMES.put("seagreen", new int[]{0x2e, 0x8b, 0x57, 0xff}); + NAMES.put("forestgreen", new int[]{0x22, 0x8b, 0x22, 0xff}); + NAMES.put("green", new int[]{0x00, 0x80, 0x00, 0xff}); + NAMES.put("darkgreen", new int[]{0x00, 0x64, 0x00, 0xff}); + NAMES.put("yellowgreen", new int[]{0x9a, 0xcd, 0x32, 0xff}); + NAMES.put("olivedrab", new int[]{0x6b, 0x8e, 0x23, 0xff}); + NAMES.put("olive", new int[]{0x80, 0x80, 0x00, 0xff}); + NAMES.put("darkolivegreen", new int[]{0x55, 0x6b, 0x2f, 0xff}); + NAMES.put("mediumaquamarine", new int[]{0x66, 0xcd, 0xaa, 0xff}); + NAMES.put("darkseagreen", new int[]{0x8f, 0xbc, 0x8f, 0xff}); + NAMES.put("lightseagreen", new int[]{0x20, 0xb2, 0xaa, 0xff}); + NAMES.put("darkcyan", new int[]{0x00, 0x8b, 0x8b, 0xff}); + NAMES.put("teal", new int[]{0x00, 0x80, 0x80, 0xff}); + + //Blue color names + NAMES.put("aqua", new int[]{0x00, 0xff, 0xff, 0xff}); + NAMES.put("cyan", new int[]{0x00, 0xff, 0xff, 0xff}); + NAMES.put("lightcyan", new int[]{0xe0, 0xff, 0xff, 0xff}); + NAMES.put("paleturquoise", new int[]{0xaf, 0xee, 0xee, 0xff}); + NAMES.put("aquamarine", new int[]{0x7f, 0xff, 0xd4, 0xff}); + NAMES.put("turquoise", new int[]{0x40, 0xe0, 0xd0, 0xff}); + NAMES.put("mediumturquoise", new int[]{0x48, 0xd1, 0xcc, 0xff}); + NAMES.put("darkturquoise", new int[]{0x00, 0xce, 0xd1, 0xff}); + NAMES.put("cadetblue", new int[]{0x5f, 0x9e, 0xa0, 0xff}); + NAMES.put("steelblue", new int[]{0x46, 0x82, 0xb4, 0xff}); + NAMES.put("lightsteelblue", new int[]{0xb0, 0xc4, 0xde, 0xff}); + NAMES.put("powderblue", new int[]{0xb0, 0xe0, 0xe6, 0xff}); + NAMES.put("lightblue", new int[]{0xad, 0xd8, 0xe6, 0xff}); + NAMES.put("skyblue", new int[]{0x87, 0xce, 0xeb, 0xff}); + NAMES.put("lightskyblue", new int[]{0x87, 0xce, 0xfa, 0xff}); + NAMES.put("deepskyblue", new int[]{0x00, 0xbf, 0xff, 0xff}); + NAMES.put("dodgerblue", new int[]{0x1e, 0x90, 0xff, 0xff}); + NAMES.put("cornflowerblue", new int[]{0x64, 0x95, 0xed, 0xff}); + NAMES.put("royalblue", new int[]{0x41, 0x69, 0xe1, 0xff}); + NAMES.put("blue", new int[]{0x00, 0x00, 0xff, 0xff}); + NAMES.put("mediumblue", new int[]{0x00, 0x00, 0xcd, 0xff}); + NAMES.put("darkblue", new int[]{0x00, 0x00, 0x8b, 0xff}); + NAMES.put("navy", new int[]{0x00, 0x00, 0x80, 0xff}); + NAMES.put("midnightblue", new int[]{0x19, 0x19, 0x70, 0xff}); + + //Brown color names + NAMES.put("cornsilk", new int[]{0xff, 0xf8, 0xdc, 0xff}); + NAMES.put("blanchedalmond", new int[]{0xff, 0xeb, 0xcd, 0xff}); + NAMES.put("bisque", new int[]{0xff, 0xe4, 0xc4, 0xff}); + NAMES.put("navajowhite", new int[]{0xff, 0xde, 0xad, 0xff}); + NAMES.put("wheat", new int[]{0xf5, 0xde, 0xb3, 0xff}); + NAMES.put("burlywood", new int[]{0xde, 0xb8, 0x87, 0xff}); + NAMES.put("tan", new int[]{0xd2, 0xb4, 0x8c, 0xff}); + NAMES.put("rosybrown", new int[]{0xbc, 0x8f, 0x8f, 0xff}); + NAMES.put("sandybrown", new int[]{0xf4, 0xa4, 0x60, 0xff}); + NAMES.put("goldenrod", new int[]{0xda, 0xa5, 0x20, 0xff}); + NAMES.put("darkgoldenrod", new int[]{0xb8, 0x86, 0x0b, 0xff}); + NAMES.put("peru", new int[]{0xcd, 0x85, 0x3f, 0xff}); + NAMES.put("chocolate", new int[]{0xd2, 0x69, 0x1e, 0xff}); + NAMES.put("saddlebrown", new int[]{0x8b, 0x45, 0x13, 0xff}); + NAMES.put("sienna", new int[]{0xa0, 0x52, 0x2d, 0xff}); + NAMES.put("brown", new int[]{0xa5, 0x2a, 0x2a, 0xff}); + NAMES.put("maroon", new int[]{0x80, 0x00, 0x00, 0xff}); + + //White color names + NAMES.put("white", new int[]{0xff, 0xff, 0xff, 0xff}); + NAMES.put("snow", new int[]{0xff, 0xfa, 0xfa, 0xff}); + NAMES.put("honeydew", new int[]{0xf0, 0xff, 0xf0, 0xff}); + NAMES.put("mintcream", new int[]{0xf5, 0xff, 0xfa, 0xff}); + NAMES.put("azure", new int[]{0xf0, 0xff, 0xff, 0xff}); + NAMES.put("aliceblue", new int[]{0xf0, 0xf8, 0xff, 0xff}); + NAMES.put("ghostwhite", new int[]{0xf8, 0xf8, 0xff, 0xff}); + NAMES.put("whitesmoke", new int[]{0xf5, 0xf5, 0xf5, 0xff}); + NAMES.put("seashell", new int[]{0xff, 0xf5, 0xee, 0xff}); + NAMES.put("beige", new int[]{0xf5, 0xf5, 0xdc, 0xff}); + NAMES.put("oldlace", new int[]{0xfd, 0xf5, 0xe6, 0xff}); + NAMES.put("floralwhite", new int[]{0xff, 0xfa, 0xf0, 0xff}); + NAMES.put("ivory", new int[]{0xff, 0xff, 0xf0, 0xff}); + NAMES.put("antiquewhite", new int[]{0xfa, 0xeb, 0xd7, 0xff}); + NAMES.put("linen", new int[]{0xfa, 0xf0, 0xe6, 0xff}); + NAMES.put("lavenderblush", new int[]{0xff, 0xf0, 0xf5, 0xff}); + NAMES.put("mistyrose", new int[]{0xff, 0xe4, 0xe1, 0xff}); + + //Grey color names + NAMES.put("gainsboro", new int[]{0xdc, 0xdc, 0xdc, 0xff}); + NAMES.put("lightgrey", new int[]{0xd3, 0xd3, 0xd3, 0xff}); + NAMES.put("silver", new int[]{0xc0, 0xc0, 0xc0, 0xff}); + NAMES.put("darkgray", new int[]{0xa9, 0xa9, 0xa9, 0xff}); + NAMES.put("gray", new int[]{0x80, 0x80, 0x80, 0xff}); + NAMES.put("dimgray", new int[]{0x69, 0x69, 0x69, 0xff}); + NAMES.put("lightslategray", new int[]{0x77, 0x88, 0x99, 0xff}); + NAMES.put("slategray", new int[]{0x70, 0x80, 0x90, 0xff}); + NAMES.put("darkslategray", new int[]{0x2f, 0x4f, 0x4f, 0xff}); + NAMES.put("black", new int[]{0x00, 0x00, 0x00, 0xff}); + + //Transparent color names + NAMES.put("transparent", new int[]{0xff, 0xff, 0xff, 0x00}); } /** @@ -237,27 +260,42 @@ public class WebColors extends HashMap { } throw new IllegalArgumentException( "Unknown color format. Must be #RGB or #RRGGBB"); - } - else if (name.startsWith("rgb(")) { + } else if (name.startsWith("rgb(")) { StringTokenizer tok = new StringTokenizer(name, "rgb(), \t\r\n\f"); for (int k = 0; k < 3; ++k) { - String v = tok.nextToken(); - if (v.endsWith("%")) - c[k] = Integer.parseInt(v.substring(0, v.length() - 1)) * 255 / 100; - else - c[k] = Integer.parseInt(v); - if (c[k] < 0) - c[k] = 0; - else if (c[k] > 255) - c[k] = 255; + c[k] = parseColorValue(tok.nextToken()); } return new Color(c[0], c[1], c[2], c[3]); - } + } else if (name.startsWith("rgba(")) { + StringTokenizer tok = new StringTokenizer(name, "rgba(), \t\r\n\f"); + for (int k = 0; k < 3; ++k) { + c[k] = parseColorValue(tok.nextToken()); + } + try { + c[3] = parseColorValue(tok.nextToken()); + } catch (Exception e) { + //alpha 值可写可不写 + } + return new Color(c[0], c[1], c[2], c[3]); + } name = name.toLowerCase(); if (!NAMES.containsKey(name)) throw new IllegalArgumentException("Color '" + name + "' not found."); c = (int[]) NAMES.get(name); - return new Color(c[0], c[1], c[2], 255); + return new Color(c[0], c[1], c[2], c[3]); + } + + /** + * @param v + * @return 0~ 255 + */ + public static int parseColorValue(String v) { + int r = v.endsWith("%") ? Integer.parseInt(v.substring(0, v.length() - 1)) * 255 / 100 : Integer.parseInt(v); + if (r < 0) + r = 0; + else if (r > 255) + r = 255; + return r; } } \ No newline at end of file diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/html/Markup.java b/fine-itext/src/com/fr/third/v2/lowagie/text/html/Markup.java index 6a9cc97ff..133c20a32 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/html/Markup.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/html/Markup.java @@ -424,7 +424,7 @@ public class Markup { try { return WebColors.getRGBColor(s); } - catch(IllegalArgumentException iae) { + catch(Exception iae) { return null; } } diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java b/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java index 512def96d..6ebb0b8ae 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java @@ -260,22 +260,24 @@ public class WebColors extends HashMap { } throw new IllegalArgumentException( "Unknown color format. Must be #RGB or #RRGGBB"); - } - else if (name.startsWith("rgb(")) { + } else if (name.startsWith("rgb(")) { StringTokenizer tok = new StringTokenizer(name, "rgb(), \t\r\n\f"); for (int k = 0; k < 3; ++k) { - String v = tok.nextToken(); - if (v.endsWith("%")) - c[k] = Integer.parseInt(v.substring(0, v.length() - 1)) * 255 / 100; - else - c[k] = Integer.parseInt(v); - if (c[k] < 0) - c[k] = 0; - else if (c[k] > 255) - c[k] = 255; + c[k] = parseColorValue(tok.nextToken()); } return new Color(c[0], c[1], c[2], c[3]); - } + } else if (name.startsWith("rgba(")) { + StringTokenizer tok = new StringTokenizer(name, "rgba(), \t\r\n\f"); + for (int k = 0; k < 3; ++k) { + c[k] = parseColorValue(tok.nextToken()); + } + try { + c[3] = parseColorValue(tok.nextToken()); + } catch (Exception e) { + //alpha 值可写可不写 + } + return new Color(c[0], c[1], c[2], c[3]); + } name = name.toLowerCase(); if (!NAMES.containsKey(name)) throw new IllegalArgumentException("Color '" + name @@ -283,4 +285,17 @@ public class WebColors extends HashMap { c = (int[]) NAMES.get(name); return new Color(c[0], c[1], c[2], c[3]); } + + /** + * @param v + * @return 0~ 255 + */ + public static int parseColorValue(String v) { + int r = v.endsWith("%") ? Integer.parseInt(v.substring(0, v.length() - 1)) * 255 / 100 : Integer.parseInt(v); + if (r < 0) + r = 0; + else if (r > 255) + r = 255; + return r; + } } \ No newline at end of file From afd604622c3db12c34b365254ea6686b9b04b261 Mon Sep 17 00:00:00 2001 From: "Hugh.C" Date: Wed, 20 May 2020 15:07:44 +0800 Subject: [PATCH 14/14] =?UTF-8?q?REPORT-31938=20=E6=94=B9=E8=BF=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/lowagie/text/html/WebColors.java | 20 ++++++++++++++++++- .../third/v2/lowagie/text/html/WebColors.java | 20 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java index 2f7e31d2c..61763eac7 100755 --- a/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java +++ b/fine-itext-old/src/com/fr/third/com/lowagie/text/html/WebColors.java @@ -272,7 +272,7 @@ public class WebColors extends HashMap { c[k] = parseColorValue(tok.nextToken()); } try { - c[3] = parseColorValue(tok.nextToken()); + c[3] = parseAlphaValue(tok.nextToken()); } catch (Exception e) { //alpha 值可写可不写 } @@ -287,6 +287,24 @@ public class WebColors extends HashMap { } /** + * 转化 alpha 值 + * @param v + * @return 0~ 255 + */ + public static int parseAlphaValue(String v) { + if (v.endsWith("%")) { + return parseColorValue(v); + } + float r = Float.parseFloat(v) * 255; + if (r < 0) + r = 0; + else if (r > 255) + r = 255; + return (int) r; + } + + /** + * 转化 rgb 值 * @param v * @return 0~ 255 */ diff --git a/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java b/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java index 6ebb0b8ae..a5ba17b56 100644 --- a/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java +++ b/fine-itext/src/com/fr/third/v2/lowagie/text/html/WebColors.java @@ -272,7 +272,7 @@ public class WebColors extends HashMap { c[k] = parseColorValue(tok.nextToken()); } try { - c[3] = parseColorValue(tok.nextToken()); + c[3] = parseAlphaValue(tok.nextToken()); } catch (Exception e) { //alpha 值可写可不写 } @@ -287,6 +287,24 @@ public class WebColors extends HashMap { } /** + * 转化 alpha 值 + * @param v + * @return 0~ 255 + */ + public static int parseAlphaValue(String v) { + if (v.endsWith("%")) { + return parseColorValue(v); + } + float r = Float.parseFloat(v) * 255; + if (r < 0) + r = 0; + else if (r > 255) + r = 255; + return (int) r; + } + + /** + * 转化 rgb 值 * @param v * @return 0~ 255 */