diff --git a/ajcore.20110315.195433.898.txt b/ajcore.20110315.195433.898.txt new file mode 100644 index 000000000..3fdd1e33c --- /dev/null +++ b/ajcore.20110315.195433.898.txt @@ -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;)] + private org.springframework.persistence.document.MongoChangeSetPersister changeSetPersister + public void (): + ALOAD_0 // Lorg/springframework/persistence/document/MongoEntityOperations; this (line 16) + INVOKESPECIAL org.springframework.persistence.OrderedEntityOperations. ()V + constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.()) + | RETURN + constructor-execution(void org.springframework.persistence.document.MongoEntityOperations.()) + end public void () + + 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. ()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.(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] diff --git a/pom.xml.orig b/pom.xml.orig new file mode 100644 index 000000000..9ea80389a --- /dev/null +++ b/pom.xml.orig @@ -0,0 +1,293 @@ + + + 4.0.0 + org.springframework.data + spring-data-document-dist + Spring Data Document Distribution + 1.0.0.BUILD-SNAPSHOT + pom + + spring-data-document-parent + spring-data-document-core + spring-data-mongodb +<<<<<<< Updated upstream + spring-data-mongodb-cross-store + spring-data-mongodb-log4j +======= + +>>>>>>> Stashed changes + spring-data-couchdb + + + + + trisberg + Thomas Risberg + trisberg at vmware.com + SpringSource + http://www.SpringSource.com + + Project Admin + Developer + + -5 + + + mpollack + Mark Pollack + mpollack at vmware.com + SpringSource + http://www.SpringSource.com + + Project Admin + Developer + + -5 + + + ogierke + Oliver Gierke + ogierke at vmware.com + SpringSource + http://www.springsource.com + + Developer + + +1 + + + jbrisbin + Jon Brisbin + jbrisbin at vmware.com + SpringSource + http://www.springsource.com + + Developer + + -6 + + + + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0 + + 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. + + + + + + UTF-8 + + spring-data-document + Spring Data + DATADOC + ${project.version} + snapshot + ${dist.id}-${dist.version} + ${dist.finalName}.zip + target/${dist.fileName} + dist.springframework.org + + + + + + + org.springframework.build.aws + org.springframework.build.aws.maven + 3.1.0.RELEASE + + + + + + maven-compiler-plugin + + 1.6 + 1.6 + + + + + com.agilejava.docbkx + docbkx-maven-plugin + 2.0.7 + + + + generate-html + generate-pdf + + pre-site + + + + + org.docbook + docbook-xml + 4.4 + runtime + + + + index.xml + true + ${project.basedir}/src/docbkx/resources/xsl/fopdf.xsl + css/html.css + false + ${project.basedir}/src/docbkx/resources/xsl/html.xsl + 1 + 1 + + + + + version + ${pom.version} + + + + + + + + + + + + + + + + + + + + + + + maven-javadoc-plugin + 2.5 + + true + true +
Spring Data Graph
+ 1.6 + true + ${project.basedir}/src/main/javadoc + ${project.basedir}/src/main/javadoc/overview.html + ${project.basedir}/src/main/javadoc/spring-javadoc.css + + true + + http://static.springframework.org/spring/docs/3.0.x/javadoc-api + http://java.sun.com/javase/6/docs/api + http://api.mongodb.org/java/2.3 + +
+
+ + maven-assembly-plugin + 2.2-beta-5 + false + + + distribution + + single + + package + + + ${project.basedir}/src/assembly/distribution.xml + + false + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.4 + + + upload-dist + deploy + + + + + + + + + run + + + + + + org.springframework.build + org.springframework.build.aws.ant + 3.0.5.RELEASE + + + net.java.dev.jets3t + jets3t + 0.7.2 + + + +
+ + ${dist.finalName} +
+ + + + http://www.springsource.com/spring-data + + static.springframework.org + + scp://static.springframework.org/var/www/domains/springframework.org/static/htdocs/spring-data/data-document/snapshot-site/ + + + + spring-milestone + Spring Milestone Repository + s3://maven.springframework.org/milestone + + + spring-snapshot + Spring Snapshot Repository + s3://maven.springframework.org/snapshot + + + +
diff --git a/spring-data-mongodb/.classpath.orig b/spring-data-mongodb/.classpath.orig new file mode 100644 index 000000000..6143e5592 --- /dev/null +++ b/spring-data-mongodb/.classpath.orig @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java index ac8031e1d..1720e88d1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java @@ -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; 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; 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; * @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 */ private WriteResultChecking writeResultChecking = WriteResultChecking.NONE; - private MongoConverter mongoConverter; - private MappingContext mappingContext; + private final MongoConverter mongoConverter; + private final MappingContext> 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 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 * @see org.springframework.data.document.mongodb.MongoOperations#insertList(java.util.List, org.springframework.data.document.mongodb.MongoWriter) */ public void insertList(List listToSave, MongoWriter writer) { - if (null != mappingContext) { - Map> objs = new HashMap>(); - for (Object o : listToSave) { - PersistentEntity entity = mappingContext.getPersistentEntity(o.getClass()); - if (null != entity && entity instanceof MongoPersistentEntity) { - @SuppressWarnings("unchecked") - String coll = ((MongoPersistentEntity) entity).getCollection(); - List objList = objs.get(coll); - if (null == objList) { - objList = new ArrayList(); - objs.put(coll, objList); - } - objList.add(o); - } else { - continue; - } - } - for (Map.Entry> entry : objs.entrySet()) { - insertList(entry.getKey(), entry.getValue()); + Map> objs = new HashMap>(); + + for (Object o : listToSave) { + + MongoPersistentEntity entity = mappingContext.getPersistentEntity(o.getClass()); + String collection = entity == null ? getDefaultCollectionName() : entity.getCollection(); + + List objList = objs.get(collection); + if (null == objList) { + objList = new ArrayList(); + objs.put(collection, objList); } - return; + objList.add(o); + + } + + for (Map.Entry> 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 } public void remove(Query query, Class targetClass) { + Assert.notNull(query); remove(getEntityCollection(targetClass), query, targetClass); } + + private PersistentEntity getPersistentEntity(Class type) { + return type == null ? null : mappingContext.getPersistentEntity(type); + } public void remove(String collectionName, final Query query, Class targetClass) { if (query == null) { throw new InvalidDataAccessApiUsageException("Query passed in to remove can't be null"); } final DBObject queryObject = query.getQueryObject(); - PersistentEntity entity = getPersistentEntity(targetClass); - final QueryMapper queryMapper = new QueryMapper(queryObject, entity, mongoConverter); + final PersistentEntity entity = getPersistentEntity(targetClass); if (LOGGER.isDebugEnabled()) { LOGGER.debug("remove using query: " + queryObject); } execute(collectionName, new CollectionCallback() { 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 return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray()); } - protected PersistentEntity getPersistentEntity(Class targetClass) { - if (null != targetClass && null != mappingContext) { - return mappingContext.getPersistentEntity(targetClass); - } else { - return null; - } - } - protected void maybeEmitEvent(MongoMappingEvent event) { if (null != eventPublisher) { eventPublisher.publishEvent(event); @@ -979,9 +975,10 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica if (readerToUse == null) { readerToUse = this.mongoConverter; } - PersistentEntity entity = getPersistentEntity(targetClass); - QueryMapper queryMapper = new QueryMapper(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(readerToUse, targetClass), collectionName); } @@ -1006,12 +1003,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica * @return the List of converted objects. */ protected List doFind(String collectionName, DBObject query, DBObject fields, Class targetClass, CursorPreparer preparer) { - PersistentEntity entity = getPersistentEntity(targetClass); - QueryMapper queryMapper = new QueryMapper(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(mongoConverter, targetClass), collectionName); @@ -1030,12 +1026,11 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica * @return the List of converted objects. */ protected List doFind(String collectionName, DBObject query, DBObject fields, Class targetClass, MongoReader reader) { - PersistentEntity entity = getPersistentEntity(targetClass); - QueryMapper queryMapper = new QueryMapper(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(reader, targetClass), collectionName); @@ -1074,44 +1069,31 @@ public class MongoTemplate implements InitializingBean, MongoOperations, Applica if (readerToUse == null) { readerToUse = this.mongoConverter; } - PersistentEntity entity = null; - if (null != mappingContext) { - entity = mappingContext.getPersistentEntity(targetClass); - } - QueryMapper queryMapper = new QueryMapper(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(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 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 ids = new ArrayList(); + 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 return null; } - private String getEntityCollection(Class clazz) { - if (null != mappingContext) { - PersistentEntity entity = mappingContext.getPersistentEntity(clazz); - if (entity == null) { - entity = mappingContext.addPersistentEntity(clazz); - } - if (null != entity && entity instanceof MongoPersistentEntity) { - return ((MongoPersistentEntity) 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 } } - 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; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java index 3ee5bcd71..4307c6f6b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java +++ b/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; 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 { @Bean public abstract MongoTemplate mongoTemplate() throws Exception; - public String getMappingBasePackage() { + public String getMappingBasePackage() { return ""; } @@ -64,7 +62,7 @@ public abstract class AbstractMongoConfiguration { Set> initialEntitySet = new HashSet>(); 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 { /** * 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 { } @Bean MongoPersistentEntityIndexCreator mongoPersistentEntityIndexCreator() throws Exception { - MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() ); + MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(mongoMappingContext(), mongoTemplate() ); return indexCreator; } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java index f672d0684..4a3ecac2a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MappingMongoConverter.java @@ -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; 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 protected final GenericConversionService conversionService = ConversionServiceFactory.createDefaultConversionService(); protected final Set customTypeMapping = new HashSet(); - protected final MappingContext mappingContext; + protected final MappingContext> mappingContext; protected SpelExpressionParser spelExpressionParser = new SpelExpressionParser(); protected ApplicationContext applicationContext; protected boolean useFieldAccessOnly = true; @@ -97,7 +97,7 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext * * @param mappingContext */ - public MappingMongoConverter(MappingContext mappingContext) { + public MappingMongoConverter(MappingContext> mappingContext) { this.mappingContext = mappingContext; this.conversionService.removeConvertible(Object.class, String.class); } @@ -146,22 +146,14 @@ public class MappingMongoConverter implements MongoConverter, ApplicationContext return null; } - public MappingContext getMappingContext() { + public MappingContext> 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 } // Retrieve persistent entity info - PersistentEntity persistentEntity = mappingContext.getPersistentEntity(clazz); + PersistentEntity persistentEntity = (PersistentEntity) 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 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 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 } 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 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 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 } @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); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MongoConverter.java index 47daa9a46..93ad33810 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/MongoConverter.java +++ b/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; 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, MongoReader { @@ -40,4 +41,6 @@ public interface MongoConverter extends MongoWriter, MongoReader * @return */ public ObjectId convertObjectId(Object id); + + MappingContext getMappingContext(); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java index 1dea81ef3..f66d7b3db 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/convert/SimpleMongoConverter.java +++ b/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; 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 { } private final GenericConversionService conversionService; + private final MappingContext> mappingContext; /** * Creates a {@link SimpleMongoConverter}. @@ -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> getMappingContext() { + return mappingContext; } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java new file mode 100644 index 000000000..0e14204d2 --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/BasicMongoPersistentEntity.java @@ -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 + * @author Oliver Gierke + */ +public class BasicMongoPersistentEntity extends BasicPersistentEntity implements MongoPersistentEntity { + + 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())); + } + } +} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java index 4954aebae..3f41c9d0e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoMappingContext.java +++ b/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; 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 */ -public class MongoMappingContext extends BasicMappingContext { +public class MongoMappingContext extends AbstractMappingContext, MongoPersistentProperty> { public MongoMappingContext() { augmentSimpleTypes(); @@ -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> getPersistentEntities() { - return (Collection>) 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 BasicPersistentEntity createPersistentEntity(TypeInformation typeInformation, MappingContext mappingContext) - throws MappingConfigurationException { - return new MongoPersistentEntity(mappingContext, typeInformation); - } - } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java index 4fba0adb0..5cc0e7e14 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntity.java @@ -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 * @author Oliver Gierke */ -public class MongoPersistentEntity extends BasicPersistentEntity { - - 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 extends PersistentEntity { - public void setCollection(String collection) { - this.collection = collection; - } + String getCollection(); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java index fae0358db..e714068fd 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/MongoPersistentEntityIndexCreator.java +++ b/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; 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 @@ -81,15 +81,6 @@ public class MongoPersistentEntityIndexCreator implements ApplicationListener> SUPPORTED_ID_TYPES = new HashSet>(); private static final Set SUPPORTED_ID_PROPERTY_NAMES = new HashSet(); @@ -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(); } /** diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java new file mode 100644 index 000000000..ae387dfc5 --- /dev/null +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/mapping/SimpleMongoMappingContext.java @@ -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.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 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 extends BasicPersistentEntity implements MongoPersistentEntity { + + /** + * @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(); + } + } +} diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java index a687e53af..d1cb62af1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/QueryMapper.java @@ -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; 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 + * @author Oliver Gierke */ -public class QueryMapper { +public class QueryMapper { - final private DBObject query; - final private PersistentEntity entity; - final private MongoReader reader; + private final MongoConverter converter; - public QueryMapper(DBObject query, PersistentEntity entity, MongoReader reader) { - this.query = query; - this.entity = entity; - this.reader = (MongoReader) 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 { if ("$in".equals(key)) { List ids = new ArrayList(); 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 { } 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) { } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java index 0b9cbe7cb..259c97b3b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java @@ -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 { 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 { */ private static class ValueHolder { - private Object value; + private Map value = new HashMap(); public ValueHolder(Object value) { - this.value = value; + this.value.put("value", value); } @SuppressWarnings("unused") - public Object getValue() { + public Map getValue() { return value; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java index f74e33e6e..b5104f765 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MappingMongoEntityInformation.java @@ -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 extends A * @see org.springframework.data.document.mongodb.repository.MongoEntityInformation#getIdAttribute() */ public String getIdAttribute() { - return "_id"; + return entityMetadata.getIdProperty().getName(); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java index cd1a54f8e..9fba28980 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryBean.java +++ b/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; 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, S, ID RepositoryFactoryBeanSupport { private MongoTemplate template; - private MappingContext mappingContext; + private MappingContext> mappingContext; /** * Configures the {@link MongoTemplate} to be used. @@ -69,7 +68,7 @@ public class MongoRepositoryFactoryBean, S, ID * * @param mappingContext the mappingContext to set */ - public void setMappingContext(MappingContext mappingContext) { + public void setMappingContext(MappingContext> mappingContext) { this.mappingContext = mappingContext; } @@ -100,6 +99,7 @@ public class MongoRepositoryFactoryBean, 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, S, ID * @param template must not be {@literal null} * @param mappingContext */ - public MongoRepositoryFactory(MongoTemplate template, MappingContext mappingContext) { + public MongoRepositoryFactory(MongoTemplate template, MappingContext> mappingContext) { Assert.notNull(template); + Assert.notNull(mappingContext); this.template = template; this.entityInformationCreator = new EntityInformationCreator(mappingContext); } @@ -241,22 +242,17 @@ public class MongoRepositoryFactoryBean, S, ID */ static class EntityInformationCreator { - private final MappingContext mappingContext; + private final MappingContext> mappingContext; - public EntityInformationCreator(MappingContext mappingContext) { + public EntityInformationCreator(MappingContext> mappingContext) { + Assert.notNull(mappingContext); this.mappingContext = mappingContext; } + @SuppressWarnings("unchecked") public MongoEntityInformation getEntityInformation(Class domainClass) { - if (null == mappingContext) { - return new SimpleMongoEntityInformation(domainClass); - } - - PersistentEntity persistentEntity = mappingContext.getPersistentEntity(domainClass); - if (persistentEntity == null) { - persistentEntity = mappingContext.addPersistentEntity(domainClass); - } - return new MappingMongoEntityInformation((MongoPersistentEntity) persistentEntity); + MongoPersistentEntity persistentEntity = (MongoPersistentEntity) mappingContext.getPersistentEntity(domainClass); + return new MappingMongoEntityInformation(persistentEntity); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformation.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformation.java deleted file mode 100644 index 5c12a3c65..000000000 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformation.java +++ /dev/null @@ -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 extends AbstractEntityInformation implements MongoEntityInformation { - - private static final List FIELD_NAMES = Arrays.asList("ID", "id", "_id"); - private Field field; - - - /** - * Creates a new {@link SimpleMongoEntityInformation}. - * - * @param domainClass - */ - public SimpleMongoEntityInformation(Class 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 getIdType() { - - return (Class) field.getType(); - } -} \ No newline at end of file diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java index 9eb26cf5e..5ef4c9b87 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoOperationsUnitTests.java @@ -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 { public ObjectId convertObjectId(Object id) { return null; } + + public MappingContext> getMappingContext() { + return null; + } }; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java index 520005153..66402e72e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/MongoTemplateTests.java @@ -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 { 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>(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 { 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 { @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 { 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 { 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 { 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())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java index 31ee8f24d..77381dcd4 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/analytics/MvcAnalyticsTests.java @@ -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); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java index 4e95c2e6f..e341ffa67 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/convert/CustomConvertersUnitTests.java @@ -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 { @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>(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 { } public static class Foo { + @Id + public String id; public Bar bar; } public static class Bar { + @Id + public String id; public String foo; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/Address.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/Address.java index eb6cb685b..a1d030667 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/Address.java +++ b/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; */ public class Address { + private String id; private String[] lines; private String city; private String provinceOrState; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java index 23f331425..a8de7ed4c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/GenericMappingTests.java +++ b/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; 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; 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; @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 { wrapper.container = new Container(); wrapper.container.content = "Foo!"; - context.addPersistentEntity(StringWrapper.class); - DBObject dbObject = new BasicDBObject(); converter.write(wrapper, dbObject); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java index f714b9d99..83b43115c 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingMongoConverterUnitTests.java @@ -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; public class MappingMongoConverterUnitTests { MappingMongoConverter converter; - BasicMappingContext mappingContext; + MongoMappingContext mappingContext; @Before public void setUp() { - mappingContext = new BasicMappingContext(); + mappingContext = new MongoMappingContext(); converter = new MappingMongoConverter(mappingContext); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java index 6e88d3f13..e0588e5f3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/MappingTests.java @@ -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 { @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 { assertThat(result2.size(), is(1)); assertNotNull(result2.get(0).getLastName()); assertThat(result2.get(0).getLastName(), is("LastName")); - } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java index 0bde08634..96b6437d8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection1.java @@ -16,12 +16,17 @@ package org.springframework.data.document.mongodb.mapping; +import org.springframework.data.annotation.Id; + /** * @author Jon Brisbin */ @Document(collection = "person1") public class PersonCustomCollection1 extends BasePerson{ + @Id + private String id; + public PersonCustomCollection1(Integer ssn, String firstName, String lastName) { super(ssn, firstName, lastName); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java index 8dcfe6cc0..78a27fc16 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonCustomCollection2.java @@ -16,12 +16,17 @@ package org.springframework.data.document.mongodb.mapping; +import org.springframework.data.annotation.Id; + /** * @author Jon Brisbin */ @Document(collection = "person2") public class PersonCustomCollection2 extends BasePerson { + @Id + private String id; + public PersonCustomCollection2(Integer ssn, String firstName, String lastName) { super(ssn, firstName, lastName); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java index 68cd3d6a8..cd2b770c9 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/PersonMultiDimArrays.java @@ -16,11 +16,16 @@ package org.springframework.data.document.mongodb.mapping; +import org.springframework.data.annotation.Id; + /** * @author Jon Brisbin */ +@Document public class PersonMultiDimArrays extends BasePerson { + @Id + private String id; private String[][] grid; public PersonMultiDimArrays(Integer ssn, String firstName, String lastName, String[][] grid) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/SimpleMappingContextUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/SimpleMappingContextUnitTests.java new file mode 100644 index 000000000..444402294 --- /dev/null +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/mapping/SimpleMappingContextUnitTests.java @@ -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; + } +} diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryMapperUnitTests.java new file mode 100644 index 000000000..d9b1a42be --- /dev/null +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryMapperUnitTests.java @@ -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)); + } +} diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java index 01cd00de9..ffa3c5cdf 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoQueryCreatorUnitTests.java @@ -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; 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 { findByFirstnameAndFriend = Sample.class.getMethod("findByFirstnameAndFriend", String.class, Person.class); + + doAnswer(new Answer() { + 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)); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java index a9bd73597..03fb12438 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/MongoRepositoryFactoryUnitTests.java @@ -41,9 +41,11 @@ public class MongoRepositoryFactoryUnitTests { MongoTemplate template; @Mock - MappingContext mappingContext; + MappingContext> mappingContext; + @Mock - MongoPersistentEntity entity; + @SuppressWarnings("rawtypes") + MongoPersistentEntity entity; @Test(expected = IllegalArgumentException.class) @@ -53,6 +55,7 @@ public class MongoRepositoryFactoryUnitTests { } @Test + @SuppressWarnings("unchecked") public void usesMappingMongoEntityInformationIfMappingContextSet() { when(mappingContext.getPersistentEntity(Person.class)).thenReturn(entity); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformationUnitTests.java deleted file mode 100644 index da18dff8a..000000000 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/SimpleMongoEntityInformationUnitTests.java +++ /dev/null @@ -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 isNewAware = - new SimpleMongoEntityInformation(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.class); - } - - class Person { - - Long id; - } - - class InvalidPerson { - - Long foo; - } -} diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java index 39df99531..847300576 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/repository/StringBasedMongoQueryUnitTests.java @@ -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 { 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"); diff --git a/spring-data-mongodb/src/test/resources/infrastructure.xml b/spring-data-mongodb/src/test/resources/infrastructure.xml index 38f275753..9c4ddf130 100644 --- a/spring-data-mongodb/src/test/resources/infrastructure.xml +++ b/spring-data-mongodb/src/test/resources/infrastructure.xml @@ -11,8 +11,8 @@ - - + + diff --git a/src/main/resources/changelog.txt b/src/main/resources/changelog.txt index 95a378ae3..89bd916e4 100644 --- a/src/main/resources/changelog.txt +++ b/src/main/resources/changelog.txt @@ -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) ------------------------------------------------