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/04 23:23:45 UTC

svn commit: r601116 - in /cayenne/main/trunk/framework: cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/ cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ cayenn...

Author: aadamchik
Date: Tue Dec  4 14:23:44 2007
New Revision: 601116

URL: http://svn.apache.org/viewvc?rev=601116&view=rev
Log:
CAY-926 Refactoring class generator classes
(switching Modeler to the new generator)

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/ClassGenerationInfo.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
    cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
    cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.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=601116&r1=601115&r2=601116&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 Tue Dec  4 14:23:44 2007
@@ -26,7 +26,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.cayenne.CayenneDataObject;
 import org.apache.cayenne.CayenneRuntimeException;
@@ -49,7 +48,7 @@
     public static final String SUPERCLASS_PREFIX = "_";
     private static final String WILDCARD = "*";
 
-    protected List<ObjEntity> entities;
+    protected Collection<ObjEntity> entities;
     protected String superPkg;
     protected DataMap dataMap;
     protected ClassGeneratorMode mode;
@@ -74,15 +73,15 @@
         this.makePairs = true;
     }
 
-    protected String defaultSingleClassTemplate() {
+    public String defaultSingleClassTemplate() {
         return ClassGenerationAction.SINGLE_CLASS_TEMPLATE;
     }
 
-    protected String defaultSubclassTemplate() {
+    public String defaultSubclassTemplate() {
         return ClassGenerationAction.SUBCLASS_TEMPLATE;
     }
 
-    protected String defaultSuperclassTemplate() {
+    public String defaultSuperclassTemplate() {
         return ClassGenerationAction.SUPERCLASS_TEMPLATE;
     }
 
@@ -115,7 +114,7 @@
                     + stringUtils.stripPackageName(fqnSubClass);
 
             String superPackageName = this.superPkg;
-            if(superPackageName == null) {
+            if (superPackageName == null) {
                 superPackageName = subPackageName;
             }
             String fqnSuperClass = superPackageName + "." + superClassName;
@@ -152,7 +151,7 @@
         // TODO: andrus, 12/2/2007 - should we setup a dummy entity for an empty map in
         // DataMap mode?
         if (mode != ClassGeneratorMode.entity && !entities.isEmpty()) {
-            return Collections.singleton(entities.get(0));
+            return Collections.singleton(entities.iterator().next());
         }
         else {
             return this.entities;
@@ -489,7 +488,7 @@
         this.dataMap = dataMap;
     }
 
-    public List<ObjEntity> getEntities() {
+    public Collection<ObjEntity> getEntities() {
         return entities;
     }
 
@@ -498,7 +497,7 @@
      * list to allow its independent modification and also filters out entities that do
      * not require class generation.
      */
-    public void setEntities(List<ObjEntity> objEntities) {
+    public void setEntities(Collection<ObjEntity> objEntities) {
         this.entities = objEntities != null
                 ? new ArrayList<ObjEntity>(objEntities)
                 : new ArrayList<ObjEntity>();
@@ -508,6 +507,10 @@
         this.mode = mode;
     }
 
+    /**
+     * Sets an optional shared VelocityContext. Useful with tools like VPP that can set
+     * custom values in the context, not known to Cayenne.
+     */
     public void setContext(VelocityContext context) {
         this.context = context;
     }

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=601116&r1=601115&r2=601116&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 Tue Dec  4 14:23:44 2007
@@ -36,17 +36,17 @@
     public static final String SUPERCLASS_TEMPLATE = "dotemplates/superclass.vm";
 
     @Override
-    protected String defaultSingleClassTemplate() {
+    public String defaultSingleClassTemplate() {
         return ClassGenerationAction1_1.SINGLE_CLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSubclassTemplate() {
+    public String defaultSubclassTemplate() {
         return ClassGenerationAction1_1.SUBCLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSuperclassTemplate() {
+    public String defaultSuperclassTemplate() {
         return ClassGenerationAction1_1.SUPERCLASS_TEMPLATE;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationInfo.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationInfo.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationInfo.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/gen/ClassGenerationInfo.java Tue Dec  4 14:23:44 2007
@@ -32,6 +32,7 @@
  * 
  * @author Andrus Adamchik
  * @since 1.2
+ * @deprecated since 3.0, as class generator version 1.1 is deprecated.
  */
 public class ClassGenerationInfo {
 
@@ -114,7 +115,7 @@
      * @since 3.0
      */
     public String formatJavaTypeAsNonBooleanPrimitive(String type) {
-        String value = (String) ImportUtils.classesForPrimitives.get(type);
+        String value = ImportUtils.classesForPrimitives.get(type);
         return formatJavaType(value != null ? value : type);
     }
 

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=601116&r1=601115&r2=601116&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 Tue Dec  4 14:23:44 2007
@@ -33,18 +33,18 @@
     public static final String SUPERCLASS_TEMPLATE = "dotemplates/v1_2/client-superclass.vm";
 
     @Override
-    protected String defaultSingleClassTemplate() {
+    public String defaultSingleClassTemplate() {
         throw new IllegalStateException(
                 "Default generation for single classes on the client is not supported.");
     }
 
     @Override
-    protected String defaultSubclassTemplate() {
+    public String defaultSubclassTemplate() {
         return ClientClassGenerationAction.SUBCLASS_TEMPLATE;
     }
 
     @Override
-    protected String defaultSuperclassTemplate() {
+    public String defaultSuperclassTemplate() {
         return ClientClassGenerationAction.SUPERCLASS_TEMPLATE;
     }
 

Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java Tue Dec  4 14:23:44 2007
@@ -105,8 +105,6 @@
     }
 
     /**
-     * Factory method to create internal class generator. Called from constructor.
-     * 
      * @deprecated since 3.0. Use {@link #createGeneratorAction()}.
      */
     protected DefaultClassGenerator createGenerator() {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java Tue Dec  4 14:23:44 2007
@@ -19,11 +19,15 @@
 
 package org.apache.cayenne.modeler;
 
+import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 
-import org.apache.cayenne.gen.MapClassGenerator;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClassGenerationAction1_1;
+import org.apache.cayenne.gen.ClassGenerator;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
 import org.apache.cayenne.modeler.pref.FSPath;
 import org.apache.cayenne.pref.Domain;
 
@@ -36,78 +40,100 @@
 
     public static final String STANDARD_SERVER_SUPERCLASS = "Standard Server Superclass";
     public static final String STANDARD_SERVER_SUBCLASS = "Standard Server Subclass";
+    static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client Superclass";
+    static final String STANDARD_CLIENT_SUBCLASS = "Standard Client Subclass";
 
-    protected Map standardSubclassTemplates;
-    protected Map standardSuperclassTemplates;
-    protected Map customTemplates;
+    protected List<String> standardSubclassTemplates;
+    protected List<String> standardSuperclassTemplates;
+    protected Map<String, String> customTemplates;
+    protected Map<String, String> standardTemplates;
+    protected Map<String, String> standardTemplates1_1;
 
     public static Domain getTemplateDomain(Application application) {
         return application.getPreferenceDomain().getSubdomain(CodeTemplateManager.class);
     }
 
     public CodeTemplateManager(Application application) {
-        standardSuperclassTemplates = new HashMap();
+        standardSuperclassTemplates = new ArrayList<String>(3);
 
-        standardSuperclassTemplates.put(
-                STANDARD_SERVER_SUPERCLASS,
-                MapClassGenerator.SUPERCLASS_TEMPLATE_1_1);
+        standardSuperclassTemplates.add(STANDARD_SERVER_SUPERCLASS);
+        standardSuperclassTemplates.add(STANDARD_CLIENT_SUPERCLASS);
 
-        standardSuperclassTemplates.put(
-                "Standard Client Superclass",
-                MapClassGenerator.CLIENT_SUPERCLASS_TEMPLATE_1_2);
+        standardSubclassTemplates = new ArrayList<String>(3);
+        standardSubclassTemplates.add(STANDARD_SERVER_SUBCLASS);
+        standardSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
 
-        standardSubclassTemplates = new HashMap();
-        standardSubclassTemplates.put(
-                STANDARD_SERVER_SUBCLASS,
-                MapClassGenerator.SUBCLASS_TEMPLATE_1_1);
+        updateCustomTemplates(getTemplateDomain(application));
 
-        standardSubclassTemplates.put(
-                "Standard Client Subclass",
-                MapClassGenerator.CLIENT_SUBCLASS_TEMPLATE_1_2);
+        standardTemplates = new HashMap<String, String>();
+        standardTemplates.put(
+                STANDARD_SERVER_SUPERCLASS,
+                ClassGenerationAction.SUPERCLASS_TEMPLATE);
+        standardTemplates.put(
+                STANDARD_CLIENT_SUPERCLASS,
+                ClientClassGenerationAction.SUPERCLASS_TEMPLATE);
+        standardTemplates.put(
+                STANDARD_SERVER_SUBCLASS,
+                ClassGenerationAction.SUBCLASS_TEMPLATE);
+        standardTemplates.put(
+                STANDARD_CLIENT_SUBCLASS,
+                ClientClassGenerationAction.SUBCLASS_TEMPLATE);
 
-        updateCustomTemplates(getTemplateDomain(application));
+        standardTemplates1_1 = new HashMap<String, String>();
+        standardTemplates1_1.put(
+                STANDARD_SERVER_SUPERCLASS,
+                ClassGenerationAction1_1.SUPERCLASS_TEMPLATE);
+        standardTemplates1_1.put(
+                STANDARD_CLIENT_SUPERCLASS,
+                ClientClassGenerationAction.SUPERCLASS_TEMPLATE);
+        standardTemplates1_1.put(
+                STANDARD_SERVER_SUBCLASS,
+                ClassGenerationAction1_1.SUBCLASS_TEMPLATE);
+        standardTemplates1_1.put(
+                STANDARD_CLIENT_SUBCLASS,
+                ClientClassGenerationAction.SUBCLASS_TEMPLATE);
     }
 
     /**
      * Updates custom templates from preferences.
      */
     public void updateCustomTemplates(Domain preferenceDomain) {
-        Map templates = preferenceDomain.getDetailsMap(FSPath.class);
-        this.customTemplates = new HashMap(templates.size(), 1);
-        Iterator it = templates.entrySet().iterator();
-        while (it.hasNext()) {
-            Map.Entry entry = (Map.Entry) it.next();
+        Map<String, FSPath> templates = preferenceDomain.getDetailsMap(FSPath.class);
+        this.customTemplates = new HashMap<String, String>(templates.size(), 1);
 
+        for (Map.Entry<String, FSPath> entry : templates.entrySet()) {
             FSPath path = (FSPath) entry.getValue();
             customTemplates.put(entry.getKey(), path.getPath());
         }
     }
 
-    public String getTemplatePath(String name) {
+    public String getTemplatePath(String name, String version) {
         Object value = customTemplates.get(name);
         if (value != null) {
             return value.toString();
         }
 
-        value = standardSuperclassTemplates.get(name);
-
-        if (value != null) {
-            return value.toString();
+        Map<String, String> templates;
+        if (ClassGenerator.VERSION_1_1.equals(version)) {
+            templates = standardTemplates1_1;
+        }
+        else {
+            templates = standardTemplates;
         }
 
-        value = standardSubclassTemplates.get(name);
+        value = templates.get(name);
         return value != null ? value.toString() : null;
     }
 
-    public Map getCustomTemplates() {
+    public Map<String, String> getCustomTemplates() {
         return customTemplates;
     }
 
-    public Map getStandardSubclassTemplates() {
+    public List<String> getStandardSubclassTemplates() {
         return standardSubclassTemplates;
     }
 
-    public Map getStandardSuperclassTemplates() {
+    public List<String> getStandardSuperclassTemplates() {
         return standardSuperclassTemplates;
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java Tue Dec  4 14:23:44 2007
@@ -20,6 +20,8 @@
 package org.apache.cayenne.modeler.dialog.codegen;
 
 import org.apache.commons.collections.Predicate;
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
 import org.apache.cayenne.gen.DefaultClassGenerator;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
@@ -70,14 +72,9 @@
         return prefs;
     }
 
-    public DefaultClassGenerator createGenerator() {
-        DefaultClassGenerator generator = super.createGenerator();
-
-        if (generator != null) {
-            generator.setClient(true);
-        }
-
-        return generator;
+    @Override
+    protected ClassGenerationAction newGenerator() {
+        return new ClientClassGenerationAction();
     }
 
     public Predicate getDefaultEntityFilter() {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java Tue Dec  4 14:23:44 2007
@@ -23,12 +23,12 @@
 
 import javax.swing.JOptionPane;
 
-import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.PredicateUtils;
-import org.apache.cayenne.gen.DefaultClassGenerator;
+import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.swing.BindingBuilder;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.PredicateUtils;
 
 /**
  * A controller for the class generator dialog.
@@ -118,7 +118,7 @@
     }
 
     public void generateAction() {
-        DefaultClassGenerator generator = generatorSelector.getGenerator();
+        ClassGenerationAction generator = generatorSelector.getGenerator();
 
         if (generator != null) {
             try {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java Tue Dec  4 14:23:44 2007
@@ -105,8 +105,8 @@
         return modified;
     }
 
-    public List getSelectedEntities() {
-        List selected = new ArrayList(selectedEntities.size());
+    public List<ObjEntity> getSelectedEntities() {
+        List<ObjEntity> selected = new ArrayList<ObjEntity>(selectedEntities.size());
 
         Iterator it = entities.iterator();
         while (it.hasNext()) {

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java Tue Dec  4 14:23:44 2007
@@ -28,8 +28,10 @@
 
 import javax.swing.DefaultComboBoxModel;
 
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClassGenerationAction1_1;
 import org.apache.cayenne.gen.ClassGenerator;
-import org.apache.cayenne.gen.DefaultClassGenerator;
+import org.apache.cayenne.gen.ClassGeneratorMode;
 import org.apache.cayenne.modeler.CodeTemplateManager;
 import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
@@ -51,7 +53,7 @@
     static final String DATA_MAP_MODE_LABEL = "One run per DataMap";
     static final String ENTITY_MODE_LABEL = "One run per each selected Entity";
 
-    static final Map modesByLabel = new HashMap();
+    static final Map<String, String> modesByLabel = new HashMap<String, String>();
     static {
         modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP);
         modesByLabel.put(ENTITY_MODE_LABEL, MODE_ENTITY);
@@ -72,7 +74,7 @@
         view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
 
         Object[] versionChoices = new Object[] {
-                ClassGenerator.VERSION_1_1, ClassGenerator.VERSION_1_2
+                ClassGenerator.VERSION_1_2, ClassGenerator.VERSION_1_1
         };
         view.getGeneratorVersion().setModel(new DefaultComboBoxModel(versionChoices));
 
@@ -92,7 +94,7 @@
         }
 
         if (Util.isEmptyString(preferences.getProperty("version"))) {
-            preferences.setProperty("version", ClassGenerator.VERSION_1_1);
+            preferences.setProperty("version", ClassGenerator.VERSION_1_2);
         }
 
         if (Util.isEmptyString(preferences.getProperty("overwrite"))) {
@@ -171,20 +173,18 @@
     protected void updateTemplates() {
         this.templateManager = getApplication().getCodeTemplateManager();
 
-        List customTemplates = new ArrayList(templateManager
+        List<String> customTemplates = new ArrayList<String>(templateManager
                 .getCustomTemplates()
                 .keySet());
         Collections.sort(customTemplates);
 
-        List superTemplates = new ArrayList(templateManager
-                .getStandardSuperclassTemplates()
-                .keySet());
+        List<String> superTemplates = new ArrayList<String>(templateManager
+                .getStandardSuperclassTemplates());
         Collections.sort(superTemplates);
         superTemplates.addAll(customTemplates);
 
-        List subTemplates = new ArrayList(templateManager
-                .getStandardSubclassTemplates()
-                .keySet());
+        List<String> subTemplates = new ArrayList<String>(templateManager
+                .getStandardSubclassTemplates());
         Collections.sort(subTemplates);
         subTemplates.addAll(customTemplates);
 
@@ -206,29 +206,35 @@
         return view;
     }
 
-    public DefaultClassGenerator createGenerator() {
+    private String getVersion() {
+        return (String) view.getGeneratorVersion().getSelectedItem();
+    }
+
+    @Override
+    protected ClassGenerationAction newGenerator() {
+        return ClassGenerator.VERSION_1_1.equals(getVersion())
+                ? new ClassGenerationAction1_1()
+                : new ClassGenerationAction();
+    }
+
+    public ClassGenerationAction createGenerator() {
 
-        DefaultClassGenerator generator = super.createGenerator();
+        ClassGenerationAction generator = super.createGenerator();
 
         String mode = modesByLabel
                 .get(view.getGenerationMode().getSelectedItem())
                 .toString();
-        generator.setMode(mode);
+        generator.setMode(ClassGeneratorMode.valueOf(mode));
+        
+        String version = getVersion();
 
         String superKey = view.getSuperclassTemplate().getSelectedItem().toString();
-        String superTemplate = templateManager.getTemplatePath(superKey);
+        String superTemplate = templateManager.getTemplatePath(superKey, version);
         generator.setSuperTemplate(superTemplate);
 
         String subKey = view.getSubclassTemplate().getSelectedItem().toString();
-        String subTemplate = templateManager.getTemplatePath(subKey);
+        String subTemplate = templateManager.getTemplatePath(subKey, version);
         generator.setTemplate(subTemplate);
-
-        if (view.getGeneratorVersion().getSelectedItem() != null) {
-            generator.setVersionString(view
-                    .getGeneratorVersion()
-                    .getSelectedItem()
-                    .toString());
-        }
 
         generator.setOverwrite(view.getOverwrite().isSelected());
         generator.setUsePkgPath(view.getUsePackagePath().isSelected());

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java Tue Dec  4 14:23:44 2007
@@ -21,6 +21,8 @@
 
 import java.awt.Component;
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 
 import javax.swing.JButton;
@@ -28,8 +30,7 @@
 import javax.swing.JOptionPane;
 import javax.swing.JTextField;
 
-import org.apache.commons.collections.Predicate;
-import org.apache.cayenne.gen.DefaultClassGenerator;
+import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.map.ObjAttribute;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.ObjRelationship;
@@ -47,6 +48,7 @@
 import org.apache.cayenne.validation.SimpleValidationFailure;
 import org.apache.cayenne.validation.ValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
+import org.apache.commons.collections.Predicate;
 
 /**
  * A mode-specific part of the code generation dialog.
@@ -96,9 +98,16 @@
     protected abstract DataMapDefaults createDefaults();
 
     /**
+     * Creates an appropriate subclass of {@link ClassGenerationAction}, returning it in
+     * an unconfigured state. Configuration is performed by {@link #createGenerator()}
+     * method.
+     */
+    protected abstract ClassGenerationAction newGenerator();
+
+    /**
      * Creates a class generator for provided selections.
      */
-    public DefaultClassGenerator createGenerator() {
+    public ClassGenerationAction createGenerator() {
 
         File outputDir = getOutputDir();
 
@@ -125,14 +134,25 @@
             return null;
         }
 
-        DefaultClassGenerator generator = new DefaultClassGenerator(getParentController()
-                .getDataMap(), getParentController().getSelectedEntities());
+        // remove generic entities...
+        Collection<ObjEntity> entities = new ArrayList<ObjEntity>(getParentController()
+                .getSelectedEntities());
+        Iterator<ObjEntity> it = entities.iterator();
+        while (it.hasNext()) {
+            if (it.next().isGeneric()) {
+                it.remove();
+            }
+        }
+
+        ClassGenerationAction generator = newGenerator();
+        generator.setDataMap(getParentController().getDataMap());
+        generator.setEntities(entities);
 
         // configure encoding from preferences
         Domain generatorPrefs = Application
                 .getInstance()
                 .getPreferenceDomain()
-                .getSubdomain(DefaultClassGenerator.class);
+                .getSubdomain(ClassGenerationAction.class);
 
         PreferenceDetail detail = generatorPrefs.getDetail(
                 GeneralPreferences.ENCODING_PREFERENCE,

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java Tue Dec  4 14:23:44 2007
@@ -23,7 +23,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.cayenne.gen.DefaultClassGenerator;
+import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.pref.PreferenceDetail;
 import org.apache.cayenne.swing.BindingBuilder;
@@ -108,7 +108,7 @@
         return (GeneratorController) controllers.get(name);
     }
 
-    public DefaultClassGenerator getGenerator() {
+    public ClassGenerationAction getGenerator() {
         GeneratorController modeController = getGeneratorController();
         return (modeController != null) ? modeController.createGenerator() : null;
     }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java Tue Dec  4 14:23:44 2007
@@ -21,6 +21,7 @@
 
 import java.awt.Component;
 
+import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
 import org.apache.cayenne.swing.BindingBuilder;
 
@@ -58,5 +59,10 @@
 
     public Component getView() {
         return view;
+    }
+    
+    @Override
+    protected ClassGenerationAction newGenerator() {
+        return new ClassGenerationAction();
     }
 }

Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java?rev=601116&r1=601115&r2=601116&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/pref/GeneralPreferences.java Tue Dec  4 14:23:44 2007
@@ -21,7 +21,7 @@
 
 import java.awt.Component;
 
-import org.apache.cayenne.gen.DefaultClassGenerator;
+import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.pref.CayennePreferenceEditor;
 import org.apache.cayenne.pref.CayennePreferenceService;
@@ -71,7 +71,7 @@
     protected void initBindings() {
         // init model objects
         Domain classGeneratorDomain = editor.editableInstance(getApplication()
-                .getPreferenceDomain()).getSubdomain(DefaultClassGenerator.class);
+                .getPreferenceDomain()).getSubdomain(ClassGenerationAction.class);
         this.classGeneratorPreferences = classGeneratorDomain
                 .getDetail(ENCODING_PREFERENCE, true);