Author: aadamchik
Date: Sat Nov 20 15:09:31 2010
New Revision: 1037231

URL: http://svn.apache.org/viewvc?rev=1037231&view=rev
Log:
updating for lifecycle annotations - no need for mixinhandlermanager

Added:
    
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableHandler.java
      - copied, changed from r1035345, 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableMixinHandler.java
Removed:
    
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/MixinHandler.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/MixinHandlerManager.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableMixinHandler.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/test/java/org/apache/cayenne/mixin/MixinHandlerManagerTest.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/test/java/org/apache/cayenne/mixin/MockMixin.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/test/java/org/apache/cayenne/mixin/MockMixinDataObject.java
    
cayenne/sandbox/cayenne-mixin/trunk/src/test/java/org/apache/cayenne/mixin/MockMixinHandler.java
Modified:
    cayenne/sandbox/cayenne-mixin/trunk/pom.xml
    
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/ref/ReferenceableHandler.java

Modified: cayenne/sandbox/cayenne-mixin/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-mixin/trunk/pom.xml?rev=1037231&r1=1037230&r2=1037231&view=diff
==============================================================================
--- cayenne/sandbox/cayenne-mixin/trunk/pom.xml (original)
+++ cayenne/sandbox/cayenne-mixin/trunk/pom.xml Sat Nov 20 15:09:31 2010
@@ -5,10 +5,10 @@
        <parent>
                <artifactId>cayenne-parent</artifactId>
                <groupId>org.apache.cayenne</groupId>
-               <version>3.1-SNAPSHOT</version>
+               <version>3.1M1</version>
        </parent>
        <artifactId>cayenne-mixin</artifactId>
-       <version>3.1.0.3</version>
+       <version>3.1.0.4</version>
        <name>Library: cayenne-mixin</name>
        <packaging>jar</packaging>
        <properties>

Copied: 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableHandler.java
 (from r1035345, 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableMixinHandler.java)
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableHandler.java?p2=cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableHandler.java&p1=cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableMixinHandler.java&r1=1035345&r2=1037231&rev=1037231&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableMixinHandler.java
 (original)
+++ 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/audit/AbstractAuditableHandler.java
 Sat Nov 20 15:09:31 2010
@@ -18,42 +18,15 @@
  ****************************************************************/
 package org.apache.cayenne.mixin.audit;
 
-import org.apache.cayenne.DataObject;
-import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.LifecycleEvent;
-import org.apache.cayenne.mixin.MixinHandler;
-import org.apache.cayenne.reflect.LifecycleCallbackRegistry;
+import org.apache.cayenne.annotation.PostPersist;
+import org.apache.cayenne.annotation.PostRemove;
+import org.apache.cayenne.annotation.PostUpdate;
 
 /**
  * A superclass of application specific handlers of the {...@link Auditable} 
mixin
  * that provides basic needed callbacks.
  */
-public abstract class AbstractAuditableMixinHandler implements
-               MixinHandler<Auditable> {
-
-       protected EntityResolver entityResolver;
-
-       public AbstractAuditableMixinHandler(EntityResolver entityResolver) {
-               this.entityResolver = entityResolver;
-       }
-
-       @Override
-       public Class<Auditable> getMixinType() {
-               return Auditable.class;
-       }
-
-       @Override
-       public void addMixin(Class<? extends DataObject> type) {
-
-               LifecycleCallbackRegistry registry = entityResolver
-                               .getCallbackRegistry();
-               registry.addListener(LifecycleEvent.POST_PERSIST, type, this,
-                               "insertAudit");
-               registry.addListener(LifecycleEvent.POST_REMOVE, type, this,
-                               "deleteAudit");
-               registry.addListener(LifecycleEvent.POST_UPDATE, type, this,
-                               "updateAudit");
-       }
+public abstract class AbstractAuditableHandler {
 
        /**
         * A worker method that creates audit records, as appropriate in a given
@@ -61,14 +34,17 @@ public abstract class AbstractAuditableM
         */
        protected abstract void audit(Object object, AuditableOperation 
operation);
 
+       @PostPersist(entityAnnotations = Auditable.class)
        void insertAudit(Object object) {
                audit(object, AuditableOperation.INSERT);
        }
 
+       @PostRemove(entityAnnotations = Auditable.class)
        void deleteAudit(Object object) {
                audit(object, AuditableOperation.DELETE);
        }
 
+       @PostUpdate(entityAnnotations = Auditable.class)
        void updateAudit(Object object) {
                audit(object, AuditableOperation.UPDATE);
        }

Modified: 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/ref/ReferenceableHandler.java
URL: 
http://svn.apache.org/viewvc/cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/ref/ReferenceableHandler.java?rev=1037231&r1=1037230&r2=1037231&view=diff
==============================================================================
--- 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/ref/ReferenceableHandler.java
 (original)
+++ 
cayenne/sandbox/cayenne-mixin/trunk/src/main/java/org/apache/cayenne/mixin/ref/ReferenceableHandler.java
 Sat Nov 20 15:09:31 2010
@@ -18,32 +18,31 @@
  ****************************************************************/
 package org.apache.cayenne.mixin.ref;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.cayenne.Cayenne;
 import org.apache.cayenne.DataObject;
-import org.apache.cayenne.DataObjectUtils;
 import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.ObjectId;
+import org.apache.cayenne.annotation.PostLoad;
+import org.apache.cayenne.annotation.PostPersist;
 import org.apache.cayenne.map.EntityResolver;
-import org.apache.cayenne.map.LifecycleEvent;
 import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.mixin.MixinHandler;
-import org.apache.cayenne.reflect.LifecycleCallbackRegistry;
 
 /**
  * A {...@link MixinHandler} that injects {...@link 
Referenceable#UUID_PROPERTY} into
  * DataObjects and provides methods to lookup objects by UUID, as well as read
  * UUID of the existing objects.
  */
-public class ReferenceableHandler implements MixinHandler<Referenceable> {
+public class ReferenceableHandler {
 
        protected EntityResolver entityResolver;
        protected Map<String, UuidCoder> coders;
 
        public ReferenceableHandler(EntityResolver entityResolver) {
                this.entityResolver = entityResolver;
-               this.coders = new HashMap<String, UuidCoder>();
+               this.coders = new ConcurrentHashMap<String, UuidCoder>();
        }
 
        /**
@@ -65,7 +64,7 @@ public class ReferenceableHandler implem
                }
 
                ObjectId oid = coder.toObjectId(uuid.substring(separator + 1));
-               return DataObjectUtils.objectForPK(context, oid);
+               return Cayenne.objectForPK(context, oid);
        }
 
        public String getUuid(Object referenceable) {
@@ -94,31 +93,26 @@ public class ReferenceableHandler implem
                }
        }
 
-       @Override
-       public Class<Referenceable> getMixinType() {
-               return Referenceable.class;
-       }
-
-       @Override
-       public void addMixin(Class<? extends DataObject> entityType) {
-
-               ObjEntity entity = entityResolver.lookupObjEntity(entityType);
-               coders.put(entity.getName(), new UuidCoder(entity));
-
-               LifecycleCallbackRegistry registry = entityResolver
-                               .getCallbackRegistry();
-               registry.addListener(LifecycleEvent.POST_PERSIST, entityType, 
this,
-                               "initProperties");
-               registry.addListener(LifecycleEvent.POST_LOAD, entityType, this,
-                               "initProperties");
-       }
-
+       /**
+        * A lifecycle listener method that initialzes DataObject UUID property.
+        */
+       @PostLoad(entityAnnotations = Referenceable.class)
+       @PostPersist(entityAnnotations = Referenceable.class)
        protected void initProperties(DataObject object) {
+
                UuidCoder coder = 
coders.get(object.getObjectId().getEntityName());
                if (coder == null) {
-                       throw new IllegalArgumentException("Entity "
-                                       + object.getObjectId().getEntityName()
-                                       + " is not a known referenceable");
+
+                       ObjEntity entity = entityResolver
+                                       .lookupObjEntity(object.getClass());
+                       if (entity == null) {
+                               throw new IllegalArgumentException("Entity "
+                                               + 
object.getObjectId().getEntityName()
+                                               + " is not a known 
referenceable");
+                       }
+
+                       coder = new UuidCoder(entity);
+                       coders.put(entity.getName(), coder);
                }
 
                String uuid = coder.toUuid(object.getObjectId());


Reply via email to