diff --git a/.project b/.project new file mode 100644 index 000000000..72d752915 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + spring-datastore-keyvalue-dist + + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + + diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..fc929aaef --- /dev/null +++ b/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Mon Oct 11 17:02:20 EDT 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-datastore-keyvalue-core/.classpath b/spring-datastore-keyvalue-core/.classpath index f42fb64cf..0bb7ad5ca 100644 --- a/spring-datastore-keyvalue-core/.classpath +++ b/spring-datastore-keyvalue-core/.classpath @@ -1,10 +1,7 @@ - - - - - - - - - - + + + + + + + diff --git a/spring-datastore-keyvalue-parent/.project b/spring-datastore-keyvalue-parent/.project new file mode 100644 index 000000000..fc55d1f3a --- /dev/null +++ b/spring-datastore-keyvalue-parent/.project @@ -0,0 +1,17 @@ + + + spring-datastore-keyvalue-parent + + + + + + org.maven.ide.eclipse.maven2Builder + + + + + + org.maven.ide.eclipse.maven2Nature + + diff --git a/spring-datastore-keyvalue-parent/.settings/org.maven.ide.eclipse.prefs b/spring-datastore-keyvalue-parent/.settings/org.maven.ide.eclipse.prefs new file mode 100644 index 000000000..fc929aaef --- /dev/null +++ b/spring-datastore-keyvalue-parent/.settings/org.maven.ide.eclipse.prefs @@ -0,0 +1,9 @@ +#Mon Oct 11 17:02:20 EDT 2010 +activeProfiles= +eclipse.preferences.version=1 +fullBuildGoals=process-test-resources +includeModules=false +resolveWorkspaceProjects=true +resourceFilterGoals=process-resources resources\:testResources +skipCompilerPlugin=true +version=1 diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/DefaultSetOperations.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/DefaultSetOperations.java new file mode 100644 index 000000000..35289e357 --- /dev/null +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/DefaultSetOperations.java @@ -0,0 +1,93 @@ +package org.springframework.datastore.redis.core; + +import java.util.Set; + +public class DefaultSetOperations implements SetOperations { + + private RedisTemplate redisTemplate; + public DefaultSetOperations(RedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + public boolean add(final String key, final String member) { + return redisTemplate.execute(new RedisCallback() { + public Boolean doInRedis(RedisClient redisClient) throws Exception { + return (redisClient.sadd(key, member) == 0) ? true : false; + } + }); + } + + public Set getAll(final String key) { + return redisTemplate.execute(new RedisCallback>() { + public Set doInRedis(RedisClient redisClient) throws Exception { + return redisClient.smembers(key); + } + }); + } + + public boolean remove(String key, String member) { + // TODO Auto-generated method stub + return false; + } + + public boolean removeRandom(String key) { + // TODO Auto-generated method stub + return false; + } + + public boolean moveBetweenSets(String srckey, String dstkey, String member) { + // TODO Auto-generated method stub + return false; + } + + public int size(String key) { + // TODO Auto-generated method stub + return 0; + } + + public boolean contains(String key, String member) { + // TODO Auto-generated method stub + return false; + } + + public Set getIntersectionOfSets(String... keys) { + // TODO Auto-generated method stub + return null; + } + + public void storeIntersectionOfSets(final String dstkey, final String... keys) { + redisTemplate.execute(new RedisCallback() { + public Void doInRedis(RedisClient redisClient) throws Exception { + redisClient.sinterstore(dstkey, keys); + return null; + } + }); + } + + public Set getUnionOfSets(String... keys) { + // TODO Auto-generated method stub + return null; + } + + public void storeUnionOfSets(String dstkey, String... keys) { + // TODO Auto-generated method stub + + } + + public Set getDifferenceBetweenSets(String... keys) { + // TODO Auto-generated method stub + return null; + } + + public void storeDifferenceBetweenSets(String dstkey, String... keys) { + // TODO Auto-generated method stub + + } + + public String getRandom(String key) { + // TODO Auto-generated method stub + return null; + } + + +} diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/RedisTemplate.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/RedisTemplate.java index 5594cb431..dd32b18cc 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/RedisTemplate.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/core/RedisTemplate.java @@ -281,8 +281,7 @@ public class RedisTemplate extends RedisAccessor implements RedisOperations { } public SetOperations getSetOperations() { - // TODO Auto-generated method stub - return null; + return new DefaultSetOperations(this); } diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/RedisSet.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/RedisSet.java index dbf30f2ca..0cf25d240 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/RedisSet.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/RedisSet.java @@ -15,7 +15,7 @@ public class RedisSet extends AbstractRedisCollection implements Set { public RedisSet(RedisTemplate redisTemplate, String redisKey) { super(redisTemplate, redisKey); } - + public int size() { return redisTemplate.getSetOperations().size(redisKey); } @@ -58,11 +58,29 @@ public class RedisSet extends AbstractRedisCollection implements Set { return redisTemplate.getSetOperations().removeRandom(redisKey); } - - void intersection(RedisSet... redisSets) { + /* + public intersection(RedisSet... redisSets) { //storeIntersectionOfSets.. + return null; + } + */ + + public RedisSet intersection(String newKey, RedisSet... redisSets) { + String[] keys = new String[redisSets.length]; + int i = 0; + for (RedisSet redisSet : redisSets) { + keys[i] = redisSet.getRedisKey(); + i++; + } + redisTemplate.getSetOperations().storeIntersectionOfSets(newKey, keys); + + RedisSet resultSet = new RedisSet(redisTemplate, newKey); + Set results = redisTemplate.getSetOperations().getAll(newKey); + resultSet.addAll(results); + return resultSet; } + void union(RedisSet... redisSets) { //storeUnionOfSets } diff --git a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/Sets.java b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/Sets.java index 8c095ea14..44f209b29 100644 --- a/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/Sets.java +++ b/spring-datastore-redis/src/main/java/org/springframework/datastore/redis/util/Sets.java @@ -1,5 +1,7 @@ package org.springframework.datastore.redis.util; +import java.util.Set; + import org.springframework.datastore.redis.core.RedisTemplate; public class Sets { diff --git a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/AbstractClientIntegrationTests.java b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/AbstractClientIntegrationTests.java index 9b3035364..5af72d6ac 100644 --- a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/AbstractClientIntegrationTests.java +++ b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/AbstractClientIntegrationTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Map; +import java.util.Set; import junit.framework.Assert; @@ -102,4 +103,6 @@ public abstract class AbstractClientIntegrationTests { Person p = new Person("Joe", "Trader", 33); } + + } diff --git a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/jedis/JedisRedisClientIntegrationTests.java b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/jedis/JedisRedisClientIntegrationTests.java index fb52ab8fb..ee493184d 100644 --- a/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/jedis/JedisRedisClientIntegrationTests.java +++ b/spring-datastore-redis/src/test/java/org/springframework/datastore/redis/core/jedis/JedisRedisClientIntegrationTests.java @@ -16,21 +16,52 @@ package org.springframework.datastore.redis.core.jedis; +import java.util.Set; + import org.junit.Before; +import org.junit.Test; import org.springframework.datastore.redis.core.AbstractClientIntegrationTests; import org.springframework.datastore.redis.core.RedisClientFactory; +import org.springframework.datastore.redis.core.RedisTemplate; +import org.springframework.datastore.redis.util.RedisSet; public class JedisRedisClientIntegrationTests extends AbstractClientIntegrationTests { + RedisClientFactory clientFactory; @Before public void setUp() { - RedisClientFactory clientFactory = new JedisClientFactory(); + clientFactory = new JedisClientFactory(); clientFactory.setPassword("foobared"); client = clientFactory.createClient(); client.flushAll(); } - + @Test + public void setAdd() { + client.sadd("s1", "1"); + client.sadd("s1", "2"); + client.sadd("s1", "3"); + client.sadd("s2", "2"); + client.sadd("s2", "3"); + Set intersection = client.sinter("s1", "s2"); + System.out.println(intersection); + + + } + + @Test + public void setIntersectionTests() { + RedisTemplate template = new RedisTemplate(clientFactory); + RedisSet s1 = new RedisSet(template, "s1"); + s1.add("1"); s1.add("2"); s1.add("3"); + RedisSet s2 = new RedisSet(template, "s2"); + s2.add("2"); s2.add("3"); + Set s3 = s1.intersection("s3", s1, s2); + for (Object object : s3) { + System.out.println(object); + } + + } }