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 2018/10/01 15:05:20 UTC

[1/3] cayenne git commit: CAY-2479 Modeler: update cgen dialog

Repository: cayenne
Updated Branches:
  refs/heads/STABLE-4.0 20f9d3899 -> 37d832443


CAY-2479 Modeler: update cgen dialog


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/f8d8e50e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/f8d8e50e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/f8d8e50e

Branch: refs/heads/STABLE-4.0
Commit: f8d8e50ec48b7a70463b3593bbdcd77542af77c1
Parents: d3fa7b7
Author: Arseni Bulatski <an...@gmail.com>
Authored: Tue Sep 25 15:08:54 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Sep 25 15:12:51 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |   4 +
 .../cayenne/gen/ClassGenerationAction.java      |   2 +-
 .../gen/ClientClassGenerationAction.java        |   9 +-
 .../modeler/action/GenerateCodeAction.java      |  30 +----
 .../dialog/codegen/ClassesTabController.java    | 129 +++++++++++++++---
 .../modeler/dialog/codegen/ClassesTabPanel.java |  89 +++++++++++--
 .../dialog/codegen/ClientModeController.java    |  39 ------
 .../dialog/codegen/CodeGeneratorController.java |  18 ++-
 .../codegen/CodeGeneratorControllerBase.java    | 133 ++++++++++++++++---
 .../dialog/codegen/CodeGeneratorDialog.java     |  22 +--
 .../dialog/codegen/CustomModeController.java    |  60 ++-------
 .../modeler/dialog/codegen/CustomModePanel.java |  45 ++-----
 .../dialog/codegen/GeneratorController.java     |  91 ++++---------
 .../dialog/codegen/GeneratorTabController.java  |  13 +-
 .../dialog/codegen/StandardModeController.java  |  30 +----
 .../dialog/codegen/StandardModePanel.java       |  18 +--
 16 files changed, 403 insertions(+), 329 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 3766f3b..f4f8281 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -12,6 +12,10 @@ Release: 4.0.1
 Date:
 ----------------------------------
 
+Changes/New Features:
+
+CAY-2479 Modeler: update cgen dialog
+
 Bug Fixes:
 
 CAY-2320 Modeler: Limit input into numeric fields to 10 digits

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
index c063a5d..dbbf151 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClassGenerationAction.java
@@ -524,7 +524,7 @@ public class ClassGenerationAction {
 	 *
 	 * @since 4.0 throws exception
 	 */
-	public void addEntities(Collection<ObjEntity> entities) throws CayenneException {
+	public void addEntities(Collection<ObjEntity> entities) throws CayenneRuntimeException {
 		if (artifactsGenerationMode == ArtifactsGenerationMode.ENTITY
 				|| artifactsGenerationMode == ArtifactsGenerationMode.ALL) {
 			if (entities != null) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
----------------------------------------------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
index bca02a2..576b8a8 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/ClientClassGenerationAction.java
@@ -19,12 +19,13 @@
 
 package org.apache.cayenne.gen;
 
-import java.util.Collection;
-
 import org.apache.cayenne.CayenneException;
+import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.map.QueryDescriptor;
 
+import java.util.Collection;
+
 /**
  * @since 3.0
  */
@@ -77,9 +78,9 @@ public class ClientClassGenerationAction extends ClassGenerationAction {
      * @since 4.0 throws exception
      */
     @Override
-    public void addEntities(Collection<ObjEntity> entities) throws CayenneException {
+    public void addEntities(Collection<ObjEntity> entities) throws CayenneRuntimeException {
         if (!dataMap.isClientSupported()) {
-            throw new CayenneException("Can't create client classes. Check client supported option on DataMap configuration.");
+            throw new CayenneRuntimeException("Can't create client classes. Check client supported option on DataMap configuration.");
         }
         if (entities != null) {
             for (ObjEntity entity : entities) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
index 57ccca1..bdb2e15 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/GenerateCodeAction.java
@@ -27,7 +27,6 @@ import org.apache.cayenne.modeler.util.CayenneAction;
 import org.apache.cayenne.project.Project;
 
 import java.awt.event.ActionEvent;
-import java.util.ArrayList;
 import java.util.Collection;
 
 public class GenerateCodeAction extends CayenneAction {
@@ -46,31 +45,8 @@ public class GenerateCodeAction extends CayenneAction {
 
     public void performAction(ActionEvent e) {
         Collection<DataMap> dataMaps;
-        DataMap dataMap = getProjectController().getCurrentDataMap();
-
-        if (dataMap != null) {
-            dataMaps = new ArrayList<>();
-            dataMaps.add(dataMap);
-
-            new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
-        } else if (getProjectController().getCurrentDataNode() != null) {
-            Collection<String> nodeMaps = getProjectController().getCurrentDataNode().getDataMapNames();
-            Project project = getProjectController().getProject();
-            dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
-
-            Collection<DataMap> resultMaps = new ArrayList<>();
-            for (DataMap map : dataMaps) {
-                if (nodeMaps.contains(map.getName())) {
-                    resultMaps.add(map);
-                }
-            }
-
-            new CodeGeneratorController(getApplication().getFrameController(), resultMaps).startup();
-        } else {
-            Project project = getProjectController().getProject();
-            dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
-
-            new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
-        }
+        Project project = getProjectController().getProject();
+        dataMaps = ((DataChannelDescriptor) project.getRootNode()).getDataMaps();
+        new CodeGeneratorController(getApplication().getFrameController(), dataMaps).startup();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
index a4611a2..2191e8c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
@@ -19,17 +19,21 @@
 
 package org.apache.cayenne.modeler.dialog.codegen;
 
-import java.awt.Component;
-
-import javax.swing.JLabel;
-
+import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.util.CayenneController;
 import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.swing.ImageRendererColumn;
 import org.apache.cayenne.swing.ObjectBinding;
 import org.apache.cayenne.swing.TableBindingBuilder;
 import org.apache.commons.collections.Predicate;
-import org.apache.commons.collections.PredicateUtils;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.*;
+import java.util.List;
+import java.util.function.Consumer;
 
 public class ClassesTabController extends CayenneController {
 
@@ -37,11 +41,28 @@ public class ClassesTabController extends CayenneController {
 
     protected ClassesTabPanel view;
     protected ObjectBinding tableBinding;
+    protected Collection<DataMap> dataMaps;
+    protected Map<DataMap, List<Object>> objectList;
+    private Map<DataMap, ObjectBinding> objectBindings;
+    private List<Object> currentCollection;
 
-    public ClassesTabController(CodeGeneratorControllerBase parent) {
+    public ClassesTabController(CodeGeneratorControllerBase parent, Collection<DataMap> dataMaps) {
         super(parent);
 
-        this.view = new ClassesTabPanel();
+        currentCollection = new ArrayList<>();
+
+        this.objectList = new HashMap<>();
+        for (DataMap dataMap : dataMaps) {
+            List<Object> list = new ArrayList<>();
+            list.add(dataMap);
+            list.addAll(dataMap.getObjEntities());
+            list.addAll(dataMap.getEmbeddables());
+            objectList.put(dataMap, list);
+        }
+
+        this.objectBindings = new HashMap<>();
+        this.dataMaps = dataMaps;
+        this.view = new ClassesTabPanel(dataMaps);
         initBindings();
     }
 
@@ -62,7 +83,7 @@ public class ClassesTabController extends CayenneController {
         builder.bindToAction(view.getCheckAll(), "checkAllAction()");
 
         TableBindingBuilder tableBuilder = new TableBindingBuilder(builder);
-        
+
         tableBuilder.addColumn(
                 "",
                 "parent.setCurrentClass(#item), selected",
@@ -81,10 +102,27 @@ public class ClassesTabController extends CayenneController {
                 "parent.getProblem(#item)",
                 String.class,
                 false,
-                "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-       
-        this.tableBinding = tableBuilder.bindToTable(view.getTable(), "parent.classes");
-        view.getTable().getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
+                "XXXXXXXXXXXXXXXXXXXXXXXXXXX");
+
+        for (final DataMap dataMap : dataMaps) {
+            if (view.getDataMapTables().get(dataMap) != null) {
+                currentCollection = objectList.get(dataMap);
+                objectBindings.put(dataMap, tableBuilder.bindToTable(view.getDataMapTables().get(dataMap), "currentCollection"));
+                view.getDataMapTables().get(dataMap).getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
+            }
+            if (view.getDataMapJCheckBoxMap().get(dataMap) != null) {
+                view.getDataMapJCheckBoxMap().get(dataMap).addActionListener(new ActionListener() {
+                    @Override
+                    public void actionPerformed(ActionEvent val) {
+                        ClassesTabController.this.checkDataMap(dataMap, ((JCheckBox) val.getSource()).isSelected());
+                    }
+                });
+            }
+        }
+    }
+
+    public List<Object> getCurrentCollection() {
+        return currentCollection;
     }
 
     public boolean isSelected() {
@@ -94,18 +132,25 @@ public class ClassesTabController extends CayenneController {
     public void setSelected(boolean selected) {
         getParentController().setSelected(selected);
         classSelectedAction();
+
+        for (DataMap dataMap : dataMaps) {
+            if (view.isAllCheckBoxesFromDataMapSelected(dataMap)) {
+                view.getDataMapJCheckBoxMap().get(dataMap).setSelected(true);
+            } else {
+                view.getDataMapJCheckBoxMap().get(dataMap).setSelected(false);
+            }
+        }
     }
 
     /**
      * A callback action that updates the state of Select All checkbox.
      */
     public void classSelectedAction() {
-        int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() ;
+        int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() + getParentController().getSelectedDataMapsSize();
 
         if (selectedCount == 0) {
             view.getCheckAll().setSelected(false);
-        }
-        else if (selectedCount == getParentController().getClasses().size()) {
+        } else if (selectedCount == getParentController().getClasses().size()) {
             view.getCheckAll().setSelected(true);
         }
     }
@@ -116,11 +161,57 @@ public class ClassesTabController extends CayenneController {
      */
     public void checkAllAction() {
 
-        Predicate predicate = view.getCheckAll().isSelected() ? PredicateUtils
-                .truePredicate() : PredicateUtils.falsePredicate();
+        if (getParentController().updateSelection(view.getCheckAll().isSelected() ?
+                new Predicate() {
+                    @Override
+                    public boolean evaluate(Object o) {
+                        return true;
+                    }
+                } : new Predicate() {
+            @Override
+            public boolean evaluate(Object o) {
+                return false;
+            }
+        })) {
+            for (DataMap dataMap : dataMaps) {
+                if (objectBindings.get(dataMap) != null) {
+                    currentCollection = objectList.get(dataMap);
+                    objectBindings.get(dataMap).updateView();
+                }
+            }
+        }
+    }
+
+    private void checkDataMap(DataMap dataMap, boolean selected) {
+        if (getParentController().updateDataMapSelection(selected ? new Predicate() {
+            @Override
+            public boolean evaluate(Object o) {
+                return true;
+            }
+        } : new Predicate() {
+            @Override
+            public boolean evaluate(Object o) {
+                return false;
+            }
+        }, dataMap)) {
+            if (objectBindings.get(dataMap) != null) {
+                currentCollection = objectList.get(dataMap);
+                objectBindings.get(dataMap).updateView();
+            }
+            if (isAllMapsSelected()) {
+                view.getCheckAll().setSelected(true);
+            }
+        }
+    }
 
-        if (getParentController().updateSelection(predicate)) {
-            tableBinding.updateView();
+    private boolean isAllMapsSelected() {
+        for (DataMap dataMap : dataMaps) {
+            if (view.getDataMapJCheckBoxMap().get(dataMap) != null) {
+                if (!view.getDataMapJCheckBoxMap().get(dataMap).isSelected()) {
+                    return false;
+                }
+            }
         }
+        return true;
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
index ea164b1..3bba9cf3 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabPanel.java
@@ -19,12 +19,9 @@
 
 package org.apache.cayenne.modeler.dialog.codegen;
 
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.FlowLayout;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
+import org.apache.cayenne.map.DataMap;
 
+import javax.swing.BoxLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -32,6 +29,16 @@ import javax.swing.JScrollPane;
 import javax.swing.JTable;
 import javax.swing.ScrollPaneConstants;
 import javax.swing.UIManager;
+import javax.swing.border.EmptyBorder;
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  */
@@ -41,7 +48,13 @@ public class ClassesTabPanel extends JPanel {
     protected JCheckBox checkAll;
     protected JLabel checkAllLabel;
 
-    public ClassesTabPanel() {
+    private Map<DataMap, JTable> dataMapTables;
+
+    private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
+
+    public ClassesTabPanel(Collection<DataMap> dataMaps) {
+        dataMapTables = new HashMap<>();
+        dataMapJCheckBoxMap = new HashMap<>();
 
         this.table = new JTable();
         this.table.setRowHeight(22);
@@ -52,39 +65,87 @@ public class ClassesTabPanel extends JPanel {
         this.checkAllLabel = new JLabel("Check All Classes");
 
         checkAll.addItemListener(new ItemListener() {
-
+            @Override
             public void itemStateChanged(ItemEvent event) {
                 if (checkAll.isSelected()) {
                     checkAllLabel.setText("Uncheck All Classess");
-                }
-                else {
+                    for(DataMap dataMap : dataMapJCheckBoxMap.keySet()) {
+                        dataMapJCheckBoxMap.get(dataMap).setSelected(true);
+                    }
+                } else {
                     checkAllLabel.setText("Check All Classes");
+                    for(DataMap dataMap : dataMapJCheckBoxMap.keySet()) {
+                        dataMapJCheckBoxMap.get(dataMap).setSelected(false);
+                    }
                 }
             }
         });
 
         // assemble
-        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
+        JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
         topPanel.setBorder(UIManager.getBorder("ToolBar.border"));
         topPanel.add(checkAll);
         topPanel.add(checkAllLabel);
 
+        JPanel panel = new JPanel();
+        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
+        for(DataMap dataMap : dataMaps) {
+            JTable table = new JTable();
+            table.setRowHeight(22);
+            dataMapTables.put(dataMap, table);
+            JPanel scrollTable = new JPanel(new BorderLayout());
+            scrollTable.add(dataMapTables.get(dataMap).getTableHeader(), BorderLayout.NORTH);
+            scrollTable.add(dataMapTables.get(dataMap), BorderLayout.CENTER);
+            scrollTable.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width,
+                    (dataMap.getEmbeddables().size() + dataMap.getObjEntities().size()) * dataMapTables.get(dataMap).getRowHeight() + 45));
+            JPanel labelPanel = new JPanel(new BorderLayout());
+            labelPanel.setPreferredSize(new Dimension(dataMapTables.get(dataMap).getPreferredSize().width, 20));
+            JLabel dataMapLabel = new JLabel(dataMap.getName());
+            dataMapLabel.setAlignmentX(Component.CENTER_ALIGNMENT);
+            dataMapLabel.setBorder(new EmptyBorder(8, 8, 8, 0));
+            labelPanel.add(dataMapLabel, BorderLayout.CENTER);
+
+            JCheckBox dataMapCheckBox = new JCheckBox();
+            dataMapJCheckBoxMap.put(dataMap, dataMapCheckBox);
+            labelPanel.add(dataMapCheckBox, BorderLayout.WEST);
+
+            JPanel currPanel = new JPanel(new BorderLayout());
+            currPanel.add(labelPanel, BorderLayout.NORTH);
+            currPanel.add(scrollTable, BorderLayout.CENTER);
+
+            panel.add(currPanel);
+        }
+
         JScrollPane tablePanel = new JScrollPane(
-                table,
+                panel,
                 ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 
         // set some minimal preferred size, so that it is smaller than other forms used in
         // the dialog... this way we get the right automated overall size
-        tablePanel.setPreferredSize(new Dimension(300, 200));
+        tablePanel.setPreferredSize(new Dimension(450, 400));
 
         setLayout(new BorderLayout());
         add(topPanel, BorderLayout.NORTH);
         add(tablePanel, BorderLayout.CENTER);
     }
 
-    public JTable getTable() {
-        return table;
+    public boolean isAllCheckBoxesFromDataMapSelected(DataMap dataMap) {
+        JTable table = dataMapTables.get(dataMap);
+        for(int i = 0; i < table.getRowCount(); i++) {
+            if(!(Boolean)table.getModel().getValueAt(i, 0)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public Map<DataMap, JTable> getDataMapTables() {
+        return dataMapTables;
+    }
+
+    public Map<DataMap, JCheckBox> getDataMapJCheckBoxMap() {
+        return dataMapJCheckBoxMap;
     }
 
     public JCheckBox getCheckAll() {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
index 248b4b2..f4ce823 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClientModeController.java
@@ -24,14 +24,11 @@ import org.apache.cayenne.gen.ClientClassGenerationAction;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.validation.BeanValidationFailure;
 import org.apache.cayenne.validation.ValidationResult;
 import org.apache.commons.collections.Predicate;
 
 import java.util.ArrayList;
-import java.util.Map.Entry;
-import java.util.Set;
 import java.util.TreeMap;
 
 public class ClientModeController extends StandardModeController {
@@ -40,19 +37,6 @@ public class ClientModeController extends StandardModeController {
 
     public ClientModeController(CodeGeneratorControllerBase parent) {
         super(parent);
-
-        this.checkPredicate = new Predicate() {
-
-            public boolean evaluate(Object object) {
-                if (object instanceof ObjEntity) {
-                    ObjEntity entity = (ObjEntity) object;
-                    return entity.isClientAllowed()
-                            && getParentController().getProblem(entity.getName()) == null;
-                }
-
-                return false;
-            }
-        };
     }
 
     public void validateEntity(ValidationResult validationBuffer, ObjEntity entity) {
@@ -90,35 +74,12 @@ public class ClientModeController extends StandardModeController {
 
     protected GeneratorControllerPanel createView() {
         this.view = new StandardModePanel();
-
-        Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
-        for (Entry<DataMap, DataMapDefaults> entry : entities) {
-            StandardPanelComponent dataMapLine = createDataMapLineBy(entry.getKey(), entry.getValue());
-            dataMapLine.getDataMapName().setText(dataMapLine.getDataMap().getName());
-            BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), dataMapLine);
-            builder.bindToTextField(
-                    dataMapLine.getSuperclassPackage(),
-                    "preferences.superclassPackage").updateView();
-            this.view.addDataMapLine(dataMapLine);
-        }
-
         return view;
     }
 
-    private StandardPanelComponent createDataMapLineBy(DataMap dataMap, DataMapDefaults preferences) {
-        StandardPanelComponent dataMapLine = new StandardPanelComponent();
-        dataMapLine.setDataMap(dataMap);
-        dataMapLine.setPreferences(preferences);
-
-        return dataMapLine;
-    }
-
     @Override
     protected ClassGenerationAction newGenerator() {
         return new ClientClassGenerationAction();
     }
 
-    public Predicate getDefaultEntityFilter() {
-        return checkPredicate;
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
index 731cc61..610d6c7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorController.java
@@ -50,7 +50,7 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
     public CodeGeneratorController(CayenneController parent, Collection<DataMap> dataMaps) {
         super(parent, dataMaps);
 
-        this.classesSelector = new ClassesTabController(this);
+        this.classesSelector = new ClassesTabController(this, dataMaps);
         this.generatorSelector = new GeneratorTabController(this);
     }
 
@@ -124,9 +124,21 @@ public class CodeGeneratorController extends CodeGeneratorControllerBase {
             label = label + "One embeddable selected";
         }
         else {
-            label =label + sizeEmb + " embeddables selected";
+            label = label + sizeEmb + " embeddables selected";
         }
-        
+
+        label = label.concat("; ");
+
+        int sizeDataMap = getSelectedDataMapsSize();
+
+        if(sizeDataMap == 0) {
+            label = label + "No datamaps selected";
+        } else if(sizeDataMap == 1) {
+            label = label + "One datamap selected";
+        } else {
+            label = label + sizeDataMap + " datamaps selected";
+        }
+
         view.getClassesCount().setText(label);
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
index ad8c306..2ab529a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorControllerBase.java
@@ -52,8 +52,9 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
 
     protected List<Object> classes;
 
-    protected Set selectedEntities;
-    protected Set selectedEmbeddables;
+    private Set<String> selectedEntities;
+    private Set<String> selectedEmbeddables;
+    private Set<String> selectedDataMaps;
 
     protected transient Object currentClass;
 
@@ -61,14 +62,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         super(parent);
 
         this.dataMaps = dataMaps;
-        this.classes = new ArrayList();
+        this.classes = new ArrayList<>();
 
         for(DataMap dataMap:dataMaps){
-            this.classes.addAll(new ArrayList(dataMap.getObjEntities()));
-            this.classes.addAll(new ArrayList(dataMap.getEmbeddables()));
+            this.classes.addAll(dataMap.getObjEntities());
+            this.classes.addAll(dataMap.getEmbeddables());
+            this.classes.add(dataMap);
         }
-        this.selectedEntities = new HashSet();
-        this.selectedEmbeddables = new HashSet();
+        this.selectedEntities = new HashSet<>();
+        this.selectedEmbeddables = new HashSet<>();
+        this.selectedDataMaps = new HashSet<>();
     }
 
     public List<Object> getClasses() {
@@ -99,6 +102,62 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         this.validation = validationBuffer;
     }
 
+    public boolean updateDataMapSelection(Predicate predicate, DataMap dataMap) {
+
+        boolean modified = false;
+
+        for (Object classObj : classes) {
+            boolean select = predicate.evaluate(classObj);
+            if (classObj instanceof ObjEntity) {
+                if(dataMap.getObjEntities().contains(classObj)) {
+                    if (select) {
+                        if (selectedEntities.add(((ObjEntity) classObj).getName())) {
+                            modified = true;
+                        }
+                    } else {
+                        if (selectedEntities.remove(((ObjEntity) classObj).getName())) {
+                            modified = true;
+                        }
+                    }
+                }
+            }
+            else if (classObj instanceof Embeddable) {
+                if(dataMap.getEmbeddables().contains(classObj)) {
+                    if (select) {
+                        if (selectedEmbeddables.add(((Embeddable) classObj).getClassName())) {
+                            modified = true;
+                        }
+                    } else {
+                        if (selectedEmbeddables
+                                .remove(((Embeddable) classObj).getClassName())) {
+                            modified = true;
+                        }
+                    }
+                }
+            } else {
+                if(dataMap == classObj) {
+                    if (select) {
+                        if (selectedDataMaps.add(((DataMap) classObj).getName())) {
+                            modified = true;
+                        }
+                    } else {
+                        if (selectedDataMaps.remove(((DataMap) classObj).getName())) {
+                            modified = true;
+                        }
+                    }
+                }
+            }
+
+        }
+
+        if (modified) {
+            firePropertyChange(SELECTED_PROPERTY, null, null);
+        }
+
+        return modified;
+    }
+
+
     public boolean updateSelection(Predicate predicate) {
 
         boolean modified = false;
@@ -130,6 +189,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
                         modified = true;
                     }
                 }
+            } else if(classObj instanceof DataMap) {
+                if(select) {
+                    if(selectedDataMaps.add(((DataMap) classObj).getName())) {
+                        modified = true;
+                    }
+                } else {
+                    if(selectedDataMaps.remove(((DataMap) classObj).getName())) {
+                        modified = true;
+                    }
+                }
             }
 
         }
@@ -139,6 +208,7 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         }
 
         return modified;
+
     }
 
     public List<Embeddable> getSelectedEmbeddables() {
@@ -168,6 +238,17 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         return selected;
     }
 
+    public List<DataMap> getSelectedDataMaps() {
+        List<DataMap> selected = new ArrayList<>(selectedDataMaps.size());
+        for(Object classObj : classes) {
+            if(classObj instanceof DataMap
+                    && selectedDataMaps.contains(((DataMap) classObj).getName())) {
+                selected.add((DataMap) classObj);
+            }
+        }
+        return selected;
+    }
+
     public int getSelectedEntitiesSize() {
         return selectedEntities.size();
     }
@@ -176,6 +257,10 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         return selectedEmbeddables.size();
     }
 
+    public int getSelectedDataMapsSize() {
+        return selectedDataMaps.size();
+    }
+
     /**
      * Returns the first encountered validation problem for an antity matching the name or
      * null if the entity is valid or the entity is not present.
@@ -183,14 +268,14 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
     public String getProblem(Object obj) {
 
         String name = null;
-        
+
         if (obj instanceof ObjEntity) {
             name = ((ObjEntity) obj).getName();
         }
         else if (obj instanceof Embeddable) {
             name = ((Embeddable) obj).getClassName();
         }
-        
+
         if (validation == null) {
             return null;
         }
@@ -205,12 +290,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
 
     public boolean isSelected() {
         if (currentClass instanceof ObjEntity) {
-            return currentClass != null ? selectedEntities
-                    .contains(((ObjEntity) currentClass).getName()) : false;
+            return selectedEntities
+                    .contains(((ObjEntity) currentClass).getName());
         }
         if (currentClass instanceof Embeddable) {
-            return currentClass != null ? selectedEmbeddables
-                    .contains(((Embeddable) currentClass).getClassName()) : false;
+            return selectedEmbeddables
+                    .contains(((Embeddable) currentClass).getClassName());
+        }
+        if(currentClass instanceof DataMap) {
+            return selectedDataMaps
+                    .contains(((DataMap) currentClass).getName());
         }
         return false;
 
@@ -245,6 +334,17 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
                 }
             }
         }
+        if(currentClass instanceof DataMap) {
+            if(selectedFlag) {
+                if(selectedDataMaps.add(((DataMap) currentClass).getName())) {
+                    firePropertyChange(SELECTED_PROPERTY, null, null);
+                }
+            } else {
+                if(selectedDataMaps.remove(((DataMap) currentClass).getName())) {
+                    firePropertyChange(SELECTED_PROPERTY, null, null);
+                }
+            }
+        }
     }
 
     public Object getCurrentClass() {
@@ -261,13 +361,16 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
 
     public JLabel getItemName(Object obj) {
         String className;
-        Icon icon = null;
+        Icon icon;
         if (obj instanceof Embeddable) {
             className = ((Embeddable) obj).getClassName();
             icon = CellRenderers.iconForObject(new Embeddable());
-        } else {
+        } else if(obj instanceof ObjEntity) {
             className = ((ObjEntity) obj).getName();
             icon = CellRenderers.iconForObject(new ObjEntity());
+        } else {
+            className = ((DataMap) obj).getName();
+            icon = CellRenderers.iconForObject(new DataMap());
         }
         JLabel labelIcon = new JLabel();
         labelIcon.setIcon(icon);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
index 72d6167..9033052 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
@@ -28,9 +28,9 @@ import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
 import javax.swing.ScrollPaneConstants;
-import javax.swing.SwingConstants;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Container;
@@ -43,17 +43,19 @@ public class CodeGeneratorDialog extends JDialog {
 
     protected JTabbedPane tabs;
 
-    protected JButton generateButton;
+    private JButton generateButton;
     protected JButton cancelButton;
-    protected JLabel classesCount;
+    private JLabel classesCount;
 
-    public CodeGeneratorDialog(Component generatorPanel, Component entitySelectorPanel) {
+    CodeGeneratorDialog(Component generatorPanel, Component entitySelectorPanel) {
         super(Application.getFrame());
 
-        this.tabs = new JTabbedPane(SwingConstants.TOP);
-        this.tabs.setFocusable(false);
+        JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+        splitPane.setFocusable(false);
+
         this.generateButton = new JButton("Generate");
         getRootPane().setDefaultButton(generateButton);
+
         this.cancelButton = new JButton("Cancel");
         this.classesCount = new JLabel("No classes selected");
         classesCount.setFont(classesCount.getFont().deriveFont(10f));
@@ -62,12 +64,12 @@ public class CodeGeneratorDialog extends JDialog {
                 generatorPanel,
                 ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        scrollPane.setPreferredSize(new Dimension(800, 400));
+        scrollPane.setPreferredSize(new Dimension(630, 500));
 
         // assemble
 
-        tabs.addTab("Code Generator", scrollPane);
-        tabs.addTab("Classes", entitySelectorPanel);
+        splitPane.setLeftComponent(entitySelectorPanel);
+        splitPane.setRightComponent(scrollPane);
 
         JPanel messages = new JPanel(new BorderLayout());
         messages.add(classesCount, BorderLayout.WEST);
@@ -81,7 +83,7 @@ public class CodeGeneratorDialog extends JDialog {
 
         Container contentPane = getContentPane();
         contentPane.setLayout(new BorderLayout());
-        contentPane.add(tabs, BorderLayout.CENTER);
+        contentPane.add(splitPane, BorderLayout.CENTER);
         contentPane.add(buttons, BorderLayout.SOUTH);
 
         setTitle("Code Generation");

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index 0250f9c..e94e77a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -28,15 +28,14 @@ import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.swing.ObjectBinding;
 import org.apache.cayenne.util.Util;
 
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.DefaultComboBoxModel;
+import java.awt.Component;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 
@@ -46,27 +45,13 @@ import java.util.TreeMap;
 public class CustomModeController extends GeneratorController {
 
 	// correspond to non-public constants on MapClassGenerator.
-	static final String MODE_DATAMAP = "datamap";
-	static final String MODE_ENTITY = "entity";
-	static final String MODE_ALL = "all";
-
-	static final String DATA_MAP_MODE_LABEL = "DataMap generation";
-	static final String ENTITY_MODE_LABEL = "Entity and Embeddable generation";
-	static final String ALL_MODE_LABEL = "Generate all";
-
-	static final Map<String, String> modesByLabel = new HashMap<>();
-
-	static {
-		modesByLabel.put(DATA_MAP_MODE_LABEL, MODE_DATAMAP);
-		modesByLabel.put(ENTITY_MODE_LABEL, MODE_ENTITY);
-		modesByLabel.put(ALL_MODE_LABEL, MODE_ALL);
-	}
+	private static final String MODE_ENTITY = "entity";
 
 	protected CustomModePanel view;
-	protected CodeTemplateManager templateManager;
+	private CodeTemplateManager templateManager;
 
-	protected ObjectBinding superTemplate;
-	protected ObjectBinding subTemplate;
+	private ObjectBinding superTemplate;
+	private ObjectBinding subTemplate;
 
 	private CustomPreferencesUpdater preferencesUpdater;
 
@@ -77,9 +62,6 @@ public class CustomModeController extends GeneratorController {
 	public CustomModeController(CodeGeneratorControllerBase parent) {
 		super(parent);
 
-		Object[] modeChoices = new Object[] { ENTITY_MODE_LABEL, DATA_MAP_MODE_LABEL, ALL_MODE_LABEL };
-		view.getGenerationMode().setModel(new DefaultComboBoxModel(modeChoices));
-
 		// bind preferences and init defaults...
 
 		Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
@@ -119,8 +101,6 @@ public class CustomModeController extends GeneratorController {
 
 		builder.bindToAction(view.getManageTemplatesLink(), "popPreferencesAction()");
 
-		builder.bindToComboSelection(view.getGenerationMode(), "customPreferencesUpdater.mode").updateView();
-
 		builder.bindToStateChange(view.getOverwrite(), "customPreferencesUpdater.overwrite").updateView();
 
 		builder.bindToStateChange(view.getPairs(), "customPreferencesUpdater.pairs").updateView();
@@ -165,25 +145,9 @@ public class CustomModeController extends GeneratorController {
 	protected GeneratorControllerPanel createView() {
 		this.view = new CustomModePanel();
 
-		Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
-		for (Entry<DataMap, DataMapDefaults> entry : entities) {
-			StandardPanelComponent dataMapLine = createDataMapLineBy(entry.getKey(), entry.getValue());
-			dataMapLine.getDataMapName().setText(dataMapLine.getDataMap().getName());
-			BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), dataMapLine);
-			builder.bindToTextField(dataMapLine.getSuperclassPackage(), "preferences.superclassPackage").updateView();
-			this.view.addDataMapLine(dataMapLine);
-		}
 		return view;
 	}
 
-	private StandardPanelComponent createDataMapLineBy(DataMap dataMap, DataMapDefaults preferences) {
-		StandardPanelComponent dataMapLine = new StandardPanelComponent();
-		dataMapLine.setDataMap(dataMap);
-		dataMapLine.setPreferences(preferences);
-
-		return dataMapLine;
-	}
-
 	protected void updateTemplates() {
 		this.templateManager = getApplication().getCodeTemplateManager();
 
@@ -198,8 +162,8 @@ public class CustomModeController extends GeneratorController {
 		Collections.sort(subTemplates);
 		subTemplates.addAll(customTemplates);
 
-		this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel(subTemplates.toArray()));
-		this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel(superTemplates.toArray()));
+		this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
+		this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
 
 		superTemplate.updateView();
 		subTemplate.updateView();
@@ -211,14 +175,12 @@ public class CustomModeController extends GeneratorController {
 
 	public Collection<ClassGenerationAction> createGenerator() {
 
-		mode = modesByLabel.get(view.getGenerationMode().getSelectedItem()).toString();
-
 		Collection<ClassGenerationAction> generators = super.createGenerator();
 
-		String superKey = view.getSuperclassTemplate().getSelectedItem().toString();
+		String superKey = Objects.requireNonNull(view.getSuperclassTemplate().getSelectedItem()).toString();
 		String superTemplate = templateManager.getTemplatePath(superKey);
 
-		String subKey = view.getSubclassTemplate().getSelectedItem().toString();
+		String subKey = Objects.requireNonNull(view.getSubclassTemplate().getSelectedItem()).toString();
 		String subTemplate = templateManager.getTemplatePath(subKey);
 
 		for (ClassGenerationAction generator : generators) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index dcf8767..b951c58 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -34,24 +34,20 @@ import java.awt.FlowLayout;
 
 public class CustomModePanel extends GeneratorControllerPanel {
 
-    protected JComboBox generationMode;
-    protected JComboBox subclassTemplate;
-    protected JComboBox superclassTemplate;
+    private JComboBox<String> subclassTemplate;
+    private JComboBox<String> superclassTemplate;
     protected JCheckBox pairs;
-    protected JCheckBox overwrite;
-    protected JCheckBox usePackagePath;
-    protected JTextField outputPattern;
-    protected JCheckBox createPropertyNames;
+    private JCheckBox overwrite;
+    private JCheckBox usePackagePath;
+    private JTextField outputPattern;
+    private JCheckBox createPropertyNames;
 
-    private DefaultFormBuilder builder;
-
-    protected ActionLink manageTemplatesLink;
+    private ActionLink manageTemplatesLink;
 
     public CustomModePanel() {
 
-        this.generationMode = new JComboBox();
-        this.superclassTemplate = new JComboBox();
-        this.subclassTemplate = new JComboBox();
+        this.superclassTemplate = new JComboBox<>();
+        this.subclassTemplate = new JComboBox<>();
         this.pairs = new JCheckBox();
         this.overwrite = new JCheckBox();
         this.usePackagePath = new JCheckBox();
@@ -71,16 +67,13 @@ public class CustomModePanel extends GeneratorControllerPanel {
         // assemble
 
         FormLayout layout = new FormLayout(
-                "right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", "");
-        builder = new DefaultFormBuilder(layout);
+                "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
+        DefaultFormBuilder builder = new DefaultFormBuilder(layout);
         builder.setDefaultDialogBorder();
 
         builder.append("Output Directory:", outputFolder, selectOutputFolder);
         builder.nextLine();
 
-        builder.append("Generation Mode:", generationMode);
-        builder.nextLine();
-
         builder.append("Subclass Template:", subclassTemplate);
         builder.nextLine();
 
@@ -105,32 +98,22 @@ public class CustomModePanel extends GeneratorControllerPanel {
         setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
 
-        JPanel links = new JPanel(new FlowLayout(FlowLayout.TRAILING));
+        JPanel links = new JPanel(new FlowLayout(FlowLayout.RIGHT));
         links.add(manageTemplatesLink);
         add(links, BorderLayout.SOUTH);
 
         add(builder.getPanel(), BorderLayout.CENTER);
     }
 
-    public void addDataMapLine(StandardPanelComponent dataMapLine) {
-        dataMapLines.add(dataMapLine);
-        builder.append(dataMapLine, 4);
-        builder.nextLine();
-    }
-
-    public JComboBox getGenerationMode() {
-        return generationMode;
-    }
-
     public ActionLink getManageTemplatesLink() {
         return manageTemplatesLink;
     }
 
-    public JComboBox getSubclassTemplate() {
+    public JComboBox<String> getSubclassTemplate() {
         return subclassTemplate;
     }
 
-    public JComboBox getSuperclassTemplate() {
+    public JComboBox<String> getSuperclassTemplate() {
         return superclassTemplate;
     }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
index 6d3452b..8d39ceb 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorController.java
@@ -19,7 +19,7 @@
 
 package org.apache.cayenne.modeler.dialog.codegen;
 
-import org.apache.cayenne.CayenneException;
+import org.apache.cayenne.CayenneRuntimeException;
 import org.apache.cayenne.gen.ArtifactsGenerationMode;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.map.DataMap;
@@ -50,7 +50,6 @@ import javax.swing.JTextField;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
@@ -160,10 +159,9 @@ public abstract class GeneratorController extends CayenneController {
 
         // remove generic entities...
         Collection<ObjEntity> selectedEntities = new ArrayList<>(getParentController().getSelectedEntities());
-        Iterator<ObjEntity> it = selectedEntities.iterator();
-        while (it.hasNext()) {
-            if (it.next().isGeneric()) {
-                it.remove();
+        for(ObjEntity objEntity : selectedEntities) {
+            if(objEntity.isGeneric()) {
+                selectedEntities.remove(objEntity);
             }
         }
 
@@ -172,6 +170,13 @@ public abstract class GeneratorController extends CayenneController {
         for (DataMap map : getParentController().getDataMaps()) {
             try {
                 ClassGenerationAction generator = newGenerator();
+
+                if(getParentController().getSelectedDataMaps().contains(map)) {
+                    mode = ArtifactsGenerationMode.ALL.getLabel();
+                } else {
+                    mode = ArtifactsGenerationMode.ENTITY.getLabel();
+                }
+
                 generator.setArtifactsGenerationMode(mode);
                 generator.setDataMap(map);
 
@@ -195,15 +200,8 @@ public abstract class GeneratorController extends CayenneController {
                 generator.setDestDir(outputDir);
                 generator.setMakePairs(true);
 
-                for (StandardPanelComponent dataMapLine : dataMapLines) {
-                    if (dataMapLine.getDataMap() == map && !Util.isEmptyString(dataMapLine.getSuperclassPackage().getText())) {
-                        generator.setSuperPkg(dataMapLine.getSuperclassPackage().getText());
-                        break;
-                    }
-                }
-
                 generators.add(generator);
-            } catch (CayenneException exception) {
+            } catch (CayenneRuntimeException exception) {
                 JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
                 return null;
             }
@@ -258,7 +256,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateEmbeddable(Embeddable embeddable) {
+    private ValidationFailure validateEmbeddable(Embeddable embeddable) {
 
         String name = embeddable.getClassName();
 
@@ -314,7 +312,7 @@ public abstract class GeneratorController extends CayenneController {
         }
     }
 
-    protected ValidationFailure validateEntity(ObjEntity entity) {
+    private ValidationFailure validateEntity(ObjEntity entity) {
 
         String name = entity.getName();
 
@@ -344,7 +342,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateAttribute(ObjAttribute attribute) {
+    private ValidationFailure validateAttribute(ObjAttribute attribute) {
 
         String name = attribute.getEntity().getName();
 
@@ -375,7 +373,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
+    private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
 
         String name = attribute.getEntity().getName();
 
@@ -424,7 +422,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
+    private ValidationFailure validateRelationship(ObjRelationship relationship, boolean clientValidation) {
 
         String name = relationship.getSourceEntity().getName();
 
@@ -473,55 +471,23 @@ public abstract class GeneratorController extends CayenneController {
      * Returns a predicate for default entity selection in a given mode.
      */
     public Predicate getDefaultClassFilter() {
-        final ObjEntity selectedEntity = Application.getInstance().getFrameController().getProjectController()
-                .getCurrentObjEntity();
-
-        final Embeddable selectedEmbeddable = Application.getInstance().getFrameController().getProjectController()
-                .getCurrentEmbeddable();
-
-        // select a single entity
-        if (selectedEntity != null) {
-            final boolean hasProblem = getParentController().getProblem(selectedEntity.getName()) != null;
-
-            return new Predicate() {
-
-                public boolean evaluate(Object object) {
-                    return !hasProblem && object == selectedEntity;
+        return new Predicate() {
+            @Override
+            public boolean evaluate(Object o) {
+                if (o instanceof ObjEntity) {
+                    return GeneratorController.this.getParentController().getProblem(((ObjEntity) o).getName()) == null;
                 }
-            };
-        }
-        // select a single embeddable
-        else if (selectedEmbeddable != null) {
-            final boolean hasProblem = getParentController().getProblem(selectedEmbeddable.getClassName()) != null;
 
-            return new Predicate() {
-
-                public boolean evaluate(Object object) {
-                    return !hasProblem && object == selectedEmbeddable;
+                if (o instanceof Embeddable) {
+                    return GeneratorController.this.getParentController().getProblem(((Embeddable) o).getClassName()) == null;
                 }
-            };
-        }
-        // select all entities
-        else {
-
-            return new Predicate() {
 
-                public boolean evaluate(Object object) {
-                    if (object instanceof ObjEntity) {
-                        return getParentController().getProblem(((ObjEntity) object).getName()) == null;
-                    }
-
-                    if (object instanceof Embeddable) {
-                        return getParentController().getProblem(((Embeddable) object).getClassName()) == null;
-                    }
-
-                    return false;
-                }
-            };
-        }
+                return false;
+            }
+        };
     }
 
-    public File getOutputDir() {
+    private File getOutputDir() {
         String dir = ((GeneratorControllerPanel) getView()).getOutputFolder().getText();
         return dir != null ? new File(dir) : new File(System.getProperty("user.dir"));
     }
@@ -600,4 +566,5 @@ public abstract class GeneratorController extends CayenneController {
         }
         return path.toString();
     }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
index ddc7d5b..5d7594f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/GeneratorTabController.java
@@ -27,6 +27,7 @@ import org.apache.cayenne.swing.BindingBuilder;
 import org.apache.cayenne.util.Util;
 
 import java.awt.Component;
+import java.awt.Dimension;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -65,6 +66,7 @@ public class GeneratorTabController extends CayenneController {
 
         this.view = new GeneratorTabPanel(GENERATION_MODES, modePanels);
         initBindings();
+        view.setPreferredSize(new Dimension(600, 480));
     }
 
     public Component getView() {
@@ -82,8 +84,6 @@ public class GeneratorTabController extends CayenneController {
                 getApplication().getBindingFactory(),
                 this);
 
-        builder.bindToAction(view.getGenerationMode(), "updateModeAction()");
-
         CayenneProjectPreferences cayPrPref = application.getCayenneProjectPreferences();
 
         this.preferences = (PreferenceDetail) cayPrPref.getProjectDetailObject(
@@ -97,21 +97,12 @@ public class GeneratorTabController extends CayenneController {
         builder.bindToComboSelection(
                 view.getGenerationMode(),
                 "preferences.property['mode']").updateView();
-
-        updateModeAction();
     }
 
     public PreferenceDetail getPreferences() {
         return preferences;
     }
 
-    /**
-     * Resets selection to default values for a given controller.
-     */
-    public void updateModeAction() {
-        firePropertyChange(GENERATOR_PROPERTY, null, getGeneratorController());
-    }
-
     public GeneratorController getGeneratorController() {
         Object name = view.getGenerationMode().getSelectedItem();
         return (GeneratorController) controllers.get(name);

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
index e700779..1c3a27a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModeController.java
@@ -19,17 +19,13 @@
 
 package org.apache.cayenne.modeler.dialog.codegen;
 
-import org.apache.cayenne.gen.ArtifactsGenerationMode;
 import org.apache.cayenne.gen.ClassGenerationAction;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.modeler.pref.DataMapDefaults;
-import org.apache.cayenne.swing.BindingBuilder;
 
 import java.awt.Component;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Map.Entry;
-import java.util.Set;
 import java.util.TreeMap;
 
 public class StandardModeController extends GeneratorController {
@@ -65,42 +61,22 @@ public class StandardModeController extends GeneratorController {
 
     protected GeneratorControllerPanel createView() {
         this.view = new StandardModePanel();
-
-        Set<Entry<DataMap, DataMapDefaults>> entities = getMapPreferences().entrySet();
-        for (Entry<DataMap, DataMapDefaults> entry : entities) {
-            StandardPanelComponent dataMapLine = createDataMapLineBy(entry.getKey(), entry.getValue());
-            dataMapLine.getDataMapName().setText(dataMapLine.getDataMap().getName());
-            BindingBuilder builder = new BindingBuilder(getApplication().getBindingFactory(), dataMapLine);
-            builder.bindToTextField(
-                    dataMapLine.getSuperclassPackage(),
-                    "preferences.superclassPackage").updateView();
-            this.view.addDataMapLine(dataMapLine);
-        }
         return view;
     }
 
-    private StandardPanelComponent createDataMapLineBy(DataMap dataMap, DataMapDefaults preferences) {
-        StandardPanelComponent dataMapLine = new StandardPanelComponent();
-        dataMapLine.setDataMap(dataMap);
-        dataMapLine.setPreferences(preferences);
-
-        return dataMapLine;
-    }
-
     public Component getView() {
         return view;
     }
 
     @Override
     protected ClassGenerationAction newGenerator() {
-        return new ClassGenerationAction();
+        ClassGenerationAction action = new ClassGenerationAction();
+        getApplication().getInjector().injectMembers(action);
+        return action;
     }
 
     @Override
     public Collection<ClassGenerationAction> createGenerator() {
-        mode = view.getCreateDataMapClass().isSelected()
-                ? ArtifactsGenerationMode.ALL.getLabel()
-                : ArtifactsGenerationMode.ENTITY.getLabel();
         return super.createGenerator();
     }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/f8d8e50e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
index 199d511..cbb3f35 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/StandardModePanel.java
@@ -22,37 +22,21 @@ package org.apache.cayenne.modeler.dialog.codegen;
 import com.jgoodies.forms.builder.DefaultFormBuilder;
 import com.jgoodies.forms.layout.FormLayout;
 
-import javax.swing.JCheckBox;
 import java.awt.BorderLayout;
 
 public class StandardModePanel extends GeneratorControllerPanel {
 
     private DefaultFormBuilder builder;
-    protected JCheckBox createDataMapClass;
 
     public StandardModePanel() {
         FormLayout layout = new FormLayout(
-                "right:77dlu, 3dlu, fill:200:grow, 6dlu, fill:50dlu, 3dlu", "");
+                "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
 
         builder = new DefaultFormBuilder(layout);
         builder.append("Output Directory:", outputFolder, selectOutputFolder);
         builder.nextLine();
 
-        createDataMapClass = new JCheckBox();
-        builder.append("Create DataMap class:", createDataMapClass);
-        builder.nextLine();
-
         setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
     }
-
-    public void addDataMapLine(StandardPanelComponent dataMapLine) {
-        dataMapLines.add(dataMapLine);
-        builder.append(dataMapLine, 4);
-        builder.nextLine();
-    }
-
-    public JCheckBox getCreateDataMapClass() {
-        return createDataMapClass;
-    }
 }
\ No newline at end of file


[2/3] cayenne git commit: CAY-2476 Modeler: Fixed wrong behaviour of code generation dialog

Posted by nt...@apache.org.
CAY-2476 Modeler: Fixed wrong behaviour of code generation dialog


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/7bd2ca90
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/7bd2ca90
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/7bd2ca90

Branch: refs/heads/STABLE-4.0
Commit: 7bd2ca9002a9ce4747b1983f703eed88bb03f4dc
Parents: f8d8e50
Author: kkomyak <co...@gmail.com>
Authored: Wed Sep 19 12:21:39 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Tue Sep 25 16:15:01 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |  1 +
 .../cayenne/modeler/CodeTemplateManager.java    |  3 ++
 .../dialog/codegen/ClassesTabController.java    | 11 ++++--
 .../dialog/codegen/CodeGeneratorDialog.java     |  2 -
 .../dialog/codegen/CustomModeController.java    | 40 ++++++++++++++++----
 .../modeler/dialog/codegen/CustomModePanel.java | 12 +-----
 6 files changed, 45 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index f4f8281..6b18383 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -15,6 +15,7 @@ Date:
 Changes/New Features:
 
 CAY-2479 Modeler: update cgen dialog
+CAY-2476 Modeler: Fixed wrong behaviour of code generation dialog
 
 Bug Fixes:
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
index b914b9b..6b2fe0f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CodeTemplateManager.java
@@ -39,6 +39,7 @@ public class CodeTemplateManager {
 
 	public static final String STANDARD_SERVER_SUPERCLASS = "Standard Server Superclass";
 	public static final String STANDARD_SERVER_SUBCLASS = "Standard Server Subclass";
+	public static final String SINGLE_SERVER_CLASS = "Single Server class";
 	static final String STANDARD_CLIENT_SUPERCLASS = "Standard Client Superclass";
 	static final String STANDARD_CLIENT_SUBCLASS = "Standard Client Subclass";
 
@@ -64,6 +65,7 @@ public class CodeTemplateManager {
 		standardSubclassTemplates = new ArrayList<>(3);
 		standardSubclassTemplates.add(STANDARD_SERVER_SUBCLASS);
 		standardSubclassTemplates.add(STANDARD_CLIENT_SUBCLASS);
+		standardSubclassTemplates.add(SINGLE_SERVER_CLASS);
 
 		updateCustomTemplates(getTemplatePreferences(application));
 
@@ -72,6 +74,7 @@ public class CodeTemplateManager {
 		standardTemplates.put(STANDARD_CLIENT_SUPERCLASS, ClientClassGenerationAction.SUPERCLASS_TEMPLATE);
 		standardTemplates.put(STANDARD_SERVER_SUBCLASS, ClassGenerationAction.SUBCLASS_TEMPLATE);
 		standardTemplates.put(STANDARD_CLIENT_SUBCLASS, ClientClassGenerationAction.SUBCLASS_TEMPLATE);
+		standardTemplates.put(SINGLE_SERVER_CLASS, ClassGenerationAction.SINGLE_CLASS_TEMPLATE);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
index 2191e8c..da83e4d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/ClassesTabController.java
@@ -27,13 +27,16 @@ import org.apache.cayenne.swing.ObjectBinding;
 import org.apache.cayenne.swing.TableBindingBuilder;
 import org.apache.commons.collections.Predicate;
 
-import javax.swing.*;
-import java.awt.*;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
-import java.util.function.Consumer;
+import java.util.Map;
 
 public class ClassesTabController extends CayenneController {
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
index 9033052..44e3863 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CodeGeneratorDialog.java
@@ -37,8 +37,6 @@ import java.awt.Container;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
 
-/**
- */
 public class CodeGeneratorDialog extends JDialog {
 
     protected JTabbedPane tabs;

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
index e94e77a..4d2254f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModeController.java
@@ -29,7 +29,11 @@ import org.apache.cayenne.swing.ObjectBinding;
 import org.apache.cayenne.util.Util;
 
 import javax.swing.DefaultComboBoxModel;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
 import java.awt.Component;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -39,11 +43,13 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 
+import static org.apache.cayenne.modeler.CodeTemplateManager.*;
+import static org.apache.cayenne.modeler.dialog.pref.PreferenceDialog.TEMPLATES_KEY;
+
 /**
  * A controller for the custom generation mode.
  */
 public class CustomModeController extends GeneratorController {
-
 	// correspond to non-public constants on MapClassGenerator.
 	private static final String MODE_ENTITY = "entity";
 
@@ -69,11 +75,11 @@ public class CustomModeController extends GeneratorController {
 		for (Entry<DataMap, DataMapDefaults> entry : entities) {
 
 			if (Util.isEmptyString(entry.getValue().getSuperclassTemplate())) {
-				entry.getValue().setSuperclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUPERCLASS);
+				entry.getValue().setSuperclassTemplate(STANDARD_SERVER_SUPERCLASS);
 			}
 
 			if (Util.isEmptyString(entry.getValue().getSubclassTemplate())) {
-				entry.getValue().setSubclassTemplate(CodeTemplateManager.STANDARD_SERVER_SUBCLASS);
+				entry.getValue().setSubclassTemplate(STANDARD_SERVER_SUBCLASS);
 			}
 
 			if (Util.isEmptyString(entry.getValue().getProperty("mode"))) {
@@ -144,11 +150,10 @@ public class CustomModeController extends GeneratorController {
 
 	protected GeneratorControllerPanel createView() {
 		this.view = new CustomModePanel();
-
 		return view;
 	}
 
-	protected void updateTemplates() {
+	private void updateTemplates() {
 		this.templateManager = getApplication().getCodeTemplateManager();
 
 		List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
@@ -165,10 +170,27 @@ public class CustomModeController extends GeneratorController {
 		this.view.getSubclassTemplate().setModel(new DefaultComboBoxModel<>(subTemplates.toArray(new String[0])));
 		this.view.getSuperclassTemplate().setModel(new DefaultComboBoxModel<>(superTemplates.toArray(new String[0])));
 
+		JCheckBox pairs = this.view.getPairs();
+		updateView();
+		pairs.addItemListener(new ItemListener() {
+			@Override
+			public void itemStateChanged(ItemEvent e) {
+				updateView();
+			}
+		});
+
 		superTemplate.updateView();
 		subTemplate.updateView();
 	}
 
+	private void updateView() {
+		boolean selected = view.getPairs().isSelected();
+		JComboBox<String> subclassTemplate = view.getSubclassTemplate();
+		subclassTemplate.setSelectedItem(selected ? STANDARD_SERVER_SUBCLASS : SINGLE_SERVER_CLASS);
+		view.getSuperclassTemplate().setEnabled(selected);
+		view.getOverwrite().setEnabled(!selected);
+	}
+
 	public Component getView() {
 		return view;
 	}
@@ -200,12 +222,16 @@ public class CustomModeController extends GeneratorController {
 	}
 
 	public void popPreferencesAction() {
-		new PreferenceDialog(getApplication().getFrameController()).startupAction(PreferenceDialog.TEMPLATES_KEY);
+		new PreferenceDialog(getApplication().getFrameController()).startupAction(TEMPLATES_KEY);
 		updateTemplates();
 	}
 
 	@Override
 	protected ClassGenerationAction newGenerator() {
-		return new ClassGenerationAction();
+		ClassGenerationAction action = new ClassGenerationAction();
+		getApplication().getInjector().injectMembers(action);
+		return action;
 	}
+
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/7bd2ca90/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
index b951c58..ddaceb2 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/codegen/CustomModePanel.java
@@ -27,8 +27,6 @@ import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JPanel;
 import javax.swing.JTextField;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
 import java.awt.BorderLayout;
 import java.awt.FlowLayout;
 
@@ -56,16 +54,7 @@ public class CustomModePanel extends GeneratorControllerPanel {
         this.manageTemplatesLink = new ActionLink("Customize Templates...");
         manageTemplatesLink.setFont(manageTemplatesLink.getFont().deriveFont(10f));
 
-        pairs.addChangeListener(new ChangeListener() {
-
-            public void stateChanged(ChangeEvent e) {
-                superclassTemplate.setEnabled(pairs.isSelected());
-                overwrite.setEnabled(!pairs.isSelected());
-            }
-        });
-
         // assemble
-
         FormLayout layout = new FormLayout(
                 "right:77dlu, 1dlu, fill:100:grow, 1dlu, left:80dlu, 1dlu", "");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
@@ -136,4 +125,5 @@ public class CustomModePanel extends GeneratorControllerPanel {
     public JCheckBox getCreatePropertyNames() {
         return createPropertyNames;
     }
+
 }


[3/3] cayenne git commit: Merge PR #325

Posted by nt...@apache.org.
Merge PR #325


Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/37d83244
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/37d83244
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/37d83244

Branch: refs/heads/STABLE-4.0
Commit: 37d8324438e618099fcf8e1ff179d961c069e25a
Parents: 20f9d38 7bd2ca9
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Oct 1 18:04:53 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Oct 1 18:04:53 2018 +0300

----------------------------------------------------------------------
 RELEASE-NOTES.txt                               |   2 +
 .../cayenne/gen/ClassGenerationAction.java      |   2 +-
 .../gen/ClientClassGenerationAction.java        |   9 +-
 .../cayenne/modeler/CodeTemplateManager.java    |   3 +
 .../modeler/action/GenerateCodeAction.java      |  30 +----
 .../dialog/codegen/ClassesTabController.java    | 132 +++++++++++++++---
 .../modeler/dialog/codegen/ClassesTabPanel.java |  89 +++++++++++--
 .../dialog/codegen/ClientModeController.java    |  39 ------
 .../dialog/codegen/CodeGeneratorController.java |  18 ++-
 .../codegen/CodeGeneratorControllerBase.java    | 133 ++++++++++++++++---
 .../dialog/codegen/CodeGeneratorDialog.java     |  24 ++--
 .../dialog/codegen/CustomModeController.java    | 100 ++++++--------
 .../modeler/dialog/codegen/CustomModePanel.java |  57 +++-----
 .../dialog/codegen/GeneratorController.java     |  91 ++++---------
 .../dialog/codegen/GeneratorTabController.java  |  13 +-
 .../dialog/codegen/StandardModeController.java  |  30 +----
 .../dialog/codegen/StandardModePanel.java       |  18 +--
 17 files changed, 441 insertions(+), 349 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/37d83244/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --cc RELEASE-NOTES.txt
index 7b5e681,6b18383..ef6fa06
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@@ -12,11 -12,10 +12,13 @@@ Release: 4.0.
  Date:
  ----------------------------------
  
 +=======
  Changes/New Features:
  
 -CAY-2479 Modeler: update cgen dialog
 +CAY-2473 Modeler: cleanup attributes and relationship editors
 +CAY-2475 Modeler: move inheritance icon to name column in objAttr table and objRel table
+ CAY-2476 Modeler: Fixed wrong behaviour of code generation dialog
++CAY-2479 Modeler: update cgen dialog
  
  Bug Fixes: