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