You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/09/02 08:05:11 UTC
[cayenne] branch master updated: CAY-2756_simplify_cgen_UI
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 bd21694cb CAY-2756_simplify_cgen_UI
new e6da55280 Merge pull request #516 from Ivan-nikitko/CAY-2756_simplify_cgen_UI
bd21694cb is described below
commit bd21694cb8ea3f956fd368eab31c915dcf75151d
Author: Ivan-nikitko <70...@users.noreply.github.com>
AuthorDate: Wed Aug 31 13:24:54 2022 +0200
CAY-2756_simplify_cgen_UI
---
.../modeler/dialog/cgen/TemplateDialog.java | 4 +-
.../editor/cgen/CodeGeneratorController.java | 65 ++---
.../modeler/editor/cgen/CustomModeController.java | 193 --------------
.../modeler/editor/cgen/CustomModePanel.java | 277 ---------------------
.../editor/cgen/GeneratorTabController.java | 106 --------
.../editor/cgen/StandardModeController.java | 193 ++++++++++++++
.../modeler/editor/cgen/StandardModePanel.java | 216 +++++++++++++++-
7 files changed, 430 insertions(+), 624 deletions(-)
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 8cbd9895c..8a1484284 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,7 +20,7 @@ package org.apache.cayenne.modeler.dialog.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.modeler.editor.cgen.CustomModeController;
+import org.apache.cayenne.modeler.editor.cgen.StandardModeController;
import org.apache.cayenne.modeler.util.CayenneController;
import javax.swing.JDialog;
@@ -80,7 +80,7 @@ public class TemplateDialog extends CayenneController {
view.dispose();
});
view.getAddTemplate().addActionListener(action -> {
- ((CustomModeController)parent).addTemplateAction(template, superTemplate);
+ ((StandardModeController)parent).addTemplateAction(template, superTemplate);
view.dispose();
});
}
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 46b837915..e8080d9fb 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,21 +19,6 @@
package org.apache.cayenne.modeler.editor.cgen;
-import javax.swing.JOptionPane;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.Set;
-import java.util.TreeSet;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.function.Predicate;
-import java.util.prefs.Preferences;
-import java.util.stream.Collectors;
-
import org.apache.cayenne.configuration.BaseConfigurationNodeVisitor;
import org.apache.cayenne.configuration.ConfigurationNode;
import org.apache.cayenne.configuration.ConfigurationNodeVisitor;
@@ -62,6 +47,21 @@ import org.apache.cayenne.tools.ToolsInjectorBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.swing.JOptionPane;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.function.Predicate;
+import java.util.prefs.Preferences;
+import java.util.stream.Collectors;
+
/**
* Main controller for the code generation UI.
*
@@ -75,18 +75,18 @@ public class CodeGeneratorController extends CayenneController implements ObjEnt
protected final SelectionModel selectionModel;
protected final CodeGeneratorPane view;
protected final ClassesTabController classesSelector;
- protected final GeneratorTabController generatorSelector;
protected final ConcurrentMap<DataMap, GeneratorController> prevGeneratorController;
+ private StandardModeController standardModeController;
private Object currentClass;
private CgenConfiguration cgenConfiguration;
private boolean initFromModel;
public CodeGeneratorController(ProjectController projectController) {
super(projectController);
+ this.standardModeController = new StandardModeController(this);
this.classesSelector = new ClassesTabController(this);
- this.generatorSelector = new GeneratorTabController(this);
- this.view = new CodeGeneratorPane(generatorSelector.getView(), classesSelector.getView());
+ this.view = new CodeGeneratorPane(standardModeController.getView(), classesSelector.getView());
this.prevGeneratorController = new ConcurrentHashMap<>();
this.projectController = projectController;
this.classes = new TreeSet<>(
@@ -101,26 +101,19 @@ public class CodeGeneratorController extends CayenneController implements ObjEnt
public void initFromModel() {
initFromModel = true;
DataMap dataMap = projectController.getCurrentDataMap();
-
prepareClasses(dataMap);
createConfiguration(dataMap);
-
- GeneratorController modeController = prevGeneratorController.get(dataMap);
- if (modeController == null) {
- if (cgenConfiguration.isDefault()) {
- modeController = generatorSelector.getStandartController();
- } else {
- modeController = generatorSelector.getCustomModeController();
- }
- }
-
- prevGeneratorController.put(dataMap, modeController);
- generatorSelector.setSelectedController(modeController);
+ configureController(standardModeController);
classesSelector.startup();
initFromModel = false;
classesSelector.validate(classes);
}
+ void configureController(GeneratorController controller) {
+ controller.updateConfiguration(cgenConfiguration);
+ controller.initForm(cgenConfiguration);
+ }
+
private void initListeners() {
projectController.addObjEntityListener(this);
projectController.addEmbeddableListener(this);
@@ -134,21 +127,13 @@ public class CodeGeneratorController extends CayenneController implements ObjEnt
protected void initBindings() {
BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
-
builder.bindToAction(view.getGenerateButton(), "generateAction()");
- builder.bindToAction(generatorSelector, "generatorSelectedAction()",
- GeneratorTabController.GENERATOR_PROPERTY);
-
generatorSelectedAction();
}
public void generatorSelectedAction() {
- GeneratorController controller = generatorSelector.getGeneratorController();
classesSelector.validate(classes);
- Predicate<ConfigurationNode> predicate = controller != null
- ? defaultPredicate
- : o -> false;
- updateSelection(predicate);
+ updateSelection(defaultPredicate);
classesSelector.classSelectedAction();
}
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
deleted file mode 100644
index 97ecb39a6..000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModeController.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import javax.swing.DefaultComboBoxModel;
-
-import org.apache.cayenne.gen.CgenConfiguration;
-import org.apache.cayenne.gen.ClassGenerationAction;
-import org.apache.cayenne.modeler.CodeTemplateManager;
-import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
-import org.apache.cayenne.swing.BindingBuilder;
-
-/**
- * @since 4.1
- * A controller for the custom generation mode.
- */
-public class CustomModeController extends GeneratorController {
-
- protected CustomModePanel view;
-
- public CustomModeController(CodeGeneratorController parent) {
- super(parent);
- bind();
- initListeners();
- }
-
- @Override
- protected void createView() {
- this.view = new CustomModePanel(getApplication().getFrameController().getProjectController(), getParentController());
- }
-
- public CustomModePanel getView() {
- return view;
- }
-
- private void bind() {
- BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
- builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
-
- }
-
- protected void updateTemplates() {
- CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
-
- List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
- Collections.sort(customTemplates);
-
- List<String> superTemplates = new ArrayList<>(templateManager.getDefaultSuperclassTemplates());
- Collections.sort(superTemplates);
- superTemplates.addAll(customTemplates);
-
- List<String> subTemplates = new ArrayList<>(templateManager.getDefaultSubclassTemplates());
- Collections.sort(subTemplates);
- subTemplates.addAll(customTemplates);
-
- List<String> querySuperTemplates = new ArrayList<>(templateManager.getDefaultDataMapSuperclassTemplates());
- Collections.sort(querySuperTemplates);
- querySuperTemplates.addAll(customTemplates);
-
- List<String> queryTemplates = new ArrayList<>(templateManager.getDefaultDataMapTemplates());
- Collections.sort(queryTemplates);
- queryTemplates.addAll(customTemplates);
-
- List<String> embeddableSuperTemplates = new ArrayList<>(templateManager.getDefaultEmbeddableSuperclassTemplates());
- Collections.sort(embeddableSuperTemplates);
- embeddableSuperTemplates.addAll(customTemplates);
-
- List<String> embeddableTemplates = new ArrayList<>(templateManager.getDefaultEmbeddableTemplates());
- 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 popPreferencesAction() {
- new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
- updateTemplates();
- updateComboBoxes();
- }
-
- public void addTemplateAction(String template, String superTemplate) {
- new PreferenceDialog(getApplication().getFrameController()).startupToCreateTemplate(template, superTemplate);
- updateTemplates();
- }
-
- private void updateComboBoxes() {
- String templateName = getApplication().getCodeTemplateManager().getNameByPath(
- 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.getDataMapTemplate(), cgenConfiguration.getRootPath());
- String querySuperTemplateName = getApplication().getCodeTemplateManager().getNameByPath(
- cgenConfiguration.getDataMapSuperTemplate(), cgenConfiguration.getRootPath());
-
- view.getSubclassTemplate().setItem(templateName);
- view.getSuperclassTemplate().setItem(superTemplateName);
-
- view.getEmbeddableTemplate().setItem(embeddableTemplateName);
- view.getEmbeddableSuperTemplate().setItem(embeddableSuperTemplateName);
-
- view.getQueryTemplate().setItem(queryTemplateName);
- view.getQuerySuperTemplate().setItem(querySuperTemplateName);
-
- view.setDisableSuperComboBoxes(view.getPairs().isSelected());
- }
-
- private void initListeners() {
- 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);
- } else {
- cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
- cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
- cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
- }
- initForm(cgenConfiguration);
- getParentController().checkCgenConfigDirty();
- });
-
- view.getOverwrite().addActionListener(val -> {
- cgenConfiguration.setOverwrite(view.getOverwrite().isSelected());
- getParentController().checkCgenConfigDirty();
- });
-
- view.getCreatePropertyNames().addActionListener(val -> {
- cgenConfiguration.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
- getParentController().checkCgenConfigDirty();
- });
-
- view.getUsePackagePath().addActionListener(val -> {
- cgenConfiguration.setUsePkgPath(view.getUsePackagePath().isSelected());
- getParentController().checkCgenConfigDirty();
- });
-
- view.getPkProperties().addActionListener(val -> {
- cgenConfiguration.setCreatePKProperties(view.getPkProperties().isSelected());
- getParentController().checkCgenConfigDirty();
- });
- }
-
- @Override
- public void initForm(CgenConfiguration cgenConfiguration) {
- super.initForm(cgenConfiguration);
- updateTemplates();
- view.getOutputPattern().setText(cgenConfiguration.getOutputPattern());
- view.getPairs().setSelected(cgenConfiguration.isMakePairs());
- view.getUsePackagePath().setSelected(cgenConfiguration.isUsePkgPath());
- view.getOverwrite().setSelected(cgenConfiguration.isOverwrite());
- view.getCreatePropertyNames().setSelected(cgenConfiguration.isCreatePropertyNames());
- view.getPkProperties().setSelected(cgenConfiguration.isCreatePKProperties());
- view.getSuperPkg().setText(cgenConfiguration.getSuperPkg());
- updateComboBoxes();
- }
-
- @Override
- public void updateConfiguration(CgenConfiguration cgenConfiguration) {
- // 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
deleted file mode 100644
index 598ddad35..000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/CustomModePanel.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComboBox;
-import javax.swing.JPanel;
-import javax.swing.JTextField;
-import java.awt.BorderLayout;
-import java.awt.FlowLayout;
-
-import com.jgoodies.forms.builder.DefaultFormBuilder;
-import com.jgoodies.forms.layout.FormLayout;
-import org.apache.cayenne.gen.CgenConfiguration;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.util.ComboBoxAdapter;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.swing.components.JCayenneCheckBox;
-import org.apache.cayenne.validation.ValidationException;
-
-/**
- * @since 4.1
- */
-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;
- private TextAdapter outputPattern;
- private JCheckBox createPropertyNames;
- private JCheckBox pkProperties;
- private TextAdapter superPkg;
-
- private JButton manageTemplatesLink;
-
- CustomModePanel(ProjectController projectController, CodeGeneratorController codeGeneratorControllerBase) {
- super(projectController, codeGeneratorControllerBase);
-
- JComboBox<String> superclassField = new JComboBox<>();
- this.superclassTemplate = new ComboBoxAdapter<>(superclassField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- JComboBox<String> subclassField = new JComboBox<>();
- this.subclassTemplate = new ComboBoxAdapter<>(subclassField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- JComboBox<String> embeddableField = new JComboBox<>();
- this.embeddableTemplate = new ComboBoxAdapter<>(embeddableField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setEmbeddableTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- JComboBox<String> embeddableSuperField = new JComboBox<>();
- this.embeddableSuperTemplate = new ComboBoxAdapter<>(embeddableSuperField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setEmbeddableSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- JComboBox<String> queryField = new JComboBox<>();
- this.queryTemplate = new ComboBoxAdapter<>(queryField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setDataMapTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- JComboBox<String> querySuperField = new JComboBox<>();
- this.querySuperTemplate = new ComboBoxAdapter<>(querySuperField) {
- @Override
- protected void updateModel(String item) throws ValidationException {
- CgenConfiguration cgenConfiguration = getCgenConfig();
- cgenConfiguration.setDataMapSuperTemplate(Application.getInstance().getCodeTemplateManager().getTemplatePath(item,
- cgenConfiguration.getDataMap().getConfigurationSource()));
- checkConfigDirty();
- }
- };
-
- this.pairs = new JCayenneCheckBox();
- this.overwrite = new JCayenneCheckBox();
- this.usePackagePath = new JCayenneCheckBox();
-
- JTextField outputPatternField = new JTextField();
- this.outputPattern = new TextAdapter(outputPatternField) {
- protected void updateModel(String text) {
- getCgenConfig().setOutputPattern(text);
- checkConfigDirty();
- }
- };
-
- JTextField superPkgField = new JTextField();
- this.superPkg = new TextAdapter(superPkgField) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- getCgenConfig().setSuperPkg(text);
- checkConfigDirty();
- }
- };
-
- this.createPropertyNames = new JCayenneCheckBox();
- this.pkProperties = new JCayenneCheckBox();
- this.manageTemplatesLink = new JButton("Customize Templates...");
- this.manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
-
- pairs.addChangeListener(e -> {
- setDisableSuperComboBoxes(pairs.isSelected());
- overwrite.setEnabled(!pairs.isSelected());
- });
-
- // assemble
- FormLayout layout = new FormLayout(
- "right:105dlu, 1dlu, fill:240:grow, 1dlu, left:100dlu, 100dlu", "");
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.setDefaultDialogBorder();
-
- builder.append("Output Directory:", outputFolder.getComponent(), selectOutputFolder);
- builder.nextLine();
-
- builder.append("Subclass Template:", subclassTemplate.getComboBox());
- builder.nextLine();
-
- 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();
-
- builder.append("Make Pairs:", pairs);
- builder.nextLine();
-
- builder.append("Use Package Path:", usePackagePath);
- builder.nextLine();
-
- builder.append("Overwrite Subclasses:", overwrite);
- builder.nextLine();
-
- builder.append("Create Property Names:", createPropertyNames);
- builder.nextLine();
-
- builder.append("Create PK properties:", pkProperties);
- builder.nextLine();
-
- builder.append("Superclass package:", superPkg.getComponent());
-
- setLayout(new BorderLayout());
- add(builder.getPanel(), BorderLayout.CENTER);
-
- JPanel links = new JPanel(new FlowLayout(FlowLayout.TRAILING));
- links.add(manageTemplatesLink);
- add(links, BorderLayout.SOUTH);
- }
-
- 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> 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;
- }
-
- public JCheckBox getPairs() {
- return pairs;
- }
-
- public JCheckBox getUsePackagePath() {
- return usePackagePath;
- }
-
- public TextAdapter getOutputPattern() {
- return outputPattern;
- }
-
- public JCheckBox getCreatePropertyNames() {
- return createPropertyNames;
- }
-
- public JCheckBox getPkProperties() {
- return pkProperties;
- }
-
- public TextAdapter getSuperPkg() {
- return superPkg;
- }
-}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
deleted file mode 100644
index 7f9b39dba..000000000
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/GeneratorTabController.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- ****************************************************************/
-
-package org.apache.cayenne.modeler.editor.cgen;
-
-import org.apache.cayenne.gen.CgenConfiguration;
-import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.pref.PreferenceDetail;
-
-import java.awt.Component;
-import java.awt.Dimension;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @since 4.1
- */
-public class GeneratorTabController extends CayenneController {
-
- private static final String STANDARD_OBJECTS_MODE = "Standard Persistent Objects";
- private static final String ADVANCED_MODE = "Advanced";
-
- public static final String GENERATOR_PROPERTY = "generator";
-
- private static final String[] GENERATION_MODES = new String[] {
- STANDARD_OBJECTS_MODE, ADVANCED_MODE
- };
-
- protected GeneratorTabPanel view;
- protected Map<String, GeneratorController> controllers;
- protected PreferenceDetail preferences;
-
- public GeneratorTabController(CodeGeneratorController parent) {
- super(parent);
- this.controllers = new HashMap<>(3);
- controllers.put(STANDARD_OBJECTS_MODE, new StandardModeController(parent));
- controllers.put(ADVANCED_MODE, new CustomModeController(parent));
- Component[] modePanels = new Component[GENERATION_MODES.length];
- for (int i = 0; i < GENERATION_MODES.length; i++) {
- modePanels[i] = controllers.get(GENERATION_MODES[i]).getView();
- }
- this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
- initBindings();
- view.setPreferredSize(new Dimension(550, 480));
- }
-
- public GeneratorTabPanel getView() {
- return view;
- }
-
- protected CodeGeneratorController getParentController() {
- return (CodeGeneratorController) getParent();
- }
-
- public PreferenceDetail getPreferences() {
- return preferences;
- }
-
- protected void initBindings() {
- view.getGenerationMode().addActionListener(action -> {
- String name = (String)view.getGenerationMode().getSelectedItem();
- GeneratorController modeController = getGeneratorController();
- CgenConfiguration cgenConfiguration = getParentController().getCgenConfiguration();
- modeController.updateConfiguration(cgenConfiguration);
- controllers.get(name).initForm(cgenConfiguration);
- getParentController().getPrevGeneratorController().put(cgenConfiguration.getDataMap(), modeController);
- });
- }
-
- public void setSelectedController(GeneratorController generatorController) {
- for(String key : controllers.keySet()) {
- if(generatorController.equals(controllers.get(key))) {
- getView().getGenerationMode().setSelectedItem(key);
- }
- }
- }
-
- GeneratorController getGeneratorController() {
- String name = (String)view.getGenerationMode().getSelectedItem();
- return controllers.get(name);
- }
-
- GeneratorController getStandartController() {
- return controllers.get(STANDARD_OBJECTS_MODE);
- }
-
- GeneratorController getCustomModeController() {
- return controllers.get(ADVANCED_MODE);
- }
-}
\ No newline at end of file
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 ebf444d88..86ee80fd6 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
@@ -21,7 +21,19 @@ package org.apache.cayenne.modeler.editor.cgen;
import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.gen.ClassGenerationAction;
+import org.apache.cayenne.modeler.CodeTemplateManager;
+import org.apache.cayenne.modeler.dialog.cgen.TemplateDialog;
+import org.apache.cayenne.modeler.dialog.pref.PreferenceDialog;
import org.apache.cayenne.modeler.pref.DataMapDefaults;
+import org.apache.cayenne.swing.BindingBuilder;
+
+import javax.swing.DefaultComboBoxModel;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Supplier;
/**
* @since 4.1
@@ -33,8 +45,55 @@ public class StandardModeController extends GeneratorController {
public StandardModeController(CodeGeneratorController parent) {
super(parent);
+ bind();
+ initListeners();
+ }
+
+ private void bind() {
+ BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), this);
+ builder.bindToAction(view.getTemplateManagerButton(), "popPreferencesAction()");
+
+ }
+
+ protected void initListeners() {
+ 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);
+ } else {
+ cgenConfiguration.setTemplate(ClassGenerationAction.SUBCLASS_TEMPLATE);
+ cgenConfiguration.setEmbeddableTemplate(ClassGenerationAction.EMBEDDABLE_SUBCLASS_TEMPLATE);
+ cgenConfiguration.setDataMapTemplate(ClassGenerationAction.DATAMAP_SUBCLASS_TEMPLATE);
+ }
+ initForm(cgenConfiguration);
+ getParentController().checkCgenConfigDirty();
+ });
+
+ view.getOverwrite().addActionListener(val -> {
+ cgenConfiguration.setOverwrite(view.getOverwrite().isSelected());
+ getParentController().checkCgenConfigDirty();
+ });
+
+ view.getCreatePropertyNames().addActionListener(val -> {
+ cgenConfiguration.setCreatePropertyNames(view.getCreatePropertyNames().isSelected());
+ getParentController().checkCgenConfigDirty();
+ });
+
+ view.getUsePackagePath().addActionListener(val -> {
+ cgenConfiguration.setUsePkgPath(view.getUsePackagePath().isSelected());
+ getParentController().checkCgenConfigDirty();
+ });
+
+ view.getPkProperties().addActionListener(val -> {
+ cgenConfiguration.setCreatePKProperties(view.getPkProperties().isSelected());
+ getParentController().checkCgenConfigDirty();
+ });
+
}
+
protected void createView() {
this.view = new StandardModePanel(getParentController());
}
@@ -49,4 +108,138 @@ public class StandardModeController extends GeneratorController {
cgenConfiguration.setSuperTemplate(ClassGenerationAction.SUPERCLASS_TEMPLATE);
}
+
+ private void updateTemplates() {
+
+ CodeTemplateManager templateManager = getApplication().getCodeTemplateManager();
+
+ List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
+ Collections.sort(customTemplates);
+
+ List<String> superTemplates = new ArrayList<>(templateManager.getDefaultSuperclassTemplates());
+ Collections.sort(superTemplates);
+ superTemplates.addAll(customTemplates);
+
+ List<String> subTemplates = new ArrayList<>(templateManager.getDefaultSubclassTemplates());
+ Collections.sort(subTemplates);
+ subTemplates.addAll(customTemplates);
+
+ List<String> dataMapSuperTemplates = new ArrayList<>(templateManager.getDefaultDataMapSuperclassTemplates());
+ Collections.sort(dataMapSuperTemplates);
+ dataMapSuperTemplates.addAll(customTemplates);
+
+ List<String> dataMapTemplates = new ArrayList<>(templateManager.getDefaultDataMapTemplates());
+ Collections.sort(dataMapTemplates);
+ dataMapTemplates.addAll(customTemplates);
+
+ List<String> embeddableSuperTemplates = new ArrayList<>(templateManager.getDefaultEmbeddableSuperclassTemplates());
+ Collections.sort(embeddableSuperTemplates);
+ embeddableSuperTemplates.addAll(customTemplates);
+
+ List<String> embeddableTemplates = new ArrayList<>(templateManager.getDefaultEmbeddableTemplates());
+ 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.getDataMapTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(dataMapTemplates.toArray(new String[0])));
+ this.view.getDataMapSuperTemplate().getComboBox().setModel(new DefaultComboBoxModel<>(dataMapSuperTemplates.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])));
+ }
+
+ @SuppressWarnings("unused")
+ public void popPreferencesAction() {
+ new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
+ updateTemplates();
+ updateComboBoxes();
+ }
+
+ private void missTemplateDialog(CgenConfiguration cgenConfiguration, String template, String superTemplate) {
+ new TemplateDialog(this, cgenConfiguration, template, superTemplate).startupAction();
+ updateComboBoxes();
+ }
+
+ public void addTemplateAction(String template, String superTemplate) {
+ new PreferenceDialog(getApplication().getFrameController()).startupToCreateTemplate(template, superTemplate);
+ updateTemplates();
+ }
+
+ private String getTemplateName(Supplier<String> supplier, Path path) {
+ return getApplication().getCodeTemplateManager().getNameByPath(
+ supplier.get(), path);
+ }
+
+ private String getPath(Supplier<String> supplier, Path rootPath) {
+ if (rootPath != null) {
+ return rootPath.resolve(Paths.get(supplier.get())).normalize().toString();
+ } else {
+ return (Paths.get(supplier.get()).normalize().toString());
+ }
+ }
+
+
+ private void updateComboBoxes() {
+ Path rootPath = cgenConfiguration.getRootPath();
+
+ String templateName = getTemplateName(cgenConfiguration::getTemplate, rootPath);
+ String superTemplateName = getTemplateName(cgenConfiguration::getSuperTemplate, rootPath);
+ String embeddableTemplateName = getTemplateName(cgenConfiguration::getEmbeddableTemplate, rootPath);
+ String embeddableSuperTemplateName = getTemplateName(cgenConfiguration::getEmbeddableSuperTemplate, rootPath);
+ String dataMapTemplateName = getTemplateName(cgenConfiguration::getDataMapTemplate, rootPath);
+ String dataMapSuperTemplateName = getTemplateName(cgenConfiguration::getDataMapSuperTemplate, rootPath);
+
+ String path = getPath(cgenConfiguration::getTemplate, rootPath);
+ String superPath = getPath(cgenConfiguration::getSuperTemplate, rootPath);
+ String embeddableTemplatePath = getPath(cgenConfiguration::getEmbeddableTemplate, rootPath);
+ String embeddableSuperTemplatePath = getPath(cgenConfiguration::getEmbeddableSuperTemplate, rootPath);
+ String dataMapTemplatePath = getPath(cgenConfiguration::getDataMapTemplate, rootPath);
+ String dataMapSuperTemplatePath = getPath(cgenConfiguration::getDataMapSuperTemplate, rootPath);
+
+ if (templateName == null && superTemplateName == null) {
+ view.getSubclassTemplate().setItem(null);
+ view.getSuperclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, path, superPath);
+ } else if (templateName == null) {
+ view.getSubclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, path, null);
+ } else if (superTemplateName == null) {
+ view.getSuperclassTemplate().setItem(null);
+ missTemplateDialog(cgenConfiguration, null, superPath);
+ } else {
+ 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(dataMapTemplateName == null && dataMapSuperTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, dataMapTemplatePath, dataMapSuperTemplatePath);
+ } else if(dataMapTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, dataMapTemplatePath, null);
+ } else if(dataMapSuperTemplateName == null) {
+ missTemplateDialog(cgenConfiguration, null, dataMapSuperTemplatePath);
+ }
+ view.getDataMapTemplate().setItem(dataMapTemplateName);
+ view.getDataMapSuperTemplate().setItem(dataMapSuperTemplateName);
+
+ view.setDisableSuperComboBoxes(view.getPairs().isSelected());
+ }
+
+ @Override
+ public void initForm(CgenConfiguration cgenConfiguration) {
+ super.initForm(cgenConfiguration);
+ updateTemplates();
+ view.getOutputPattern().setText(cgenConfiguration.getOutputPattern());
+ updateComboBoxes();
+ }
+
}
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
index f9cf04d51..e40ec3f8c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/cgen/StandardModePanel.java
@@ -19,27 +19,231 @@
package org.apache.cayenne.modeler.editor.cgen;
-import com.jgoodies.forms.builder.DefaultFormBuilder;
+import com.jgoodies.forms.builder.PanelBuilder;
+import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
+import org.apache.cayenne.gen.CgenConfiguration;
import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.util.ComboBoxAdapter;
+import org.apache.cayenne.modeler.util.TextAdapter;
+import org.apache.cayenne.swing.components.JCayenneCheckBox;
+import org.apache.cayenne.validation.ValidationException;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JTextField;
import java.awt.BorderLayout;
+import java.util.function.BiConsumer;
/**
* @since 4.1
*/
public class StandardModePanel extends GeneratorControllerPanel {
+ private final JCheckBox pairs;
+ private final JCheckBox overwrite;
+ private final JCheckBox usePackagePath;
+ private final JCheckBox createPropertyNames;
+ private final JCheckBox pkProperties;
+ private TextAdapter superPkg;
+ protected TextAdapter outputPattern;
+ private ComboBoxAdapter<String> subclassTemplate;
+ private ComboBoxAdapter<String> superclassTemplate;
+ private ComboBoxAdapter<String> embeddableTemplate;
+ private ComboBoxAdapter<String> embeddableSuperTemplate;
+ private ComboBoxAdapter<String> dataMapTemplate;
+ private ComboBoxAdapter<String> dataMapSuperTemplate;
+ private JButton templateManagerButton;
+
+
public StandardModePanel(CodeGeneratorController codeGeneratorController) {
super(Application.getInstance().getFrameController().getProjectController(), codeGeneratorController);
- FormLayout layout = new FormLayout(
- "right:83dlu, 1dlu, fill:240:grow, 1dlu, left:100dlu, 100dlu", "");
+ this.codeGeneratorController = codeGeneratorController;
+ this.pairs = new JCayenneCheckBox();
+ this.overwrite = new JCayenneCheckBox();
+ this.usePackagePath = new JCayenneCheckBox();
+ this.createPropertyNames = new JCayenneCheckBox();
+ this.pkProperties = new JCayenneCheckBox();
+ this.templateManagerButton = new JButton("Templates manager");
+ this.templateManagerButton.setFont(templateManagerButton.getFont().deriveFont(14f));
- DefaultFormBuilder builder = new DefaultFormBuilder(layout);
- builder.append("Output Directory:", outputFolder.getComponent(), selectOutputFolder);
- builder.nextLine();
+ initTextFields();
+ initTemplatesSelector();
+ buildView();
+ }
+ protected void buildView() {
setLayout(new BorderLayout());
+ CellConstraints cc = new CellConstraints();
+ FormLayout layout = new FormLayout(
+ "left:10dlu,3dlu, 140dlu, 3dlu, 50dlu, 3dlu, 20dlu",
+ "p, 3dlu, p, 10dlu, 11*(p, 3dlu),10dlu,9*(p, 3dlu)");
+ PanelBuilder builder = new PanelBuilder(layout);
+ builder.setDefaultDialogBorder();
+ builder.addLabel("Output Directory", cc.xyw(1, 1, 3));
+ builder.add(outputFolder.getComponent(), cc.xyw(1, 3, 6));
+ builder.add(selectOutputFolder, cc.xy(7, 3));
+
+ // Advanced options panel
+ builder.addSeparator("Advanced options", cc.xyw(1, 7, 7 ));
+
+ builder.add(pairs, cc.xy(1, 9));
+ builder.addLabel("Make Pairs", cc.xy(3, 9));
+
+ builder.add(usePackagePath, cc.xy(1, 11));
+ builder.addLabel("Use Package Path", cc.xy(3, 11));
+
+ builder.add(overwrite, cc.xy(1, 13));
+ builder.addLabel("Overwrite Subclasses", cc.xy(3, 13));
+
+ builder.add(createPropertyNames, cc.xy(1, 15));
+ builder.addLabel("Create Property Names", cc.xy(3, 15));
+
+ builder.add(pkProperties, cc.xy(1, 17));
+ builder.addLabel("Create PK properties", cc.xy(3, 17));
+
+ builder.addLabel("Output Pattern", cc.xyw(1, 19, 3));
+ builder.add(outputPattern.getComponent(), cc.xyw(1, 21, 3));
+
+ builder.addLabel("Superclass package", cc.xyw(1, 23, 3));
+ builder.add(superPkg.getComponent(), cc.xyw(1, 25, 3));
+
+ //Templates options panel
+ builder.addSeparator("Templates options", cc.xyw(1, 28, 7 ));
+
+ builder.add(subclassTemplate.getComboBox(), cc.xyw(1, 30,3));
+ builder.addLabel("Subclass", cc.xyw(5, 30,3));
+
+ builder.add(superclassTemplate.getComboBox(), cc.xyw(1, 32,3));
+ builder.addLabel("Superclass", cc.xyw(5, 32,3));
+
+ builder.add(embeddableTemplate.getComboBox(), cc.xyw(1, 34,3));
+ builder.addLabel("Embeddable", cc.xyw(5, 34,3));
+
+ builder.add(embeddableSuperTemplate.getComboBox(), cc.xyw(1, 36,3));
+ builder.addLabel("Embeddable Superclass", cc.xyw(5, 36,3));
+
+ builder.add(dataMapTemplate.getComboBox(), cc.xyw(1, 38,3));
+ builder.addLabel("DataMap", cc.xyw(5, 38,3));
+
+ builder.add(dataMapSuperTemplate.getComboBox(), cc.xyw(1, 40,3));
+ builder.addLabel("DataMap Superclass", cc.xyw(5, 40,3));
+
+ builder.add(templateManagerButton, cc.xyw(1, 44,3));
+
add(builder.getPanel(), BorderLayout.CENTER);
}
+
+ private void initTextFields(){
+ JTextField superPkgField = new JTextField();
+ this.superPkg = new TextAdapter(superPkgField) {
+ @Override
+ protected void updateModel(String text) throws ValidationException {
+ getCgenConfig().setSuperPkg(text);
+ checkConfigDirty();
+ }
+ };
+
+ JTextField outputPatternField = new JTextField();
+ this.outputPattern = new TextAdapter(outputPatternField) {
+ protected void updateModel(String text) {
+ getCgenConfig().setOutputPattern(text);
+ checkConfigDirty();
+ }
+ };
+ }
+
+ private void initTemplatesSelector() {
+ JComboBox<String> subclassField = new JComboBox<>();
+ this.subclassTemplate = new StringComboBoxAdapter(subclassField, CgenConfiguration::setTemplate);
+ JComboBox<String> superclassField = new JComboBox<>();
+ this.superclassTemplate = new StringComboBoxAdapter(superclassField, CgenConfiguration::setSuperTemplate);
+ JComboBox<String> embeddableField = new JComboBox<>();
+ this.embeddableTemplate = new StringComboBoxAdapter(embeddableField, CgenConfiguration::setEmbeddableTemplate);
+ JComboBox<String> embeddableSuperField = new JComboBox<>();
+ this.embeddableSuperTemplate = new StringComboBoxAdapter(embeddableSuperField, CgenConfiguration::setEmbeddableSuperTemplate);
+ JComboBox<String> queryField = new JComboBox<>();
+ this.dataMapTemplate = new StringComboBoxAdapter(queryField, CgenConfiguration::setDataMapTemplate);
+ JComboBox<String> querySuper = new JComboBox<>();
+ this.dataMapSuperTemplate = new StringComboBoxAdapter(querySuper, CgenConfiguration::setDataMapSuperTemplate);
+ }
+
+ class StringComboBoxAdapter extends ComboBoxAdapter<String> {
+ private final BiConsumer<CgenConfiguration, String> setTemplate;
+
+ public StringComboBoxAdapter(JComboBox<String> subclassField, BiConsumer<CgenConfiguration, String> setter) {
+ super(subclassField);
+ this.setTemplate = setter;
+ }
+
+ @Override
+ protected void updateModel(String item) throws ValidationException {
+ CgenConfiguration cgenConfiguration = getCgenConfig();
+ String templatePath = Application.getInstance()
+ .getCodeTemplateManager()
+ .getTemplatePath(item, cgenConfiguration.getDataMap().getConfigurationSource());
+ setTemplate.accept(cgenConfiguration, templatePath);
+ checkConfigDirty();
+ }
+ }
+
+ public void setDisableSuperComboBoxes(boolean val) {
+ superclassTemplate.getComboBox().setEnabled(val);
+ embeddableSuperTemplate.getComboBox().setEnabled(val);
+ dataMapSuperTemplate.getComboBox().setEnabled(val);
+ }
+
+ public JCheckBox getPairs() {
+ return pairs;
+ }
+
+ public JCheckBox getOverwrite() {
+ return overwrite;
+ }
+
+ public JCheckBox getUsePackagePath() {
+ return usePackagePath;
+ }
+
+ public JCheckBox getCreatePropertyNames() {
+ return createPropertyNames;
+ }
+
+ public JCheckBox getPkProperties() {
+ return pkProperties;
+ }
+
+ public TextAdapter getOutputPattern() {
+ return outputPattern;
+ }
+
+ public JButton getTemplateManagerButton() {
+ return templateManagerButton;
+ }
+
+ 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> getDataMapTemplate() {
+ return dataMapTemplate;
+ }
+
+ public ComboBoxAdapter<String> getDataMapSuperTemplate() {
+ return dataMapSuperTemplate;
+ }
+
}
\ No newline at end of file