CAY-2758 refactoring for extended TemplateType
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 f9d316f..c878337 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
@@ -28,6 +28,7 @@
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
+import org.apache.cayenne.gen.TemplateType;
 import org.apache.cayenne.map.DataMap;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.types.Path;
@@ -198,13 +199,13 @@
         cgenConfiguration.setExternalToolConfig(externaltoolconfig != null ? externaltoolconfig : cgenConfiguration.getExternalToolConfig());
         if(!cgenConfiguration.isMakePairs()) {
             if(template == null) {
-                cgenConfiguration.setTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot());
             }
             if(embeddabletemplate == null) {
-                cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setEmbeddableTemplate(TemplateType.EMBEDDABLE_SINGLE_CLASS.pathFromSourceRoot());
             }
             if(datamaptemplate == null) {
-                cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setDataMapTemplate(TemplateType.DATAMAP_SINGLE_CLASS.pathFromSourceRoot());
             }
         }
         return cgenConfiguration;
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 af40627..7f86a0c 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
@@ -107,13 +107,13 @@
         this.excludeEmbeddableArtifacts = new ArrayList<>();
         this.artifactsGenerationMode = ArtifactsGenerationMode.ENTITY;
 
-        this.template = ClassGenerationAction.SUBCLASS_TEMPLATE;
-        this.superTemplate = ClassGenerationAction.SUPERCLASS_TEMPLATE;
-        this.dataMapTemplate = ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE;
-        this.dataMapSuperTemplate = ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE;
+        this.template = TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot();
+        this.superTemplate = TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot();
+        this.dataMapTemplate = TemplateType.DATAMAP_SUBCLASS.pathFromSourceRoot();
+        this.dataMapSuperTemplate = TemplateType.DATAMAP_SUPERCLASS.pathFromSourceRoot();
 
-        this.embeddableTemplate = ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE;
-        this.embeddableSuperTemplate = ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE;
+        this.embeddableTemplate = TemplateType.EMBEDDABLE_SUBCLASS.pathFromSourceRoot();
+        this.embeddableSuperTemplate = TemplateType.EMBEDDABLE_SUPERCLASS.pathFromSourceRoot();
     }
 
     public void resetCollections() {
@@ -440,8 +440,8 @@
                 && !createPKProperties
                 && !createPropertyNames
                 && "*.java".equals(outputPattern)
-                && template.equals(ClassGenerationAction.SUBCLASS_TEMPLATE)
-                && superTemplate.equals(ClassGenerationAction.SUPERCLASS_TEMPLATE)
+                && template.equals(TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot())
+                && superTemplate.equals(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot())
                 && (superPkg == null || superPkg.isEmpty())
                 && (externalToolConfig == null || externalToolConfig.isEmpty());
     }
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 7520304..8a5ca11 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
@@ -48,18 +48,6 @@
 
 public class ClassGenerationAction {
 
-	public static final String SINGLE_CLASS_TEMPLATE = TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot();
-	public static final String SUBCLASS_TEMPLATE = TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot();
-	public static final String SUPERCLASS_TEMPLATE = TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot();
-
-	public static final String EMBEDDABLE_SINGLE_CLASS_TEMPLATE = TemplateType.EMBEDDABLE_SINGLE_CLASS.pathFromSourceRoot();
-	public static final String EMBEDDABLE_SUBCLASS_TEMPLATE = TemplateType.EMBEDDABLE_SUBCLASS.pathFromSourceRoot();
-	public static final String EMBEDDABLE_SUPERCLASS_TEMPLATE = TemplateType.EMBEDDABLE_SUPERCLASS.pathFromSourceRoot();
-
-	public static final String DATAMAP_SINGLE_CLASS_TEMPLATE = TemplateType.DATAMAP_SINGLE_CLASS.pathFromSourceRoot();
-	public static final String DATAMAP_SUBCLASS_TEMPLATE = TemplateType.DATAMAP_SUBCLASS.pathFromSourceRoot();
-	public static final String DATAMAP_SUPERCLASS_TEMPLATE = TemplateType.DATAMAP_SUPERCLASS.pathFromSourceRoot();
-
 	public static final String SUPERCLASS_PREFIX = "_";
 	private static final String WILDCARD = "*";
 
@@ -104,30 +92,6 @@
 		this.templateCache = new HashMap<>(5);
 	}
 
-	public String defaultTemplateName(TemplateType type) {
-		switch (type) {
-			case ENTITY_SINGLE_CLASS:
-				return SINGLE_CLASS_TEMPLATE;
-			case ENTITY_SUBCLASS:
-				return SUBCLASS_TEMPLATE;
-			case ENTITY_SUPERCLASS:
-				return SUPERCLASS_TEMPLATE;
-			case EMBEDDABLE_SUBCLASS:
-				return EMBEDDABLE_SUBCLASS_TEMPLATE;
-			case EMBEDDABLE_SUPERCLASS:
-				return EMBEDDABLE_SUPERCLASS_TEMPLATE;
-			case EMBEDDABLE_SINGLE_CLASS:
-				return EMBEDDABLE_SINGLE_CLASS_TEMPLATE;
-			case DATAMAP_SINGLE_CLASS:
-				return DATAMAP_SINGLE_CLASS_TEMPLATE;
-			case DATAMAP_SUPERCLASS:
-				return DATAMAP_SUPERCLASS_TEMPLATE;
-			case DATAMAP_SUBCLASS:
-				return DATAMAP_SUBCLASS_TEMPLATE;
-			default:
-				throw new IllegalArgumentException("Invalid template type: " + type);
-		}
-	}
 
 	public String customTemplateName(TemplateType type) {
 		switch (type) {
@@ -295,7 +259,7 @@
 
 		String templateName = customTemplateName(type);
 		if (templateName == null) {
-			templateName = defaultTemplateName(type);
+			templateName = type.pathFromSourceRoot();
 		}
 
 		// Velocity < 1.5 has some memory problems, so we will create a VelocityEngine every time,
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SingleClassGenerationTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SingleClassGenerationTest.java
index 8bb66df..2fe7a2b 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SingleClassGenerationTest.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SingleClassGenerationTest.java
@@ -47,7 +47,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot(), context);
         assertFalse(res.contains("org.apache.cayenne.exp.property.NumericProperty"));
         assertFalse(res.contains("org.apache.cayenne.exp.property.ListProperty"));
     }
@@ -68,7 +68,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot(), context);
         assertTrue(res.contains("org.apache.cayenne.exp.property.NumericProperty"));
         assertFalse(res.contains("org.apache.cayenne.exp.property.ListProperty"));
     }
@@ -88,7 +88,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot(), context);
         assertFalse(res.contains("org.apache.cayenne.exp.property.NumericProperty"));
         assertTrue(res.contains("org.apache.cayenne.exp.property.EntityProperty"));
     }
@@ -113,7 +113,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot(), context);
         assertTrue(res.contains("org.apache.cayenne.exp.property.NumericProperty"));
         assertTrue(res.contains("org.apache.cayenne.exp.property.EntityProperty"));
     }
diff --git a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SuperClassGenerationTest.java b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SuperClassGenerationTest.java
index 295ec3a..94999da 100644
--- a/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SuperClassGenerationTest.java
+++ b/cayenne-cgen/src/test/java/org/apache/cayenne/gen/SuperClassGenerationTest.java
@@ -50,7 +50,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot(), context);
         assertFalse(res.contains(NumericProperty.class.getName()));
         assertFalse(res.contains(ListProperty.class.getName()));
     }
@@ -71,7 +71,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot(), context);
         assertTrue(res.contains(NumericProperty.class.getName()));
         assertFalse(res.contains(ListProperty.class.getName()));
     }
@@ -91,7 +91,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot(), context);
         assertFalse(res.contains(NumericProperty.class.getName()));
         assertTrue(res.contains(EntityProperty.class.getName()));
     }
@@ -117,7 +117,7 @@
                 getInjector().getInstance(ToolsUtilsFactory.class)
                         .createPropertyUtils(logger, importUtils));
 
-        String res = renderTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE, context);
+        String res = renderTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot(), context);
         assertTrue(res.contains(NumericProperty.class.getName()));
         assertTrue(res.contains(EntityProperty.class.getName()));
     }
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 43de453..58dba0f 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
@@ -28,6 +28,7 @@
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
+import org.apache.cayenne.gen.TemplateType;
 import org.apache.cayenne.map.DataMap;
 import org.gradle.api.Action;
 import org.gradle.api.GradleException;
@@ -359,13 +360,13 @@
         cgenConfiguration.setExternalToolConfig(externalToolConfig != null ? externalToolConfig : cgenConfiguration.getExternalToolConfig());
         if(!cgenConfiguration.isMakePairs()) {
             if(template == null) {
-                cgenConfiguration.setTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot());
             }
             if(embeddableTemplate == null) {
-                cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setEmbeddableTemplate(TemplateType.EMBEDDABLE_SINGLE_CLASS.pathFromSourceRoot());
             }
             if(dataMapTemplate == null) {
-                cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setDataMapTemplate(TemplateType.DATAMAP_SINGLE_CLASS.pathFromSourceRoot());
             }
         }
         return cgenConfiguration;
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 68283df..c434f10 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
@@ -29,6 +29,7 @@
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.gen.ClassGenerationActionFactory;
+import org.apache.cayenne.gen.TemplateType;
 import org.apache.cayenne.map.DataMap;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -368,13 +369,13 @@
 		cgenConfiguration.setExternalToolConfig(externalToolConfig != null ? externalToolConfig : cgenConfiguration.getExternalToolConfig());
 		if(!cgenConfiguration.isMakePairs()) {
 			if(template == null) {
-				cgenConfiguration.setTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
+				cgenConfiguration.setTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot());
 			}
 			if(embeddableTemplate == null) {
-				cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
+				cgenConfiguration.setEmbeddableTemplate(TemplateType.EMBEDDABLE_SINGLE_CLASS.pathFromSourceRoot());
 			}
 			if(dataMapTemplate == null) {
-				cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+				cgenConfiguration.setDataMapTemplate(TemplateType.DATAMAP_SINGLE_CLASS.pathFromSourceRoot());
 			}
 		}
 		return cgenConfiguration;
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
index 8a14842..a370162 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/cgen/TemplateDialog.java
@@ -20,6 +20,7 @@
 
 import org.apache.cayenne.gen.CgenConfiguration;
 import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.gen.TemplateType;
 import org.apache.cayenne.modeler.editor.cgen.StandardModeController;
 import org.apache.cayenne.modeler.util.CayenneController;
 
@@ -72,10 +73,10 @@
     private void initListeners() {
         view.getUseDefault().addActionListener(action -> {
             if(template != null) {
-                cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
+                cgenConfiguration.setTemplate(TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot());
             }
             if(superTemplate != null) {
-                cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+                cgenConfiguration.setSuperTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot());
             }
             view.dispose();
         });
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
index 797be9d..7c3c897 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModeController.java
@@ -60,13 +60,13 @@
         this.view.getPairs().addActionListener(val -> {
             cgenConfiguration.setMakePairs(view.getPairs().isSelected());
             if (!view.getPairs().isSelected()) {
-                cgenConfiguration.setTemplate(ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
-                cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
-                cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
+                cgenConfiguration.setTemplate(TemplateType.ENTITY_SINGLE_CLASS.pathFromSourceRoot());
+                cgenConfiguration.setEmbeddableTemplate(TemplateType.EMBEDDABLE_SINGLE_CLASS.pathFromSourceRoot());
+                cgenConfiguration.setDataMapTemplate(TemplateType.DATAMAP_SINGLE_CLASS.pathFromSourceRoot());
             } else {
-                cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
-                cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
-                cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+                cgenConfiguration.setTemplate(TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot());
+                cgenConfiguration.setEmbeddableTemplate(TemplateType.EMBEDDABLE_SUBCLASS.pathFromSourceRoot());
+                cgenConfiguration.setDataMapTemplate(TemplateType.DATAMAP_SUBCLASS.pathFromSourceRoot());
             }
             initForm(cgenConfiguration);
             getParentController().checkCgenConfigDirty();
@@ -105,8 +105,8 @@
 
     @Override
     public void updateConfiguration(CgenConfiguration cgenConfiguration) {
-        cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
-        cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+        cgenConfiguration.setTemplate(TemplateType.ENTITY_SUBCLASS.pathFromSourceRoot());
+        cgenConfiguration.setSuperTemplate(TemplateType.ENTITY_SUPERCLASS.pathFromSourceRoot());
     }