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