diff --git a/.gitignore b/.gitignore
index aee5425d5..c9dca952c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+.DS_Store
+*.iml
+*.ipr
target
.springBeans
.ant-targets-build.xml
diff --git a/spring-data-couchdb/pom.xml b/spring-data-couchdb/pom.xml
index 6914e22c0..742d9f65a 100644
--- a/spring-data-couchdb/pom.xml
+++ b/spring-data-couchdb/pom.xml
@@ -1,161 +1,166 @@
- 4.0.0
-
- org.springframework.data
- spring-data-document-parent
- 1.0.0.BUILD-SNAPSHOT
- ../spring-data-document-parent/pom.xml
-
- spring-data-couchdb
- jar
- Spring Data CouchDB Support
-
-
-
-
- The Apache Software License, Version 2.0
- http://www.apache.org/licenses/LICENSE-2.0.txt
- repo
-
-
-
-
-
- tareq.abedrabbo
- Tareq Abedrabbo
- tareq.abedrabbo@opencredo.com
- OpenCredo
- http://www.opencredo.org
-
- Project Admin
- Developer
-
- +0
-
-
- tomas.lukosius
- Tomas Lukosius
- tomas.lukosius@opencredo.com
- OpenCredo
- http://www.opencredo.org
-
- Project Admin
- Developer
-
- +0
-
-
-
-
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ 4.0.0
+
+ org.springframework.data
+ spring-data-document-parent
+ 1.0.0.BUILD-SNAPSHOT
+ ../spring-data-document-parent/pom.xml
+
+ spring-data-couchdb
+ jar
+ Spring Data CouchDB Support
-
-
- org.springframework
- spring-beans
-
-
- org.springframework
- spring-tx
-
-
-
- org.springframework
- spring-test
- test
-
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
-
-
- org.springframework.data
- spring-data-document-core
-
+
+
+ tareq.abedrabbo
+ Tareq Abedrabbo
+ tareq.abedrabbo@opencredo.com
+ OpenCredo
+ http://www.opencredo.org
+
+ Project Admin
+ Developer
+
+ +0
+
+
+ tomas.lukosius
+ Tomas Lukosius
+ tomas.lukosius@opencredo.com
+ OpenCredo
+ http://www.opencredo.org
+
+ Project Admin
+ Developer
+
+ +0
+
+
-
-
- org.codehaus.jackson
- jackson-core-asl
- 1.6.1
-
-
- org.codehaus.jackson
- jackson-mapper-asl
- 1.6.1
-
+
-
-
- org.slf4j
- slf4j-api
-
-
- org.slf4j
- jcl-over-slf4j
- compile
-
-
- org.slf4j
- slf4j-log4j12
- runtime
-
-
- log4j
- log4j
-
-
- javax.mail
- mail
-
-
- javax.jms
- jms
-
-
- com.sun.jdmk
- jmxtools
-
-
- com.sun.jmx
- jmxri
-
-
- runtime
-
-
-
- javax.annotation
- jsr250-api
- true
-
+
+
+ org.springframework
+ spring-beans
+
+
+ org.springframework
+ spring-tx
+
-
- org.mockito
- mockito-all
- test
-
+
+ org.springframework
+ spring-test
+ test
+
-
- junit
- junit
- test
-
-
-
- org.hamcrest
- hamcrest-all
- 1.1
- test
-
+
+
+ org.codehaus.jackson
+ jackson-core-asl
+ 1.6.1
+
+
+ org.codehaus.jackson
+ jackson-mapper-asl
+ 1.6.1
+
+
+
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ jcl-over-slf4j
+ compile
+
+
+ org.slf4j
+ slf4j-log4j12
+ runtime
+
+
+ log4j
+ log4j
+
+
+ javax.mail
+ mail
+
+
+ javax.jms
+ jms
+
+
+ com.sun.jdmk
+ jmxtools
+
+
+ com.sun.jmx
+ jmxri
+
+
+ runtime
+
+
+
+ javax.annotation
+ jsr250-api
+ true
+
+
+
+ junit
+ junit
+ test
+
+
+
+ org.hamcrest
+ hamcrest-all
+ 1.1
+ test
+
+
+
+ org.mockito
+ mockito-all
+ test
+
+
+
+ junit
+ junit
+
+
+
+
+ com.google.code.jcouchdb
+ jcouchdb
+ 0.11.0-1
+
+
+
+
+
+
+
+ com.springsource.bundlor
+ com.springsource.bundlor.maven
+
+
+
-
-
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java
index 1dd63e7f9..60f4e7db1 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/SimpleMongoConverterTests.java
@@ -1,351 +1,350 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.springframework.data.document.mongodb;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
-
-import java.lang.reflect.Field;
-import java.math.BigInteger;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.data.document.mongodb.SomeEnumTest.NumberEnum;
-import org.springframework.data.document.mongodb.SomeEnumTest.StringEnum;
-import org.springframework.data.document.mongodb.convert.SimpleMongoConverter;
-import org.springframework.util.ReflectionUtils;
-
-import com.mongodb.BasicDBObject;
-import com.mongodb.DBObject;
-import com.mongodb.util.JSON;
-
-public class SimpleMongoConverterTests {
-
- static final String SIMPLE_JSON = "{ \"map\" : { \"foo\" : 3 , \"bar\" : 4}, \"number\" : 15 }";
- static final String COMPLEX_JSON = "{ \"map\" : { \"trade\" : { \"orderType\" : \"BUY\" , \"price\" : 90.5 , \"quantity\" : 0 , \"ticker\" : \"VMW\"}}}";
-
- SimpleMongoConverter converter;
- DBObject object;
-
- @Before
- public void setUp() {
- converter = new SimpleMongoConverter();
- object = new BasicDBObject();
- }
-
- @Test
- public void notNestedObject() {
- User user = new User();
- user.setAccountName("My Account");
- user.setUserName("Mark");
- converter.write(user, object);
- assertEquals("My Account", object.get("accountName"));
- assertEquals("Mark", object.get("userName"));
-
- User u = converter.read(User.class, object);
-
- assertEquals("My Account", u.getAccountName());
- assertEquals("Mark", u.getUserName());
- }
-
- @Test
- public void nestedObject() {
- Portfolio p = createPortfolioWithNoTrades();
- converter.write(p, object);
-
- assertEquals("High Risk Trading Account", object.get("portfolioName"));
- assertTrue(object.containsField("user"));
-
- Portfolio cp = converter.read(Portfolio.class, object);
-
- assertEquals("High Risk Trading Account", cp.getPortfolioName());
- assertEquals("Joe Trader", cp.getUser().getUserName());
- assertEquals("ACCT-123", cp.getUser().getAccountName());
-
- }
-
- @Test
- public void objectWithMap() {
- Portfolio p = createPortfolioWithPositions();
- converter.write(p, object);
-
- Portfolio cp = converter.read(Portfolio.class, object);
- assertEquals("High Risk Trading Account", cp.getPortfolioName());
- }
-
- @Test
- public void objectWithMapContainingNonPrimitiveTypeAsValue() {
- Portfolio p = createPortfolioWithManagers();
- converter.write(p, object);
-
- Portfolio cp = converter.read(Portfolio.class, object);
- assertEquals("High Risk Trading Account", cp.getPortfolioName());
- }
-
- protected Portfolio createPortfolioWithPositions() {
-
- Portfolio portfolio = new Portfolio();
- portfolio.setPortfolioName("High Risk Trading Account");
- Map positions = new HashMap();
- positions.put("CSCO", 1);
- portfolio.setPositions(positions);
- return portfolio;
- }
-
- protected Portfolio createPortfolioWithManagers() {
-
- Portfolio portfolio = new Portfolio();
- portfolio.setPortfolioName("High Risk Trading Account");
- Map managers = new HashMap();
- Person p1 = new Person();
- p1.setFirstName("Mark");
- managers.put("CSCO", p1);
- portfolio.setPortfolioManagers(managers);
- return portfolio;
- }
-
- protected Portfolio createPortfolioWithNoTrades() {
- Portfolio portfolio = new Portfolio();
- User user = new User();
- user.setUserName("Joe Trader");
- user.setAccountName("ACCT-123");
- portfolio.setUser(user);
- portfolio.setPortfolioName("High Risk Trading Account");
- return portfolio;
- }
-
- @Test
- public void objectWithArrayContainingNonPrimitiveType() {
- TradeBatch b = createTradeBatch();
- converter.write(b, object);
-
- TradeBatch b2 = converter.read(TradeBatch.class, object);
- assertEquals(b.getBatchId(), b2.getBatchId());
- assertNotNull(b2.getTradeList());
- assertEquals(b.getTradeList().size(), b2.getTradeList().size());
- assertEquals(b.getTradeList().get(1).getTicker(), b2.getTradeList().get(1).getTicker());
- assertEquals(b.getTrades().length, b2.getTrades().length);
- assertEquals(b.getTrades()[1].getTicker(), b2.getTrades()[1].getTicker());
- }
-
- private TradeBatch createTradeBatch() {
- TradeBatch tb = new TradeBatch();
- tb.setBatchId("123456");
- Trade t1 = new Trade();
- t1.setOrderType("BUY");
- t1.setTicker("AAPL");
- t1.setQuantity(1000);
- t1.setPrice(320.77D);
- Trade t2 = new Trade();
- t2.setOrderType("SELL");
- t2.setTicker("MSFT");
- t2.setQuantity(100);
- t2.setPrice(27.92D);
- tb.setTrades(new Trade[] { t2, t1 });
- tb.setTradeList(Arrays.asList(new Trade[] { t1, t2 }));
- return tb;
- }
-
- @Test
- public void objectWithEnumTypes() {
- SomeEnumTest test = new SomeEnumTest();
- test.setId("123AAA");
- test.setName("Sven");
- test.setStringEnum(StringEnum.ONE);
- test.setNumberEnum(NumberEnum.FIVE);
- DBObject dbo = new BasicDBObject();
- converter.write(test, dbo);
-
- SomeEnumTest results = converter.read(SomeEnumTest.class, dbo);
- assertNotNull(results);
- assertEquals(test.getId(), results.getId());
- assertEquals(test.getName(), results.getName());
- assertEquals(test.getStringEnum(), results.getStringEnum());
- assertEquals(test.getNumberEnum(), results.getNumberEnum());
- }
-
- @Test
- public void serializesClassWithFinalObjectIdCorrectly() throws Exception {
-
- BasicDBObject object = new BasicDBObject();
- Person person = new Person("Oliver");
- converter.write(person, object);
-
- assertThat(object.get("class"), is(nullValue()));
- assertThat(object.get("_id"), is((Object) person.getId()));
- }
-
- @Test
- public void discoversGenericsForType() throws Exception {
-
- Field field = ReflectionUtils.findField(Sample.class, "map");
- assertListOfStringAndLong(converter.getGenericParameters(field.getGenericType()));
- }
-
- @Test
- public void writesSimpleMapCorrectly() throws Exception {
-
- Map map = new HashMap();
- map.put("foo", 1L);
- map.put("bar", 2L);
-
- Sample sample = new Sample();
- sample.setMap(map);
- sample.setNumber(15L);
-
- converter.write(sample, object);
-
- assertThat(object.get("number"), is((Object) 15L));
-
- Object result = object.get("map");
- assertTrue(result instanceof Map);
-
- @SuppressWarnings("unchecked")
- Map mapResult = (Map) result;
- assertThat(mapResult.size(), is(2));
- assertThat(mapResult.get("foo"), is(1L));
- assertThat(mapResult.get("bar"), is(2L));
- }
-
- @Test
- public void writesComplexMapCorrectly() throws Exception {
-
- Trade trade = new Trade();
- trade.setOrderType("BUY");
- trade.setTicker("VMW");
- trade.setPrice(90.50d);
-
- Map map = new HashMap();
- map.put("trade", trade);
-
- converter.write(new Sample2(map), object);
- DBObject tradeDbObject = new BasicDBObject();
- converter.write(trade, tradeDbObject);
-
- Object result = object.get("map");
- assertTrue(result instanceof Map);
-
- @SuppressWarnings("unchecked")
- Map mapResult = (Map) result;
- assertThat(mapResult.size(), is(1));
- assertThat(mapResult.get("trade"), is(tradeDbObject));
- }
-
- @Test
- public void readsMapWithSetterCorrectly() throws Exception {
-
- DBObject input = (DBObject) JSON.parse(SIMPLE_JSON);
- Sample result = converter.read(Sample.class, input);
- assertThat(result.getNumber(), is(15L));
-
- Map map = result.getMap();
- assertThat(map, is(notNullValue()));
- assertThat(map.size(), is(2));
- assertThat(map.get("foo"), is(3L));
- assertThat(map.get("bar"), is(4L));
- }
-
- @Test
- public void readsMapWithFieldOnlyCorrectly() throws Exception {
-
- DBObject input = (DBObject) JSON.parse(COMPLEX_JSON);
- Sample2 result = converter.read(Sample2.class, input);
-
- Map map = result.getMap();
-
- Trade trade = new Trade();
- trade.setOrderType("BUY");
- trade.setTicker("VMW");
- trade.setPrice(90.50d);
-
- assertThat(map.size(), is(1));
- assertThat(map.get("trade").getTicker(), is("VMW"));
- assertThat(map.get("trade").getOrderType(), is("BUY"));
- assertThat(map.get("trade").getPrice(), is(90.50d));
- }
-
- @Test
- public void supportsBigIntegerAsIdProperty() throws Exception {
-
- Sample3 sample3 = new Sample3();
- sample3.id = new BigInteger("4d24809660413b687f5d323e", 16);
- converter.write(sample3, object);
- assertThat(object.get("_id"), is(notNullValue()));
-
- Sample3 result = converter.read(Sample3.class,
- (DBObject) JSON.parse("{\"_id\" : {\"$oid\" : \"4d24809660413b687f5d323e\" }}"));
- assertThat(result.getId().toString(16), is("4d24809660413b687f5d323e"));
- }
-
- private void assertListOfStringAndLong(List> types) {
-
- assertThat(types.size(), is(2));
- assertEquals(String.class, types.get(0));
- assertEquals(Long.class, types.get(1));
- }
-
- public static class Sample {
-
- private Map map;
- private Long number;
-
- public void setMap(Map map) {
- this.map = map;
- }
-
- public Map getMap() {
- return map;
- }
-
- public void setNumber(Long number) {
- this.number = number;
- }
-
- public Long getNumber() {
- return number;
- }
- }
-
- public static class Sample2 {
-
- private final Map map;
-
- protected Sample2() {
- this.map = null;
- }
-
- public Sample2(Map map) {
- this.map = map;
- }
-
- public Map getMap() {
- return map;
- }
- }
-
- private static class Sample3 {
-
- private BigInteger id;
-
- public BigInteger getId() {
- return id;
- }
- }
-}
+/*
+ * Copyright 2010-2011 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.data.document.mongodb;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBObject;
+import com.mongodb.util.JSON;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.data.document.mongodb.SomeEnumTest.NumberEnum;
+import org.springframework.data.document.mongodb.SomeEnumTest.StringEnum;
+import org.springframework.data.document.mongodb.convert.SimpleMongoConverter;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Field;
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+public class SimpleMongoConverterTests {
+
+ static final String SIMPLE_JSON = "{ \"map\" : { \"foo\" : 3 , \"bar\" : 4}, \"number\" : 15 }";
+ static final String COMPLEX_JSON = "{ \"map\" : { \"trade\" : { \"orderType\" : \"BUY\" , \"price\" : 90.5 , \"quantity\" : 0 , \"ticker\" : \"VMW\"}}}";
+
+ SimpleMongoConverter converter;
+ DBObject object;
+
+ @Before
+ public void setUp() {
+ converter = new SimpleMongoConverter();
+ object = new BasicDBObject();
+ }
+
+ @Test
+ public void notNestedObject() {
+ User user = new User();
+ user.setAccountName("My Account");
+ user.setUserName("Mark");
+ converter.write(user, object);
+ assertEquals("My Account", object.get("accountName"));
+ assertEquals("Mark", object.get("userName"));
+
+ User u = converter.read(User.class, object);
+
+ assertEquals("My Account", u.getAccountName());
+ assertEquals("Mark", u.getUserName());
+ }
+
+ @Test
+ public void nestedObject() {
+ Portfolio p = createPortfolioWithNoTrades();
+ converter.write(p, object);
+
+ assertEquals("High Risk Trading Account", object.get("portfolioName"));
+ assertTrue(object.containsField("user"));
+
+ Portfolio cp = converter.read(Portfolio.class, object);
+
+ assertEquals("High Risk Trading Account", cp.getPortfolioName());
+ assertEquals("Joe Trader", cp.getUser().getUserName());
+ assertEquals("ACCT-123", cp.getUser().getAccountName());
+
+ }
+
+ @Test
+ public void objectWithMap() {
+ Portfolio p = createPortfolioWithPositions();
+ converter.write(p, object);
+
+ Portfolio cp = converter.read(Portfolio.class, object);
+ assertEquals("High Risk Trading Account", cp.getPortfolioName());
+ }
+
+ @Test
+ public void objectWithMapContainingNonPrimitiveTypeAsValue() {
+ Portfolio p = createPortfolioWithManagers();
+ converter.write(p, object);
+
+ Portfolio cp = converter.read(Portfolio.class, object);
+ assertEquals("High Risk Trading Account", cp.getPortfolioName());
+ }
+
+ protected Portfolio createPortfolioWithPositions() {
+
+ Portfolio portfolio = new Portfolio();
+ portfolio.setPortfolioName("High Risk Trading Account");
+ Map positions = new HashMap();
+ positions.put("CSCO", 1);
+ portfolio.setPositions(positions);
+ return portfolio;
+ }
+
+ protected Portfolio createPortfolioWithManagers() {
+
+ Portfolio portfolio = new Portfolio();
+ portfolio.setPortfolioName("High Risk Trading Account");
+ Map managers = new HashMap();
+ Person p1 = new Person();
+ p1.setFirstName("Mark");
+ managers.put("CSCO", p1);
+ portfolio.setPortfolioManagers(managers);
+ return portfolio;
+ }
+
+ protected Portfolio createPortfolioWithNoTrades() {
+ Portfolio portfolio = new Portfolio();
+ User user = new User();
+ user.setUserName("Joe Trader");
+ user.setAccountName("ACCT-123");
+ portfolio.setUser(user);
+ portfolio.setPortfolioName("High Risk Trading Account");
+ return portfolio;
+ }
+
+ @Test
+ public void objectWithArrayContainingNonPrimitiveType() {
+ TradeBatch b = createTradeBatch();
+ converter.write(b, object);
+
+ TradeBatch b2 = converter.read(TradeBatch.class, object);
+ assertEquals(b.getBatchId(), b2.getBatchId());
+ assertNotNull(b2.getTradeList());
+ assertEquals(b.getTradeList().size(), b2.getTradeList().size());
+ assertEquals(b.getTradeList().get(1).getTicker(), b2.getTradeList().get(1).getTicker());
+ assertEquals(b.getTrades().length, b2.getTrades().length);
+ assertEquals(b.getTrades()[1].getTicker(), b2.getTrades()[1].getTicker());
+ }
+
+ private TradeBatch createTradeBatch() {
+ TradeBatch tb = new TradeBatch();
+ tb.setBatchId("123456");
+ Trade t1 = new Trade();
+ t1.setOrderType("BUY");
+ t1.setTicker("AAPL");
+ t1.setQuantity(1000);
+ t1.setPrice(320.77D);
+ Trade t2 = new Trade();
+ t2.setOrderType("SELL");
+ t2.setTicker("MSFT");
+ t2.setQuantity(100);
+ t2.setPrice(27.92D);
+ tb.setTrades(new Trade[]{t2, t1});
+ tb.setTradeList(Arrays.asList(new Trade[]{t1, t2}));
+ return tb;
+ }
+
+ @Test
+ public void objectWithEnumTypes() {
+ SomeEnumTest test = new SomeEnumTest();
+ test.setId("123AAA");
+ test.setName("Sven");
+ test.setStringEnum(StringEnum.ONE);
+ test.setNumberEnum(NumberEnum.FIVE);
+ DBObject dbo = new BasicDBObject();
+ converter.write(test, dbo);
+
+ SomeEnumTest results = converter.read(SomeEnumTest.class, dbo);
+ assertNotNull(results);
+ assertEquals(test.getId(), results.getId());
+ assertEquals(test.getName(), results.getName());
+ assertEquals(test.getStringEnum(), results.getStringEnum());
+ assertEquals(test.getNumberEnum(), results.getNumberEnum());
+ }
+
+ @Test
+ public void serializesClassWithFinalObjectIdCorrectly() throws Exception {
+
+ BasicDBObject object = new BasicDBObject();
+ Person person = new Person("Oliver");
+ converter.write(person, object);
+
+ assertThat(object.get("class"), is(nullValue()));
+ assertThat(object.get("_id"), is((Object) person.getId()));
+ }
+
+ @Test
+ public void discoversGenericsForType() throws Exception {
+
+ Field field = ReflectionUtils.findField(Sample.class, "map");
+ assertListOfStringAndLong(converter.getGenericParameters(field.getGenericType()));
+ }
+
+ @Test
+ public void writesSimpleMapCorrectly() throws Exception {
+
+ Map map = new HashMap();
+ map.put("foo", 1L);
+ map.put("bar", 2L);
+
+ Sample sample = new Sample();
+ sample.setMap(map);
+ sample.setNumber(15L);
+
+ converter.write(sample, object);
+
+ assertThat(object.get("number"), is((Object) 15L));
+
+ Object result = object.get("map");
+ assertTrue(result instanceof Map);
+
+ @SuppressWarnings("unchecked")
+ Map mapResult = (Map) result;
+ assertThat(mapResult.size(), is(2));
+ assertThat(mapResult.get("foo"), is(1L));
+ assertThat(mapResult.get("bar"), is(2L));
+ }
+
+ @Test
+ public void writesComplexMapCorrectly() throws Exception {
+
+ Trade trade = new Trade();
+ trade.setOrderType("BUY");
+ trade.setTicker("VMW");
+ trade.setPrice(90.50d);
+
+ Map map = new HashMap();
+ map.put("trade", trade);
+
+ converter.write(new Sample2(map), object);
+ DBObject tradeDbObject = new BasicDBObject();
+ converter.write(trade, tradeDbObject);
+
+ Object result = object.get("map");
+ assertTrue(result instanceof Map);
+
+ @SuppressWarnings("unchecked")
+ Map mapResult = (Map) result;
+ assertThat(mapResult.size(), is(1));
+ assertThat(mapResult.get("trade"), is(tradeDbObject));
+ }
+
+ @Test
+ public void readsMapWithSetterCorrectly() throws Exception {
+
+ DBObject input = (DBObject) JSON.parse(SIMPLE_JSON);
+ Sample result = converter.read(Sample.class, input);
+ assertThat(result.getNumber(), is(15L));
+
+ Map map = result.getMap();
+ assertThat(map, is(notNullValue()));
+ assertThat(map.size(), is(2));
+ assertThat(map.get("foo"), is(3L));
+ assertThat(map.get("bar"), is(4L));
+ }
+
+ @Test
+ public void readsMapWithFieldOnlyCorrectly() throws Exception {
+
+ DBObject input = (DBObject) JSON.parse(COMPLEX_JSON);
+ Sample2 result = converter.read(Sample2.class, input);
+
+ Map map = result.getMap();
+
+ Trade trade = new Trade();
+ trade.setOrderType("BUY");
+ trade.setTicker("VMW");
+ trade.setPrice(90.50d);
+
+ assertThat(map.size(), is(1));
+ assertThat(map.get("trade").getTicker(), is("VMW"));
+ assertThat(map.get("trade").getOrderType(), is("BUY"));
+ assertThat(map.get("trade").getPrice(), is(90.50d));
+ }
+
+ @Test
+ public void supportsBigIntegerAsIdProperty() throws Exception {
+
+ Sample3 sample3 = new Sample3();
+ sample3.id = new BigInteger("4d24809660413b687f5d323e", 16);
+ converter.write(sample3, object);
+ assertThat(object.get("_id"), is(notNullValue()));
+
+ Sample3 result = converter.read(Sample3.class,
+ (DBObject) JSON.parse("{\"_id\" : {\"$oid\" : \"4d24809660413b687f5d323e\" }}"));
+ assertThat(result.getId().toString(16), is("4d24809660413b687f5d323e"));
+ }
+
+ private void assertListOfStringAndLong(List> types) {
+
+ assertThat(types.size(), is(2));
+ assertEquals(String.class, types.get(0));
+ assertEquals(Long.class, types.get(1));
+ }
+
+ public static class Sample {
+
+ private Map map;
+ private Long number;
+
+ public void setMap(Map map) {
+ this.map = map;
+ }
+
+ public Map getMap() {
+ return map;
+ }
+
+ public void setNumber(Long number) {
+ this.number = number;
+ }
+
+ public Long getNumber() {
+ return number;
+ }
+ }
+
+ public static class Sample2 {
+
+ private final Map map;
+
+ protected Sample2() {
+ this.map = null;
+ }
+
+ public Sample2(Map map) {
+ this.map = map;
+ }
+
+ public Map getMap() {
+ return map;
+ }
+ }
+
+ private static class Sample3 {
+
+ private BigInteger id;
+
+ public BigInteger getId() {
+ return id;
+ }
+ }
+}