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 <70625960+ivan-niki...@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

Reply via email to