You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2010/11/20 16:09:32 UTC

svn commit: r1037231 - in /cayenne/sandbox/cayenne-mixin/trunk: ./ src/main/java/org/apache/cayenne/mixin/ src/main/java/org/apache/cayenne/mixin/audit/ src/main/java/org/apache/cayenne/mixin/ref/ src/test/java/org/apache/cayenne/mixin/

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());