cayenne-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From abulat...@apache.org
Subject [cayenne] branch STABLE-4.1 updated: CAY-2580 Cgen: Can't use custom templates for client mode
Date Wed, 12 Jun 2019 13:08:08 GMT
This is an automated email from the ASF dual-hosted git repository.

abulatski pushed a commit to branch STABLE-4.1
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/STABLE-4.1 by this push:
     new a500e56  CAY-2580 Cgen: Can't use custom templates for client mode
a500e56 is described below

commit a500e564c53349097a93fd9cb4c39d8362c51d46
Author: Arseni Bulatski <ancarseni@gmail.com>
AuthorDate: Wed Jun 12 14:09:08 2019 +0300

    CAY-2580 Cgen: Can't use custom templates for client mode
    
    (cherry picked from commit d0df378a18440349555a565432810077a411eb82)
---
 RELEASE-NOTES.txt                                  |  1 +
 .../apache/cayenne/tools/CayenneGeneratorTask.java | 14 +++----
 .../org/apache/cayenne/gen/CgenConfiguration.java  | 35 +++++++++++-----
 .../apache/cayenne/gen/ClassGenerationAction.java  | 21 +++++-----
 .../cayenne/gen/ClientClassGenerationAction.java   | 18 ++++----
 .../apache/cayenne/gen/xml/CgenConfigHandler.java  |  2 +-
 .../cayenne/gen/ClassGenerationActionTest.java     | 27 ++++++------
 .../java/org/apache/cayenne/tools/CgenTask.java    | 11 ++---
 .../apache/cayenne/tools/CayenneGeneratorMojo.java | 14 +++----
 .../cayenne/modeler/CodeTemplateManager.java       | 39 +++++++++++------
 .../editor/cgen/CodeGeneratorController.java       | 36 ++++++++--------
 .../editor/cgen/CodeGeneratorControllerBase.java   | 34 +++++++--------
 .../modeler/editor/cgen/CustomModeController.java  | 49 ++++++++++++++++++----
 .../modeler/editor/cgen/CustomModePanel.java       |  9 ++++
 .../editor/cgen/domain/CgenTabController.java      |  7 ++--
 15 files changed, 194 insertions(+), 123 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 2f397d4..4e8935c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -16,6 +16,7 @@ Bug Fixes:
 
 CAY-2553 Wrong disjoint prefetch query qualifier
 CAY-2573 DI field injection is triggered when creating sql Driver
+CAY-2580 Cgen: Can't use custom templates for client mode
 CAY-2582 Double insert of manyToMany relationship mapped to Set
 CAY-2584 Crypto: can't use ColumnSelect with encrypted columns
 
diff --git a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
index f8b43d5..cd8920b 100644
--- a/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
+++ b/cayenne-ant/src/main/java/org/apache/cayenne/tools/CayenneGeneratorTask.java
@@ -18,6 +18,8 @@
  ****************************************************************/
 package org.apache.cayenne.tools;
 
+import java.io.File;
+
 import foundrylogic.vpp.VPPConfig;
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
 import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
@@ -35,8 +37,6 @@ import org.apache.tools.ant.types.Path;
 import org.apache.velocity.VelocityContext;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-
 /**
  * An Ant task to perform class generation based on CayenneDataMap.
  * 
@@ -144,8 +144,9 @@ public class CayenneGeneratorTask extends CayenneTask {
 
     private ClassGenerationAction createGenerator(DataMap dataMap) {
         CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
-        ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new
ClientClassGenerationAction(cgenConfiguration) :
-                new ClassGenerationAction(cgenConfiguration);
+        ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new
ClientClassGenerationAction() :
+                new ClassGenerationAction();
+        classGenerationAction.setCgenConfiguration(cgenConfiguration);
         injector.injectMembers(classGenerationAction);
 
         return classGenerationAction;
@@ -170,14 +171,14 @@ public class CayenneGeneratorTask extends CayenneTask {
             return cgenConfiguration;
         } else {
             logger.info("Using default cgen config.");
-            cgenConfiguration = new CgenConfiguration();
+            cgenConfiguration = new CgenConfiguration(false);
             cgenConfiguration.setDataMap(dataMap);
             return cgenConfiguration;
         }
     }
 
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
-        CgenConfiguration cgenConfiguration = new CgenConfiguration();
+        CgenConfiguration cgenConfiguration = new CgenConfiguration(client != null ? client
: false);
         cgenConfiguration.setDataMap(dataMap);
         cgenConfiguration.setRelPath(destDir != null ? destDir.toPath() : cgenConfiguration.getRelPath());
         cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
@@ -198,7 +199,6 @@ public class CayenneGeneratorTask extends CayenneTask {
         cgenConfiguration.setQueryTemplate(querytemplate != null ? querytemplate : cgenConfiguration.getQueryTemplate());
         cgenConfiguration.setQuerySuperTemplate(querysupertemplate != null ? querysupertemplate
: cgenConfiguration.getQuerySuperTemplate());
         cgenConfiguration.setCreatePKProperties(createpkproperties != null ? createpkproperties
: cgenConfiguration.isCreatePKProperties());
-        cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
         if(!cgenConfiguration.isMakePairs()) {
             if(template == null) {
                 cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE
: ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
index e03598e..6a6f262 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/CgenConfiguration.java
@@ -19,6 +19,16 @@
 
 package org.apache.cayenne.gen;
 
+import java.io.Serializable;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
 import org.apache.cayenne.gen.xml.CgenExtension;
 import org.apache.cayenne.map.DataMap;
@@ -27,12 +37,6 @@ import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.util.XMLEncoder;
 import org.apache.cayenne.util.XMLSerializable;
 
-import java.io.Serializable;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.*;
-import java.util.stream.Collectors;
-
 /**
  * Used to keep config of class generation action.
  * Previously was the part of ClassGeneretionAction class.
@@ -77,7 +81,7 @@ public class CgenConfiguration implements Serializable, XMLSerializable
{
 
     private boolean client;
 
-    public CgenConfiguration() {
+    public CgenConfiguration(boolean client) {
         this.outputPattern = "*.java";
         this.timestamp = 0L;
         this.usePkgPath = true;
@@ -91,12 +95,21 @@ public class CgenConfiguration implements Serializable, XMLSerializable
{
         this.excludeEmbeddableArtifacts = new ArrayList<>();
         this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
 
-        this.template = ClassGenerationAction.SUBCLASS_TEMPLATE;
-        this.superTemplate = ClassGenerationAction.SUPERCLASS_TEMPLATE;
+        this.client = client;
+
+        if(!client) {
+            this.template = ClassGenerationAction.SUBCLASS_TEMPLATE;
+            this.superTemplate = ClassGenerationAction.SUPERCLASS_TEMPLATE;
+            this.queryTemplate = ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
+            this.querySuperTemplate = ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
+        } else {
+            this.template = ClientClassGenerationAction.SUBCLASS_TEMPLATE;
+            this.superTemplate = ClientClassGenerationAction.SUPERCLASS_TEMPLATE;
+            this.queryTemplate = ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE;
+            this.querySuperTemplate = ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE;
+        }
         this.embeddableTemplate = ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
         this.embeddableSuperTemplate = ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
-        this.queryTemplate = ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
-        this.querySuperTemplate = ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
     }
 
     public void resetCollections(){
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index 52611e9..c0cfd32 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -19,15 +19,6 @@
 
 package org.apache.cayenne.gen;
 
-import org.apache.cayenne.CayenneRuntimeException;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.VelocityEngine;
-import org.slf4j.Logger;
-
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -42,6 +33,15 @@ import java.util.Objects;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
+import org.apache.cayenne.CayenneRuntimeException;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.velocity.Template;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.slf4j.Logger;
+
 public class ClassGenerationAction {
 
 	private static final String TEMPLATES_DIR_NAME = "templates/v4_1/";
@@ -71,10 +71,9 @@ public class ClassGenerationAction {
     protected VelocityContext context;
     protected Map<String, Template> templateCache;
 
-	public ClassGenerationAction(CgenConfiguration cgenConfiguration) {
+	public ClassGenerationAction() {
 		this.context = new VelocityContext();
 		this.templateCache = new HashMap<>(5);
-		this.cgenConfiguration = cgenConfiguration;
 	}
 
 	public String defaultTemplateName(TemplateType type) {
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
index b823c85..0559f69 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
@@ -19,12 +19,12 @@
 
 package org.apache.cayenne.gen;
 
+import java.util.Collection;
+
 import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.QueryDescriptor;
 
-import java.util.Collection;
-
 /**
  * @since 3.0
  */
@@ -41,12 +41,8 @@ public class ClientClassGenerationAction extends ClassGenerationAction
{
 
     public static final String CLIENT_SUPERCLASS_PREFIX = "_Client";
 
-    public ClientClassGenerationAction(CgenConfiguration cgenConfiguration) {
-        super(cgenConfiguration);
-        cgenConfiguration.setTemplate(SUBCLASS_TEMPLATE);
-        cgenConfiguration.setSuperTemplate(SUPERCLASS_TEMPLATE);
-        cgenConfiguration.setQueryTemplate(DMAP_SUBCLASS_TEMPLATE);
-        cgenConfiguration.setQuerySuperTemplate(DMAP_SUPERCLASS_TEMPLATE);
+    public ClientClassGenerationAction() {
+        super();
     }
 
     @Override
@@ -103,4 +99,10 @@ public class ClientClassGenerationAction extends ClassGenerationAction
{
             }
         }
     }
+
+    public void setCgenConfiguration(CgenConfiguration cgenConfiguration) {
+        super.setCgenConfiguration(cgenConfiguration);
+        cgenConfiguration.setQueryTemplate(DMAP_SUBCLASS_TEMPLATE);
+        cgenConfiguration.setQuerySuperTemplate(DMAP_SUPERCLASS_TEMPLATE);
+    }
 }
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
index 612ffb4..4d2f8e4 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/xml/CgenConfigHandler.java
@@ -61,7 +61,7 @@ public class CgenConfigHandler extends NamespaceAwareNestedTagHandler{
         super(parentHandler);
         this.metaData = metaData;
         this.targetNamespace = CgenExtension.NAMESPACE;
-        this.configuration = new CgenConfiguration();
+        this.configuration = new CgenConfiguration(false);
     }
 
     @Override
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
index 89dfaaa..f46e2d3 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/ClassGenerationActionTest.java
@@ -19,6 +19,13 @@
 
 package org.apache.cayenne.gen;
 
+import java.io.File;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
 import org.apache.cayenne.map.CallbackDescriptor;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.ObjAttribute;
@@ -29,13 +36,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.io.File;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -51,10 +51,10 @@ public class ClassGenerationActionTest {
 	protected CgenConfiguration cgenConfiguration;
 
 	@Before
-	public void setUp() throws Exception {
+	public void setUp() {
 		writers = new ArrayList<>(3);
-		cgenConfiguration = new CgenConfiguration();
-		action = new ClassGenerationAction(cgenConfiguration) {
+		cgenConfiguration = new CgenConfiguration(false);
+		action = new ClassGenerationAction() {
 
 			@Override
 			protected Writer openWriter(TemplateType templateType) throws Exception {
@@ -63,6 +63,7 @@ public class ClassGenerationActionTest {
 				return writer;
 			}
 		};
+		action.setCgenConfiguration(cgenConfiguration);
 	}
 
 	@After
@@ -216,16 +217,16 @@ public class ClassGenerationActionTest {
 
 		if (isClient) {
 
-			action = new ClientClassGenerationAction(cgenConfiguration) {
+			action = new ClientClassGenerationAction() {
 				@Override
-				protected Writer openWriter(TemplateType templateType) throws Exception {
+				protected Writer openWriter(TemplateType templateType) {
 					StringWriter writer = new StringWriter();
 					writers.add(writer);
 					return writer;
 				}
 
 			};
-
+			action.setCgenConfiguration(cgenConfiguration);
 		}
 
 		cgenConfiguration.setMakePairs(true);
diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
index 234030f..41bd141 100644
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
+++ b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/CgenTask.java
@@ -206,8 +206,10 @@ public class CgenTask extends BaseCayenneTask {
 
     ClassGenerationAction createGenerator(DataMap dataMap) {
         CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
-        return cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration)
:
-                new ClassGenerationAction(cgenConfiguration);
+        ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new
ClientClassGenerationAction() :
+                new ClassGenerationAction();
+        classGenerationAction.setCgenConfiguration(cgenConfiguration);
+        return classGenerationAction;
     }
 
     CgenConfiguration buildConfiguration(DataMap dataMap) {
@@ -222,7 +224,7 @@ public class CgenTask extends BaseCayenneTask {
             return cgenConfiguration;
         } else {
             getLogger().info("Using default cgen config.");
-            cgenConfiguration = new CgenConfiguration();
+            cgenConfiguration = new CgenConfiguration(false);
             cgenConfiguration.setRelPath(getDestDirFile().getPath());
             cgenConfiguration.setDataMap(dataMap);
             return cgenConfiguration;
@@ -230,7 +232,7 @@ public class CgenTask extends BaseCayenneTask {
     }
 
     private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
-        CgenConfiguration cgenConfiguration = new CgenConfiguration();
+        CgenConfiguration cgenConfiguration = new CgenConfiguration(client != null ? client
: false);
         cgenConfiguration.setDataMap(dataMap);
         cgenConfiguration.setRelPath(getDestDirFile() != null ? getDestDirFile().toPath()
: cgenConfiguration.getRelPath());
         cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
@@ -251,7 +253,6 @@ public class CgenTask extends BaseCayenneTask {
         cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
         cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate
: cgenConfiguration.getQuerySuperTemplate());
         cgenConfiguration.setCreatePKProperties(createPKProperties != null ? createPKProperties
: cgenConfiguration.isCreatePKProperties());
-        cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
         if(!cgenConfiguration.isMakePairs()) {
             if(template == null) {
                 cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE
: ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
diff --git a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
index 74f92ce..f472c7e 100644
--- a/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
+++ b/maven-plugins/cayenne-maven-plugin/src/main/java/org/apache/cayenne/tools/CayenneGeneratorMojo.java
@@ -19,6 +19,8 @@
 
 package org.apache.cayenne.tools;
 
+import java.io.File;
+
 import org.apache.cayenne.configuration.xml.DataChannelMetaData;
 import org.apache.cayenne.dbsync.filter.NamePatternMatcher;
 import org.apache.cayenne.dbsync.reverse.configuration.ToolsModule;
@@ -39,8 +41,6 @@ import org.apache.maven.plugins.annotations.Parameter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-
 /**
  * Maven mojo to perform class generation from data cgenConfiguration. This class is an Maven
  * adapter to DefaultClassGenerator class.
@@ -305,8 +305,9 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 	 */
 	private ClassGenerationAction createGenerator(DataMap dataMap) {
 		CgenConfiguration cgenConfiguration = buildConfiguration(dataMap);
-		ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction(cgenConfiguration)
:
-				new ClassGenerationAction(cgenConfiguration);
+		ClassGenerationAction classGenerationAction = cgenConfiguration.isClient() ? new ClientClassGenerationAction()
:
+				new ClassGenerationAction();
+		classGenerationAction.setCgenConfiguration(cgenConfiguration);
 		injector.injectMembers(classGenerationAction);
 
 		return classGenerationAction;
@@ -323,7 +324,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 			return cgenConfiguration;
 		} else {
 			logger.info("Using default cgen config.");
-			cgenConfiguration = new CgenConfiguration();
+			cgenConfiguration = new CgenConfiguration(false);
 			cgenConfiguration.setDataMap(dataMap);
 			cgenConfiguration.setRelPath(defaultDir.getPath());
 			return cgenConfiguration;
@@ -331,7 +332,7 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 	}
 
 	private CgenConfiguration cgenConfigFromPom(DataMap dataMap){
-		CgenConfiguration cgenConfiguration = new CgenConfiguration();
+		CgenConfiguration cgenConfiguration = new CgenConfiguration(client != null ? client : false);
 		cgenConfiguration.setDataMap(dataMap);
 		cgenConfiguration.setRelPath(destDir != null ? destDir.getPath() : defaultDir.getPath());
 		cgenConfiguration.setEncoding(encoding != null ? encoding : cgenConfiguration.getEncoding());
@@ -352,7 +353,6 @@ public class CayenneGeneratorMojo extends AbstractMojo {
 		cgenConfiguration.setQueryTemplate(queryTemplate != null ? queryTemplate : cgenConfiguration.getQueryTemplate());
 		cgenConfiguration.setQuerySuperTemplate(querySuperTemplate != null ? querySuperTemplate
: cgenConfiguration.getQuerySuperTemplate());
 		cgenConfiguration.setCreatePKProperties(createPKProperties != null ? createPKProperties
: cgenConfiguration.isCreatePKProperties());
-		cgenConfiguration.setClient(client != null ? client : cgenConfiguration.isClient());
 		if(!cgenConfiguration.isMakePairs()) {
 			if(template == null) {
 				cgenConfiguration.setTemplate(cgenConfiguration.isClient() ? ClientClassGenerationAction.SINGLE_CLASS_TEMPLATE
: ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index 76dd2b2..4f8f786 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -19,13 +19,6 @@
 
 package org.apache.cayenne.modeler;
 
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.gen.ClientClassGenerationAction;
-import org.apache.cayenne.modeler.pref.FSPath;
-import org.apache.cayenne.resource.Resource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
@@ -35,6 +28,13 @@ import java.util.Map;
 import java.util.prefs.BackingStoreException;
 import java.util.prefs.Preferences;
 
+import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
+import org.apache.cayenne.modeler.pref.FSPath;
+import org.apache.cayenne.resource.Resource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 /**
  * Manages code generation templates.
  */
@@ -58,6 +58,8 @@ public class CodeTemplateManager {
 
 	private List<String> standardSubclassTemplates;
 	private List<String> standardSuperclassTemplates;
+	private List<String> standardClientSubclassTemplates;
+	private List<String> standardClientSuperclassTemplates;
 	private Map<String, String> customTemplates;
 	private Map<String, String> reverseCustomTemplate;
 	private Map<String, String> standardTemplates;
@@ -77,15 +79,18 @@ public class CodeTemplateManager {
 	}
 
 	public CodeTemplateManager(Application application) {
-		standardSuperclassTemplates = new ArrayList<>(3);
-
+		standardSuperclassTemplates = new ArrayList<>(2);
 		standardSuperclassTemplates.add(STANDARD_SERVER_SUPERCLASS);
-		standardSuperclassTemplates.add(STANDARD_CLIENT_SUPERCLASS);
 
-		standardSubclassTemplates = new ArrayList<>(3);
-		standardSubclassTemplates.add(STANDARD_SERVER_SUBCLASS);
-		standardSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
+		standardClientSuperclassTemplates = new ArrayList<>();
+		standardClientSuperclassTemplates.add(STANDARD_CLIENT_SUPERCLASS);
+
+		standardSubclassTemplates = new ArrayList<>(2);
 		standardSubclassTemplates.add(SINGLE_SERVER_CLASS);
+		standardSubclassTemplates.add(STANDARD_SERVER_SUBCLASS);
+
+		standardClientSubclassTemplates = new ArrayList<>();
+		standardClientSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
 
 		standartEmbeddableTemplates = new ArrayList<>();
 		standartEmbeddableTemplates.add(SINGLE_EMBEDDABLE_CLASS);
@@ -190,10 +195,18 @@ public class CodeTemplateManager {
 		return standardSubclassTemplates;
 	}
 
+	public List<String> getStandardClientSubclassTemplates() {
+		return standardClientSubclassTemplates;
+	}
+
 	public List<String> getStandardSuperclassTemplates() {
 		return standardSuperclassTemplates;
 	}
 
+	public List<String> getStandardClientSuperclassTemplates() {
+		return standardClientSuperclassTemplates;
+	}
+
 	public List<String> getStandartEmbeddableTemplates() {
 		return standartEmbeddableTemplates;
 	}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
index c93fbc4..9a81cb6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorController.java
@@ -19,8 +19,8 @@
 
 package org.apache.cayenne.modeler.editor.cgen;
 
-import javax.swing.JOptionPane;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.function.Predicate;
@@ -44,12 +44,6 @@ import org.apache.cayenne.swing.BindingBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.swing.JOptionPane;
-import java.awt.Component;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.function.Predicate;
-
 /**
  * @since 4.1
  * A controller for the class generator dialog.
@@ -80,9 +74,12 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase
impleme
         super.startup(dataMap);
         classesSelectedAction();
         CgenConfiguration cgenConfiguration = createConfiguration();
-        GeneratorController modeController = prevGeneratorController.get(dataMap) != null
? prevGeneratorController.get(dataMap) : cgenConfiguration.isClient() ?
-                generatorSelector.getClientGeneratorController() : isDefaultConfig(cgenConfiguration)
?
-                generatorSelector.getStandartController() : generatorSelector.getCustomModeController();
+        GeneratorController modeController = prevGeneratorController.get(dataMap) != null
?
+                prevGeneratorController.get(dataMap) : isDefaultConfig(cgenConfiguration)
?
+                cgenConfiguration.isClient() ? generatorSelector.getClientGeneratorController()
:
+                        generatorSelector.getStandartController() :
+                generatorSelector.getCustomModeController();
+
         prevGeneratorController.put(dataMap, modeController);
         generatorSelector.setSelectedController(modeController);
         classesSelector.startup();
@@ -91,11 +88,13 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase
impleme
     }
 
     private boolean isDefaultConfig(CgenConfiguration cgenConfiguration) {
-        return cgenConfiguration.isMakePairs() && cgenConfiguration.isUsePkgPath()
&& !cgenConfiguration.isOverwrite() &&
-                !cgenConfiguration.isCreatePKProperties() && !cgenConfiguration.isCreatePropertyNames()
&&
-                cgenConfiguration.getOutputPattern().equals("*.java") &&
-                cgenConfiguration.getTemplate().equals(ClassGenerationAction.SUBCLASS_TEMPLATE)
&&
-                cgenConfiguration.getSuperTemplate().equals(ClassGenerationAction.SUPERCLASS_TEMPLATE)
&&
+        return cgenConfiguration.isMakePairs() && cgenConfiguration.isUsePkgPath()
&&
+                !cgenConfiguration.isOverwrite() && !cgenConfiguration.isCreatePKProperties()
&&
+                !cgenConfiguration.isCreatePropertyNames() && cgenConfiguration.getOutputPattern().equals("*.java")
&&
+                (cgenConfiguration.getTemplate().equals(ClassGenerationAction.SUBCLASS_TEMPLATE)
||
+                        cgenConfiguration.getTemplate().equals(ClientClassGenerationAction.SUBCLASS_TEMPLATE))
&&
+                (cgenConfiguration.getSuperTemplate().equals(ClassGenerationAction.SUPERCLASS_TEMPLATE)
||
+                        cgenConfiguration.getSuperTemplate().equals(ClientClassGenerationAction.SUPERCLASS_TEMPLATE))
&&
                 (cgenConfiguration.getSuperPkg() == null || cgenConfiguration.getSuperPkg().isEmpty());
 
     }
@@ -145,8 +144,9 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase
impleme
     public void generateAction() {
         CgenConfiguration cgenConfiguration = createConfiguration();
         ClassGenerationAction generator = cgenConfiguration.isClient() ?
-                new ClientClassGenerationAction(cgenConfiguration) :
-                new ClassGenerationAction(cgenConfiguration);
+                new ClientClassGenerationAction() :
+                new ClassGenerationAction();
+        generator.setCgenConfiguration(cgenConfiguration);
 
         try {
             generator.prepareArtifacts();
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
index ec99134..f96972a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CodeGeneratorControllerBase.java
@@ -19,23 +19,8 @@
 
 package org.apache.cayenne.modeler.editor.cgen;
 
-import org.apache.cayenne.gen.CgenConfiguration;
-import org.apache.cayenne.map.DataMap;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.Entity;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.modeler.util.CellRenderers;
-import org.apache.cayenne.modeler.util.ModelerUtil;
-import org.apache.cayenne.validation.ValidationFailure;
-import org.apache.cayenne.validation.ValidationResult;
-
-import javax.swing.Icon;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
@@ -51,6 +36,19 @@ import java.util.function.Predicate;
 import java.util.prefs.Preferences;
 import java.util.stream.Collectors;
 
+import org.apache.cayenne.gen.CgenConfiguration;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.Embeddable;
+import org.apache.cayenne.map.Entity;
+import org.apache.cayenne.map.ObjEntity;
+import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.dialog.pref.GeneralPreferences;
+import org.apache.cayenne.modeler.util.CayenneController;
+import org.apache.cayenne.modeler.util.CellRenderers;
+import org.apache.cayenne.modeler.util.ModelerUtil;
+import org.apache.cayenne.validation.ValidationFailure;
+import org.apache.cayenne.validation.ValidationResult;
+
 /**
  * @since 4.1
  * A base superclass of a top controller for the code generator. Defines all common model
@@ -121,7 +119,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController
{
         }
 
         try {
-            cgenConfiguration = new CgenConfiguration();
+            cgenConfiguration = new CgenConfiguration(false);
             cgenConfiguration.setForce(true);
             cgenConfiguration.setDataMap(map);
 
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
index f1a8a65..497783b 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
@@ -19,8 +19,8 @@
 
 package org.apache.cayenne.modeler.editor.cgen;
 
-import javax.swing.DefaultComboBoxModel;
-import java.awt.Component;
+import javax.swing.*;
+import java.awt.*;
 import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -28,6 +28,7 @@ import java.util.List;
 
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.ClientClassGenerationAction;
 import org.apache.cayenne.modeler.CodeTemplateManager;
 import org.apache.cayenne.modeler.dialog.cgen.TemplateDialog;
 import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
@@ -57,20 +58,24 @@ public class CustomModeController extends GeneratorController {
         BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(),
this);
         builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
 
-        updateTemplates();
     }
 
     protected void updateTemplates() {
+        boolean isClient = cgenConfiguration.isClient();
         CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
 
         List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
         Collections.sort(customTemplates);
 
-        List<String> superTemplates = new ArrayList<>(templateManager.getStandardSuperclassTemplates());
+        List<String> superTemplates = isClient ?
+                new ArrayList<>(templateManager.getStandardClientSuperclassTemplates())
:
+                new ArrayList<>(templateManager.getStandardSuperclassTemplates());
         Collections.sort(superTemplates);
         superTemplates.addAll(customTemplates);
 
-        List<String> subTemplates = new ArrayList<>(templateManager.getStandardSubclassTemplates());
+        List<String> subTemplates = isClient ?
+                new ArrayList<>(templateManager.getStandardClientSubclassTemplates())
:
+                new ArrayList<>(templateManager.getStandardSubclassTemplates());
         Collections.sort(subTemplates);
         subTemplates.addAll(customTemplates);
 
@@ -167,10 +172,40 @@ public class CustomModeController extends GeneratorController {
                 getParentController().getProjectController().setDirty(true);
             }
         });
+
+        view.getClientMode().addActionListener(val -> {
+            boolean isSelected = view.getClientMode().isSelected();
+            cgenConfiguration.setClient(isSelected);
+            if(isSelected) {
+                cgenConfiguration.setTemplate(ClientClassGenerationAction.SUBCLASS_TEMPLATE);
+                cgenConfiguration.setSuperTemplate(ClientClassGenerationAction.SUPERCLASS_TEMPLATE);
+            } else {
+                cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
+                cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+            }
+            updateTemplates();
+            String templateName = getApplication().getCodeTemplateManager().getNameByPath(
+                    isSelected ?
+                            ClientClassGenerationAction.SUBCLASS_TEMPLATE :
+                            ClassGenerationAction.SUBCLASS_TEMPLATE,
+                    cgenConfiguration.getRootPath());
+            String superTemplateName = getApplication().getCodeTemplateManager().getNameByPath(
+                    isSelected ?
+                            ClientClassGenerationAction.SUBCLASS_TEMPLATE :
+                            ClassGenerationAction.SUBCLASS_TEMPLATE,
+                    cgenConfiguration.getRootPath());
+            view.getSubclassTemplate().setItem(templateName);
+            view.getSuperclassTemplate().setItem(superTemplateName);
+            if(!getParentController().isInitFromModel()) {
+                getParentController().getProjectController().setDirty(true);
+            }
+        });
     }
 
     public void initForm(CgenConfiguration cgenConfiguration){
         super.initForm(cgenConfiguration);
+        view.getClientMode().setSelected(cgenConfiguration.isClient());
+        updateTemplates();
         view.getOutputPattern().setText(cgenConfiguration.getOutputPattern());
         view.getPairs().setSelected(cgenConfiguration.isMakePairs());
         view.getUsePackagePath().setSelected(cgenConfiguration.isUsePkgPath());
@@ -184,8 +219,6 @@ public class CustomModeController extends GeneratorController {
 
     @Override
     public void updateConfiguration(CgenConfiguration cgenConfiguration) {
-        cgenConfiguration.setClient(false);
-        cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
-        cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+        // Do nothing
     }
 }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
index cb2cb25..bdba0fc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
@@ -50,6 +50,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
     private TextAdapter outputPattern;
     private JCheckBox createPropertyNames;
     private JCheckBox pkProperties;
+    private JCheckBox clientMode;
     private TextAdapter superPkg;
 
     private JButton manageTemplatesLink;
@@ -109,6 +110,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
 
         this.createPropertyNames = new JCayenneCheckBox();
         this.pkProperties = new JCayenneCheckBox();
+        this.clientMode= new JCayenneCheckBox();
         this.manageTemplatesLink = new JButton("Customize Templates...");
         this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
 
@@ -150,6 +152,9 @@ public class CustomModePanel extends GeneratorControllerPanel {
         builder.append("Create PK properties:", pkProperties);
         builder.nextLine();
 
+        builder.append("Client mode: ", clientMode);
+        builder.nextLine();
+
         builder.append("Superclass package:", superPkg.getComponent());
 
         setLayout(new BorderLayout());
@@ -198,6 +203,10 @@ public class CustomModePanel extends GeneratorControllerPanel {
         return pkProperties;
     }
 
+    public JCheckBox getClientMode() {
+        return clientMode;
+    }
+
     public TextAdapter getSuperPkg() {
         return superPkg;
     }
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
index 8abb583..ff4b53a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/domain/CgenTabController.java
@@ -62,8 +62,9 @@ public class CgenTabController extends GeneratorsTabController {
                 if(cgenConfiguration == null) {
                     cgenConfiguration = createConfiguration(dataMap);
                 }
-                ClassGenerationAction classGenerationAction = cgenConfiguration.isClient()
? new ClientClassGenerationAction(cgenConfiguration) :
-                        new ClassGenerationAction(cgenConfiguration);
+                ClassGenerationAction classGenerationAction = cgenConfiguration.isClient()
? new ClientClassGenerationAction() :
+                        new ClassGenerationAction();
+                classGenerationAction.setCgenConfiguration(cgenConfiguration);
                 classGenerationAction.prepareArtifacts();
                 classGenerationAction.execute();
             } catch (Exception e) {
@@ -78,7 +79,7 @@ public class CgenTabController extends GeneratorsTabController {
     }
 
     public CgenConfiguration createConfiguration(DataMap dataMap) {
-        CgenConfiguration cgenConfiguration = new CgenConfiguration();
+        CgenConfiguration cgenConfiguration = new CgenConfiguration(false);
         Application.getInstance().getInjector().injectMembers(cgenConfiguration);
         cgenConfiguration.setDataMap(dataMap);
         Path basePath = Paths.get(ModelerUtil.initOutputFolder());


Mime
View raw message