This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 34d417e CAY-2677 Custom Class Generation Templates for Embeddables
and DataMaps applying patch from Stefan S, see JIRA issue
34d417e is described below
commit 34d417e206a9d375cdbc6f4bc194395c2b7e1c21
Author: Nikita Timofeev <[email protected]>
AuthorDate: Tue Feb 2 17:12:45 2021 +0300
CAY-2677 Custom Class Generation Templates for Embeddables and DataMaps
applying patch from Stefan S, see JIRA issue
---
RELEASE-NOTES.txt | 1 +
.../org/apache/cayenne/gen/CgenConfiguration.java | 6 ++
.../apache/cayenne/gen/xml/CgenConfigHandler.java | 82 +++++++++++--------
.../org/apache/cayenne/schema/10/cgen.xsd | 4 +
.../cayenne/modeler/CodeTemplateManager.java | 92 +++++++++++++--------
.../modeler/editor/cgen/CustomModeController.java | 75 +++++++++++++++++
.../modeler/editor/cgen/CustomModePanel.java | 93 +++++++++++++++++++++-
7 files changed, 285 insertions(+), 68 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 3874d10..6ab024c 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -13,6 +13,7 @@ Date:
----------------------------------
Changes/New Features:
+CAY-2677 Custom Class Generation Templates for Embeddables and DataMaps
CAY-2689 ServerRuntime API: missing some variants of the
performInTransaction() method
CAY-2692 Add entity lifecycle callbacks via annotated methods
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 1912b95..9aab326 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
@@ -412,6 +412,12 @@ public class CgenConfiguration implements Serializable,
XMLSerializable {
.simpleTag("mode", this.artifactsGenerationMode.getLabel())
.simpleTag("template", this.template)
.simpleTag("superTemplate", this.superTemplate)
+ .simpleTag("template", this.template)
+ .simpleTag("superTemplate", this.superTemplate)
+ .simpleTag("embeddableTemplate", this.embeddableTemplate)
+ .simpleTag("embeddableSuperTemplate",
this.embeddableSuperTemplate)
+ .simpleTag("queryTemplate", this.queryTemplate)
+ .simpleTag("querySuperTemplate", this.querySuperTemplate)
.simpleTag("outputPattern", this.outputPattern)
.simpleTag("makePairs", Boolean.toString(this.makePairs))
.simpleTag("usePkgPath", Boolean.toString(this.usePkgPath))
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 6a80f91..aabbf2c 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
@@ -43,6 +43,10 @@ public class CgenConfigHandler extends
NamespaceAwareNestedTagHandler{
private static final String GENERATION_MODE_TAG = "mode";
private static final String SUBCLASS_TEMPLATE_TAG = "template";
private static final String SUPERCLASS_TEMPLATE_TAG = "superTemplate";
+ private static final String EMBEDDABLE_TEMPLATE_TAG = "embeddableTemplate";
+ private static final String EMBEDDABLE_SUPER_TEMPLATE_TAG =
"embeddableSuperTemplate";
+ private static final String QUERY_TEMPLATE_TAG = "queryTemplate";
+ private static final String QUERY_SUPER_TEMPLATE_TAG =
"querySuperTemplate";
private static final String OUTPUT_PATTERN_TAG = "outputPattern";
private static final String MAKE_PAIRS_TAG = "makePairs";
private static final String USE_PKG_PATH_TAG = "usePkgPath";
@@ -97,6 +101,17 @@ public class CgenConfigHandler extends
NamespaceAwareNestedTagHandler{
case SUPERCLASS_TEMPLATE_TAG:
createSuperclassTemplate(data);
break;
+ case EMBEDDABLE_TEMPLATE_TAG:
+ createEmbeddableTemplate(data);
+ break;
+ case EMBEDDABLE_SUPER_TEMPLATE_TAG:
+ createEmbeddableSuperTemplate(data);
+ case QUERY_TEMPLATE_TAG:
+ createQueryTemplate(data);
+ break;
+ case QUERY_SUPER_TEMPLATE_TAG:
+ createQuerySuperTemplate(data);
+ break;
case OUTPUT_PATTERN_TAG:
createOutputPattern(data);
break;
@@ -165,6 +180,34 @@ public class CgenConfigHandler extends
NamespaceAwareNestedTagHandler{
}
configuration.setSuperTemplate(template);
}
+
+ private void createEmbeddableTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+ configuration.setEmbeddableTemplate(template);
+ }
+
+ private void createEmbeddableSuperTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+ configuration.setEmbeddableSuperTemplate(template);
+ }
+
+ private void createQueryTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+ configuration.setQueryTemplate(template);
+ }
+
+ private void createQuerySuperTemplate(String template) {
+ if(template.trim().length() == 0) {
+ return;
+ }
+ configuration.setQuerySuperTemplate(template);
+ }
private void createOutputPattern(String pattern) {
if(pattern.trim().length() == 0) {
@@ -177,69 +220,42 @@ public class CgenConfigHandler extends
NamespaceAwareNestedTagHandler{
if (makePairs.trim().length() == 0) {
return;
}
-
- if (makePairs.equals(TRUE)) {
- configuration.setMakePairs(true);
- } else {
- configuration.setMakePairs(false);
- }
+ configuration.setMakePairs(makePairs.equals(TRUE));
}
private void createUsePkgPath(String data) {
if(data.trim().length() == 0) {
return;
}
- if(data.equals(TRUE)) {
- configuration.setUsePkgPath(true);
- } else {
- configuration.setUsePkgPath(false);
- }
+ configuration.setUsePkgPath(data.equals(TRUE));
}
private void createOverwriteSubclasses(String data) {
if(data.trim().length() == 0) {
return;
}
-
- if(data.equals(TRUE)) {
- configuration.setOverwrite(true);
- } else {
- configuration.setOverwrite(false);
- }
+ configuration.setOverwrite(data.equals(TRUE));
}
private void createPropertyNamesTag(String data) {
if(data.trim().length() == 0) {
return;
}
- if(data.equals(TRUE)) {
- configuration.setCreatePropertyNames(true);
- } else {
- configuration.setCreatePropertyNames(false);
- }
+ configuration.setCreatePropertyNames(data.equals(TRUE));
}
private void createPkPropertiesTag(String data) {
if(data.trim().length() == 0) {
return;
}
-
- if(data.equals(TRUE)) {
- configuration.setCreatePKProperties(true);
- } else {
- configuration.setCreatePKProperties(false);
- }
+ configuration.setCreatePKProperties(data.equals(TRUE));
}
private void createClient(String data) {
if(data.trim().length() == 0) {
return;
}
- if(data.equals(TRUE)) {
- configuration.setClient(true);
- } else {
- configuration.setClient(false);
- }
+ configuration.setClient(data.equals(TRUE));
}
private void createSuperPkg(String data) {
diff --git
a/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
index 4212db1..31a407d 100644
--- a/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
+++ b/cayenne-server/src/main/resources/org/apache/cayenne/schema/10/cgen.xsd
@@ -32,6 +32,10 @@
<xs:element name="mode" minOccurs="0" type="xs:string"/>
<xs:element name="template" minOccurs="0"
type="xs:string"/>
<xs:element name="superTemplate" minOccurs="0"
type="xs:string"/>
+ <xs:element name="embeddableTemplate" minOccurs="0"
type="xs:string"/>
+ <xs:element name="embeddableSuperTemplate" minOccurs="0"
type="xs:string"/>
+ <xs:element name="queryTemplate" minOccurs="0"
type="xs:string"/>
+ <xs:element name="querySuperTemplate" minOccurs="0"
type="xs:string"/>
<xs:element name="outputPattern" minOccurs="0"
type="xs:string"/>
<xs:element name="makePairs" minOccurs="0"
type="xs:boolean"/>
<xs:element name="skipRelationshipsLoading" minOccurs="0"
type="xs:boolean"/>
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 f9f6108..09ea39a 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
@@ -43,17 +43,19 @@ public class CodeTemplateManager {
public static final String STANDARD_SERVER_SUPERCLASS = "Standard
Server Superclass";
public static final String STANDARD_SERVER_SUBCLASS = "Standard Server
Subclass";
- public static final String SINGLE_SERVER_CLASS = "Single Server class";
+ public static final String SINGLE_SERVER_CLASS = "Single Server Class";
static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client
Superclass";
static final String STANDARD_CLIENT_SUBCLASS = "Standard Client
Subclass";
- private static final String STANDART_EMBEDDABLE_SUPERCLASS = "Standart
Embeddable Superclass";
- private static final String STANDART_EMBEDDABLE_SUBCLASS = "Standart
Embeddable Subclass";
- private static final String SINGLE_EMBEDDABLE_CLASS = "Single
Embeddable class";
+ private static final String STANDARD_EMBEDDABLE_SUPERCLASS = "Standard
Embeddable Superclass";
+ private static final String STANDARD_EMBEDDABLE_SUBCLASS = "Standard
Embeddable Subclass";
+ private static final String SINGLE_EMBEDDABLE_CLASS = "Single
Embeddable Class";
- private static final String STANDART_DATAMAP_SUPERCLASS = "Standart
DataMap Superclass";
- private static final String STANDART_DATAMAP_SUBCLASS = "Standart
DataMap Subclass";
- private static final String SINGLE_DATAMAP_CLASS = "Single DataMap
class";
+ private static final String STANDARD_SERVER_DATAMAP_SUPERCLASS =
"Standard Server DataMap Superclass";
+ private static final String STANDARD_SERVER_DATAMAP_SUBCLASS =
"Standard Server DataMap Subclass";
+ private static final String STANDARD_CLIENT_DATAMAP_SUPERCLASS =
"Standard Client DataMap Superclass";
+ private static final String STANDARD_CLIENT_DATAMAP_SUBCLASS =
"Standard Client DataMap Subclass";
+ private static final String SINGLE_DATAMAP_CLASS = "Single DataMap
Class";
public static final String NODE_NAME = "codeTemplateManager";
@@ -65,11 +67,13 @@ public class CodeTemplateManager {
private Map<String, String> reverseCustomTemplate;
private Map<String, String> standardTemplates;
- private List<String> standartEmbeddableTemplates;
- private List<String> standartEmbeddableSuperclassTemplates;
+ private List<String> standardEmbeddableTemplates;
+ private List<String> standardEmbeddableSuperclassTemplates;
- private List<String> standartDataMapTemplates;
- private List<String> standartDataMapSuperclassTemplates;
+ private List<String> standardServerDataMapTemplates;
+ private List<String> standardServerDataMapSuperclassTemplates;
+ private List<String> standardClientDataMapTemplates;
+ private List<String> standardClientDataMapSuperclassTemplates;
private Map<String, String> reverseStandartTemplates;
@@ -93,19 +97,25 @@ public class CodeTemplateManager {
standardClientSubclassTemplates = new ArrayList<>();
standardClientSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
- standartEmbeddableTemplates = new ArrayList<>();
- standartEmbeddableTemplates.add(SINGLE_EMBEDDABLE_CLASS);
- standartEmbeddableTemplates.add(STANDART_EMBEDDABLE_SUBCLASS);
+ standardEmbeddableTemplates = new ArrayList<>();
+ standardEmbeddableTemplates.add(STANDARD_EMBEDDABLE_SUBCLASS);
+ standardEmbeddableTemplates.add(SINGLE_EMBEDDABLE_CLASS);
- standartEmbeddableSuperclassTemplates = new ArrayList<>();
-
standartEmbeddableSuperclassTemplates.add(STANDART_EMBEDDABLE_SUPERCLASS);
+ standardEmbeddableSuperclassTemplates = new ArrayList<>();
+
standardEmbeddableSuperclassTemplates.add(STANDARD_EMBEDDABLE_SUPERCLASS);
- standartDataMapTemplates = new ArrayList<>();
- standartDataMapTemplates.add(STANDART_DATAMAP_SUBCLASS);
- standartDataMapTemplates.add(SINGLE_DATAMAP_CLASS);
+ standardServerDataMapTemplates = new ArrayList<>();
+
standardServerDataMapTemplates.add(STANDARD_SERVER_DATAMAP_SUBCLASS);
+ standardServerDataMapTemplates.add(SINGLE_DATAMAP_CLASS);
- standartDataMapSuperclassTemplates = new ArrayList<>();
-
standartDataMapSuperclassTemplates.add(STANDART_DATAMAP_SUPERCLASS);
+ standardServerDataMapSuperclassTemplates = new ArrayList<>();
+
standardServerDataMapSuperclassTemplates.add(STANDARD_SERVER_DATAMAP_SUPERCLASS);
+
+ standardClientDataMapTemplates = new ArrayList<>();
+
standardClientDataMapTemplates.add(STANDARD_CLIENT_DATAMAP_SUBCLASS);
+
+ standardClientDataMapSuperclassTemplates = new ArrayList<>();
+
standardClientDataMapSuperclassTemplates.add(STANDARD_CLIENT_DATAMAP_SUPERCLASS);
updateCustomTemplates(getTemplatePreferences(application));
reverseCustomTemplate = new HashMap<>();
@@ -120,13 +130,15 @@ public class CodeTemplateManager {
standardTemplates.put(STANDARD_CLIENT_SUBCLASS,
ClientClassGenerationAction.SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_SERVER_CLASS,
ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
- standardTemplates.put(STANDART_EMBEDDABLE_SUPERCLASS,
ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE);
- standardTemplates.put(STANDART_EMBEDDABLE_SUBCLASS,
ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_EMBEDDABLE_SUPERCLASS,
ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_EMBEDDABLE_SUBCLASS,
ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_EMBEDDABLE_CLASS,
ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE);
- standardTemplates.put(STANDART_DATAMAP_SUBCLASS,
ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_SERVER_DATAMAP_SUBCLASS,
ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_CLIENT_DATAMAP_SUBCLASS,
ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE);
standardTemplates.put(SINGLE_DATAMAP_CLASS,
ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE);
- standardTemplates.put(STANDART_DATAMAP_SUPERCLASS,
ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_SERVER_DATAMAP_SUPERCLASS,
ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE);
+ standardTemplates.put(STANDARD_CLIENT_DATAMAP_SUPERCLASS,
ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE);
reverseStandartTemplates = new HashMap<>();
reverseStandartTemplates.put(ClassGenerationAction.SUBCLASS_TEMPLATE,
STANDARD_SERVER_SUBCLASS);
@@ -135,13 +147,15 @@ public class CodeTemplateManager {
reverseStandartTemplates.put(ClientClassGenerationAction.SUPERCLASS_TEMPLATE,
STANDARD_CLIENT_SUPERCLASS);
reverseStandartTemplates.put(ClassGenerationAction.SUPERCLASS_TEMPLATE,
STANDARD_SERVER_SUPERCLASS);
-
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE,
STANDART_EMBEDDABLE_SUPERCLASS);
-
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE,
STANDART_EMBEDDABLE_SUBCLASS);
+
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUPERCLASS_TEMPLATE,
STANDARD_EMBEDDABLE_SUPERCLASS);
+
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE,
STANDARD_EMBEDDABLE_SUBCLASS);
reverseStandartTemplates.put(ClassGenerationAction.EMBEDDABLE_SINGLE_CLASS_TEMPLATE,
SINGLE_EMBEDDABLE_CLASS);
-
reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE,
STANDART_DATAMAP_SUBCLASS);
+
reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE,
STANDARD_SERVER_DATAMAP_SUBCLASS);
+
reverseStandartTemplates.put(ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE,
STANDARD_CLIENT_DATAMAP_SUBCLASS);
reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SINGLE_CLASS_TEMPLATE,
SINGLE_DATAMAP_CLASS);
-
reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE,
STANDART_DATAMAP_SUPERCLASS);
+
reverseStandartTemplates.put(ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE,
STANDARD_SERVER_DATAMAP_SUPERCLASS);
+
reverseStandartTemplates.put(ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE,
STANDARD_CLIENT_DATAMAP_SUPERCLASS);
}
/**
@@ -212,14 +226,26 @@ public class CodeTemplateManager {
}
public List<String> getStandartEmbeddableTemplates() {
- return standartEmbeddableTemplates;
+ return standardEmbeddableTemplates;
}
public List<String> getStandartEmbeddableSuperclassTemplates() {
- return standartEmbeddableSuperclassTemplates;
+ return standardEmbeddableSuperclassTemplates;
}
- public List<String> getStandartDataMapTemplates() { return
standartDataMapTemplates; }
+ public List<String> getStandartDataMapTemplates() {
+ return standardServerDataMapTemplates;
+ }
- public List<String> getStandartDataMapSuperclassTemplates() { return
standartDataMapSuperclassTemplates; }
+ public List<String> getStandartDataMapSuperclassTemplates() {
+ return standardServerDataMapSuperclassTemplates;
+ }
+
+ public List<String> getStandardClientDataMapTemplates() {
+ return standardClientDataMapTemplates;
+ }
+
+ public List<String> getStandardClientDataMapSuperclassTemplates() {
+ return standardClientDataMapSuperclassTemplates;
+ }
}
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 d051015..b6d7651 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
@@ -82,8 +82,32 @@ public class CustomModeController extends
GeneratorController {
Collections.sort(subTemplates);
subTemplates.addAll(customTemplates);
+ List<String> querySuperTemplates = isClient ?
+ new
ArrayList<>(templateManager.getStandardClientDataMapSuperclassTemplates()) :
+ new
ArrayList<>(templateManager.getStandartDataMapSuperclassTemplates());
+ Collections.sort(querySuperTemplates);
+ querySuperTemplates.addAll(customTemplates);
+
+ List<String> queryTemplates = isClient ?
+ new
ArrayList<>(templateManager.getStandardClientDataMapTemplates()) :
+ new ArrayList<>(templateManager.getStandartDataMapTemplates());
+ Collections.sort(queryTemplates);
+ queryTemplates.addAll(customTemplates);
+
+ List<String> embeddableSuperTemplates = new
ArrayList<>(templateManager.getStandartEmbeddableSuperclassTemplates());
+ Collections.sort(embeddableSuperTemplates);
+ embeddableSuperTemplates.addAll(customTemplates);
+
+ List<String> embeddableTemplates = new
ArrayList<>(templateManager.getStandartEmbeddableTemplates());
+ Collections.sort(embeddableTemplates);
+ embeddableTemplates.addAll(customTemplates);
+
this.view.getSubclassTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
this.view.getSuperclassTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
+ this.view.getQueryTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(queryTemplates.toArray(new String[0])));
+ this.view.getQuerySuperTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(querySuperTemplates.toArray(new String[0])));
+ this.view.getEmbeddableTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(embeddableTemplates.toArray(new String[0])));
+ this.view.getEmbeddableSuperTemplate().getComboBox().setModel(new
DefaultComboBoxModel<>(embeddableSuperTemplates.toArray(new String[0])));
}
public void missTemplateDialog(CgenConfiguration cgenConfiguration, String
template, String superTemplate) {
@@ -107,8 +131,22 @@ public class CustomModeController extends
GeneratorController {
cgenConfiguration.getTemplate(),
cgenConfiguration.getRootPath());
String superTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
cgenConfiguration.getSuperTemplate(),
cgenConfiguration.getRootPath());
+ String embeddableTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getEmbeddableTemplate(),
cgenConfiguration.getRootPath());
+ String embeddableSuperTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getEmbeddableSuperTemplate(),
cgenConfiguration.getRootPath());
+ String queryTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getQueryTemplate(),
cgenConfiguration.getRootPath());
+ String querySuperTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ cgenConfiguration.getQuerySuperTemplate(),
cgenConfiguration.getRootPath());
+
String path =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getTemplate())).normalize().toString();
String superPath =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getSuperTemplate())).normalize().toString();
+ String embeddableTemplatePath =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getEmbeddableTemplate())).normalize().toString();
+ String embeddableSuperTemplatePath =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getEmbeddableSuperTemplate())).normalize().toString();
+ String queryTemplatePath =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getQueryTemplate())).normalize().toString();
+ String querySuperTemplatePath =
cgenConfiguration.getRootPath().resolve(Paths.get(cgenConfiguration.getQuerySuperTemplate())).normalize().toString();
+
if(templateName == null && superTemplateName == null) {
view.getSubclassTemplate().setItem(null);
view.getSuperclassTemplate().setItem(null);
@@ -123,6 +161,27 @@ public class CustomModeController extends
GeneratorController {
view.getSubclassTemplate().setItem(templateName);
view.getSuperclassTemplate().setItem(superTemplateName);
}
+
+ if(embeddableTemplateName == null && embeddableSuperTemplateName ==
null) {
+ missTemplateDialog(cgenConfiguration, embeddableTemplatePath,
embeddableSuperTemplatePath);
+ } else if(embeddableTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, embeddableTemplatePath,
null);
+ } else if(embeddableSuperTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, null,
embeddableSuperTemplatePath);
+ }
+ view.getEmbeddableTemplate().setItem(embeddableTemplateName);
+ view.getEmbeddableSuperTemplate().setItem(embeddableSuperTemplateName);
+
+ if(queryTemplateName == null && querySuperTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, queryTemplatePath,
querySuperTemplatePath);
+ } else if(queryTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, queryTemplatePath, null);
+ } else if(querySuperTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, null,
querySuperTemplatePath);
+ }
+ view.getQueryTemplate().setItem(queryTemplateName);
+ view.getQuerySuperTemplate().setItem(querySuperTemplateName);
+
view.setDisableSuperComboBoxes(view.getPairs().isSelected());
}
@@ -168,9 +227,13 @@ public class CustomModeController extends
GeneratorController {
if(isSelected) {
cgenConfiguration.setTemplate(ClientClassGenerationAction.SUBCLASS_TEMPLATE);
cgenConfiguration.setSuperTemplate(ClientClassGenerationAction.SUPERCLASS_TEMPLATE);
+
cgenConfiguration.setQueryTemplate(ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE);
+
cgenConfiguration.setQuerySuperTemplate(ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE);
} else {
cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
+
cgenConfiguration.setQueryTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+
cgenConfiguration.setQuerySuperTemplate(ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE);
}
updateTemplates();
String templateName =
getApplication().getCodeTemplateManager().getNameByPath(
@@ -183,8 +246,20 @@ public class CustomModeController extends
GeneratorController {
ClientClassGenerationAction.SUBCLASS_TEMPLATE :
ClassGenerationAction.SUBCLASS_TEMPLATE,
cgenConfiguration.getRootPath());
+ String queryTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ isSelected ?
+
ClientClassGenerationAction.DMAP_SUBCLASS_TEMPLATE :
+
ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE,
+
cgenConfiguration.getRootPath());
+ String querySuperTemplateName =
getApplication().getCodeTemplateManager().getNameByPath(
+ isSelected ?
+
ClientClassGenerationAction.DMAP_SUPERCLASS_TEMPLATE :
+
ClassGenerationAction.DATAMAP_SUPERCLASS_TEMPLATE,
+
cgenConfiguration.getRootPath());
view.getSubclassTemplate().setItem(templateName);
view.getSuperclassTemplate().setItem(superTemplateName);
+ view.getQueryTemplate().setItem(queryTemplateName);
+ view.getQuerySuperTemplate().setItem(querySuperTemplateName);
getParentController().checkCgenConfigDirty();
});
}
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 9b7e265..8773561 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
@@ -44,6 +44,10 @@ public class CustomModePanel extends
GeneratorControllerPanel {
private ComboBoxAdapter<String> subclassTemplate;
private ComboBoxAdapter<String> superclassTemplate;
+ private ComboBoxAdapter<String> embeddableTemplate;
+ private ComboBoxAdapter<String> embeddableSuperTemplate;
+ private ComboBoxAdapter<String> queryTemplate;
+ private ComboBoxAdapter<String> querySuperTemplate;
private JCheckBox pairs;
private JCheckBox overwrite;
private JCheckBox usePackagePath;
@@ -57,6 +61,7 @@ public class CustomModePanel extends GeneratorControllerPanel
{
CustomModePanel(ProjectController projectController,
CodeGeneratorController codeGeneratorControllerBase) {
super(projectController, codeGeneratorControllerBase);
+
JComboBox<String> superclassField = new JComboBox<>();
this.superclassTemplate = new ComboBoxAdapter<String>(superclassField)
{
@Override
@@ -82,6 +87,58 @@ public class CustomModePanel extends
GeneratorControllerPanel {
}
}
};
+
+ JComboBox<String> embeddableField = new JComboBox<>();
+ this.embeddableTemplate = new ComboBoxAdapter<String>(embeddableField)
{
+ @Override
+ protected void updateModel(String item) throws
ValidationException {
+ CgenConfiguration cgenConfiguration =
getCgenByDataMap();
+
cgenConfiguration.setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+
cgenConfiguration.getDataMap().getConfigurationSource()));
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
+ }
+ };
+
+ JComboBox<String> embeddableSuperField = new JComboBox<>();
+ this.embeddableSuperTemplate = new
ComboBoxAdapter<String>(embeddableSuperField) {
+ @Override
+ protected void updateModel(String item) throws
ValidationException {
+ CgenConfiguration cgenConfiguration =
getCgenByDataMap();
+
cgenConfiguration.setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+
cgenConfiguration.getDataMap().getConfigurationSource()));
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
+ }
+ };
+
+ JComboBox<String> queryField = new JComboBox<>();
+ this.queryTemplate = new ComboBoxAdapter<String>(queryField) {
+ @Override
+ protected void updateModel(String item) throws
ValidationException {
+ CgenConfiguration cgenConfiguration =
getCgenByDataMap();
+
cgenConfiguration.setQueryTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+
cgenConfiguration.getDataMap().getConfigurationSource()));
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
+ }
+ };
+
+ JComboBox<String> querySuperField = new JComboBox<>();
+ this.querySuperTemplate = new ComboBoxAdapter<String>(querySuperField)
{
+ @Override
+ protected void updateModel(String item) throws
ValidationException {
+ CgenConfiguration cgenConfiguration =
getCgenByDataMap();
+
cgenConfiguration.setQuerySuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
+
cgenConfiguration.getDataMap().getConfigurationSource()));
+ if(!codeGeneratorControllerBase.isInitFromModel()) {
+ projectController.setDirty(true);
+ }
+ }
+ };
this.pairs = new JCayenneCheckBox();
this.overwrite = new JCayenneCheckBox();
@@ -121,7 +178,7 @@ public class CustomModePanel extends
GeneratorControllerPanel {
// assemble
FormLayout layout = new FormLayout(
- "right:74dlu, 1dlu, fill:240:grow, 1dlu, left:100dlu, 100dlu",
"");
+ "right:105dlu, 1dlu, fill:240:grow, 1dlu, left:100dlu,
100dlu", "");
DefaultFormBuilder builder = new DefaultFormBuilder(layout);
builder.setDefaultDialogBorder();
@@ -133,6 +190,18 @@ public class CustomModePanel extends
GeneratorControllerPanel {
builder.append("Superclass Template:",
superclassTemplate.getComboBox());
builder.nextLine();
+
+ builder.append("Embeddable Template:",
embeddableTemplate.getComboBox());
+ builder.nextLine();
+
+ builder.append("Embeddable Superclass Template:",
embeddableSuperTemplate.getComboBox());
+ builder.nextLine();
+
+ builder.append("DataMap Template:", queryTemplate.getComboBox());
+ builder.nextLine();
+
+ builder.append("DataMap Superclass Template:",
querySuperTemplate.getComboBox());
+ builder.nextLine();
builder.append("Output Pattern:", outputPattern.getComponent());
builder.nextLine();
@@ -167,17 +236,37 @@ public class CustomModePanel extends
GeneratorControllerPanel {
public void setDisableSuperComboBoxes(boolean val){
superclassTemplate.getComboBox().setEnabled(val);
+ embeddableSuperTemplate.getComboBox().setEnabled(val);
+ querySuperTemplate.getComboBox().setEnabled(val);
}
public JButton getManageTemplatesLink() {
return manageTemplatesLink;
}
- public ComboBoxAdapter<String> getSubclassTemplate() { return
subclassTemplate; }
+ public ComboBoxAdapter<String> getSubclassTemplate() {
+ return subclassTemplate;
+ }
public ComboBoxAdapter<String> getSuperclassTemplate() {
return superclassTemplate;
}
+
+ public ComboBoxAdapter<String> getEmbeddableTemplate() {
+ return embeddableTemplate;
+ }
+
+ public ComboBoxAdapter<String> getEmbeddableSuperTemplate() {
+ return embeddableSuperTemplate;
+ }
+
+ public ComboBoxAdapter<String> getQueryTemplate() {
+ return queryTemplate;
+ }
+
+ public ComboBoxAdapter<String> getQuerySuperTemplate() {
+ return querySuperTemplate;
+ }
public JCheckBox getOverwrite() {
return overwrite;