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 2013/05/18 15:29:48 UTC
svn commit: r1484115 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/
framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/
Author: aadamchik
Date: Sat May 18 13:29:47 2013
New Revision: 1484115
URL: http://svn.apache.org/r1484115
Log:
CAY-1820 DataDomain.addListener(Object) - a shortcut for adding annotated listeners
Modified:
cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java
Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?rev=1484115&r1=1484114&r2=1484115&view=diff
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Sat May 18 13:29:47 2013
@@ -47,6 +47,7 @@ CAY-1809 Remove 'final' modifier from Ca
CAY-1813 Missing ObjEntity Attribute Validation with Duplicate DbEntity Columns
CAY-1814 Support Property.nin
CAY-1819 When adding a filter, auto-register it as a listener
+CAY-1820 DataDomain.addListener(Object) - a shortcut for adding annotated listeners
Bug Fixes:
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=1484115&r1=1484114&r2=1484115&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Sat May 18 13:29:47 2013
@@ -804,6 +804,17 @@ public class DataDomain implements Query
filters.remove(filter);
}
+ /**
+ * Adds a listener, mapping its methods to events based on annotations. This
+ * is a shortcut for
+ * 'getEntityResolver().getCallbackRegistry().addListener(listener)'.
+ *
+ * @since 3.2
+ */
+ public void addListener(Object listener) {
+ getEntityResolver().getCallbackRegistry().addListener(listener);
+ }
+
abstract class DataDomainFilterChain implements DataChannelFilterChain {
private int i;
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java?rev=1484115&r1=1484114&r2=1484115&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java Sat May 18 13:29:47 2013
@@ -24,12 +24,20 @@ import java.util.HashMap;
import java.util.Map;
import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.Persistent;
+import org.apache.cayenne.annotation.PostAdd;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.event.DefaultEventManager;
import org.apache.cayenne.log.JdbcEventLogger;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.testdo.testmap.Exhibit;
+import org.apache.cayenne.testdo.testmap.Gallery;
+import org.apache.cayenne.testdo.testmap.Painting;
+import org.apache.cayenne.testdo.testmap.annotations.Tag1;
import org.apache.cayenne.unit.di.server.ServerCase;
import org.apache.cayenne.unit.di.server.UseServerRuntime;
@@ -70,8 +78,7 @@ public class DataDomainTest extends Serv
domain.lookupDataNode(new DataMap("m3"));
fail("must have thrown on missing Map to Node maping");
- }
- catch (CayenneRuntimeException e) {
+ } catch (CayenneRuntimeException e) {
// expected
}
}
@@ -164,8 +171,7 @@ public class DataDomainTest extends Serv
public void testInitDataDomainWithDedicatedCache() throws Exception {
Map<Object, Object> properties = new HashMap<Object, Object>();
- properties
- .put(DataDomain.SHARED_CACHE_ENABLED_PROPERTY, Boolean.FALSE.toString());
+ properties.put(DataDomain.SHARED_CACHE_ENABLED_PROPERTY, Boolean.FALSE.toString());
DataDomain domain = new DataDomain("d1", properties);
assertFalse(domain.isSharedCacheEnabled());
@@ -173,9 +179,7 @@ public class DataDomainTest extends Serv
public void testInitDataDomainValidation() throws Exception {
Map<Object, Object> properties = new HashMap<Object, Object>();
- properties.put(
- DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY,
- Boolean.TRUE.toString());
+ properties.put(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY, Boolean.TRUE.toString());
DataDomain domain = new DataDomain("d1", properties);
assertTrue(domain.isValidatingObjectsOnCommit());
@@ -183,9 +187,7 @@ public class DataDomainTest extends Serv
public void testInitDataDomainNoValidation() throws Exception {
Map<Object, Object> properties = new HashMap<Object, Object>();
- properties.put(
- DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY,
- Boolean.FALSE.toString());
+ properties.put(DataDomain.VALIDATING_OBJECTS_ON_COMMIT_PROPERTY, Boolean.FALSE.toString());
DataDomain domain = new DataDomain("d1", properties);
assertFalse(domain.isValidatingObjectsOnCommit());
@@ -193,9 +195,7 @@ public class DataDomainTest extends Serv
public void testDataDomainInternalTransactions() throws Exception {
Map<Object, Object> properties = new HashMap<Object, Object>();
- properties.put(
- DataDomain.USING_EXTERNAL_TRANSACTIONS_PROPERTY,
- Boolean.FALSE.toString());
+ properties.put(DataDomain.USING_EXTERNAL_TRANSACTIONS_PROPERTY, Boolean.FALSE.toString());
DataDomain domain = new DataDomain("d1", properties);
assertFalse(domain.isUsingExternalTransactions());
@@ -206,9 +206,7 @@ public class DataDomainTest extends Serv
public void testDataDomainExternalTransactions() throws Exception {
Map<Object, Object> properties = new HashMap<Object, Object>();
- properties.put(
- DataDomain.USING_EXTERNAL_TRANSACTIONS_PROPERTY,
- Boolean.TRUE.toString());
+ properties.put(DataDomain.USING_EXTERNAL_TRANSACTIONS_PROPERTY, Boolean.TRUE.toString());
DataDomain domain = new DataDomain("d1", properties);
assertTrue(domain.isUsingExternalTransactions());
@@ -222,10 +220,7 @@ public class DataDomainTest extends Serv
final boolean[] cacheShutdown = new boolean[1];
- DataRowStore cache = new DataRowStore(
- "Y",
- Collections.EMPTY_MAP,
- new DefaultEventManager()) {
+ DataRowStore cache = new DataRowStore("Y", Collections.EMPTY_MAP, new DefaultEventManager()) {
@Override
public void shutdown() {
@@ -238,4 +233,46 @@ public class DataDomainTest extends Serv
assertTrue(cacheShutdown[0]);
}
+
+ public void testAddListener() {
+
+ DataDomain domain = runtime.getDataDomain();
+ PostAddListener listener = new PostAddListener();
+ domain.addListener(listener);
+
+ ObjectContext context = runtime.getContext();
+
+ context.newObject(Gallery.class);
+ assertEquals("e:Gallery;", listener.getAndReset());
+
+ context.newObject(Artist.class);
+ assertEquals("a:Artist;", listener.getAndReset());
+
+ context.newObject(Exhibit.class);
+ assertEquals("", listener.getAndReset());
+
+ context.newObject(Painting.class);
+ assertEquals("e:Painting;", listener.getAndReset());
+ }
+
+ class PostAddListener {
+
+ StringBuilder callbackBuffer = new StringBuilder();
+
+ @PostAdd({ Gallery.class, Painting.class })
+ void postAddEntities(Persistent object) {
+ callbackBuffer.append("e:" + object.getObjectId().getEntityName() + ";");
+ }
+
+ @PostAdd(entityAnnotations = Tag1.class)
+ void postAddAnnotated(Persistent object) {
+ callbackBuffer.append("a:" + object.getObjectId().getEntityName() + ";");
+ }
+
+ String getAndReset() {
+ String v = callbackBuffer.toString();
+ callbackBuffer = new StringBuilder();
+ return v;
+ }
+ }
}