From c62ad426e3f1a5c29989e179c878120acf01c3a5 Mon Sep 17 00:00:00 2001 From: Maciej Zasada Date: Wed, 18 Sep 2013 23:14:28 +0200 Subject: [PATCH 1/2] DATACOUCH-27: Mapping @Id field with MappingCouchbaseConverter Fixed @Id field rewriting from CouchbaseDocument into domain object. More info can be found at DATACOUCH-27 JIRA issue. --- .gitignore | 4 ++++ .../core/convert/MappingCouchbaseConverter.java | 9 ++++++--- .../BasicCouchbasePersistentPropertyTests.java | 3 +++ .../mapping/MappingCouchbaseConverterTests.java | 16 ++++++++++++---- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index bc8404d7b..7b3538af1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,7 @@ target/ .classpath .project .settings/* + +# IntelliJ IDEA +*.iml +.idea diff --git a/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java b/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java index 48c4ea6d7..3ec4cb013 100644 --- a/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java +++ b/src/main/java/org/springframework/data/couchbase/core/convert/MappingCouchbaseConverter.java @@ -82,7 +82,7 @@ public R read(Class clazz, CouchbaseDocument doc) { protected R read(TypeInformation type, CouchbaseDocument doc) { return read(type, doc, null); } - + protected R read(TypeInformation type, final CouchbaseDocument source, Object parent) { if (source == null) { @@ -118,13 +118,17 @@ protected R read(final CouchbasePersistentEntity entity, f entity.doWithProperties(new PropertyHandler() { public void doWithPersistentProperty(final CouchbasePersistentProperty prop) { - if (!source.containsKey(prop.getFieldName()) || entity.isConstructorArgument(prop)) { + if (!doesPropertyExistInSource(prop) || entity.isConstructorArgument(prop)) { return; } Object obj = prop.isIdProperty() ? source.getId() : getValueInternal(prop, source, evaluator, result); wrapper.setProperty(prop, obj, useFieldAccessOnly); } + + private boolean doesPropertyExistInSource(CouchbasePersistentProperty property) { + return property.isIdProperty() || source.containsKey(property.getFieldName()); + } }); entity.doWithAssociations(new AssociationHandler() { @@ -201,7 +205,6 @@ private Object getPotentiallyConvertedSimpleRead(Object value, Class target) return target.isAssignableFrom(value.getClass()) ? value : conversionService.convert(value, target); } - @Override public void write(final Object source, final CouchbaseDocument target) { if (source == null) { diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java index 70e97eb52..1a5e3c37e 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/BasicCouchbasePersistentPropertyTests.java @@ -90,5 +90,8 @@ public class Beer { String description; + public String getId() { + return id; + } } } diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index 99c4e4150..547c9dd5d 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -69,7 +69,6 @@ public void needsIDOnEntity() { new CouchbaseDocument()); } - @Test public void writesString() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -94,7 +93,6 @@ public void readsString() { assertEquals("foobar", converted.attr0); } - @Test public void writesNumber() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -119,7 +117,6 @@ public void readsNumber() { assertEquals(42, converted.attr0); } - @Test public void writesBoolean() { CouchbaseDocument converted = new CouchbaseDocument(); @@ -176,6 +173,18 @@ public void readsMixedSimpleTypes() { assertTrue(converted.attr3); } + @Test + public void readsID() { + // given: + CouchbaseDocument document = new CouchbaseDocument("001"); + + // when: + BasicCouchbasePersistentPropertyTests.Beer beer = converter.read(BasicCouchbasePersistentPropertyTests.Beer.class, + document); + + // then: + assertEquals("001", beer.getId()); + } @Test public void writesUninitializedValues() { @@ -336,7 +345,6 @@ public void writesAndReadsSetAndNestedSet() { assertEquals(attr2, readConverted.attr2); } - @Test public void writesAndReadsValueClass() { CouchbaseDocument converted = new CouchbaseDocument(); From c4aa3643e82872d1084346a9f56f5e37158538f9 Mon Sep 17 00:00:00 2001 From: Maciej Zasada Date: Wed, 9 Oct 2013 23:17:05 +0200 Subject: [PATCH 2/2] DATACOUCH-27 - Code review suggestions. --- .gitignore | 4 ++-- .../core/mapping/MappingCouchbaseConverterTests.java | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 47eb44556..adadb46a7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ target/ .classpath .project -.settings/* +.settings *.iml -.idea/* \ No newline at end of file +.idea diff --git a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java index 547c9dd5d..1bf14f4d5 100644 --- a/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java +++ b/src/test/java/org/springframework/data/couchbase/core/mapping/MappingCouchbaseConverterTests.java @@ -175,14 +175,11 @@ public void readsMixedSimpleTypes() { @Test public void readsID() { - // given: CouchbaseDocument document = new CouchbaseDocument("001"); - // when: BasicCouchbasePersistentPropertyTests.Beer beer = converter.read(BasicCouchbasePersistentPropertyTests.Beer.class, document); - // then: assertEquals("001", beer.getId()); }