You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by ro...@apache.org on 2009/04/25 21:52:05 UTC
svn commit: r768593 - in /cayenne/main/trunk: docs/doc/src/main/resources/
framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/
framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/
framework/cayenne-jdk1.5-unp...
Author: robertdzeigler
Date: Sat Apr 25 19:52:05 2009
New Revision: 768593
URL: http://svn.apache.org/viewvc?rev=768593&view=rev
Log:
CAY-1214: Class generation should create abstract callback methods in the superclass and stub methods in the subclass
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/gen/Artifact.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-subclass.vm
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/subclass.vm
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.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=768593&r1=768592&r2=768593&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 Apr 25 19:52:05 2009
@@ -34,6 +34,7 @@
CAY-1184 Callback methods should default to usable names
CAY-1185 Expression API: boolean support in string representation
CAY-1211 Modeler: blown out warning dialogs
+CAY-1214 Class generation should create abstract callback methods in the superclass and stub methods in the subclass
Bug Fixes Since M5:
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/Artifact.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/Artifact.java?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/Artifact.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/Artifact.java Sat Apr 25 19:52:05 2009
@@ -41,6 +41,7 @@
public static String SUB_PACKAGE_KEY = "subPackageName";
public static String BASE_CLASS_KEY = "baseClassName";
public static String BASE_PACKAGE_KEY = "basePackageName";
+ public static String CALLBACK_NAMES_KEY = "callbackNames";
TemplateType[] getTemplateTypes(ArtifactGenerationMode mode);
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityArtifact.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityArtifact.java?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityArtifact.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityArtifact.java Sat Apr 25 19:52:05 2009
@@ -20,8 +20,12 @@
import org.apache.cayenne.CayenneDataObject;
import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.CallbackDescriptor;
import org.apache.velocity.VelocityContext;
+import java.util.Collection;
+import java.util.ArrayList;
+
/**
* {@link Artifact} facade for an ObjEntity.
*
@@ -39,6 +43,8 @@
protected ObjEntity entity;
+ private Collection<String> callbackNames;
+
public EntityArtifact(ObjEntity entity) {
this.entity = entity;
}
@@ -101,4 +107,6 @@
context.put(ENTITY_UTILS_KEY, metadata);
context.put(OBJ_ENTITY_KEY, entity);
}
+
+
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/EntityUtils.java Sat Apr 25 19:52:05 2009
@@ -21,13 +21,10 @@
import org.apache.cayenne.CayenneRuntimeException;
import org.apache.cayenne.ObjectId;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.MappingNamespace;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
-import org.apache.cayenne.map.Relationship;
+import org.apache.cayenne.map.*;
+
+import java.util.Collection;
+import java.util.ArrayList;
/**
* Attributes and Methods for working with ObjEntities.
@@ -47,6 +44,8 @@
protected DataMap primaryDataMap;
protected ObjEntity objEntity;
+ protected Collection<String> callbackNames;
+
public EntityUtils(DataMap dataMap, ObjEntity objEntity, String fqnBaseClass,
String fqnSuperClass, String fqnSubClass) {
@@ -62,6 +61,12 @@
this.primaryDataMap = dataMap;
this.objEntity = objEntity;
+
+
+ this.callbackNames = new ArrayList<String>();
+ for(CallbackDescriptor cb : objEntity.getCallbackMap().getCallbacks()) {
+ callbackNames.addAll(cb.getCallbackMethods());
+ }
}
EntityUtils(DataMap dataMap, ObjEntity objEntity, String baseClassName,
@@ -78,8 +83,14 @@
this.primaryDataMap = dataMap;
this.objEntity = objEntity;
+
+ this.callbackNames = new ArrayList<String>();
+ for(CallbackDescriptor cb : objEntity.getCallbackMap().getCallbacks()) {
+ callbackNames.addAll(cb.getCallbackMethods());
+ }
}
+
/**
* Returns class name (without a package) of the sub class associated with this
* generator.
@@ -322,4 +333,14 @@
return attribute.getType();
}
+
+
+ /**
+ *
+ * @return the list of all callback names registered for the entity.
+ * @since 3.0
+ */
+ public Collection<String> getCallbackNames() {
+ return callbackNames;
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-subclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-subclass.vm?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-subclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-subclass.vm Sat Apr 25 19:52:05 2009
@@ -44,4 +44,12 @@
*/
public#if("true" == "${object.getIsAbstract()}") abstract#end class ${subClassName} extends ${superClassName} {
+##callback methods
+#foreach( $cbname in ${entityUtils.callbackNames})
+ @Override
+ protected void ${cbname}() {
+ //TODO: Implement ${cbname}
+ }
+
+#end
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/client-superclass.vm Sat Apr 25 19:52:05 2009
@@ -186,4 +186,9 @@
#end
#end
+##callback methods
+#foreach( $cbname in ${entityUtils.callbackNames})
+ protected abstract void ${cbname}();
+
+#end
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/subclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/subclass.vm?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/subclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/subclass.vm Sat Apr 25 19:52:05 2009
@@ -34,4 +34,12 @@
public#if("true" == "${object.getIsAbstract()}") abstract#end class ${entityUtils.subClassName} extends ${entityUtils.superClassName} {
+##callbacks
+#foreach($cbname in ${entityUtils.callbackNames})
+ @Override
+ protected void ${cbname}() {
+ //TODO: implement ${cbname}
+ }
+
+#end
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/resources/dotemplates/v1_2/superclass.vm Sat Apr 25 19:52:05 2009
@@ -128,4 +128,10 @@
#end
+##
+##callback methods
+#foreach($cbname in ${entityUtils.callbackNames})
+ protected abstract void ${cbname}();
+
+#end
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java?rev=768593&r1=768592&r2=768593&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java Sat Apr 25 19:52:05 2009
@@ -23,6 +23,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.regex.Pattern;
import org.apache.cayenne.map.*;
@@ -177,6 +178,58 @@
assertTrue(generated.get(0).contains("public static final String TEST_QUERY_QUERYNAME = \"TestQuery\""));
}
+ public void testCallbackMethodGeneration() throws Exception {
+ assertCallbacks(false);
+ }
+
+
+ public void testClientCallbackMethodGeneration() throws Exception {
+ assertCallbacks(true);
+ }
+
+ private void assertCallbacks(boolean isClient) throws Exception
+ {
+ ObjEntity testEntity1 = new ObjEntity("TE1");
+ testEntity1.setClassName("org.example.TestClass1");
+ int i=0;
+ for(CallbackDescriptor cb : testEntity1.getCallbackMap().getCallbacks()) {
+ cb.addCallbackMethod("cb" + i++);
+ }
+
+ if (isClient) {
+
+ action = new ClientClassGenerationAction() {
+ @Override
+ protected Writer openWriter(TemplateType templateType) throws Exception {
+ StringWriter writer = new StringWriter();
+ writers.add(writer);
+ return writer;
+ }
+
+ };
+
+ }
+
+ action.setMakePairs(true);
+
+ List<String> generated = execute(new EntityArtifact(testEntity1));
+ assertNotNull(generated);
+ assertEquals(2, generated.size());
+
+ String superclass = generated.get(0);
+
+ assertTrue(superclass, superclass.contains("public abstract class _TestClass1"));
+
+ for(int j=0;j<i;j++) {
+ assertTrue(superclass, superclass.contains("protected abstract void cb" + j + "();"));
+ }
+
+ String subclass = generated.get(1);
+ for(int j=0;j<i;j++) {
+ assertTrue(subclass, subclass.contains("protected void cb" + j + "() {"));
+ }
+ }
+
protected List<String> execute(Artifact artifact) throws Exception {
action.execute(artifact);