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 2007/12/09 15:03:43 UTC

svn commit: r602672 - in /cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen: ClassGenerationAction.java ClassGenerationAction1_1.java ClientClassGenerationAction.java

Author: aadamchik
Date: Sun Dec  9 06:03:42 2007
New Revision: 602672

URL: http://svn.apache.org/viewvc?rev=602672&view=rev
Log:
CAY-926 Refactoring class generator classes

Modified:
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction1_1.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java?rev=602672&r1=602671&r2=602672&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java Sun Dec  9 06:03:42 2007
@@ -20,7 +20,6 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.util.ArrayList;
@@ -83,31 +82,65 @@
         this.templateCache = new HashMap<String, Template>(5);
     }
 
-    protected String defaultSingleClassTemplate() {
+    protected String defaultSingleClassTemplateName() {
         return ClassGenerationAction.SINGLE_CLASS_TEMPLATE;
     }
 
-    protected String defaultSubclassTemplate() {
+    protected String defaultSubclassTemplateName() {
         return ClassGenerationAction.SUBCLASS_TEMPLATE;
     }
 
-    protected String defaultSuperclassTemplate() {
+    protected String defaultSuperclassTemplateName() {
         return ClassGenerationAction.SUPERCLASS_TEMPLATE;
     }
 
     /**
+     * Returns template file path for Java class when generating single classes.
+     */
+    protected Template singleClassTemplate() throws Exception {
+        String name = (template != null) ? template : defaultSingleClassTemplateName();
+        return getTemplate(name);
+    }
+
+    /**
+     * Returns template file path for Java subclass when generating class pairs.
+     */
+    protected Template subclassTemplate() throws Exception {
+        String name = (template != null) ? template : defaultSubclassTemplateName();
+        return getTemplate(name);
+    }
+
+    /**
+     * Returns template file path for Java superclass when generating class pairs.
+     */
+    protected Template superclassTemplate() throws Exception {
+        String name = (superTemplate != null)
+                ? superTemplate
+                : defaultSuperclassTemplateName();
+        return getTemplate(name);
+    }
+
+    /**
+     * Returns a String used to prefix class name to create a generated superclass.
+     * Default value is "_".
+     */
+    protected String getSuperclassPrefix() {
+        return ClassGenerationAction.SUPERCLASS_PREFIX;
+    }
+
+    /**
      * Runs class generation. Produces a pair of Java classes for each ObjEntity in the
      * map. This allows developers to use generated <b>subclass </b> for their custom
      * code, while generated <b>superclass </b> will contain Cayenne code. Superclass will
      * be generated in the same package, its class name will be derived from the class
      * name by adding a <code>superPrefix</code>.
      */
-    public void generateClassPairs(
-            String classTemplate,
-            String superTemplate,
-            String superPrefix) throws Exception {
+    protected void generateClassPairs() throws Exception {
 
         StringUtils stringUtils = StringUtils.getInstance();
+        Template superTemplate = superclassTemplate();
+        Template classTemplate = subclassTemplate();
+        String superPrefix = getSuperclassPrefix();
 
         for (ObjEntity entity : entitiesForCurrentMode()) {
 
@@ -129,25 +162,33 @@
 
             Writer superOut = openWriter(superPackageName, superClassName);
             if (superOut != null) {
-                generate(
-                        superOut,
-                        superTemplate,
+                context.put("objEntity", entity);
+                context.put("stringUtils", StringUtils.getInstance());
+                context.put("entityUtils", new EntityUtils(
+                        dataMap,
                         entity,
                         fqnBaseClass,
                         fqnSuperClass,
-                        fqnSubClass);
+                        fqnSubClass));
+                context.put("importUtils", new ImportUtils());
+
+                superTemplate.merge(context, superOut);
                 superOut.close();
             }
 
             Writer mainOut = openWriter(subPackageName, subClassName);
             if (mainOut != null) {
-                generate(
-                        mainOut,
-                        classTemplate,
+                context.put("objEntity", entity);
+                context.put("stringUtils", StringUtils.getInstance());
+                context.put("entityUtils", new EntityUtils(
+                        dataMap,
                         entity,
                         fqnBaseClass,
                         fqnSuperClass,
-                        fqnSubClass);
+                        fqnSubClass));
+                context.put("importUtils", new ImportUtils());
+
+                classTemplate.merge(context, mainOut);
                 mainOut.close();
             }
         }
@@ -156,8 +197,10 @@
     /**
      * Runs class generation. Produces a single Java class for each ObjEntity in the map.
      */
-    public void generateSingleClasses(String classTemplate, String superPrefix)
-            throws Exception {
+    protected void generateSingleClasses() throws Exception {
+
+        Template classTemplate = singleClassTemplate();
+        String superPrefix = getSuperclassPrefix();
 
         for (ObjEntity entity : entitiesForCurrentMode()) {
 
@@ -178,13 +221,17 @@
 
             Writer out = openWriter(subPackageName, subClassName);
             if (out != null) {
-                generate(
-                        out,
-                        classTemplate,
+                context.put("objEntity", entity);
+                context.put("stringUtils", StringUtils.getInstance());
+                context.put("entityUtils", new EntityUtils(
+                        dataMap,
                         entity,
                         fqnBaseClass,
                         fqnSuperClass,
-                        fqnSubClass);
+                        fqnSubClass));
+                context.put("importUtils", new ImportUtils());
+
+                classTemplate.merge(context, out);
                 out.close();
             }
         }
@@ -198,12 +245,10 @@
 
         try {
             if (makePairs) {
-                String t = getTemplateForPairs();
-                String st = getSupertemplateForPairs();
-                generateClassPairs(t, st, SUPERCLASS_PREFIX);
+                generateClassPairs();
             }
             else {
-                generateSingleClasses(getTemplateForSingles(), SUPERCLASS_PREFIX);
+                generateSingleClasses();
             }
         }
         finally {
@@ -431,30 +476,6 @@
     }
 
     /**
-     * Merges a template with prebuilt context, writing output to provided writer.
-     */
-    protected void generate(
-            Writer out,
-            String template,
-            ObjEntity entity,
-            String fqnBaseClass,
-            String fqnSuperClass,
-            String fqnSubClass) throws Exception {
-
-        context.put("objEntity", entity);
-        context.put("stringUtils", StringUtils.getInstance());
-        context.put("entityUtils", new EntityUtils(
-                dataMap,
-                entity,
-                fqnBaseClass,
-                fqnSuperClass,
-                fqnSubClass));
-        context.put("importUtils", new ImportUtils());
-
-        getTemplate(template).merge(context, out);
-    }
-
-    /**
      * Returns a File object corresponding to a directory where files that belong to
      * <code>pkgName</code> package should reside. Creates any missing diectories below
      * <code>dest</code>.
@@ -472,27 +493,6 @@
         }
 
         return fullPath;
-    }
-
-    /**
-     * Returns template file path for Java class when generating single classes.
-     */
-    protected String getTemplateForSingles() throws IOException {
-        return (template != null) ? template : defaultSingleClassTemplate();
-    }
-
-    /**
-     * Returns template file path for Java subclass when generating class pairs.
-     */
-    protected String getTemplateForPairs() throws IOException {
-        return (template != null) ? template : defaultSubclassTemplate();
-    }
-
-    /**
-     * Returns template file path for Java superclass when generating class pairs.
-     */
-    protected String getSupertemplateForPairs() throws IOException {
-        return (superTemplate != null) ? superTemplate : defaultSuperclassTemplate();
     }
 
     public void setTimestamp(long timestamp) {

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction1_1.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction1_1.java?rev=602672&r1=602671&r2=602672&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction1_1.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationAction1_1.java Sun Dec  9 06:03:42 2007
@@ -23,6 +23,7 @@
 import org.apache.cayenne.CayenneDataObject;
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.velocity.Template;
 
 /**
  * @since 3.0
@@ -36,26 +37,27 @@
     public static final String SUPERCLASS_TEMPLATE = "dotemplates/superclass.vm";
 
     @Override
-    protected String defaultSingleClassTemplate() {
+    protected String defaultSingleClassTemplateName() {
         return ClassGenerationAction1_1.SINGLE_CLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSubclassTemplate() {
+    protected String defaultSubclassTemplateName() {
         return ClassGenerationAction1_1.SUBCLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSuperclassTemplate() {
+    protected String defaultSuperclassTemplateName() {
         return ClassGenerationAction1_1.SUPERCLASS_TEMPLATE;
     }
 
     @Override
-    public void generateClassPairs(
-            String classTemplate,
-            String superTemplate,
-            String superPrefix) throws Exception {
+    protected void generateClassPairs() throws Exception {
 
+        Template superTemplate = superclassTemplate();
+        Template classTemplate = subclassTemplate();
+        String superPrefix = getSuperclassPrefix();
+        
         ClassGenerationInfo mainGen = new ClassGenerationInfo();
         ClassGenerationInfo superGen = new ClassGenerationInfo();
 
@@ -72,7 +74,7 @@
                     + superGen.getClassName());
 
             if (superOut != null) {
-                generate(superOut, superTemplate, entity, null, null, null);
+                superTemplate.merge(context, superOut);
                 superOut.close();
             }
 
@@ -80,7 +82,7 @@
             initClassGenerator(mainGen, entity, false);
             Writer mainOut = openWriter(mainGen.getPackageName(), mainGen.getClassName());
             if (mainOut != null) {
-                generate(mainOut, classTemplate, entity, null, null, null);
+                classTemplate.merge(context, mainOut);
                 mainOut.close();
             }
         }
@@ -89,9 +91,10 @@
     }
 
     @Override
-    public void generateSingleClasses(String classTemplate, String superPrefix)
+    protected void generateSingleClasses()
             throws Exception {
 
+        Template classTemplate = singleClassTemplate();
         ClassGenerationInfo mainGen = new ClassGenerationInfo();
 
         for (ObjEntity entity : entitiesForCurrentMode()) {
@@ -99,7 +102,7 @@
             initClassGenerator(mainGen, entity, false);
             Writer out = openWriter(mainGen.getPackageName(), mainGen.getClassName());
             if (out != null) {
-                generate(out, classTemplate, entity, null, null, null);
+                classTemplate.merge(context, out);
                 out.close();
             }
         }

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java?rev=602672&r1=602671&r2=602672&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java Sun Dec  9 06:03:42 2007
@@ -22,6 +22,7 @@
 
 import org.apache.cayenne.PersistentObject;
 import org.apache.cayenne.map.ObjEntity;
+import org.apache.velocity.Template;
 
 /**
  * @since 3.0
@@ -33,33 +34,33 @@
     public static final String SUPERCLASS_TEMPLATE = "dotemplates/v1_2/client-superclass.vm";
 
     @Override
-    protected String defaultSingleClassTemplate() {
+    protected String defaultSingleClassTemplateName() {
         throw new IllegalStateException(
                 "Default generation for single classes on the client is not supported.");
     }
 
     @Override
-    protected String defaultSubclassTemplate() {
+    protected String defaultSubclassTemplateName() {
         return ClientClassGenerationAction.SUBCLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSuperclassTemplate() {
+    protected String defaultSuperclassTemplateName() {
         return ClientClassGenerationAction.SUPERCLASS_TEMPLATE;
     }
 
     @Override
-    public void generateSingleClasses(String classTemplate, String superPrefix)
-            throws Exception {
+    protected void generateSingleClasses() throws Exception {
         throw new IllegalStateException(
                 "Single classes generation is not supported for the client.");
     }
 
     @Override
-    public void generateClassPairs(
-            String classTemplate,
-            String superTemplate,
-            String superPrefix) throws Exception {
+    protected void generateClassPairs() throws Exception {
+
+        Template superTemplate = superclassTemplate();
+        Template classTemplate = subclassTemplate();
+        String superPrefix = getSuperclassPrefix();
 
         for (ObjEntity entity : entitiesForCurrentMode()) {
 
@@ -87,25 +88,33 @@
             Writer superOut = openWriter(superPackageName, superClassName);
 
             if (superOut != null) {
-                generate(
-                        superOut,
-                        superTemplate,
+                context.put("objEntity", entity);
+                context.put("stringUtils", StringUtils.getInstance());
+                context.put("entityUtils", new EntityUtils(
+                        dataMap,
                         entity,
                         fqnBaseClass,
                         fqnSuperClass,
-                        fqnSubClass);
+                        fqnSubClass));
+                context.put("importUtils", new ImportUtils());
+
+                superTemplate.merge(context, superOut);
                 superOut.close();
             }
 
             Writer mainOut = openWriter(subPackageName, subClassName);
             if (mainOut != null) {
-                generate(
-                        mainOut,
-                        classTemplate,
+                context.put("objEntity", entity);
+                context.put("stringUtils", StringUtils.getInstance());
+                context.put("entityUtils", new EntityUtils(
+                        dataMap,
                         entity,
                         fqnBaseClass,
                         fqnSuperClass,
-                        fqnSubClass);
+                        fqnSubClass));
+                context.put("importUtils", new ImportUtils());
+
+                classTemplate.merge(context, mainOut);
                 mainOut.close();
             }
         }