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/07/07 15:10:13 UTC

[1/3] cayenne git commit: Update cgen dialog

Repository: cayenne
Updated Branches:
  refs/heads/master e980ed199 -> 01112fe60


Update cgen dialog

(cherry picked from commit a799a39)


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

Branch: refs/heads/master
Commit: e452059bb7a56e66bf3c2ee5fa202f66dbb7de5c
Parents: 22c2e78
Author: Arseni Bulatski <an...@gmail.com>
Authored: Fri Jul 6 15:59:27 2018 +0300
Committer: Arseni Bulatski <an...@gmail.com>
Committed: Fri Jul 6 16:26:13 2018 +0300

----------------------------------------------------------------------
 .../modeler/action/GenerateCodeAction.java      |  30 +----
 .../dialog/codegen/ClassesTabController.java    | 104 +++++++++++++++---
 .../modeler/dialog/codegen/ClassesTabPanel.java |  96 ++++++++++++----
 .../dialog/codegen/ClientModeController.java    |  24 ----
 .../dialog/codegen/CodeGeneratorController.java |  18 ++-
 .../codegen/CodeGeneratorControllerBase.java    | 110 ++++++++++++++++++-
 .../dialog/codegen/CodeGeneratorDialog.java     |  28 +++--
 .../dialog/codegen/CustomModeController.java    |  65 +++--------
 .../modeler/dialog/codegen/CustomModePanel.java |  59 +++-------
 .../dialog/codegen/GeneratorController.java     |  62 ++++-------
 .../dialog/codegen/GeneratorTabController.java  |  13 +--
 .../dialog/codegen/StandardModeController.java  |  26 -----
 .../dialog/codegen/StandardModePanel.java       |  18 +--
 .../modeler/editor/SelectQueryPrefetchTab.java  |   4 +-
 14 files changed, 359 insertions(+), 298 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/e452059b/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/e452059b/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 a5b2e6a..7e1671c 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,27 +19,56 @@
 
 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 javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import java.awt.Component;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 public class ClassesTabController extends CayenneController {
 
     public static final String GENERATE_PROPERTY = "generate";
 
     protected ClassesTabPanel view;
-    protected ObjectBinding tableBinding;
 
-    public ClassesTabController(CodeGeneratorControllerBase parent) {
+    private Map<DataMap, ObjectBinding> objectBindings;
+
+    protected Collection<DataMap> dataMaps;
+
+    protected Map<DataMap, List<Object>> objectList;
+
+    private List<Object> currentCollection;
+
+    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<>(Arrays.asList(dataMap));
+            list.addAll(Stream.concat(dataMap.getObjEntities().stream(), dataMap.getEmbeddables().stream())
+                    .collect(Collectors.toList()));
+            objectList.put(dataMap, list);
+        }
+
+        this.objectBindings = new HashMap<>();
+        this.dataMaps = dataMaps;
+        this.view = new ClassesTabPanel(dataMaps);
+
         initBindings();
     }
 
@@ -67,6 +96,7 @@ public class ClassesTabController extends CayenneController {
                 Boolean.class,
                 true,
                 Boolean.TRUE);
+
         tableBuilder.addColumn(
                 "Class",
                 "parent.getItemName(#item)",
@@ -79,10 +109,22 @@ 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(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(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
+            }
+        }
+    }
+
+    public List<Object> getCurrentCollection() {
+        return currentCollection;
     }
 
     public boolean isSelected() {
@@ -92,13 +134,21 @@ 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);
@@ -114,7 +164,35 @@ public class ClassesTabController extends CayenneController {
      */
     public void checkAllAction() {
         if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
-            tableBinding.updateView();
+            dataMaps.forEach(dataMap -> {
+                if(objectBindings.get(dataMap) != null) {
+                    currentCollection = objectList.get(dataMap);
+                    objectBindings.get(dataMap).updateView();
+                }
+            });
+        }
+    }
+
+    private void checkDataMap(DataMap dataMap, boolean selected) {
+        if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
+            if(objectBindings.get(dataMap) != null) {
+                currentCollection = objectList.get(dataMap);
+                objectBindings.get(dataMap).updateView();
+            }
+            if(isAllMapsSelected()) {
+                view.getCheckAll().setSelected(true);
+            }
+        }
+    }
+
+    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/e452059b/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..f1a8132 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,59 +29,110 @@ 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.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  */
 public class ClassesTabPanel extends JPanel {
 
-    protected JTable table;
     protected JCheckBox checkAll;
     protected JLabel checkAllLabel;
 
-    public ClassesTabPanel() {
+    private Map<DataMap, JTable> dataMapTables;
 
-        this.table = new JTable();
-        this.table.setRowHeight(22);
+    private Map<DataMap, JCheckBox> dataMapJCheckBoxMap;
+
+    public ClassesTabPanel(Collection<DataMap> dataMaps) {
+        dataMapTables = new HashMap<>();
+        dataMapJCheckBoxMap = new HashMap<>();
 
         // TODO: andrus 04/07/2006 - is there an easy way to stick that checkbox in the
         // table header????
         this.checkAll = new JCheckBox();
         this.checkAllLabel = new JLabel("Check All Classes");
 
-        checkAll.addItemListener(new ItemListener() {
-
-            public void itemStateChanged(ItemEvent event) {
-                if (checkAll.isSelected()) {
-                    checkAllLabel.setText("Uncheck All Classess");
-                }
-                else {
-                    checkAllLabel.setText("Check All Classes");
-                }
+        checkAll.addItemListener(event -> {
+            if (checkAll.isSelected()) {
+                checkAllLabel.setText("Uncheck All Classess");
+                dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).setSelected(true));
+            }
+            else {
+                checkAllLabel.setText("Check All Classes");
+                dataMapJCheckBoxMap.keySet().forEach(val -> dataMapJCheckBoxMap.get(val).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/e452059b/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 079d70c..4d5335f 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,15 +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 java.util.ArrayList;
-import java.util.Map.Entry;
-import java.util.Set;
 import java.util.TreeMap;
-import java.util.function.Predicate;
 
 public class ClientModeController extends StandardModeController {
 
@@ -75,29 +71,9 @@ 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();

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e452059b/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 d471682..f4395e9 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
@@ -49,7 +49,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);
     }
 
@@ -123,9 +123,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/e452059b/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 34d208b..5d1201d 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,10 +52,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
 
     protected List<Object> classes;
 
-    protected Set<String> selectedEntities;
-    protected Set<String> selectedEmbeddables;
+    private Set<String> selectedEntities;
+    private Set<String> selectedEmbeddables;
+    private Set<String> selectedDataMaps;
 
-    protected transient Object currentClass;
+    private transient Object currentClass;
 
     public CodeGeneratorControllerBase(CayenneController parent, Collection<DataMap> dataMaps) {
         super(parent);
@@ -66,9 +67,11 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         for(DataMap dataMap:dataMaps){
             this.classes.addAll(dataMap.getObjEntities());
             this.classes.addAll(dataMap.getEmbeddables());
+            this.classes.add(dataMap);
         }
         this.selectedEntities = new HashSet<>();
         this.selectedEmbeddables = new HashSet<>();
+        this.selectedDataMaps = new HashSet<>();
     }
 
     public List<Object> getClasses() {
@@ -130,6 +133,71 @@ 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;
+                    }
+                }
+            }
+
+        }
+
+        if (modified) {
+            firePropertyChange(SELECTED_PROPERTY, null, null);
+        }
+
+        return modified;
+    }
+
+    public boolean updateDataMapSelection(Predicate<Object> predicate, DataMap dataMap) {
+
+        boolean modified = false;
+
+        for (Object classObj : classes) {
+            boolean select = predicate.test(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;
+                        }
+                    }
+                }
             }
 
         }
@@ -168,6 +236,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 +255,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.
@@ -212,6 +295,10 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
             return selectedEmbeddables
                     .contains(((Embeddable) currentClass).getClassName());
         }
+        if(currentClass instanceof DataMap) {
+            return selectedDataMaps
+                    .contains(((DataMap) currentClass).getName());
+        }
         return false;
 
     }
@@ -245,6 +332,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() {
@@ -265,9 +363,12 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         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);
@@ -275,4 +376,5 @@ public abstract class CodeGeneratorControllerBase extends CayenneController {
         labelIcon.setText(className);
         return labelIcon;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e452059b/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..7ed60e2 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,8 @@ import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
-import javax.swing.JTabbedPane;
+import javax.swing.JSplitPane;
 import javax.swing.ScrollPaneConstants;
-import javax.swing.SwingConstants;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Container;
@@ -41,33 +40,32 @@ import java.awt.FlowLayout;
  */
 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));
 
+
         JScrollPane scrollPane = new JScrollPane(
                 generatorPanel,
                 ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-        scrollPane.setPreferredSize(new Dimension(800, 400));
-
-        // assemble
+        scrollPane.setPreferredSize(new Dimension(630, 500));
 
-        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 +79,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/e452059b/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 8d66407..3c5d047 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.List;
 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();
@@ -164,27 +144,10 @@ 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() {
+	private void updateTemplates() {
 		this.templateManager = getApplication().getCodeTemplateManager();
 
 		List<String> customTemplates = new ArrayList<>(templateManager.getCustomTemplates().keySet());
@@ -198,8 +161,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 +174,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/e452059b/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..7571de0 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,31 +27,25 @@ 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;
 
 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;
+    private ActionLink manageTemplatesLink;
 
-    protected ActionLink manageTemplatesLink;
+    CustomModePanel() {
 
-    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();
@@ -60,27 +54,20 @@ 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());
-            }
+        pairs.addChangeListener(e -> {
+            superclassTemplate.setEnabled(pairs.isSelected());
+            overwrite.setEnabled(!pairs.isSelected());
         });
 
         // 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 +92,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/e452059b/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 b369928..082a08f 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
@@ -49,7 +49,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;
@@ -167,6 +166,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);
 
@@ -191,13 +197,6 @@ public abstract class GeneratorController extends CayenneController {
                 generator.setMakePairs(true);
                 generator.setForce(true);
 
-                for (StandardPanelComponent dataMapLine : dataMapLines) {
-                    if (dataMapLine.getDataMap() == map && !Util.isEmptyString(dataMapLine.getSuperclassPackage().getText())) {
-                        generator.setSuperPkg(dataMapLine.getSuperclassPackage().getText());
-                        break;
-                    }
-                }
-
                 generators.add(generator);
             } catch (CayenneRuntimeException exception) {
                 JOptionPane.showMessageDialog(this.getView(), exception.getUnlabeledMessage());
@@ -254,7 +253,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateEmbeddable(Embeddable embeddable) {
+    private ValidationFailure validateEmbeddable(Embeddable embeddable) {
 
         String name = embeddable.getClassName();
 
@@ -310,7 +309,7 @@ public abstract class GeneratorController extends CayenneController {
         }
     }
 
-    protected ValidationFailure validateEntity(ObjEntity entity) {
+    private ValidationFailure validateEntity(ObjEntity entity) {
 
         String name = entity.getName();
 
@@ -340,7 +339,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateAttribute(ObjAttribute attribute) {
+    private ValidationFailure validateAttribute(ObjAttribute attribute) {
 
         String name = attribute.getEntity().getName();
 
@@ -371,7 +370,7 @@ public abstract class GeneratorController extends CayenneController {
         return null;
     }
 
-    protected ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
+    private ValidationFailure validateEmbeddedAttribute(ObjAttribute attribute) {
 
         String name = attribute.getEntity().getName();
 
@@ -420,7 +419,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();
 
@@ -469,37 +468,20 @@ 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();
-
-        if (selectedEntity != null) {
-            // select a single entity
-            final boolean hasProblem = getParentController().getProblem(selectedEntity.getName()) != null;
-            return object -> !hasProblem && object == selectedEntity;
-        } else if (selectedEmbeddable != null) {
-            // select a single embeddable
-            final boolean hasProblem = getParentController().getProblem(selectedEmbeddable.getClassName()) != null;
-            return object -> !hasProblem && object == selectedEmbeddable;
-        } else {
-            // select all entities
-            return object -> {
-                if (object instanceof ObjEntity) {
-                    return getParentController().getProblem(((ObjEntity) object).getName()) == null;
-                }
+        return object -> {
+            if (object instanceof ObjEntity) {
+                return getParentController().getProblem(((ObjEntity) object).getName()) == null;
+            }
 
-                if (object instanceof Embeddable) {
-                    return getParentController().getProblem(((Embeddable) object).getClassName()) == 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"));
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e452059b/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/e452059b/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 8443956..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,28 +61,9 @@ 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;
     }
@@ -100,9 +77,6 @@ public class StandardModeController extends GeneratorController {
 
     @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/e452059b/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

http://git-wip-us.apache.org/repos/asf/cayenne/blob/e452059b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
index 82719d8..6fd9fd0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SelectQueryPrefetchTab.java
@@ -61,7 +61,9 @@ public class SelectQueryPrefetchTab extends SelectQueryOrderingTab {
 
     protected void initFromModel(){
         super.initFromModel();
-        setUpPrefetchBox(table.getColumnModel().getColumn(2));
+        if(table.getColumnModel().getColumns().hasMoreElements()) {
+            setUpPrefetchBox(table.getColumnModel().getColumn(2));
+        }
     }
 
     protected void setUpPrefetchBox(TableColumn column) {


[2/3] cayenne git commit: Merge PR #295

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


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

Branch: refs/heads/master
Commit: 54a9706615b1478fbe9a407fa097a70c49f91620
Parents: e980ed1 e452059
Author: Nikita Timofeev <st...@gmail.com>
Authored: Sat Jul 7 18:01:16 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Sat Jul 7 18:01:16 2018 +0300

----------------------------------------------------------------------
 .../modeler/action/GenerateCodeAction.java      |  30 +----
 .../dialog/codegen/ClassesTabController.java    | 104 +++++++++++++++---
 .../modeler/dialog/codegen/ClassesTabPanel.java |  96 ++++++++++++----
 .../dialog/codegen/ClientModeController.java    |  24 ----
 .../dialog/codegen/CodeGeneratorController.java |  18 ++-
 .../codegen/CodeGeneratorControllerBase.java    | 110 ++++++++++++++++++-
 .../dialog/codegen/CodeGeneratorDialog.java     |  28 +++--
 .../dialog/codegen/CustomModeController.java    |  65 +++--------
 .../modeler/dialog/codegen/CustomModePanel.java |  59 +++-------
 .../dialog/codegen/GeneratorController.java     |  62 ++++-------
 .../dialog/codegen/GeneratorTabController.java  |  13 +--
 .../dialog/codegen/StandardModeController.java  |  26 -----
 .../dialog/codegen/StandardModePanel.java       |  18 +--
 .../modeler/editor/SelectQueryPrefetchTab.java  |   4 +-
 14 files changed, 359 insertions(+), 298 deletions(-)
----------------------------------------------------------------------



[3/3] cayenne git commit: cleanup

Posted by nt...@apache.org.
cleanup


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

Branch: refs/heads/master
Commit: 01112fe600f70747ae7c9f34b47a1978fddeffd6
Parents: 54a9706
Author: Nikita Timofeev <st...@gmail.com>
Authored: Sat Jul 7 18:10:04 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Sat Jul 7 18:10:04 2018 +0300

----------------------------------------------------------------------
 .../dialog/codegen/ClassesTabController.java    | 37 +++++++++++---------
 1 file changed, 21 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/01112fe6/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 7e1671c..acd94d7 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
@@ -28,15 +28,13 @@ import org.apache.cayenne.swing.TableBindingBuilder;
 
 import javax.swing.JCheckBox;
 import javax.swing.JLabel;
+import javax.swing.JTable;
 import java.awt.Component;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 public class ClassesTabController extends CayenneController {
 
@@ -59,9 +57,10 @@ public class ClassesTabController extends CayenneController {
 
         this.objectList = new HashMap<>();
         for(DataMap dataMap : dataMaps) {
-            List<Object> list = new ArrayList<>(Arrays.asList(dataMap));
-            list.addAll(Stream.concat(dataMap.getObjEntities().stream(), dataMap.getEmbeddables().stream())
-                    .collect(Collectors.toList()));
+            List<Object> list = new ArrayList<>();
+            list.add(dataMap);
+            list.addAll(dataMap.getObjEntities());
+            list.addAll(dataMap.getEmbeddables());
             objectList.put(dataMap, list);
         }
 
@@ -112,13 +111,15 @@ public class ClassesTabController extends CayenneController {
                 "XXXXXXXXXXXXXXXXXXXXXXXXXXX");
 
         for(DataMap dataMap : dataMaps) {
-            if(view.getDataMapTables().get(dataMap) != null) {
+            JTable table = view.getDataMapTables().get(dataMap);
+            if(table != 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());
+                objectBindings.put(dataMap, tableBuilder.bindToTable(table, "currentCollection"));
+                table.getColumnModel().getColumn(1).setCellRenderer(new ImageRendererColumn());
             }
-            if(view.getDataMapJCheckBoxMap().get(dataMap) != null) {
-                view.getDataMapJCheckBoxMap().get(dataMap).addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
+            JCheckBox checkBox = view.getDataMapJCheckBoxMap().get(dataMap);
+            if(checkBox != null) {
+                checkBox.addActionListener(val -> checkDataMap(dataMap, ((JCheckBox)val.getSource()).isSelected()));
             }
         }
     }
@@ -148,7 +149,9 @@ public class ClassesTabController extends CayenneController {
      * A callback action that updates the state of Select All checkbox.
      */
     public void classSelectedAction() {
-        int selectedCount = getParentController().getSelectedEntitiesSize() + getParentController().getSelectedEmbeddablesSize() + getParentController().getSelectedDataMapsSize();
+        int selectedCount = getParentController().getSelectedEntitiesSize()
+                + getParentController().getSelectedEmbeddablesSize()
+                + getParentController().getSelectedDataMapsSize();
 
         if (selectedCount == 0) {
             view.getCheckAll().setSelected(false);
@@ -165,9 +168,10 @@ public class ClassesTabController extends CayenneController {
     public void checkAllAction() {
         if (getParentController().updateSelection(view.getCheckAll().isSelected() ? o -> true : o -> false)) {
             dataMaps.forEach(dataMap -> {
-                if(objectBindings.get(dataMap) != null) {
+                ObjectBinding binding = objectBindings.get(dataMap);
+                if(binding != null) {
                     currentCollection = objectList.get(dataMap);
-                    objectBindings.get(dataMap).updateView();
+                    binding.updateView();
                 }
             });
         }
@@ -175,9 +179,10 @@ public class ClassesTabController extends CayenneController {
 
     private void checkDataMap(DataMap dataMap, boolean selected) {
         if (getParentController().updateDataMapSelection(selected ? o -> true : o -> false, dataMap)){
-            if(objectBindings.get(dataMap) != null) {
+            ObjectBinding binding = objectBindings.get(dataMap);
+            if(binding != null) {
                 currentCollection = objectList.get(dataMap);
-                objectBindings.get(dataMap).updateView();
+                binding.updateView();
             }
             if(isAllMapsSelected()) {
                 view.getCheckAll().setSelected(true);