From 6e04c9edc338bb9f54ab7b49310fb0c557912fda Mon Sep 17 00:00:00 2001 From: Michael Nitschinger Date: Tue, 28 May 2013 13:43:00 +0200 Subject: [PATCH] Make sure list saving/loading works. --- pom.xml | 24 ++++---- .../convert/MappingCouchbaseConverter.java | 2 + .../spring/core/CouchbaseTemplateTest.java | 57 ++++++++++++++++++- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index abc51839..1058b52d 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - couchbase + com.couchbase + spring-data-couchbase 0.1.0-SNAPSHOT jar @@ -21,8 +22,11 @@ + UTF-8 + 1.1.6 + 3.2.3.RELEASE @@ -31,9 +35,6 @@ Couchbase Maven Repository default http://files.couchbase.com/maven2/ - - false - @@ -41,13 +42,12 @@ couchbase couchbase-client - 1.1.5 + ${couchbase} org.springframework spring-context - 3.2.2.RELEASE - jar + ${spring} cglib @@ -63,13 +63,13 @@ org.springframework spring-test - 3.2.2.RELEASE + ${spring} test org.springframework.data - spring-data-commons-core - 1.4.1.RELEASE + spring-data-commons + 1.5.1.RELEASE org.codehaus.jackson @@ -79,8 +79,8 @@ org.springframework spring-tx - 3.2.2.RELEASE + ${spring} - spring-data-couchbase + diff --git a/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java b/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java index ce23e4af..71ad8e74 100644 --- a/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java +++ b/src/main/java/com/couchbase/spring/core/convert/MappingCouchbaseConverter.java @@ -32,6 +32,7 @@ import java.io.OutputStream; import org.codehaus.jackson.JsonEncoding; import org.codehaus.jackson.JsonFactory; import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.map.ObjectMapper; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; @@ -168,6 +169,7 @@ public class MappingCouchbaseConverter extends AbstractCouchbaseConverter OutputStream jsonStream = new ByteArrayOutputStream(); final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator( jsonStream, JsonEncoding.UTF8); + jsonGenerator.setCodec(new ObjectMapper()); jsonGenerator.writeStartObject(); entity.doWithProperties(new PropertyHandler() { diff --git a/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java b/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java index 2eecd246..3cfec5ed 100644 --- a/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java +++ b/src/test/java/com/couchbase/spring/core/CouchbaseTemplateTest.java @@ -35,6 +35,10 @@ import org.springframework.data.annotation.Id; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = TestApplicationConfig.class) public class CouchbaseTemplateTest { @@ -121,12 +125,32 @@ public class CouchbaseTemplateTest { result = client.get(id); assertNull(result); } + + @Test + public void storeLists() { + String id ="persons:lots-of-names"; + List names = new ArrayList(); + names.add("Michael"); + names.add("Thomas"); + List votes = new LinkedList(); + ComplexPerson complex = new ComplexPerson(id, names, votes); + + template.save(complex); + + String expected = "{\"votes\":[],\"firstnames\":[\"Michael\",\"Thomas\"]}"; + assertEquals(expected, client.get(id)); + + ComplexPerson response = template.findById(id, ComplexPerson.class); + assertEquals(names, response.getFirstnames()); + assertEquals(votes, response.getVotes()); + assertEquals(id, response.getId()); + } /** * A sample document with just an id and property. */ @Document - class SimplePerson { + static class SimplePerson { @Id private final String id; @Field @@ -142,7 +166,7 @@ public class CouchbaseTemplateTest { * A sample document that expires in 2 seconds. */ @Document(expiry=2) - class DocumentWithExpiry { + static class DocumentWithExpiry { @Id private final String id; @@ -150,4 +174,33 @@ public class CouchbaseTemplateTest { this.id = id; } } + + @Document + static class ComplexPerson { + @Id + private final String id; + @Field + private final List firstnames; + @Field + private final List votes; + + public ComplexPerson(String id, List firstnames, + List votes) { + this.id = id; + this.firstnames = firstnames; + this.votes = votes; + } + + List getFirstnames() { + return firstnames; + } + + List getVotes() { + return votes; + } + + String getId() { + return id; + } + } }