Browse Source

DATADOC-109 - Introduced MappingContext implementation for SimpleMongoConverter.

Adapted changes in Spring Data Commons. Adapted test cases accordingly. Introduced SimpleMongoMappingContext that that reflects the meta-model assumptions in SimpleMongoConverter. Adapted repository factories accordingly as we can now assume that there is a MappingContext available always.

Refactored QueryMapper to be stateless so that we don't need to recreate instances of it. Added unit tests to verify id property to key mapping and type conversion to ObjectId.

Polished MappingTests to simply drop the database after all test were finished to make sure it starts with a clean state on a potential next run.
pull/1/head
Oliver Gierke 15 years ago
parent
commit
ef2b0235c7
  1. 476
      ajcore.20110315.195433.898.txt
  2. 293
      pom.xml.orig
  3. 16
      spring-data-mongodb/.classpath.orig
  4. 306
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java
  5. 10
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java
  6. 39
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java
  7. 3
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MongoConverter.java
  8. 12
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java
  9. 79
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java
  10. 39
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java
  11. 61
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java
  12. 11
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java
  13. 17
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentProperty.java
  14. 75
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java
  15. 42
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java
  16. 10
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java
  17. 5
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java
  18. 26
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java
  19. 111
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformation.java
  20. 6
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java
  21. 24
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java
  22. 2
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java
  23. 31
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java
  24. 1
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/Address.java
  25. 14
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java
  26. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java
  27. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java
  28. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java
  29. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java
  30. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java
  31. 30
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/SimpleMappingContextUnitTests.java
  32. 78
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryMapperUnitTests.java
  33. 14
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java
  34. 7
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java
  35. 59
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformationUnitTests.java
  36. 5
      spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java
  37. 4
      spring-data-mongodb/src/test/resources/infrastructure.xml
  38. 2
      src/main/resources/changelog.txt

476
ajcore.20110315.195433.898.txt

@ -0,0 +1,476 @@ @@ -0,0 +1,476 @@
---- AspectJ Properties ---
AspectJ Compiler 1.6.11.M2 built on Tuesday Feb 22, 2011 at 17:15:06 GMT
---- Dump Properties ---
Dump file: ajcore.20110315.195433.898.txt
Dump reason: abort
Dump on exception: true
Dump at exit condition: abort
---- System Properties ---
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries
java.vm.version=19.1-b02-334
awt.nativeDoubleBuffering=true
gopherProxySet=false
mrj.build=10M3326
java.vm.vendor=Apple Inc.
java.vendor.url=http://www.apple.com/
guice.disable.misplaced.annotation.check=true
path.separator=:
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
sun.java.launcher=SUN_STANDARD
user.country=DE
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/Users/olivergierke/Documents/workspace/spring-data-document
java.runtime.version=1.6.0_24-b07-334-10M3326
java.awt.graphicsenv=apple.awt.CGraphicsEnvironment
java.endorsed.dirs=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/endorsed
os.arch=x86_64
java.io.tmpdir=/var/folders/pM/pMiDtflBHwGXrI8njdh15k+++TI/-Tmp-/
line.separator=
java.vm.specification.vendor=Sun Microsystems Inc.
os.name=Mac OS X
classworlds.conf=/Applications/Tools/maven-3/bin/m2.conf
sun.jnu.encoding=MacRoman
java.library.path=.:/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
java.specification.name=Java Platform API Specification
java.class.version=50.0
sun.management.compiler=HotSpot 64-Bit Server Compiler
os.version=10.6.6
http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
user.home=/Users/olivergierke
user.timezone=Europe/Berlin
java.awt.printerjob=apple.awt.CPrinterJob
file.encoding=MacRoman
java.specification.version=1.6
java.class.path=/Applications/Tools/maven-3/boot/plexus-classworlds-2.4.jar
user.name=olivergierke
java.vm.specification.version=1.0
java.home=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
sun.arch.data.model=64
user.language=de
java.specification.vendor=Sun Microsystems Inc.
awt.toolkit=apple.awt.CToolkit
java.vm.info=mixed mode
java.version=1.6.0_24
java.ext.dirs=/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext
sun.boot.class.path=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar:/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar
java.vendor=Apple Inc.
maven.home=/Applications/Tools/maven-3
file.separator=/
java.vendor.url.bug=http://bugreport.apple.com/
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
mrj.version=1060.1.6.0_24-334
socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16
ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16
sun.cpu.isalist=
---- Command Line ---
-encoding
UTF-8
-outxml
-source
1.6
-target
1.6
-classpath
/Users/olivergierke/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar:/Users/olivergierke/.m2/repository/asm/asm/3.1/asm-3.1.jar:/Users/olivergierke/.m2/repository/cglib/cglib/2.2/cglib-2.2.jar:/Users/olivergierke/.m2/repository/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar:/Users/olivergierke/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar:/Users/olivergierke/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar:/Users/olivergierke/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar:/Users/olivergierke/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar:/Users/olivergierke/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar:/Users/olivergierke/.m2/repository/org/aspectj/aspectjrt/1.6.11.M2/aspectjrt-1.6.11.M2.jar:/Users/olivergierke/.m2/repository/org/hibernate/hibernate-entitymanager/3.5.5-Final/hibernate-entitymanager-3.5.5-Final.jar:/Users/olivergierke/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar:/Users/olivergierke/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar:/Users/olivergierke/.m2/repository/org/mockito/mockito-all/1.8.4/mockito-all-1.8.4.jar:/Users/olivergierke/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.10/jcl-over-slf4j-1.5.10.jar:/Users/olivergierke/.m2/repository/org/slf4j/slf4j-api/1.5.10/slf4j-api-1.5.10.jar:/Users/olivergierke/.m2/repository/org/slf4j/slf4j-log4j12/1.5.10/slf4j-log4j12-1.5.10.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-aop/3.0.5.RELEASE/spring-aop-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-context/3.0.5.RELEASE/spring-context-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-context-support/3.0.5.RELEASE/spring-context-support-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-expression/3.0.5.RELEASE/spring-expression-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-jdbc/3.0.5.RELEASE/spring-jdbc-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-tx/3.0.5.RELEASE/spring-tx-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-web/3.0.5.RELEASE/spring-web-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/spring-webmvc/3.0.5.RELEASE/spring-webmvc-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-core/1.0.0.BUILD-SNAPSHOT/spring-data-commons-core-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-document-core/target/spring-data-document-core-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb/target/spring-data-mongodb-1.0.0.BUILD-SNAPSHOT.jar:/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes
-aspectpath
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar:/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar
-d
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java
---- Full Classpath ---
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar(missing)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar(30961599 bytes)
/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar(42463 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar(989361 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar(missing)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar(missing)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar(320697 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar(88256 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar(3551766 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar(35548 bytes)
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar(62347 bytes)
/Library/Java/Extensions/RXTXcomm.jar(112185 bytes)
/System/Library/Java/Extensions/AppleScriptEngine.jar(6470 bytes)
/System/Library/Java/Extensions/dns_sd.jar(17780 bytes)
/System/Library/Java/Extensions/j3daudio.jar(1223487 bytes)
/System/Library/Java/Extensions/j3dcore.jar(1157342 bytes)
/System/Library/Java/Extensions/j3dutils.jar(685292 bytes)
/System/Library/Java/Extensions/jai_codec.jar(275486 bytes)
/System/Library/Java/Extensions/jai_core.jar(1544537 bytes)
/System/Library/Java/Extensions/mlibwrapper_jai.jar(41239 bytes)
/System/Library/Java/Extensions/MRJToolkit.jar(12849 bytes)
/System/Library/Java/Extensions/QTJava.zip(938700 bytes)
/System/Library/Java/Extensions/vecmath.jar(127628 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar(48726 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar(8228 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar(468491 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar(170239 bytes)
/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar(231749 bytes)
/Users/olivergierke/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar(4467 bytes)
/Users/olivergierke/.m2/repository/asm/asm/3.1/asm-3.1.jar(43033 bytes)
/Users/olivergierke/.m2/repository/cglib/cglib/2.2/cglib-2.2.jar(278682 bytes)
/Users/olivergierke/.m2/repository/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar(706710 bytes)
/Users/olivergierke/.m2/repository/javax/annotation/jsr250-api/1.0/jsr250-api-1.0.jar(5848 bytes)
/Users/olivergierke/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar(52150 bytes)
/Users/olivergierke/.m2/repository/javax/validation/validation-api/1.0.0.GA/validation-api-1.0.0.GA.jar(47433 bytes)
/Users/olivergierke/.m2/repository/junit/junit/4.8.1/junit-4.8.1.jar(237047 bytes)
/Users/olivergierke/.m2/repository/log4j/log4j/1.2.15/log4j-1.2.15.jar(391834 bytes)
/Users/olivergierke/.m2/repository/org/aspectj/aspectjrt/1.6.11.M2/aspectjrt-1.6.11.M2.jar(116222 bytes)
/Users/olivergierke/.m2/repository/org/hibernate/hibernate-entitymanager/3.5.5-Final/hibernate-entitymanager-3.5.5-Final.jar(416039 bytes)
/Users/olivergierke/.m2/repository/org/hibernate/hibernate-validator/4.0.2.GA/hibernate-validator-4.0.2.GA.jar(226653 bytes)
/Users/olivergierke/.m2/repository/org/hibernate/javax/persistence/hibernate-jpa-2.0-api/1.0.0.Final/hibernate-jpa-2.0-api-1.0.0.Final.jar(100884 bytes)
/Users/olivergierke/.m2/repository/org/mockito/mockito-all/1.8.4/mockito-all-1.8.4.jar(1409262 bytes)
/Users/olivergierke/.m2/repository/org/slf4j/jcl-over-slf4j/1.5.10/jcl-over-slf4j-1.5.10.jar(17289 bytes)
/Users/olivergierke/.m2/repository/org/slf4j/slf4j-api/1.5.10/slf4j-api-1.5.10.jar(23659 bytes)
/Users/olivergierke/.m2/repository/org/slf4j/slf4j-log4j12/1.5.10/slf4j-log4j12-1.5.10.jar(9692 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-aop/3.0.5.RELEASE/spring-aop-3.0.5.RELEASE.jar(321190 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-asm/3.0.5.RELEASE/spring-asm-3.0.5.RELEASE.jar(53082 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar(35548 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-beans/3.0.5.RELEASE/spring-beans-3.0.5.RELEASE.jar(555410 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-context/3.0.5.RELEASE/spring-context-3.0.5.RELEASE.jar(668861 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-context-support/3.0.5.RELEASE/spring-context-support-3.0.5.RELEASE.jar(100870 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-core/3.0.5.RELEASE/spring-core-3.0.5.RELEASE.jar(382442 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-expression/3.0.5.RELEASE/spring-expression-3.0.5.RELEASE.jar(169752 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-jdbc/3.0.5.RELEASE/spring-jdbc-3.0.5.RELEASE.jar(385712 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-orm/3.0.5.RELEASE/spring-orm-3.0.5.RELEASE.jar(334327 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-tx/3.0.5.RELEASE/spring-tx-3.0.5.RELEASE.jar(231922 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-web/3.0.5.RELEASE/spring-web-3.0.5.RELEASE.jar(395587 bytes)
/Users/olivergierke/.m2/repository/org/springframework/spring-webmvc/3.0.5.RELEASE/spring-webmvc-3.0.5.RELEASE.jar(418977 bytes)
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar(62347 bytes)
/Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-core/1.0.0.BUILD-SNAPSHOT/spring-data-commons-core-1.0.0.BUILD-SNAPSHOT.jar(148186 bytes)
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-document-core/target/spring-data-document-core-1.0.0.BUILD-SNAPSHOT.jar(62926 bytes)
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb/target/spring-data-mongodb-1.0.0.BUILD-SNAPSHOT.jar(183122 bytes)
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/target/classes(2 entries)
---- Compiler Messages ---
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar
info directory classpath entry does not exist: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar
info Pipelining compilation
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj
info weaver operating in reweavable mode. Need to verify any required types exist.
info woven aspect org.springframework.persistence.document.MongoDocumentBacking (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoDocumentBacking.aj)
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java
info woven class org.springframework.persistence.document.DocumentEntity (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/DocumentEntity.java)
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java
abort trouble in:
public class org.springframework.persistence.document.MongoEntityOperations extends org.springframework.persistence.OrderedEntityOperations:
private org.springframework.data.document.mongodb.MongoTemplate mongoTemplate [RuntimeVisibleAnnotations]
private org.springframework.persistence.support.EntityInstantiator entityInstantiator [Signature(Lorg/springframework/persistence/support/EntityInstantiator<Lorg/springframework/persistence/support/ChangeSetBacked;Lorg/springframework/persistence/support/ChangeSet;>;)]
private org.springframework.persistence.document.MongoChangeSetPersister changeSetPersister
public void <init>():
ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 16)
INVOKESPECIAL org.springframework.persistence.OrderedEntityOperations.<init> ()V
constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.<init>())
| RETURN
constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.<init>())
end public void <init>()
public void setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator) org.aspectj.weaver.MethodDeclarationLineNumber: 25:1040
:
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator))
| ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 26)
| ALOAD_1 // Lorg/springframework/persistence/support/EntityInstantiator; entityInstantiator
| field-set(org.springframework.persistence.support.EntityInstantiator org.springframework.persistence.document.MongoEntityOperations.entityInstantiator)
| | PUTFIELD org.springframework.persistence.document.MongoEntityOperations.entityInstantiator Lorg/springframework/persistence/support/EntityInstantiator;
| field-set(org.springframework.persistence.support.EntityInstantiator org.springframework.persistence.document.MongoEntityOperations.entityInstantiator)
| RETURN (line 27)
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator))
end public void setEntityInstantiator(org.springframework.persistence.support.EntityInstantiator)
public void setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister) org.aspectj.weaver.MethodDeclarationLineNumber: 30:1218
:
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister))
| ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 31)
| ALOAD_1 // Lorg/springframework/persistence/document/MongoChangeSetPersister; changeSetPersister
| field-set(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
| | PUTFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
| field-set(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
| RETURN (line 32)
method-execution(void org.springframework.persistence.document.MongoEntityOperations.setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister))
end public void setChangeSetPersister(org.springframework.persistence.document.MongoChangeSetPersister)
public boolean cacheInEntity() org.aspectj.weaver.MethodDeclarationLineNumber: 36:1377
:
method-execution(boolean org.springframework.persistence.document.MongoEntityOperations.cacheInEntity())
| ICONST_1 (line 37)
| IRETURN
method-execution(boolean org.springframework.persistence.document.MongoEntityOperations.cacheInEntity())
end public boolean cacheInEntity()
public org.springframework.persistence.support.ChangeSetBacked findEntity(Class, Object) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 41:1459
:
method-execution(org.springframework.persistence.support.ChangeSetBacked org.springframework.persistence.document.MongoEntityOperations.findEntity(java.lang.Class, java.lang.Object))
| catch org.springframework.persistence.support.ChangeSetPersister$NotFoundException -> E0
| | NEW org.springframework.persistence.support.HashMapChangeSet (line 43)
| | DUP
| | INVOKESPECIAL org.springframework.persistence.support.HashMapChangeSet.<init> ()V
| | ASTORE_3
| | ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 44)
| | field-get(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
| | | GETFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
| | field-get(org.springframework.persistence.document.MongoChangeSetPersister org.springframework.persistence.document.MongoEntityOperations.changeSetPersister)
| | ALOAD_1 // Ljava/lang/Class; entityClass
| | ALOAD_2 // Ljava/lang/Object; key
| | ALOAD_3 // Lorg/springframework/persistence/support/ChangeSet; cs
| | method-call(void org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState(java.lang.Class, java.lang.Object, org.springframework.persistence.support.ChangeSet))
| | | INVOKEVIRTUAL org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState (Ljava/lang/Class;Ljava/lang/Object;Lorg/springframework/persistence/support/ChangeSet;)V
| | method-call(void org.springframework.persistence.document.MongoChangeSetPersister.getPersistentState(java.lang.Class, java.lang.Object, org.springframework.persistence.support.ChangeSet))
| | ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 45)
| | GETFIELD org.springframework.persistence.document.MongoEntityOperations.entityInstantiator Lorg/springframework/persistence/support/EntityInstantiator;
| | ALOAD_3 // Lorg/springframework/persistence/support/ChangeSet; cs
| | ALOAD_1 // Ljava/lang/Class; entityClass
| | INVOKEINTERFACE org.springframework.persistence.support.EntityInstantiator.createEntityFromState (Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
| | CHECKCAST org.springframework.persistence.support.ChangeSetBacked
| catch org.springframework.persistence.support.ChangeSetPersister$NotFoundException -> E0
| ARETURN
| E0: POP (line 46)
| ACONST_NULL (line 47)
| ARETURN
method-execution(org.springframework.persistence.support.ChangeSetBacked org.springframework.persistence.document.MongoEntityOperations.findEntity(java.lang.Class, java.lang.Object))
end public org.springframework.persistence.support.ChangeSetBacked findEntity(Class, Object) throws org.springframework.dao.DataAccessException
public Object findUniqueKey(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 52:1847
:
ALOAD_1 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 53)
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
ARETURN
end public Object findUniqueKey(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException
public boolean isTransactional() org.aspectj.weaver.MethodDeclarationLineNumber: 57:1980
:
ICONST_0 (line 59)
IRETURN
end public boolean isTransactional()
public boolean isTransient(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 63:2070
:
ALOAD_1 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 64)
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
IFNONNULL L0
ICONST_1
IRETURN
L0: ICONST_0
IRETURN
end public boolean isTransient(org.springframework.persistence.support.ChangeSetBacked) throws org.springframework.dao.DataAccessException
public Object makePersistent(Object, org.springframework.persistence.support.ChangeSetBacked, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException org.aspectj.weaver.MethodDeclarationLineNumber: 68:2208
:
ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 69)
GETFIELD org.springframework.persistence.document.MongoEntityOperations.changeSetPersister Lorg/springframework/persistence/document/MongoChangeSetPersister;
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity
INVOKEVIRTUAL java.lang.Object.getClass ()Ljava/lang/Class;
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getChangeSet (Lorg/springframework/persistence/support/ChangeSetBacked;)Lorg/springframework/persistence/support/ChangeSet;
INVOKEVIRTUAL org.springframework.persistence.document.MongoChangeSetPersister.persistState (Ljava/lang/Class;Lorg/springframework/persistence/support/ChangeSet;)Ljava/lang/Object;
POP
ALOAD_2 // Lorg/springframework/persistence/support/ChangeSetBacked; entity (line 70)
INVOKESTATIC org.springframework.persistence.support.AbstractDeferredUpdateMixinFields.ajc$interMethodDispatch1$org_springframework_persistence_support_AbstractDeferredUpdateMixinFields$org_springframework_persistence_support_ChangeSetBacked$getId (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
ARETURN
end public Object makePersistent(Object, org.springframework.persistence.support.ChangeSetBacked, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException
public boolean supports(Class, org.springframework.persistence.RelatedEntity) org.aspectj.weaver.MethodDeclarationLineNumber: 74:2463
:
ALOAD_1 // Ljava/lang/Class; entityClass (line 75)
LDC org.springframework.persistence.document.DocumentEntity
INVOKEVIRTUAL java.lang.Class.isAnnotationPresent (Ljava/lang/Class;)Z
IRETURN
end public boolean supports(Class, org.springframework.persistence.RelatedEntity)
public volatile boolean isTransient(Object) throws org.springframework.dao.DataAccessException:
ALOAD_0 (line 1)
ALOAD_1
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.isTransient (Lorg/springframework/persistence/support/ChangeSetBacked;)Z
IRETURN
end public volatile boolean isTransient(Object) throws org.springframework.dao.DataAccessException
public volatile Object findEntity(Class, Object) throws org.springframework.dao.DataAccessException:
ALOAD_0 (line 1)
ALOAD_1
CHECKCAST java.lang.Class
ALOAD_2
CHECKCAST java.lang.Object
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.findEntity (Ljava/lang/Class;Ljava/lang/Object;)Lorg/springframework/persistence/support/ChangeSetBacked;
ARETURN
end public volatile Object findEntity(Class, Object) throws org.springframework.dao.DataAccessException
public volatile Object makePersistent(Object, Object, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException:
ALOAD_0 (line 1)
ALOAD_1
ALOAD_2
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
ALOAD_3
ALOAD 4
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.makePersistent (Ljava/lang/Object;Lorg/springframework/persistence/support/ChangeSetBacked;Ljava/lang/reflect/Field;Lorg/springframework/persistence/RelatedEntity;)Ljava/lang/Object;
ARETURN
end public volatile Object makePersistent(Object, Object, java.lang.reflect.Field, org.springframework.persistence.RelatedEntity) throws org.springframework.dao.DataAccessException
public volatile Object findUniqueKey(Object) throws org.springframework.dao.DataAccessException:
ALOAD_0 (line 1)
ALOAD_1
CHECKCAST org.springframework.persistence.support.ChangeSetBacked
INVOKEVIRTUAL org.springframework.persistence.document.MongoEntityOperations.findUniqueKey (Lorg/springframework/persistence/support/ChangeSetBacked;)Ljava/lang/Object;
ARETURN
end public volatile Object findUniqueKey(Object) throws org.springframework.dao.DataAccessException
end public class org.springframework.persistence.document.MongoEntityOperations
-- (AbortCompilation) null
null
org.aspectj.org.eclipse.jdt.internal.compiler.problem.AbortCompilation
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:97)
at org.aspectj.ajdt.internal.compiler.problem.AjProblemReporter.handle(AjProblemReporter.java:308)
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemHandler.handle(ProblemHandler.java:154)
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter.handle(ProblemReporter.java:1735)
at org.aspectj.org.eclipse.jdt.internal.compiler.problem.ProblemReporter.isClassPathCorrect(ProblemReporter.java:3531)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.cacheMissingBinaryType(LookupEnvironment.java:189)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding.resolve(UnresolvedReferenceBinding.java:52)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType(BinaryTypeBinding.java:99)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:167)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:451)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:505)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.resolveSingleImport(CompilationUnitScope.java:698)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.getTypeOrPackage(Scope.java:2487)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.Scope.getType(Scope.java:2228)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.SingleTypeReference.getTypeBinding(SingleTypeReference.java:44)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeReference.resolveType(TypeReference.java:142)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.resolveTypesFor(SourceTypeBinding.java:1476)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.methodsBase(SourceTypeBinding.java:1185)
at org.aspectj.org.eclipse.jdt.internal.compiler.lookup.SourceTypeBinding.methods(SourceTypeBinding.java:1757)
at org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType.fillDeclaredMembers(EclipseSourceType.java:244)
at org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceType.getDeclaredMethods(EclipseSourceType.java:395)
at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:770)
at org.aspectj.weaver.ResolvedType.lookupMethod(ResolvedType.java:534)
at org.aspectj.weaver.World.resolve(World.java:632)
at org.aspectj.weaver.MemberImpl.resolve(MemberImpl.java:95)
at org.aspectj.weaver.JoinPointSignatureIterator.addSignaturesUpToFirstDefiningMember(JoinPointSignatureIterator.java:112)
at org.aspectj.weaver.JoinPointSignatureIterator.<init>(JoinPointSignatureIterator.java:49)
at org.aspectj.weaver.MemberImpl.getJoinPointSignatures(MemberImpl.java:515)
at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:316)
at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:202)
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:51)
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
at org.aspectj.weaver.patterns.OrPointcut.matchInternal(OrPointcut.java:50)
at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:137)
at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:113)
at org.aspectj.weaver.Advice.match(Advice.java:109)
at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:149)
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:3116)
at org.aspectj.weaver.bcel.BcelClassWeaver.matchInvokeInstruction(BcelClassWeaver.java:3064)
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2765)
at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2543)
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:474)
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:100)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1687)
at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1631)
at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1394)
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1180)
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:514)
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:447)
at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:432)
at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:652)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:392)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:1021)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performBuild(AjBuildManager.java:268)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:181)
at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
at org.aspectj.tools.ajc.Main.run(Main.java:371)
at org.aspectj.tools.ajc.Main.runMain(Main.java:248)
at org.codehaus.mojo.aspectj.AbstractAjcCompiler.execute(AbstractAjcCompiler.java:360)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:195)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:140)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:451)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:188)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:134)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
info woven class org.springframework.persistence.document.MongoEntityOperations (from /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoEntityOperations.java)
info compiling /Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java
error at (no source information available)
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:1:0::0 The type com.mongodb.DBCollection cannot be resolved. It is indirectly referenced from required .class files
error at (no source information available)
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:1:0::0 The type com.mongodb.DBObject cannot be resolved. It is indirectly referenced from required .class files
error at import com.mongodb.BasicDBObject;
^^^^^^^^^^^^^^^^^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:3:0::0 The import com.mongodb.BasicDBObject cannot be resolved
error at import com.mongodb.DBCollection;
^^^^^^^^^^^^^^^^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:4:0::0 The import com.mongodb.DBCollection cannot be resolved
error at import com.mongodb.DBObject;
^^^^^^^^^^^^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:5:0::0 The import com.mongodb.DBObject cannot be resolved
error at import com.mongodb.MongoException;
^^^^^^^^^^^^^^^^^^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:6:0::0 The import com.mongodb.MongoException cannot be resolved
error at DBObject q = new BasicDBObject();
^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:35:0::0 DBObject cannot be resolved to a type
error at DBObject q = new BasicDBObject();
^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:35:0::0 BasicDBObject cannot be resolved to a type
error at DBObject dbo = mongoTemplate.getCollection(collection).findOne(q);
^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:38:0::0 DBObject cannot be resolved to a type
error at } catch (MongoException ex) {
^^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:57:0::0 MongoException cannot be resolved to a type
error at throw new DataAccessResourceFailureException("Can't read from Mongo", ex);
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:58:0::0 ex cannot be resolved
error at DBCollection dbc = mongoTemplate.getCollection(collection);
^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:90:0::0 DBCollection cannot be resolved to a type
error at DBObject dbo = mapChangeSetToDbObject(cs);
^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:91:0::0 DBObject cannot be resolved to a type
error at DBCollection dbc = mongoTemplate.getCollection(collection);
^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:101:0::0 DBCollection cannot be resolved to a type
error at DBObject dbo = mapChangeSetToDbObject(cs);
^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:102:0::0 DBObject cannot be resolved to a type
error at BasicDBObject dbo = new BasicDBObject();
^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:113:0::0 BasicDBObject cannot be resolved to a type
error at BasicDBObject dbo = new BasicDBObject();
^^^^^^^^
/Users/olivergierke/Documents/workspace/spring-data-document/spring-data-mongodb-cross-store/src/main/java/org/springframework/persistence/document/MongoChangeSetPersister.java:113:0::0 BasicDBObject cannot be resolved to a type
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/orm/jpa/aspectj/JpaExceptionTranslatorAspect.class:14::0 advice defined in org.springframework.orm.jpa.aspectj.JpaExceptionTranslatorAspect has not been applied [Xlint:adviceDidNotMatch]
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/scheduling/aspectj/AbstractAsyncExecutionAspect.class:52::0 advice defined in org.springframework.scheduling.aspectj.AbstractAsyncExecutionAspect has not been applied [Xlint:adviceDidNotMatch]
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:53::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:66::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
warning at org/springframework/persistence/support/AbstractDeferredUpdateMixinFields.aj:111::0 advice defined in org.springframework.persistence.support.AbstractDeferredUpdateMixinFields has not been applied [Xlint:adviceDidNotMatch]
warning at /Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar!org/springframework/persistence/StoreSpanning.class:61::0 advice defined in org.springframework.persistence.StoreSpanning has not been applied [Xlint:adviceDidNotMatch]
warning at /Users/olivergierke/.m2/repository/org/springframework/data/spring-data-commons-aspects/1.0.0.BUILD-SNAPSHOT/spring-data-commons-aspects-1.0.0.BUILD-SNAPSHOT.jar!org/springframework/persistence/StoreSpanning.class:116::0 advice defined in org.springframework.persistence.StoreSpanning has not been applied [Xlint:adviceDidNotMatch]
warning at org/springframework/mock/staticmock/AnnotationDrivenStaticEntityMockingControl.aj:64::0 advice defined in org.springframework.mock.staticmock.AnnotationDrivenStaticEntityMockingControl has not been applied [Xlint:adviceDidNotMatch]
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/mock/staticmock/AbstractMethodMockingControl.class:160::0 advice defined in org.springframework.mock.staticmock.AbstractMethodMockingControl has not been applied [Xlint:adviceDidNotMatch]
warning at /Users/olivergierke/.m2/repository/org/springframework/spring-aspects/3.0.5.RELEASE/spring-aspects-3.0.5.RELEASE.jar!org/springframework/mock/staticmock/AbstractMethodMockingControl.class:169::0 advice defined in org.springframework.mock.staticmock.AbstractMethodMockingControl has not been applied [Xlint:adviceDidNotMatch]

293
pom.xml.orig

@ -0,0 +1,293 @@ @@ -0,0 +1,293 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-document-dist</artifactId>
<name>Spring Data Document Distribution</name>
<version>1.0.0.BUILD-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>spring-data-document-parent</module>
<module>spring-data-document-core</module>
<module>spring-data-mongodb</module>
<<<<<<< Updated upstream
<module>spring-data-mongodb-cross-store</module>
<module>spring-data-mongodb-log4j</module>
=======
<!--<module>spring-data-mongodb-cross-store</module>-->
>>>>>>> Stashed changes
<module>spring-data-couchdb</module>
</modules>
<developers>
<developer>
<id>trisberg</id>
<name>Thomas Risberg</name>
<email>trisberg at vmware.com</email>
<organization>SpringSource</organization>
<organizationUrl>http://www.SpringSource.com</organizationUrl>
<roles>
<role>Project Admin</role>
<role>Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
<developer>
<id>mpollack</id>
<name>Mark Pollack</name>
<email>mpollack at vmware.com</email>
<organization>SpringSource</organization>
<organizationUrl>http://www.SpringSource.com</organizationUrl>
<roles>
<role>Project Admin</role>
<role>Developer</role>
</roles>
<timezone>-5</timezone>
</developer>
<developer>
<id>ogierke</id>
<name>Oliver Gierke</name>
<email>ogierke at vmware.com</email>
<organization>SpringSource</organization>
<organizationUrl>http://www.springsource.com</organizationUrl>
<roles>
<role>Developer</role>
</roles>
<timezone>+1</timezone>
</developer>
<developer>
<id>jbrisbin</id>
<name>Jon Brisbin</name>
<email>jbrisbin at vmware.com</email>
<organization>SpringSource</organization>
<organizationUrl>http://www.springsource.com</organizationUrl>
<roles>
<role>Developer</role>
</roles>
<timezone>-6</timezone>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
<comments>
Copyright 2010 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.
</comments>
</license>
</licenses>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- dist.* properties are used by the antrun tasks below -->
<dist.id>spring-data-document</dist.id>
<dist.name>Spring Data</dist.name>
<dist.key>DATADOC</dist.key>
<dist.version>${project.version}</dist.version>
<dist.releaseType>snapshot</dist.releaseType>
<dist.finalName>${dist.id}-${dist.version}</dist.finalName>
<dist.fileName>${dist.finalName}.zip</dist.fileName>
<dist.filePath>target/${dist.fileName}</dist.filePath>
<dist.bucketName>dist.springframework.org</dist.bucketName>
<!-- these properties should be in ~/.m2/settings.xml
<dist.accessKey>s3 access key</dist.accessKey>
<dist.secretKey>s3 secret key</dist.secretKey>
-->
</properties>
<build>
<extensions>
<extension>
<groupId>org.springframework.build.aws</groupId>
<artifactId>org.springframework.build.aws.maven</artifactId>
<version>3.1.0.RELEASE</version>
</extension>
</extensions>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>com.agilejava.docbkx</groupId>
<artifactId>docbkx-maven-plugin</artifactId>
<version>2.0.7</version>
<executions>
<execution>
<goals>
<goal>generate-html</goal>
<goal>generate-pdf</goal>
</goals>
<phase>pre-site</phase>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.docbook</groupId>
<artifactId>docbook-xml</artifactId>
<version>4.4</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<configuration>
<includes>index.xml</includes>
<xincludeSupported>true</xincludeSupported>
<foCustomization>${project.basedir}/src/docbkx/resources/xsl/fopdf.xsl</foCustomization>
<htmlStylesheet>css/html.css</htmlStylesheet>
<chunkedOutput>false</chunkedOutput>
<htmlCustomization>${project.basedir}/src/docbkx/resources/xsl/html.xsl</htmlCustomization>
<useExtensions>1</useExtensions>
<highlightSource>1</highlightSource>
<highlightDefaultLanguage></highlightDefaultLanguage>
<!-- callouts -->
<entities>
<entity>
<name>version</name>
<value>${pom.version}</value>
</entity>
</entities>
<postProcess>
<copy todir="${project.basedir}/target/site/reference">
<fileset dir="${project.basedir}/target/docbkx">
<include name="**/*.html"/>
<include name="**/*.pdf"/>
</fileset>
</copy>
<copy todir="${project.basedir}/target/site/reference/html">
<fileset dir="${project.basedir}/src/docbkx/resources">
<include name="**/*.css"/>
<include name="**/*.png"/>
<include name="**/*.gif"/>
<include name="**/*.jpg"/>
</fileset>
</copy>
<move file="${project.basedir}/target/site/reference/pdf/index.pdf"
tofile="${project.basedir}/target/site/reference/pdf/spring-data-document-reference.pdf"
failonerror="false"/>
</postProcess>
</configuration>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
<configuration>
<javadoc:aggregate>true</javadoc:aggregate>
<breakiterator>true</breakiterator>
<header>Spring Data Graph</header>
<source>1.6</source>
<quiet>true</quiet>
<javadocDirectory>${project.basedir}/src/main/javadoc</javadocDirectory>
<overview>${project.basedir}/src/main/javadoc/overview.html</overview>
<stylesheetfile>${project.basedir}/src/main/javadoc/spring-javadoc.css</stylesheetfile>
<!-- copies doc-files subdirectory which contains image resources -->
<docfilessubdirs>true</docfilessubdirs>
<links>
<link>http://static.springframework.org/spring/docs/3.0.x/javadoc-api</link>
<link>http://java.sun.com/javase/6/docs/api</link>
<link>http://api.mongodb.org/java/2.3</link>
</links>
</configuration>
</plugin>
<plugin><!--
run `mvn package assembly:assembly` to trigger assembly creation.
see http://www.sonatype.com/books/mvnref-book/reference/assemblies-set-dist-assemblies.html -->
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<inherited>false</inherited>
<executions>
<execution>
<id>distribution</id>
<goals>
<goal>single</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/assembly/distribution.xml</descriptor>
</descriptors>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>upload-dist</id>
<phase>deploy</phase>
<configuration>
<tasks>
<ant antfile="${basedir}/src/ant/upload-dist.xml">
<target name="upload-dist"/>
</ant>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.springframework.build</groupId>
<artifactId>org.springframework.build.aws.ant</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>net.java.dev.jets3t</groupId>
<artifactId>jets3t</artifactId>
<version>0.7.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
<!-- the name of this project is 'spring-data-document-dist';
make sure the zip file is just 'spring-data-document'. -->
<finalName>${dist.finalName}</finalName>
</build>
<distributionManagement>
<!-- see 'staging' profile for dry-run deployment settings -->
<downloadUrl>http://www.springsource.com/spring-data</downloadUrl>
<site>
<id>static.springframework.org</id>
<url>
scp://static.springframework.org/var/www/domains/springframework.org/static/htdocs/spring-data/data-document/snapshot-site/
</url>
</site>
<repository>
<id>spring-milestone</id>
<name>Spring Milestone Repository</name>
<url>s3://maven.springframework.org/milestone</url>
</repository>
<snapshotRepository>
<id>spring-snapshot</id>
<name>Spring Snapshot Repository</name>
<url>s3://maven.springframework.org/snapshot</url>
</snapshotRepository>
</distributionManagement>
</project>

16
spring-data-mongodb/.classpath.orig

@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="src/main/java"/>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/>
<classpathentry kind="src" output="target/test-classes" path="target/generated-sources/test-annotations"/>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="org.eclipse.jst.component.nondependency" value=""/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
<classpathentry kind="output" path="target/classes"/>
</classpath>

306
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java

@ -18,8 +18,11 @@ package org.springframework.data.document.mongodb; @@ -18,8 +18,11 @@ package org.springframework.data.document.mongodb;
import static org.springframework.data.document.mongodb.query.Criteria.*;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@ -40,8 +43,6 @@ import com.mongodb.util.JSON; @@ -40,8 +43,6 @@ import com.mongodb.util.JSON;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.bson.types.ObjectId;
import org.springframework.beans.ConfigurablePropertyAccessor;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
@ -65,7 +66,6 @@ import org.springframework.data.document.mongodb.query.Query; @@ -65,7 +66,6 @@ import org.springframework.data.document.mongodb.query.Query;
import org.springframework.data.document.mongodb.query.QueryMapper;
import org.springframework.data.document.mongodb.query.Update;
import org.springframework.data.mapping.MappingBeanHelper;
import org.springframework.data.mapping.context.MappingContextAware;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.mapping.model.PersistentEntity;
@ -81,7 +81,7 @@ import org.springframework.util.Assert; @@ -81,7 +81,7 @@ import org.springframework.util.Assert;
* @author Mark Pollack
* @author Oliver Gierke
*/
public class MongoTemplate implements InitializingBean, MongoOperations, ApplicationEventPublisherAware, MappingContextAware {
public class MongoTemplate implements InitializingBean, MongoOperations, ApplicationEventPublisherAware {
private static final Log LOGGER = LogFactory.getLog(MongoTemplate.class);
@ -99,10 +99,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -99,10 +99,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
*/
private WriteResultChecking writeResultChecking = WriteResultChecking.NONE;
private MongoConverter mongoConverter;
private MappingContext mappingContext;
private final MongoConverter mongoConverter;
private final MappingContext<MongoPersistentEntity<?>> mappingContext;
private final Mongo mongo;
private final MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator();
private final QueryMapper mapper;
private String defaultCollectionName;
private String databaseName;
@ -163,27 +164,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -163,27 +164,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
this.mongo = mongo;
this.databaseName = databaseName;
this.writeConcern = writeConcern;
this.mongoConverter = mongoConverter == null ? getDefaultMongoConverter() : mongoConverter;
if (this.mongoConverter instanceof MappingMongoConverter) {
initializeMappingMongoConverter((MappingMongoConverter) this.mongoConverter);
}
this.mappingContext = this.mongoConverter.getMappingContext();
this.mapper = new QueryMapper(this.mongoConverter);
if (writeResultChecking != null) {
this.writeResultChecking = writeResultChecking;
}
if (mongoConverter == null) {
SimpleMongoConverter smc = new SimpleMongoConverter();
smc.afterPropertiesSet();
setMongoConverter(smc);
} else {
setMongoConverter(mongoConverter);
}
//setMongoConverter(mongoConverter == null ? new SimpleMongoConverter() : mongoConverter);
}
private final MongoConverter getDefaultMongoConverter() {
SimpleMongoConverter converter = new SimpleMongoConverter();
converter.afterPropertiesSet();
return converter;
}
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
this.eventPublisher = applicationEventPublisher;
}
public void setMappingContext(MappingContext mappingContext) {
this.mappingContext = mappingContext;
}
/**
* Sets the username to use to connect to the Mongo database
*
@ -606,30 +611,25 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -606,30 +611,25 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
* @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.util.List, org.springframework.data.document.mongodb.MongoWriter)
*/
public <T> void insertList(List<? extends T> listToSave, MongoWriter<T> writer) {
if (null != mappingContext) {
Map<String, List<Object>> objs = new HashMap<String, List<Object>>();
for (Object o : listToSave) {
PersistentEntity<?> entity = mappingContext.getPersistentEntity(o.getClass());
if (null != entity && entity instanceof MongoPersistentEntity) {
@SuppressWarnings("unchecked")
String coll = ((MongoPersistentEntity<T>) entity).getCollection();
List<Object> objList = objs.get(coll);
if (null == objList) {
objList = new ArrayList<Object>();
objs.put(coll, objList);
}
objList.add(o);
} else {
continue;
}
}
for (Map.Entry<String, List<Object>> entry : objs.entrySet()) {
insertList(entry.getKey(), entry.getValue());
Map<String, List<Object>> objs = new HashMap<String, List<Object>>();
for (Object o : listToSave) {
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(o.getClass());
String collection = entity == null ? getDefaultCollectionName() : entity.getCollection();
List<Object> objList = objs.get(collection);
if (null == objList) {
objList = new ArrayList<Object>();
objs.put(collection, objList);
}
return;
objList.add(o);
}
for (Map.Entry<String, List<Object>> entry : objs.entrySet()) {
insertList(entry.getKey(), entry.getValue());
}
insertList(getDefaultCollectionName(), listToSave, writer);
}
/* (non-Javadoc)
@ -865,22 +865,26 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -865,22 +865,26 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
}
public <T> void remove(Query query, Class<T> targetClass) {
Assert.notNull(query);
remove(getEntityCollection(targetClass), query, targetClass);
}
private PersistentEntity<?> getPersistentEntity(Class<?> type) {
return type == null ? null : mappingContext.getPersistentEntity(type);
}
public <T> void remove(String collectionName, final Query query, Class<T> targetClass) {
if (query == null) {
throw new InvalidDataAccessApiUsageException("Query passed in to remove can't be null");
}
final DBObject queryObject = query.getQueryObject();
PersistentEntity<T> entity = getPersistentEntity(targetClass);
final QueryMapper<T> queryMapper = new QueryMapper<T>(queryObject, entity, mongoConverter);
final PersistentEntity<?> entity = getPersistentEntity(targetClass);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("remove using query: " + queryObject);
}
execute(collectionName, new CollectionCallback<Void>() {
public Void doInCollection(DBCollection collection) throws MongoException, DataAccessException {
DBObject dboq = queryMapper.getMappedObject();
DBObject dboq = mapper.getMappedObject(queryObject, entity);
WriteResult wr = null;
if (writeConcern == null) {
wr = collection.remove(dboq);
@ -931,14 +935,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -931,14 +935,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray());
}
protected <T> PersistentEntity<T> getPersistentEntity(Class<T> targetClass) {
if (null != targetClass && null != mappingContext) {
return mappingContext.getPersistentEntity(targetClass);
} else {
return null;
}
}
protected <T> void maybeEmitEvent(MongoMappingEvent<T> event) {
if (null != eventPublisher) {
eventPublisher.publishEvent(event);
@ -979,9 +975,10 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -979,9 +975,10 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
if (readerToUse == null) {
readerToUse = this.mongoConverter;
}
PersistentEntity<T> entity = getPersistentEntity(targetClass);
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, readerToUse);
return execute(new FindOneCallback(queryMapper.getMappedObject(), fields),
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
DBObject mappedQuery = mapper.getMappedObject(query, entity);
return execute(new FindOneCallback(mappedQuery, fields),
new ReadDbObjectCallback<T>(readerToUse, targetClass),
collectionName);
}
@ -1006,12 +1003,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1006,12 +1003,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
* @return the List of converted objects.
*/
protected <T> List<T> doFind(String collectionName, DBObject query, DBObject fields, Class<T> targetClass, CursorPreparer preparer) {
PersistentEntity<T> entity = getPersistentEntity(targetClass);
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, mongoConverter);
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("find using query: " + query + " fields: " + fields + " for class: " + targetClass);
}
return executeEach(new FindCallback(queryMapper.getMappedObject(), fields),
return executeEach(new FindCallback(mapper.getMappedObject(query, entity), fields),
preparer,
new ReadDbObjectCallback<T>(mongoConverter, targetClass),
collectionName);
@ -1030,12 +1026,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1030,12 +1026,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
* @return the List of converted objects.
*/
protected <T> List<T> doFind(String collectionName, DBObject query, DBObject fields, Class<T> targetClass, MongoReader<T> reader) {
PersistentEntity<T> entity = getPersistentEntity(targetClass);
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, reader);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("find using query: " + query + " fields: " + fields + " for class: " + targetClass);
}
return executeEach(new FindCallback(queryMapper.getMappedObject(), fields),
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
return executeEach(new FindCallback(mapper.getMappedObject(query, entity), fields),
null,
new ReadDbObjectCallback<T>(reader, targetClass),
collectionName);
@ -1074,44 +1069,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1074,44 +1069,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
if (readerToUse == null) {
readerToUse = this.mongoConverter;
}
PersistentEntity<T> entity = null;
if (null != mappingContext) {
entity = mappingContext.getPersistentEntity(targetClass);
}
QueryMapper<T> queryMapper = new QueryMapper<T>(query, entity, readerToUse);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("findAndRemove using query: " + query + " fields: " + fields + " sort: " + sort + " for class: " + targetClass);
}
return execute(new FindAndRemoveCallback(queryMapper.getMappedObject(), fields, sort),
PersistentEntity<?> entity = mappingContext.getPersistentEntity(targetClass);
return execute(new FindAndRemoveCallback(mapper.getMappedObject(query, entity), fields, sort),
new ReadDbObjectCallback<T>(readerToUse, targetClass),
collectionName);
}
protected Object getIdValue(Object object) {
if (null != mappingContext) {
PersistentEntity<?> entity = mappingContext.getPersistentEntity(object.getClass());
if (null != entity) {
PersistentProperty idProp = entity.getIdProperty();
if (null != idProp) {
try {
return MappingBeanHelper.getProperty(object, idProp, Object.class, true);
} catch (IllegalAccessException e) {
throw new MappingException(e.getMessage(), e);
} catch (InvocationTargetException e) {
throw new MappingException(e.getMessage(), e);
}
}
}
PersistentEntity<?> entity = mappingContext.getPersistentEntity(object.getClass());
PersistentProperty idProp = entity.getIdProperty();
if (idProp == null) {
throw new MappingException("No id property found for object of type " + entity.getType().getName());
}
ConfigurablePropertyAccessor bw = PropertyAccessorFactory.forDirectFieldAccess(object);
MongoPropertyDescriptor idDescriptor = new MongoPropertyDescriptors(object.getClass()).getIdDescriptor();
if (idDescriptor == null) {
return null;
try {
return MappingBeanHelper.getProperty(object, idProp, Object.class, true);
} catch (IllegalAccessException e) {
throw new MappingException(e.getMessage(), e);
} catch (InvocationTargetException e) {
throw new MappingException(e.getMessage(), e);
}
return bw.getPropertyValue(idDescriptor.getName());
}
/**
@ -1126,38 +1108,107 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1126,38 +1108,107 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
return;
}
if (null != mappingContext) {
PersistentEntity<?> entity = mappingContext.getPersistentEntity(savedObject.getClass());
if (null != entity) {
PersistentProperty idProp = entity.getIdProperty();
if (null != idProp) {
try {
MappingBeanHelper.setProperty(savedObject, idProp, id);
return;
} catch (IllegalAccessException e) {
throw new MappingException(e.getMessage(), e);
} catch (InvocationTargetException e) {
throw new MappingException(e.getMessage(), e);
}
}
}
PersistentProperty idProp = getIdPropertyFor(savedObject.getClass());
if (idProp == null) {
return;
}
try {
MappingBeanHelper.setProperty(savedObject, idProp, id);
return;
} catch (IllegalAccessException e) {
throw new MappingException(e.getMessage(), e);
} catch (InvocationTargetException e) {
throw new MappingException(e.getMessage(), e);
}
}
ConfigurablePropertyAccessor bw = PropertyAccessorFactory.forDirectFieldAccess(savedObject);
MongoPropertyDescriptor idDescriptor = new MongoPropertyDescriptors(savedObject.getClass()).getIdDescriptor();
private PersistentProperty getIdPropertyFor(Class<?> type) {
return mappingContext.getPersistentEntity(type).getIdProperty();
}
if (idDescriptor == null) {
/**
* Substitutes the id key if it is found in he query. Any 'id' keys will be replaced with '_id' and the value converted
* to an ObjectId if possible. This conversion should match the way that the id fields are converted during read
* operations.
*
* @param query
* @param targetClass
* @param reader
*/
protected void substituteMappedIdIfNecessary(DBObject query, Class<?> targetClass, MongoReader<?> reader) {
MongoConverter converter = null;
if (reader instanceof SimpleMongoConverter) {
converter = (MongoConverter) reader;
}
else if (reader instanceof MappingMongoConverter) {
converter = (MappingMongoConverter) reader;
}
else {
return;
}
if (bw.getPropertyValue(idDescriptor.getName()) == null) {
Object target = null;
if (id instanceof ObjectId) {
target = this.mongoConverter.convertObjectId((ObjectId) id, idDescriptor.getPropertyType());
} else {
target = id;
String idKey = null;
if (query.containsField("id")) {
idKey = "id";
}
if (query.containsField("_id")) {
idKey = "_id";
}
if (idKey == null) {
// no ids in this query
return;
}
MongoPropertyDescriptor descriptor;
try {
MongoPropertyDescriptor mpd = new MongoPropertyDescriptor(new PropertyDescriptor(idKey, targetClass), targetClass);
descriptor = mpd;
} catch (IntrospectionException e) {
// no property descriptor for this key - try the other
try {
String theOtherIdKey = "id".equals(idKey) ? "_id" : "id";
MongoPropertyDescriptor mpd2 = new MongoPropertyDescriptor(new PropertyDescriptor(theOtherIdKey, targetClass), targetClass);
descriptor = mpd2;
} catch (IntrospectionException e2) {
// no property descriptor for this key either - bail
return;
}
}
if (descriptor.isIdProperty() && descriptor.isOfIdType()) {
Object value = query.get(idKey);
if (value instanceof DBObject) {
DBObject dbo = (DBObject) value;
if (dbo.containsField("$in")) {
List<Object> ids = new ArrayList<Object>();
int count = 0;
for (Object o : (Object[])dbo.get("$in")) {
count++;
ObjectId newValue = convertIdValue(converter, o);
if (newValue != null) {
ids.add(newValue);
}
}
if (ids.size() > 0 && ids.size() != count) {
throw new InvalidDataAccessApiUsageException("Inconsistent set of id values provided " +
Arrays.asList((Object[])dbo.get("$in")));
}
if (ids.size() > 0) {
dbo.removeField("$in");
dbo.put("$in", ids.toArray());
}
}
query.removeField(idKey);
query.put(MongoPropertyDescriptor.ID_KEY, value);
}
else {
ObjectId newValue = convertIdValue(converter, value);
query.removeField(idKey);
if (newValue != null) {
query.put(MongoPropertyDescriptor.ID_KEY, newValue);
} else {
query.put(MongoPropertyDescriptor.ID_KEY, value);
}
}
bw.setPropertyValue(idDescriptor.getName(), target);
}
}
@ -1190,18 +1241,14 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1190,18 +1241,14 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
return null;
}
private <T> String getEntityCollection(Class<T> clazz) {
if (null != mappingContext) {
PersistentEntity<T> entity = mappingContext.getPersistentEntity(clazz);
if (entity == null) {
entity = mappingContext.addPersistentEntity(clazz);
}
if (null != entity && entity instanceof MongoPersistentEntity) {
return ((MongoPersistentEntity<T>) entity).getCollection();
}
}
// Otherwise, return the default for this template.
return getRequiredDefaultCollectionName();
private String getEntityCollection(Class<?> clazz) {
if (clazz == null) {
return getDefaultCollectionName();
}
MongoPersistentEntity<?> entity = mappingContext.getPersistentEntity(clazz);
return entity.getCollection();
}
/**
@ -1394,13 +1441,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica @@ -1394,13 +1441,6 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica
}
}
public void setMongoConverter(MongoConverter converter) {
this.mongoConverter = converter;
if (null != converter && converter instanceof MappingMongoConverter) {
initializeMappingMongoConverter((MappingMongoConverter) mongoConverter);
}
}
public void setWriteResultChecking(WriteResultChecking resultChecking) {
this.writeResultChecking = resultChecking;
}

10
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java

@ -29,8 +29,6 @@ import org.springframework.data.document.mongodb.convert.MappingMongoConverter; @@ -29,8 +29,6 @@ import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
import org.springframework.data.document.mongodb.mapping.Document;
import org.springframework.data.document.mongodb.mapping.MongoMappingContext;
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntityIndexCreator;
import org.springframework.data.document.mongodb.mapping.event.LoggingEventListener;
import org.springframework.data.document.mongodb.mapping.event.MongoMappingEvent;
import org.springframework.data.mapping.context.MappingContextAwareBeanPostProcessor;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
@ -47,7 +45,7 @@ public abstract class AbstractMongoConfiguration { @@ -47,7 +45,7 @@ public abstract class AbstractMongoConfiguration {
@Bean
public abstract MongoTemplate mongoTemplate() throws Exception;
public String getMappingBasePackage() {
public String getMappingBasePackage() {
return "";
}
@ -64,7 +62,7 @@ public abstract class AbstractMongoConfiguration { @@ -64,7 +62,7 @@ public abstract class AbstractMongoConfiguration {
Set<Class<?>> initialEntitySet = new HashSet<Class<?>>();
for (BeanDefinition candidate : componentProvider.findCandidateComponents(basePackage)) {
initialEntitySet.add(ClassUtils.forName(candidate.getBeanClassName(), mappingContext.getClass().getClassLoader()));
}
}
mappingContext.setInitialEntitySet(initialEntitySet);
}
return mappingContext;
@ -80,7 +78,7 @@ public abstract class AbstractMongoConfiguration { @@ -80,7 +78,7 @@ public abstract class AbstractMongoConfiguration {
/**
* Hook that allows post-processing after the MappingMongoConverter has been
* successfully created.
* successfully created.
* @param converter
*/
protected void afterMappingMongoConverterCreation(MappingMongoConverter converter) {
@ -94,7 +92,7 @@ public abstract class AbstractMongoConfiguration { @@ -94,7 +92,7 @@ public abstract class AbstractMongoConfiguration {
}
@Bean MongoPersistentEntityIndexCreator mongoPersistentEntityIndexCreator() throws Exception {
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() );
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() );
return indexCreator;
}
}

39
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java

@ -43,7 +43,6 @@ import org.apache.commons.logging.LogFactory; @@ -43,7 +43,6 @@ import org.apache.commons.logging.LogFactory;
import org.bson.types.ObjectId;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.expression.BeanFactoryResolver;
@ -54,6 +53,7 @@ import org.springframework.core.convert.converter.ConverterFactory; @@ -54,6 +53,7 @@ import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.core.convert.converter.GenericConverter.ConvertiblePair;
import org.springframework.core.convert.support.ConversionServiceFactory;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.data.document.mongodb.mapping.BasicMongoPersistentEntity;
import org.springframework.data.mapping.AssociationHandler;
import org.springframework.data.mapping.MappingBeanHelper;
import org.springframework.data.mapping.PropertyHandler;
@ -85,7 +85,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -85,7 +85,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
protected final GenericConversionService conversionService = ConversionServiceFactory.createDefaultConversionService();
protected final Set<ConvertiblePair> customTypeMapping = new HashSet<ConvertiblePair>();
protected final MappingContext mappingContext;
protected final MappingContext<BasicMongoPersistentEntity<?>> mappingContext;
protected SpelExpressionParser spelExpressionParser = new SpelExpressionParser();
protected ApplicationContext applicationContext;
protected boolean useFieldAccessOnly = true;
@ -97,7 +97,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -97,7 +97,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
*
* @param mappingContext
*/
public MappingMongoConverter(MappingContext mappingContext) {
public MappingMongoConverter(MappingContext<BasicMongoPersistentEntity<?>> mappingContext) {
this.mappingContext = mappingContext;
this.conversionService.removeConvertible(Object.class, String.class);
}
@ -146,22 +146,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -146,22 +146,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
return null;
}
public MappingContext getMappingContext() {
public MappingContext<BasicMongoPersistentEntity<?>> getMappingContext() {
return mappingContext;
}
public Mongo getMongo() {
return mongo;
}
public void setMongo(Mongo mongo) {
this.mongo = mongo;
}
public String getDefaultDatabase() {
return defaultDatabase;
}
public void setDefaultDatabase(String defaultDatabase) {
this.defaultDatabase = defaultDatabase;
}
@ -216,9 +208,9 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -216,9 +208,9 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
}
// Retrieve persistent entity info
PersistentEntity<S> persistentEntity = mappingContext.getPersistentEntity(clazz);
PersistentEntity<S> persistentEntity = (PersistentEntity<S>) mappingContext.getPersistentEntity(clazz);
if (persistentEntity == null) {
persistentEntity = mappingContext.addPersistentEntity(clazz);
throw new MappingException("No mapping metadata found for " + clazz.getName());
}
return read(persistentEntity, dbo);
@ -283,7 +275,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -283,7 +275,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
return;
}
Object obj = getValueInternal(prop, dbo, spelCtx, prop.getValueAnnotation());
Object obj = getValueInternal(prop, dbo, spelCtx, prop.getSpelExpression());
try {
MappingBeanHelper.setProperty(instance, prop, obj, useFieldAccessOnly);
} catch (IllegalAccessException e) {
@ -298,7 +290,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -298,7 +290,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
entity.doWithAssociations(new AssociationHandler() {
public void doWithAssociation(Association association) {
PersistentProperty inverseProp = association.getInverse();
Object obj = getValueInternal(inverseProp, dbo, spelCtx, inverseProp.getValueAnnotation());
Object obj = getValueInternal(inverseProp, dbo, spelCtx, inverseProp.getSpelExpression());
try {
MappingBeanHelper.setProperty(instance, inverseProp, obj);
} catch (IllegalAccessException e) {
@ -336,12 +328,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -336,12 +328,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
}
if (null == entity) {
// Must not have explictly added this entity yet
entity = mappingContext.addPersistentEntity(obj.getClass());
if (null == entity) {
// We can't map this entity for some reason
throw new MappingException("Unable to map entity " + obj);
}
throw new MappingException("No mapping metadata found for entity of type " + obj.getClass().getName());
}
// Write the ID
@ -455,7 +442,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -455,7 +442,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
if (null != dbref) {
DBRef dbRef = createDBRef(propObjItem, dbref);
dbList.add(dbRef);
} else if (type.isArray() && MappingBeanHelper.isSimpleType(type.getComponentType())) {
} else if (type.isArray() && MappingBeanHelper.isSimpleType(prop.getComponentType())) {
dbList.add(propObjItem);
} else if (propObjItem instanceof List) {
List<?> propObjColl = (List<?>) propObjItem;
@ -478,7 +465,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -478,7 +465,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
dbList.add(propObjItem);
} else {
BasicDBObject propDbObj = new BasicDBObject();
write(propObjItem, propDbObj, mappingContext.getPersistentEntity(prop.getTypeInformation()));
write(propObjItem, propDbObj, mappingContext.getPersistentEntity(prop.getComponentType()));
dbList.add(propDbObj);
}
}
@ -576,14 +563,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext @@ -576,14 +563,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext
}
@SuppressWarnings({"unchecked"})
protected Object getValueInternal(PersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, Value spelExpr) {
protected Object getValueInternal(PersistentProperty prop, DBObject dbo, StandardEvaluationContext ctx, String spelExpr) {
String name = prop.getName();
Class<?> propertyType = prop.getType();
Object o;
if (null != spelExpr) {
Expression x = spelExpressionParser.parseExpression(spelExpr.value());
Expression x = spelExpressionParser.parseExpression(spelExpr);
o = x.getValue(ctx);
} else {
Object dbObj = dbo.get(name);

3
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MongoConverter.java

@ -18,6 +18,7 @@ package org.springframework.data.document.mongodb.convert; @@ -18,6 +18,7 @@ package org.springframework.data.document.mongodb.convert;
import org.bson.types.ObjectId;
import org.springframework.data.document.mongodb.MongoReader;
import org.springframework.data.document.mongodb.MongoWriter;
import org.springframework.data.mapping.model.MappingContext;
public interface MongoConverter extends MongoWriter<Object>, MongoReader<Object> {
@ -40,4 +41,6 @@ public interface MongoConverter extends MongoWriter<Object>, MongoReader<Object> @@ -40,4 +41,6 @@ public interface MongoConverter extends MongoWriter<Object>, MongoReader<Object>
* @return
*/
public ObjectId convertObjectId(Object id);
MappingContext getMappingContext();
}

12
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java

@ -40,6 +40,9 @@ import org.springframework.core.convert.converter.ConverterFactory; @@ -40,6 +40,9 @@ import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.core.convert.support.ConversionServiceFactory;
import org.springframework.core.convert.support.GenericConversionService;
import org.springframework.data.document.mongodb.MongoPropertyDescriptors.MongoPropertyDescriptor;
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
import org.springframework.data.document.mongodb.mapping.SimpleMongoMappingContext;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.util.Assert;
import org.springframework.util.comparator.CompoundComparator;
@ -107,6 +110,7 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean { @@ -107,6 +110,7 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean {
}
private final GenericConversionService conversionService;
private final MappingContext<? extends MongoPersistentEntity<?>> mappingContext;
/**
* Creates a {@link SimpleMongoConverter}.
@ -114,6 +118,14 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean { @@ -114,6 +118,14 @@ public class SimpleMongoConverter implements MongoConverter, InitializingBean {
public SimpleMongoConverter() {
this.conversionService = ConversionServiceFactory.createDefaultConversionService();
this.conversionService.removeConvertible(Object.class, String.class);
this.mappingContext = new SimpleMongoMappingContext();
}
/* (non-Javadoc)
* @see org.springframework.data.document.mongodb.convert.MongoConverter#getMappingContext()
*/
public MappingContext<? extends MongoPersistentEntity<?>> getMappingContext() {
return mappingContext;
}
/**

79
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java

@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
/*
* Copyright (c) 2011 by the original author(s).
*
* 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.mapping;
import org.springframework.data.mapping.BasicPersistentEntity;
import org.springframework.data.mapping.model.MappingException;
import org.springframework.data.mapping.model.PersistentEntity;
import org.springframework.data.util.TypeInformation;
import org.springframework.util.StringUtils;
/**
* Mongo specific {@link PersistentEntity} implementation that adds Mongo specific meta-data such as the collection name
* and the like.
*
* @author Jon Brisbin <jbrisbin@vmware.com>
* @author Oliver Gierke
*/
public class BasicMongoPersistentEntity<T> extends BasicPersistentEntity<T> implements MongoPersistentEntity<T> {
private final String collection;
private final boolean isRootEntity;
/**
* Creates a new {@link BasicMongoPersistentEntity} with the given {@link TypeInformation}. Will
* default the collection name to the entities simple type name.
*
* @param typeInformation
*/
public BasicMongoPersistentEntity(TypeInformation typeInformation) {
super(typeInformation);
Class<?> rawType = typeInformation.getType();
String fallback = rawType.getSimpleName().toLowerCase();
if (rawType.isAnnotationPresent(Document.class)) {
Document d = rawType.getAnnotation(Document.class);
this.collection = StringUtils.hasText(d.collection()) ? d.collection() : fallback;
this.isRootEntity = true;
} else {
this.collection = fallback;
this.isRootEntity = false;
}
}
/**
* Returns the collection the entity should be stored in.
*
* @return
*/
public String getCollection() {
return collection;
}
/* (non-Javadoc)
* @see org.springframework.data.mapping.BasicPersistentEntity#verify()
*/
@Override
public void verify() {
if (isRootEntity && idProperty == null) {
throw new MappingException(String.format("Root entity %s has to have an id property!", type.getName()));
}
}
}

39
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java

@ -18,23 +18,18 @@ package org.springframework.data.document.mongodb.mapping; @@ -18,23 +18,18 @@ package org.springframework.data.document.mongodb.mapping;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Set;
import org.bson.types.CodeWScope;
import org.bson.types.ObjectId;
import org.springframework.data.mapping.BasicMappingContext;
import org.springframework.data.mapping.BasicPersistentEntity;
import org.springframework.data.mapping.BasicPersistentProperty;
import org.springframework.data.mapping.AbstractMappingContext;
import org.springframework.data.mapping.MappingBeanHelper;
import org.springframework.data.mapping.model.MappingConfigurationException;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.data.util.TypeInformation;
/**
* @author Jon Brisbin <jbrisbin@vmware.com>
*/
public class MongoMappingContext extends BasicMappingContext {
public class MongoMappingContext extends AbstractMappingContext<BasicMongoPersistentEntity<?>, MongoPersistentProperty> {
public MongoMappingContext() {
augmentSimpleTypes();
@ -50,32 +45,16 @@ public class MongoMappingContext extends BasicMappingContext { @@ -50,32 +45,16 @@ public class MongoMappingContext extends BasicMappingContext {
}
@Override
public boolean isAssociation(Field field, PropertyDescriptor descriptor) throws MappingConfigurationException {
if (field.isAnnotationPresent(DBRef.class)) {
return true;
}
return super.isAssociation(field, descriptor);
public MongoPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, BasicMongoPersistentEntity<?> owner) {
return new MongoPersistentProperty(field, descriptor, owner);
}
/* (non-Javadoc)
* @see org.springframework.data.mapping.BasicMappingContext#getPersistentEntities()
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation, org.springframework.data.mapping.model.MappingContext)
*/
@Override
@SuppressWarnings("unchecked")
public Collection<MongoPersistentEntity<?>> getPersistentEntities() {
return (Collection<MongoPersistentEntity<?>>) super.getPersistentEntities();
}
@Override
public BasicPersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor,
TypeInformation information) throws MappingConfigurationException {
return new MongoPersistentProperty(field, descriptor, information);
@SuppressWarnings("rawtypes")
protected BasicMongoPersistentEntity<?> createPersistentEntity(TypeInformation typeInformation) {
return new BasicMongoPersistentEntity(typeInformation);
}
@Override
public <T> BasicPersistentEntity<T> createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext)
throws MappingConfigurationException {
return new MongoPersistentEntity<T>(mappingContext, typeInformation);
}
}

61
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java

@ -1,69 +1,12 @@ @@ -1,69 +1,12 @@
/*
* Copyright (c) 2011 by the original author(s).
*
* 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.mapping;
import org.springframework.data.mapping.BasicPersistentEntity;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.data.mapping.model.PersistentEntity;
import org.springframework.data.util.TypeInformation;
/**
* Mongo specific {@link PersistentEntity} implementation that adds Mongo specific meta-data such as the collection name
* and the like.
*
* @author Jon Brisbin <jbrisbin@vmware.com>
* @author Oliver Gierke
*/
public class MongoPersistentEntity<T> extends BasicPersistentEntity<T> {
protected String collection;
/**
* Creates a new {@link MongoPersistentEntity} with the given {@link MappingContext} and {@link TypeInformation}. Will
* default the collection name to the entities simple type name.
*
* @param mappingContext
* @param typeInformation
*/
public MongoPersistentEntity(MappingContext mappingContext, TypeInformation typeInformation) {
super(mappingContext, typeInformation);
this.collection = typeInformation.getType().getSimpleName().toLowerCase();
if (typeInformation.getType().isAnnotationPresent(Document.class)) {
Document d = typeInformation.getType().getAnnotation(Document.class);
if (!"".equals(d.collection())) {
this.collection = d.collection();
}
}
}
/**
* Returns the collection the entity should be stored in.
*
* @return
*/
public String getCollection() {
if (null == collection) {
this.collection = type.getSimpleName().toLowerCase();
}
return collection;
}
public interface MongoPersistentEntity<T> extends PersistentEntity<T> {
public void setCollection(String collection) {
this.collection = collection;
}
String getCollection();
}

11
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java

@ -43,7 +43,7 @@ import org.springframework.data.mapping.model.PersistentProperty; @@ -43,7 +43,7 @@ import org.springframework.data.mapping.model.PersistentProperty;
import org.springframework.util.Assert;
/**
* Component that inspects {@link MongoPersistentEntity} instances contained in the given {@link MongoMappingContext}
* Component that inspects {@link BasicMongoPersistentEntity} instances contained in the given {@link MongoMappingContext}
* for indexing metadata and ensures the indexes to be available.
*
* @author Jon Brisbin <jbrisbin@vmware.com>
@ -81,15 +81,6 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener<Ma @@ -81,15 +81,6 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener<Ma
if (log.isDebugEnabled()) {
log.debug("Analyzing class " + type + " for index information.");
}
// Check for special collection setting
if (type.isAnnotationPresent(Document.class)) {
Document doc = type.getAnnotation(Document.class);
String collection = doc.collection();
if ("".equals(collection)) {
collection = type.getSimpleName().toLowerCase();
}
entity.setCollection(collection);
}
// Make sure indexes get created
if (type.isAnnotationPresent(CompoundIndexes.class)) {

17
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentProperty.java

@ -22,8 +22,7 @@ import java.util.HashSet; @@ -22,8 +22,7 @@ import java.util.HashSet;
import java.util.Set;
import org.bson.types.ObjectId;
import org.springframework.data.mapping.BasicPersistentProperty;
import org.springframework.data.util.TypeInformation;
import org.springframework.data.mapping.AnnotationBasedPersistentProperty;
/**
* Mongo specific
@ -32,7 +31,7 @@ import org.springframework.data.util.TypeInformation; @@ -32,7 +31,7 @@ import org.springframework.data.util.TypeInformation;
*
* @author Oliver Gierke
*/
public class MongoPersistentProperty extends BasicPersistentProperty {
public class MongoPersistentProperty extends AnnotationBasedPersistentProperty {
private static final Set<Class<?>> SUPPORTED_ID_TYPES = new HashSet<Class<?>>();
private static final Set<String> SUPPORTED_ID_PROPERTY_NAMES = new HashSet<String>();
@ -54,8 +53,16 @@ public class MongoPersistentProperty extends BasicPersistentProperty { @@ -54,8 +53,16 @@ public class MongoPersistentProperty extends BasicPersistentProperty {
* @param owningTypeInformation
*/
public MongoPersistentProperty(Field field,
PropertyDescriptor propertyDescriptor, TypeInformation owningTypeInformation) {
super(field, propertyDescriptor, owningTypeInformation);
PropertyDescriptor propertyDescriptor, MongoPersistentEntity<?> owner) {
super(field, propertyDescriptor, owner);
}
/* (non-Javadoc)
* @see org.springframework.data.mapping.FooBasicPersistentProperty#isAssociation()
*/
@Override
public boolean isAssociation() {
return field.isAnnotationPresent(DBRef.class) || super.isAssociation();
}
/**

75
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java

@ -0,0 +1,75 @@ @@ -0,0 +1,75 @@
package org.springframework.data.document.mongodb.mapping;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import org.springframework.data.mapping.AbstractMappingContext;
import org.springframework.data.mapping.BasicPersistentEntity;
import org.springframework.data.mapping.AbstractPersistentProperty;
import org.springframework.data.util.TypeInformation;
/**
*
* @author Oliver Gierke
*/
public class SimpleMongoMappingContext extends AbstractMappingContext<SimpleMongoMappingContext.SimpleMongoPersistentEntity<?>, SimpleMongoMappingContext.SimplePersistentProperty> {
/* (non-Javadoc)
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentEntity(org.springframework.data.util.TypeInformation)
*/
@Override
@SuppressWarnings("rawtypes")
protected SimpleMongoPersistentEntity<?> createPersistentEntity(TypeInformation typeInformation) {
return new SimpleMongoPersistentEntity(typeInformation);
}
/* (non-Javadoc)
* @see org.springframework.data.mapping.BasicMappingContext#createPersistentProperty(java.lang.reflect.Field, java.beans.PropertyDescriptor, org.springframework.data.util.TypeInformation, org.springframework.data.mapping.BasicPersistentEntity)
*/
@Override
protected SimplePersistentProperty createPersistentProperty(Field field, PropertyDescriptor descriptor, SimpleMongoPersistentEntity<?> owner) {
return new SimplePersistentProperty(field, descriptor, owner);
}
static class SimplePersistentProperty extends AbstractPersistentProperty {
private static final List<String> ID_FIELD_NAMES = Arrays.asList("id", "_id");
/**
* Creates a new {@link SimplePersistentProperty}.
*
* @param field
* @param propertyDescriptor
* @param information
*/
public SimplePersistentProperty(Field field, PropertyDescriptor propertyDescriptor, SimpleMongoPersistentEntity<?> owner) {
super(field, propertyDescriptor, owner);
}
/* (non-Javadoc)
* @see org.springframework.data.mapping.BasicPersistentProperty#isIdProperty()
*/
public boolean isIdProperty() {
return ID_FIELD_NAMES.contains(field.getName());
}
}
static class SimpleMongoPersistentEntity<T> extends BasicPersistentEntity<T> implements MongoPersistentEntity<T> {
/**
* @param information
*/
public SimpleMongoPersistentEntity(TypeInformation information) {
super(information);
}
/* (non-Javadoc)
* @see org.springframework.data.document.mongodb.mapping.MongoPersistentEntity#getCollection()
*/
public String getCollection() {
return type.getSimpleName();
}
}
}

42
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java

@ -13,7 +13,6 @@ @@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.document.mongodb.query;
import java.util.ArrayList;
@ -23,30 +22,41 @@ import com.mongodb.BasicDBObject; @@ -23,30 +22,41 @@ import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.bson.types.ObjectId;
import org.springframework.core.convert.ConversionFailedException;
import org.springframework.data.document.mongodb.MongoReader;
import org.springframework.data.document.mongodb.convert.MongoConverter;
import org.springframework.data.mapping.model.PersistentEntity;
import org.springframework.util.Assert;
/**
* A helper class to encapsulate any modifications of a Query object before it gets submitted to the database.
*
* @author Jon Brisbin <jbrisbin@vmware.com>
* @author Oliver Gierke
*/
public class QueryMapper<T> {
public class QueryMapper {
final private DBObject query;
final private PersistentEntity<T> entity;
final private MongoReader<Object> reader;
private final MongoConverter converter;
public QueryMapper(DBObject query, PersistentEntity<T> entity, MongoReader<?> reader) {
this.query = query;
this.entity = entity;
this.reader = (MongoReader<Object>) reader;
/**
* Creates a new {@link QueryMapper} with the given {@link MongoConverter}.
*
* @param converter
*/
public QueryMapper(MongoConverter converter) {
Assert.notNull(converter);
this.converter = converter;
}
public DBObject getMappedObject() {
/**
* Replaces the property keys used in the given {@link DBObject} with the appropriate keys by using the
* {@link PersistentEntity} metadata.
*
* @param query
* @param entity
* @return
*/
public DBObject getMappedObject(DBObject query, PersistentEntity<?> entity) {
String idKey = null;
if (null != entity && null != entity.getIdProperty()) {
if (null != entity && entity.getIdProperty() != null) {
idKey = entity.getIdProperty().getName();
} else if (query.containsField("id")) {
idKey = "id";
@ -63,8 +73,8 @@ public class QueryMapper<T> { @@ -63,8 +73,8 @@ public class QueryMapper<T> {
if ("$in".equals(key)) {
List<Object> ids = new ArrayList<Object>();
for (Object id : (Object[]) ((DBObject) value).get("$in")) {
if (null != reader && !(id instanceof ObjectId)) {
ObjectId oid = ((MongoConverter) reader).convertObjectId(id);
if (null != converter && !(id instanceof ObjectId)) {
ObjectId oid = converter.convertObjectId(id);
ids.add(oid);
} else {
ids.add(id);
@ -72,9 +82,9 @@ public class QueryMapper<T> { @@ -72,9 +82,9 @@ public class QueryMapper<T> {
}
newDbo.put("$in", ids.toArray(new ObjectId[ids.size()]));
}
} else if (null != reader) {
} else if (null != converter) {
try {
value = ((MongoConverter) reader).convertObjectId(value);
value = converter.convertObjectId(value);
} catch (ConversionFailedException ignored) {
}
}

10
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java

@ -15,7 +15,9 @@ @@ -15,7 +15,9 @@
*/
package org.springframework.data.document.mongodb.repository;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
@ -89,7 +91,7 @@ public class ConvertingParameterAccessor implements ParameterAccessor { @@ -89,7 +91,7 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
DBObject result = new BasicDBObject();
writer.write(value.getClass().isEnum() ? new EnumValueHolder((Enum<?>) value) : new ValueHolder(value), result);
return result.get("value");
return ((DBObject) result.get("value")).get("value");
}
/**
@ -146,15 +148,15 @@ public class ConvertingParameterAccessor implements ParameterAccessor { @@ -146,15 +148,15 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
*/
private static class ValueHolder {
private Object value;
private Map<String, Object> value = new HashMap<String, Object>();
public ValueHolder(Object value) {
this.value = value;
this.value.put("value", value);
}
@SuppressWarnings("unused")
public Object getValue() {
public Map<String, Object> getValue() {
return value;
}

5
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java

@ -16,13 +16,14 @@ @@ -16,13 +16,14 @@
package org.springframework.data.document.mongodb.repository;
import java.io.Serializable;
import org.springframework.data.document.mongodb.mapping.BasicMongoPersistentEntity;
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
import org.springframework.data.mapping.MappingBeanHelper;
import org.springframework.data.mapping.model.PersistentProperty;
import org.springframework.data.repository.support.AbstractEntityInformation;
/**
* {@link MongoEntityInformation} implementation using a {@link MongoPersistentEntity} instance to lookup the necessary
* {@link MongoEntityInformation} implementation using a {@link BasicMongoPersistentEntity} instance to lookup the necessary
* information.
*
* @author Oliver Gierke
@ -77,6 +78,6 @@ public class MappingMongoEntityInformation<T, ID extends Serializable> extends A @@ -77,6 +78,6 @@ public class MappingMongoEntityInformation<T, ID extends Serializable> extends A
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getIdAttribute()
*/
public String getIdAttribute() {
return "_id";
return entityMetadata.getIdProperty().getName();
}
}

26
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java

@ -30,7 +30,6 @@ import org.springframework.data.document.mongodb.query.Index; @@ -30,7 +30,6 @@ import org.springframework.data.document.mongodb.query.Index;
import org.springframework.data.document.mongodb.query.Order;
import org.springframework.data.domain.Sort;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.data.mapping.model.PersistentEntity;
import org.springframework.data.repository.query.QueryLookupStrategy;
import org.springframework.data.repository.query.QueryLookupStrategy.Key;
import org.springframework.data.repository.query.RepositoryQuery;
@ -52,7 +51,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID @@ -52,7 +51,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
RepositoryFactoryBeanSupport<T, S, ID> {
private MongoTemplate template;
private MappingContext mappingContext;
private MappingContext<MongoPersistentEntity<?>> mappingContext;
/**
* Configures the {@link MongoTemplate} to be used.
@ -69,7 +68,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID @@ -69,7 +68,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
*
* @param mappingContext the mappingContext to set
*/
public void setMappingContext(MappingContext mappingContext) {
public void setMappingContext(MappingContext<MongoPersistentEntity<?>> mappingContext) {
this.mappingContext = mappingContext;
}
@ -100,6 +99,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID @@ -100,6 +99,7 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
super.afterPropertiesSet();
Assert.notNull(template, "MongoTemplate must not be null!");
Assert.notNull(mappingContext, "MappingContext must not be null!");
}
/**
@ -118,9 +118,10 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID @@ -118,9 +118,10 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
* @param template must not be {@literal null}
* @param mappingContext
*/
public MongoRepositoryFactory(MongoTemplate template, MappingContext mappingContext) {
public MongoRepositoryFactory(MongoTemplate template, MappingContext<MongoPersistentEntity<?>> mappingContext) {
Assert.notNull(template);
Assert.notNull(mappingContext);
this.template = template;
this.entityInformationCreator = new EntityInformationCreator(mappingContext);
}
@ -241,22 +242,17 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID @@ -241,22 +242,17 @@ public class MongoRepositoryFactoryBean<T extends MongoRepository<S, ID>, S, ID
*/
static class EntityInformationCreator {
private final MappingContext mappingContext;
private final MappingContext<MongoPersistentEntity<?>> mappingContext;
public EntityInformationCreator(MappingContext mappingContext) {
public EntityInformationCreator(MappingContext<MongoPersistentEntity<?>> mappingContext) {
Assert.notNull(mappingContext);
this.mappingContext = mappingContext;
}
@SuppressWarnings("unchecked")
public <T, ID extends Serializable> MongoEntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {
if (null == mappingContext) {
return new SimpleMongoEntityInformation<T, ID>(domainClass);
}
PersistentEntity<T> persistentEntity = mappingContext.getPersistentEntity(domainClass);
if (persistentEntity == null) {
persistentEntity = mappingContext.addPersistentEntity(domainClass);
}
return new MappingMongoEntityInformation<T, ID>((MongoPersistentEntity<T>) persistentEntity);
MongoPersistentEntity<T> persistentEntity = (MongoPersistentEntity<T>) mappingContext.getPersistentEntity(domainClass);
return new MappingMongoEntityInformation<T, ID>(persistentEntity);
}
}

111
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformation.java

@ -1,111 +0,0 @@ @@ -1,111 +0,0 @@
/*
* Copyright (c) 2011 by the original author(s).
*
* 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.repository;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import org.springframework.data.repository.support.AbstractEntityInformation;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
/**
* Expects the domain class to contain a field with a name out of the following
* {@value #FIELD_NAMES}.
*
* @author Oliver Gierke
*/
class SimpleMongoEntityInformation<T extends Object, ID extends Serializable> extends AbstractEntityInformation<T, ID> implements MongoEntityInformation<T, ID> {
private static final List<String> FIELD_NAMES = Arrays.asList("ID", "id", "_id");
private Field field;
/**
* Creates a new {@link SimpleMongoEntityInformation}.
*
* @param domainClass
*/
public SimpleMongoEntityInformation(Class<T> domainClass) {
super(domainClass);
for (String name : FIELD_NAMES) {
Field candidate = ReflectionUtils.findField(domainClass, name);
if (candidate != null) {
ReflectionUtils.makeAccessible(candidate);
this.field = candidate;
break;
}
}
if (this.field == null) {
throw new IllegalArgumentException(String.format(
"Given domain class %s does not contain an id property!",
domainClass.getName()));
}
}
/* (non-Javadoc)
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getCollectionName()
*/
public String getCollectionName() {
return StringUtils.uncapitalize(getJavaType().getSimpleName());
}
/* (non-Javadoc)
* @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getIdAttribute()
*/
public String getIdAttribute() {
return "_id";
}
/*
* (non-Javadoc)
*
* @see
* org.springframework.data.repository.support.IdAware#getId(java.lang.Object
* )
*/
@SuppressWarnings("unchecked")
public ID getId(Object entity) {
return (ID) ReflectionUtils.getField(field, entity);
}
/*
* (non-Javadoc)
*
* @see
* org.springframework.data.repository.support.EntityInformation#getIdType()
*/
@SuppressWarnings("unchecked")
public Class<ID> getIdType() {
return (Class<ID>) field.getType();
}
}

6
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java

@ -32,6 +32,8 @@ import org.springframework.dao.DataAccessException; @@ -32,6 +32,8 @@ import org.springframework.dao.DataAccessException;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.springframework.data.document.mongodb.convert.MongoConverter;
import org.springframework.data.mapping.model.MappingContext;
import org.springframework.data.mapping.model.PersistentEntity;
/**
* Abstract base class for unit tests to specify behaviour we expect from {@link MongoOperations}. Subclasses return
@ -75,6 +77,10 @@ public abstract class MongoOperationsUnitTests { @@ -75,6 +77,10 @@ public abstract class MongoOperationsUnitTests {
public ObjectId convertObjectId(Object id) {
return null;
}
public MappingContext<PersistentEntity<?>> getMappingContext() {
return null;
}
};
}

24
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java

@ -19,12 +19,13 @@ import static org.hamcrest.Matchers.*; @@ -19,12 +19,13 @@ import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.springframework.data.document.mongodb.query.Criteria.where;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.WriteConcern;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Rule;
@ -60,13 +61,14 @@ public class MongoTemplateTests { @@ -60,13 +61,14 @@ public class MongoTemplateTests {
public ExpectedException thrown = ExpectedException.none();
@Autowired
public void setMongo(Mongo mongo) {
@SuppressWarnings("unchecked")
public void setMongo(Mongo mongo) throws Exception {
MongoMappingContext mappingContext = new MongoMappingContext();
mappingContext.addPersistentEntity(PersonWith_idPropertyOfTypeObjectId.class);
mappingContext.addPersistentEntity(PersonWith_idPropertyOfTypeString.class);
mappingContext.addPersistentEntity(PersonWithIdPropertyOfTypeObjectId.class);
mappingContext.addPersistentEntity(PersonWithIdPropertyOfTypeString.class);
mappingContext.setInitialEntitySet(new HashSet<Class<?>>(Arrays.asList(PersonWith_idPropertyOfTypeObjectId.class,
PersonWith_idPropertyOfTypeString.class, PersonWithIdPropertyOfTypeObjectId.class,
PersonWithIdPropertyOfTypeString.class)));
mappingContext.afterPropertiesSet();
MappingMongoConverter converter = new MappingMongoConverter(mappingContext);
converter.afterPropertiesSet();
@ -97,7 +99,7 @@ public class MongoTemplateTests { @@ -97,7 +99,7 @@ public class MongoTemplateTests {
public void updateFailure() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(template.getDb().getMongo(), "test", "people");
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
mongoTemplate.setWriteResultChecking(WriteResultChecking.EXCEPTION);
Person person = new Person("Oliver2");
person.setAge(25);
@ -274,6 +276,8 @@ public class MongoTemplateTests { @@ -274,6 +276,8 @@ public class MongoTemplateTests {
@Test
public void testUsingAnInQuery() throws Exception {
template.remove(new Query(), PersonWithIdPropertyOfTypeObjectId.class);
PersonWithIdPropertyOfTypeObjectId p1 = new PersonWithIdPropertyOfTypeObjectId();
p1.setFirstName("Sven");
@ -315,7 +319,7 @@ public class MongoTemplateTests { @@ -315,7 +319,7 @@ public class MongoTemplateTests {
PersonWithIdPropertyOfTypeObjectId found1 = template.findOne(q1, PersonWithIdPropertyOfTypeObjectId.class);
assertThat(found1, notNullValue());
Query _q = new Query(Criteria.where("_id").is(p1.getId()));
template.remove(_q);
template.remove(_q, PersonWithIdPropertyOfTypeObjectId.class);
PersonWithIdPropertyOfTypeObjectId notFound1 = template.findOne(q1, PersonWithIdPropertyOfTypeObjectId.class);
assertThat(notFound1, nullValue());
@ -327,7 +331,7 @@ public class MongoTemplateTests { @@ -327,7 +331,7 @@ public class MongoTemplateTests {
Query q2 = new Query(Criteria.where("id").is(p2.getId()));
PersonWithIdPropertyOfTypeObjectId found2 = template.findOne(q2, PersonWithIdPropertyOfTypeObjectId.class);
assertThat(found2, notNullValue());
template.remove(q2);
template.remove(q2, PersonWithIdPropertyOfTypeObjectId.class);
PersonWithIdPropertyOfTypeObjectId notFound2 = template.findOne(q2, PersonWithIdPropertyOfTypeObjectId.class);
assertThat(notFound2, nullValue());
}
@ -345,7 +349,7 @@ public class MongoTemplateTests { @@ -345,7 +349,7 @@ public class MongoTemplateTests {
private void testAddingToList(MongoTemplate template) {
PersonWithAList p = new PersonWithAList();
p.setFirstName("Sven");
p.setAge(22);
p.setAge(22);
template.insert(p);
Query q1 = new Query(Criteria.where("id").is(p.getId()));

2
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java

@ -206,7 +206,7 @@ public class MvcAnalyticsTests { @@ -206,7 +206,7 @@ public class MvcAnalyticsTests {
private void createAndStoreMvcEvent(int dataSize, int p1) {
for (int i = 0; i < dataSize; i++) {
MvcEvent event = generateEvent(p1);
mongoTemplate.save(event);
mongoTemplate.save("mvc", event);
}
}

31
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java

@ -1,21 +1,42 @@ @@ -1,21 +1,42 @@
/*
* Copyright (c) 2011 by the original author(s).
*
* 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.convert;
import static org.mockito.Mockito.*;
import java.util.Arrays;
import java.util.HashSet;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.annotation.Id;
import org.springframework.data.document.mongodb.mapping.MongoMappingContext;
import org.springframework.data.document.mongodb.mapping.MongoPersistentEntity;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
/**
* Test case to verify correct usage of custom {@link Converter} implementations to be used.
*
* @see DATADOC-101
* @author Oliver Gierke
*/
@RunWith(MockitoJUnitRunner.class)
@ -34,11 +55,11 @@ public class CustomConvertersUnitTests { @@ -34,11 +55,11 @@ public class CustomConvertersUnitTests {
@Before
@SuppressWarnings("unchecked")
public void setUp() {
public void setUp() throws Exception {
context = new MongoMappingContext();
context.addPersistentEntity(Foo.class);
context.addPersistentEntity(Bar.class);
context.setInitialEntitySet(new HashSet<Class<?>>(Arrays.asList(Foo.class, Bar.class)));
context.afterPropertiesSet();
when(barToDBObjectConverter.convert(any(Bar.class))).thenReturn(new BasicDBObject());
when(dbObjectToBarConverter.convert(any(DBObject.class))).thenReturn(new Bar());
@ -82,10 +103,14 @@ public class CustomConvertersUnitTests { @@ -82,10 +103,14 @@ public class CustomConvertersUnitTests {
}
public static class Foo {
@Id
public String id;
public Bar bar;
}
public static class Bar {
@Id
public String id;
public String foo;
}

1
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/Address.java

@ -21,6 +21,7 @@ package org.springframework.data.document.mongodb.mapping; @@ -21,6 +21,7 @@ package org.springframework.data.document.mongodb.mapping;
*/
public class Address {
private String id;
private String[] lines;
private String city;
private String provinceOrState;

14
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java

@ -19,6 +19,7 @@ package org.springframework.data.document.mongodb.mapping; @@ -19,6 +19,7 @@ package org.springframework.data.document.mongodb.mapping;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import java.util.Collections;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import org.junit.Before;
@ -27,7 +28,6 @@ import org.junit.runner.RunWith; @@ -27,7 +28,6 @@ import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
import org.springframework.data.document.mongodb.convert.MongoConverter;
import org.springframework.data.mapping.BasicMappingContext;
/**
* Unit tests for testing the mapping works with generic types.
@ -37,13 +37,15 @@ import org.springframework.data.mapping.BasicMappingContext; @@ -37,13 +37,15 @@ import org.springframework.data.mapping.BasicMappingContext;
@RunWith(MockitoJUnitRunner.class)
public class GenericMappingTests {
BasicMappingContext context;
MongoMappingContext context;
MongoConverter converter;
@Before
public void setUp() {
context = new BasicMappingContext();
context.addPersistentEntity(StringWrapper.class);
public void setUp() throws Exception {
context = new MongoMappingContext();
context.setInitialEntitySet(Collections.singleton(StringWrapper.class));
context.afterPropertiesSet();
converter = new MappingMongoConverter(context);
}
@ -54,8 +56,6 @@ public class GenericMappingTests { @@ -54,8 +56,6 @@ public class GenericMappingTests {
wrapper.container = new Container<String>();
wrapper.container.content = "Foo!";
context.addPersistentEntity(StringWrapper.class);
DBObject dbObject = new BasicDBObject();
converter.write(wrapper, dbObject);

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java

@ -29,7 +29,6 @@ import org.junit.runner.RunWith; @@ -29,7 +29,6 @@ import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
import org.springframework.data.mapping.BasicMappingContext;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
@ -42,11 +41,11 @@ import com.mongodb.DBObject; @@ -42,11 +41,11 @@ import com.mongodb.DBObject;
public class MappingMongoConverterUnitTests {
MappingMongoConverter converter;
BasicMappingContext mappingContext;
MongoMappingContext mappingContext;
@Before
public void setUp() {
mappingContext = new BasicMappingContext();
mappingContext = new MongoMappingContext();
converter = new MappingMongoConverter(mappingContext);
}

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java

@ -89,8 +89,6 @@ public class MappingTests { @@ -89,8 +89,6 @@ public class MappingTests {
@Test
public void testPersonPojo() throws Exception {
// POJOs aren't auto-detected, have to add manually
mappingContext.addPersistentEntity(PersonPojo.class);
LOGGER.info("about to create new personpojo");
PersonPojo p = new PersonPojo(12345, "Person", "Pojo");
@ -106,8 +104,6 @@ public class MappingTests { @@ -106,8 +104,6 @@ public class MappingTests {
@Test
public void testPersonWithCustomIdName() {
// POJOs aren't auto-detected, have to add manually
mappingContext.addPersistentEntity(PersonCustomIdName.class);
PersonCustomIdName p = new PersonCustomIdName(123456, "Custom Id", null);
template.insert(p);
@ -123,7 +119,6 @@ public class MappingTests { @@ -123,7 +119,6 @@ public class MappingTests {
assertThat(result2.size(), is(1));
assertNotNull(result2.get(0).getLastName());
assertThat(result2.get(0).getLastName(), is("LastName"));
}
@Test

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java

@ -16,12 +16,17 @@ @@ -16,12 +16,17 @@
package org.springframework.data.document.mongodb.mapping;
import org.springframework.data.annotation.Id;
/**
* @author Jon Brisbin <jbrisbin@vmware.com>
*/
@Document(collection = "person1")
public class PersonCustomCollection1 extends BasePerson{
@Id
private String id;
public PersonCustomCollection1(Integer ssn, String firstName, String lastName) {
super(ssn, firstName, lastName);
}

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java

@ -16,12 +16,17 @@ @@ -16,12 +16,17 @@
package org.springframework.data.document.mongodb.mapping;
import org.springframework.data.annotation.Id;
/**
* @author Jon Brisbin <jbrisbin@vmware.com>
*/
@Document(collection = "person2")
public class PersonCustomCollection2 extends BasePerson {
@Id
private String id;
public PersonCustomCollection2(Integer ssn, String firstName, String lastName) {
super(ssn, firstName, lastName);
}

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java

@ -16,11 +16,16 @@ @@ -16,11 +16,16 @@
package org.springframework.data.document.mongodb.mapping;
import org.springframework.data.annotation.Id;
/**
* @author Jon Brisbin <jbrisbin@vmware.com>
*/
@Document
public class PersonMultiDimArrays extends BasePerson {
@Id
private String id;
private String[][] grid;
public PersonMultiDimArrays(Integer ssn, String firstName, String lastName, String[][] grid) {

30
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/SimpleMappingContextUnitTests.java

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
package org.springframework.data.document.mongodb.mapping;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.data.document.mongodb.mapping.SimpleMongoMappingContext.SimpleMongoPersistentEntity;
import org.springframework.data.mapping.model.PersistentProperty;
/**
*
* @author Oliver Gierke
*/
public class SimpleMappingContextUnitTests {
@Test
public void testname() {
SimpleMongoMappingContext context = new SimpleMongoMappingContext();
SimpleMongoPersistentEntity<?> entity = context.getPersistentEntity(Person.class);
assertThat(entity.getPersistentProperties().isEmpty(), is(false));
PersistentProperty idProperty = entity.getIdProperty();
assertThat(idProperty.getName(), is("id"));
}
static class Person {
String id;
}
}

78
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryMapperUnitTests.java

@ -0,0 +1,78 @@ @@ -0,0 +1,78 @@
/*
* Copyright (c) 2011 by the original author(s).
*
* 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.query;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.document.mongodb.convert.MongoConverter;
import org.springframework.data.mapping.model.PersistentEntity;
import org.springframework.data.mapping.model.PersistentProperty;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
/**
* Unit tests for {@link QueryMapper}.
*
* @author Oliver Gierke
*/
@RunWith(MockitoJUnitRunner.class)
public class QueryMapperUnitTests {
QueryMapper mapper;
@Mock
MongoConverter converter;
@Mock
PersistentEntity<?> entity;
@Mock
PersistentProperty property;
@Before
public void setUp() {
when(entity.getIdProperty()).thenReturn(property);
when(converter.convertObjectId(any())).thenReturn(new ObjectId());
mapper = new QueryMapper(converter);
}
@Test
public void translatesIdPropertyIntoIdKey() {
DBObject query = new BasicDBObject("foo", "value");
when(property.getName()).thenReturn("foo");
DBObject result = mapper.getMappedObject(query, entity);
assertThat(result.get("_id"), is(notNullValue()));
assertThat(result.get("foo"), is(nullValue()));
}
@Test
public void convertsStringIntoObjectId() {
DBObject query = new BasicDBObject("_id", new ObjectId().toString());
DBObject result = mapper.getMappedObject(query, null);
assertThat(result.get("_id"), is(ObjectId.class));
}
}

14
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java

@ -15,6 +15,7 @@ @@ -15,6 +15,7 @@
*/
package org.springframework.data.document.mongodb.repository;
import static org.mockito.Mockito.*;
import static org.springframework.data.document.mongodb.repository.StubParameterAccessor.getAccessor;
import java.lang.reflect.Method;
@ -24,11 +25,16 @@ import org.junit.Before; @@ -24,11 +25,16 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.springframework.data.document.mongodb.Person;
import org.springframework.data.document.mongodb.convert.MongoConverter;
import org.springframework.data.repository.query.parser.PartTree;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
/**
* Unit test for {@link MongoQueryCreator}.
@ -53,6 +59,14 @@ public class MongoQueryCreatorUnitTests { @@ -53,6 +59,14 @@ public class MongoQueryCreatorUnitTests {
findByFirstnameAndFriend =
Sample.class.getMethod("findByFirstnameAndFriend",
String.class, Person.class);
doAnswer(new Answer<Void>() {
public Void answer(InvocationOnMock invocation) throws Throwable {
DBObject dbObject = (DBObject) invocation.getArguments()[1];
dbObject.put("value", new BasicDBObject("value", "value"));
return null;
}
}).when(converter).write(any(), any(DBObject.class));
}

7
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java

@ -41,9 +41,11 @@ public class MongoRepositoryFactoryUnitTests { @@ -41,9 +41,11 @@ public class MongoRepositoryFactoryUnitTests {
MongoTemplate template;
@Mock
MappingContext mappingContext;
MappingContext<MongoPersistentEntity<?>> mappingContext;
@Mock
MongoPersistentEntity<Person> entity;
@SuppressWarnings("rawtypes")
MongoPersistentEntity entity;
@Test(expected = IllegalArgumentException.class)
@ -53,6 +55,7 @@ public class MongoRepositoryFactoryUnitTests { @@ -53,6 +55,7 @@ public class MongoRepositoryFactoryUnitTests {
}
@Test
@SuppressWarnings("unchecked")
public void usesMappingMongoEntityInformationIfMappingContextSet() {
when(mappingContext.getPersistentEntity(Person.class)).thenReturn(entity);

59
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformationUnitTests.java

@ -1,59 +0,0 @@ @@ -1,59 +0,0 @@
/*
* Copyright 2002-2010 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.repository;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import org.junit.Test;
/**
* Unit test for {@link SimpleMongoEntityInformation}.
*
* @author Oliver Gierke
*/
public class SimpleMongoEntityInformationUnitTests {
@Test
public void findsIdField() throws Exception {
SimpleMongoEntityInformation<Person, Long> isNewAware =
new SimpleMongoEntityInformation<Person, Long>(Person.class);
Person person = new Person();
assertThat(isNewAware.isNew(person), is(true));
person.id = 1L;
assertThat(isNewAware.isNew(person), is(false));
}
@Test(expected = IllegalArgumentException.class)
public void rejectsClassIfNoIdField() throws Exception {
new SimpleMongoEntityInformation<InvalidPerson, Long>(InvalidPerson.class);
}
class Person {
Long id;
}
class InvalidPerson {
Long foo;
}
}

5
spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java

@ -45,6 +45,9 @@ public class StringBasedMongoQueryUnitTests { @@ -45,6 +45,9 @@ public class StringBasedMongoQueryUnitTests {
MongoTemplate template;
@Mock
RepositoryMetadata metadata;
@Mock
EntityInformationCreator creator;
MongoConverter converter = new SimpleMongoConverter();
@Before
@ -56,7 +59,7 @@ public class StringBasedMongoQueryUnitTests { @@ -56,7 +59,7 @@ public class StringBasedMongoQueryUnitTests {
public void testname() throws Exception {
Method method = SampleRepository.class.getMethod("findByLastname", String.class);
MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, new EntityInformationCreator(null));
MongoQueryMethod queryMethod = new MongoQueryMethod(method, metadata, creator);
StringBasedMongoQuery mongoQuery = new StringBasedMongoQuery(queryMethod, template);
ConvertingParameterAccessor accesor = StubParameterAccessor.getAccessor(converter, "Matthews");

4
spring-data-mongodb/src/test/resources/infrastructure.xml

@ -11,8 +11,8 @@ @@ -11,8 +11,8 @@
<bean id="mongoTemplate" class="org.springframework.data.document.mongodb.MongoTemplate">
<constructor-arg ref="mongo"/>
<constructor-arg value="database"/>
<property name="defaultCollectionName" value="springdata"/>
<property name="mongoConverter" ref="mongoConverter" />
<constructor-arg value="springdata"/>
<constructor-arg ref="mongoConverter" />
</bean>
<bean id="mongoConverter" class="org.springframework.data.document.mongodb.convert.SimpleMongoConverter" />

2
src/main/resources/changelog.txt

@ -5,7 +5,7 @@ Changes in version 1.0.0.RC1 MongoDB @@ -5,7 +5,7 @@ Changes in version 1.0.0.RC1 MongoDB
-------------------------------------------------
General
*
* Introducted MappingContext implementatio for SimpleMongoConverter (DATADOC-109)
Changes in version 1.0.0.M2 MongoDB (2011-04-09)
------------------------------------------------

Loading…
Cancel
Save