This is an automated email from the ASF dual-hosted git repository.

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git


The following commit(s) were added to refs/heads/master by this push:
     new 0383b95f6 CAT-2938 Modeler: prettier DB Import - part 1
0383b95f6 is described below

commit 0383b95f62e2966cb52e1e6af3d3a839ae0c97c3
Author: Andrus Adamchik <[email protected]>
AuthorDate: Fri May 8 20:08:40 2026 -0400

    CAT-2938 Modeler: prettier DB Import - part 1
---
 RELEASE-NOTES.txt                                  |   1 +
 .../{TreeToolbarPanel.java => ConfigToolbar.java}  |   7 +-
 .../{SourceTargetPanel.java => DBSchemaPanel.java} |   4 +-
 .../editor/datamap/dbimport/DbImportTree.java      |  41 ++++++++
 .../datamap/dbimport/DbImportTreeCellEditor.java   |  21 +++-
 .../datamap/dbimport/DbImportTreeCellRenderer.java |  13 ++-
 .../editor/datamap/dbimport/DbImportTreeModel.java |   7 --
 .../editor/datamap/dbimport/DbImportView.java      | 115 +++++++++------------
 .../editor/datamap/dbimport/DbSchemaToolbar.java   |  55 ++++++++++
 .../dbimport/ReverseEngineeringTreePanel.java      |  12 +--
 .../dbimport/action/LoadDbSchemaAction.java        |  10 +-
 .../dbimport/action/MoveImportNodeAction.java      |   4 +-
 .../datamap/dbimport/tree/ColorTreeRenderer.java   |   3 +-
 13 files changed, 193 insertions(+), 100 deletions(-)

diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 081ac17d8..52c230862 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -36,6 +36,7 @@ CAY-2930 Modeler: remove "rename" button from DB Import 
toolbar
 CAY-2932 Remove "Generate Classes" menu
 CAY-2933 Modeler: DB Type Column Unreadable for Selected Rows
 CAY-2937 Decommission "graph" Support
+CAY-2938 Modeler: prettier DB Import - part 1
 
 Bug Fixes:
 
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/TreeToolbarPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ConfigToolbar.java
similarity index 96%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/TreeToolbarPanel.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ConfigToolbar.java
index 22563aa02..54affc1c3 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/TreeToolbarPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ConfigToolbar.java
@@ -34,7 +34,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-class TreeToolbarPanel extends JToolBar {
+class ConfigToolbar extends JToolBar {
 
     private final JButton schemaButton;
     private final JButton catalogButton;
@@ -45,13 +45,12 @@ class TreeToolbarPanel extends JToolBar {
     private final JButton includeProcedureButton;
     private final JButton excludeProcedureButton;
     private final JButton deleteButton;
-    private final JButton configureButton;
     private final JButton sortButton;
     private final DbImportTree reverseEngineeringTree;
 
     private final Map<Class<?>, List<JButton>> levels;
 
-    TreeToolbarPanel(DbImportTree reverseEngineeringTree, DbImportActions 
actions) {
+    ConfigToolbar(DbImportTree reverseEngineeringTree, DbImportActions 
actions) {
         this.reverseEngineeringTree = reverseEngineeringTree;
 
         this.schemaButton = actions.getAddSchemaAction().buildButton(0);
@@ -64,7 +63,6 @@ class TreeToolbarPanel extends JToolBar {
         this.excludeProcedureButton = 
actions.getAddExcludeProcedureAction().buildButton(3);
         this.sortButton = actions.getSortNodesAction().buildButton(0);
         this.deleteButton = actions.getDeleteNodeAction().buildButton(0);
-        this.configureButton = 
actions.getGetDbConnectionAction().buildButton(0);
 
         this.levels = initLevels();
         addButtons();
@@ -160,7 +158,6 @@ class TreeToolbarPanel extends JToolBar {
         this.add(sortButton);
         this.addSeparator();
         this.add(deleteButton);
-        this.add(configureButton);
     }
 
     void changeToolbarButtonsState(boolean state) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/SourceTargetPanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DBSchemaPanel.java
similarity index 99%
rename from 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/SourceTargetPanel.java
rename to 
modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DBSchemaPanel.java
index 01cb256e0..969de1254 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/SourceTargetPanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DBSchemaPanel.java
@@ -55,7 +55,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-public class SourceTargetPanel extends JPanel {
+public class DBSchemaPanel extends JPanel {
 
     private static final int ROOT_LEVEL = 14;
     private static final int FIRST_LEVEL = 11;
@@ -79,7 +79,7 @@ public class SourceTargetPanel extends JPanel {
 
     private ImportSourceTree importSourceTree;
 
-    public SourceTargetPanel(DbImportTree sourceTree, DbImportTree targetTree, 
DbImportActions actions) {
+    public DBSchemaPanel(DbImportTree sourceTree, DbImportTree targetTree, 
DbImportActions actions) {
         this.targetTree = targetTree;
         this.sourceTree = sourceTree;
         this.actions = actions;
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTree.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTree.java
index 695cd7f62..1f1181686 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTree.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTree.java
@@ -32,11 +32,18 @@ import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.DbImpo
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.TransferableNode;
 
 import javax.swing.JTree;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
 import javax.swing.event.TreeExpansionEvent;
 import javax.swing.event.TreeExpansionListener;
 import javax.swing.plaf.basic.BasicTreeUI;
 import javax.swing.tree.TreeNode;
 import javax.swing.tree.TreePath;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Insets;
+import java.awt.Rectangle;
+import java.awt.event.MouseEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -394,5 +401,39 @@ public class DbImportTree extends JTree {
             return super.shouldPaintExpandControl(path, row, isExpanded, 
hasBeenExpanded, isLeaf)
                     && (childCount > 1 || !onlyEnforcerChild);
         }
+
+        @Override
+        protected void paintRow(Graphics g, Rectangle clipBounds, Insets 
insets, Rectangle bounds,
+                                TreePath path, int row, boolean isExpanded, 
boolean hasBeenExpanded, boolean isLeaf) {
+            if (tree.isRowSelected(row)) {
+                Color selBg = UIManager.getColor("Tree.selectionBackground");
+                if (selBg != null) {
+                    g.setColor(selBg);
+                    g.fillRect(0, bounds.y, tree.getWidth(), bounds.height);
+                }
+            }
+            super.paintRow(g, clipBounds, insets, bounds, path, row, 
isExpanded, hasBeenExpanded, isLeaf);
+        }
+
+        @Override
+        protected boolean startEditing(TreePath path, MouseEvent event) {
+            boolean started = super.startEditing(path, event);
+            if (started) {
+                SwingUtilities.invokeLater(() -> {
+                    if (editingComponent != null) {
+                        Rectangle nodeBounds = getPathBounds(tree, path);
+                        if (nodeBounds != null) {
+                            int fullWidth = tree.getWidth() - nodeBounds.x;
+                            if (fullWidth > editingComponent.getWidth()) {
+                                editingComponent.setSize(fullWidth, 
editingComponent.getHeight());
+                                editingComponent.doLayout();
+                                tree.repaint();
+                            }
+                        }
+                    }
+                });
+            }
+            return started;
+        }
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellEditor.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellEditor.java
index ed43e346d..1637f89dd 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellEditor.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellEditor.java
@@ -39,6 +39,7 @@ import java.util.regex.Pattern;
 public class DbImportTreeCellEditor extends DefaultTreeCellEditor {
 
     private final DbImportActions actions;
+    private DbImportTreeNode editingNode;
 
     public DbImportTreeCellEditor(JTree tree, DefaultTreeCellRenderer 
renderer, DbImportActions actions) {
         super(tree, renderer);
@@ -70,12 +71,28 @@ public class DbImportTreeCellEditor extends 
DefaultTreeCellEditor {
     @Override
     public Component getTreeCellEditorComponent(JTree tree, Object value,
                                                 boolean isSelected, boolean 
expanded, boolean leaf, int row) {
-        if (value instanceof DbImportTreeNode) {
-            value = ((DbImportTreeNode) value).getSimpleNodeName();
+        editingNode = value instanceof DbImportTreeNode ? (DbImportTreeNode) 
value : null;
+        if (editingNode != null) {
+            value = editingNode.getSimpleNodeName();
         }
         return super.getTreeCellEditorComponent(tree, value, isSelected, 
expanded, leaf, row);
     }
 
+    @Override
+    protected void determineOffset(JTree tree, Object value, boolean 
isSelected,
+                                   boolean expanded, boolean leaf, int row) {
+        if (renderer != null && editingNode != null) {
+            renderer.getTreeCellRendererComponent(tree, editingNode, 
isSelected, expanded, leaf, row, false);
+            editingIcon = renderer.getIcon();
+            offset = editingIcon != null
+                    ? renderer.getIconTextGap() + editingIcon.getIconWidth()
+                    : renderer.getIconTextGap();
+        } else {
+            editingIcon = null;
+            offset = 0;
+        }
+    }
+
     @Override
     public boolean isCellEditable(EventObject e) {
         if (tree.getSelectionPath() != null) {
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellRenderer.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellRenderer.java
index 7ce846eff..f575e8c07 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellRenderer.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeCellRenderer.java
@@ -91,6 +91,9 @@ public class DbImportTreeCellRenderer extends 
DefaultTreeCellRenderer {
 
         super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, 
row, hasFocus);
         node = (DbImportTreeNode) value;
+        if (value instanceof DbImportTreeNode.ExpandableEnforcerNode) {
+            return ExpandableEnforcer.getInstance();
+        }
         if (node.getUserObject() instanceof String) {
             setIcon(null);
             if (!sel) {
@@ -100,9 +103,13 @@ public class DbImportTreeCellRenderer extends 
DefaultTreeCellRenderer {
             return this;
         }
         setIcon(getIconByNodeType(node.getUserObject().getClass(), 
((DbImportTree) tree).isTransferable()));
-        return value instanceof DbImportTreeNode.ExpandableEnforcerNode
-                ? ExpandableEnforcer.getInstance()
-                : this;
+        return this;
+    }
+
+    @Override
+    public Dimension getPreferredSize() {
+        Dimension size = super.getPreferredSize();
+        return new Dimension(size.width, Math.max(size.height, 25));
     }
 
     @Override
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeModel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeModel.java
index 7c8a90c99..4bccebef5 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeModel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportTreeModel.java
@@ -30,8 +30,6 @@ public class DbImportTreeModel extends DefaultTreeModel {
     private final boolean canBeCleaned;
     private final String emptyText;
 
-    private DbImportTree dbSchemaTree;
-
     DbImportTreeModel(TreeNode root, boolean canBeCleaned, String emptyText) {
         super(root);
         this.canBeCleaned = canBeCleaned;
@@ -63,10 +61,5 @@ public class DbImportTreeModel extends DefaultTreeModel {
     public void reload(TreeNode node) {
         preprocessTree();
         super.reload(node);
-        dbSchemaTree.repaint();
-    }
-
-    public void setDbSchemaTree(DbImportTree dbSchemaTree) {
-        this.dbSchemaTree = dbSchemaTree;
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
index 9858d768b..740b545b1 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbImportView.java
@@ -26,14 +26,12 @@ import org.apache.cayenne.modeler.toolkit.icon.IconFactory;
 import org.apache.cayenne.modeler.toolkit.ProjectPanel;
 import org.apache.cayenne.modeler.project.ProjectSession;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.action.DbImportActions;
-import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.action.ModelerDbImportAction;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.ColorTreeRenderer;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.DbImportTreeNode;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.TransferableNode;
-import org.apache.cayenne.modeler.toolkit.AppAction;
-
 import javax.swing.*;
-import javax.swing.border.EmptyBorder;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
 import java.awt.*;
 import java.awt.event.ActionEvent;
 
@@ -43,13 +41,15 @@ public class DbImportView extends ProjectPanel {
     private static final ImageIcon rightArrow = 
IconFactory.buildIcon("icon-arrow-closed.png");
     private static final ImageIcon downArrow = 
IconFactory.buildIcon("icon-arrow-open.png");
 
-    private final TreeToolbarPanel treeToolbar;
-    private final ReverseEngineeringTreePanel treePanel;
+    private final ReverseEngineeringTreePanel configTree;
+    private final ConfigToolbar configToolbar;
     private final ReverseEngineeringConfigPanel configPanel;
-    private final SourceTargetPanel sourceTargetPanel;
+
+    private final DbSchemaToolbar dbSchemaToolbar;
+    private final DBSchemaPanel dbSchemaPanel;
+
     private final JProgressBar loadDbSchemaProgress;
     private final JProgressBar reverseEngineeringProgress;
-    private final AppAction.CayenneToolbarButton loadDbSchemaButton;
 
     private boolean initFromModel;
 
@@ -71,20 +71,26 @@ public class DbImportView extends ProjectPanel {
         dbTree.setModel(dbModel);
 
         DbImportActions actions = new DbImportActions(app, this, configTree, 
dbTree);
-        this.sourceTargetPanel = new SourceTargetPanel(dbTree, configTree, 
actions);
-        dbTree.setLoadDbSchemaAction(actions.getLoadDbSchemaAction());
-        this.treeToolbar = new TreeToolbarPanel(configTree, actions);
-        this.treePanel = new ReverseEngineeringTreePanel(session, configTree, 
dbTree, this.sourceTargetPanel, actions);
-        treePanel.setTreeToolbar(treeToolbar);
+        this.dbSchemaPanel = new DBSchemaPanel(dbTree, configTree, actions);
+        this.dbSchemaToolbar = new DbSchemaToolbar(actions);
 
-        configModel.setDbSchemaTree(dbTree);
-        dbModel.setDbSchemaTree(dbTree);
+        dbTree.setLoadDbSchemaAction(actions.getLoadDbSchemaAction());
+        this.configToolbar = new ConfigToolbar(configTree, actions);
+        this.configTree = new ReverseEngineeringTreePanel(session, configTree, 
dbTree, this.dbSchemaPanel, actions);
+        this.configTree.setTreeToolbar(configToolbar);
+
+        // repaint the db schema tree whenever the config tree changes so 
ColorTreeRenderer refreshes
+        configModel.addTreeModelListener(new TreeModelListener() {
+            public void treeNodesChanged(TreeModelEvent e) { dbTree.repaint(); 
}
+            public void treeNodesInserted(TreeModelEvent e) { 
dbTree.repaint(); }
+            public void treeNodesRemoved(TreeModelEvent e) { dbTree.repaint(); 
}
+            public void treeStructureChanged(TreeModelEvent e) { 
dbTree.repaint(); }
+        });
 
-        ((ColorTreeRenderer) 
sourceTargetPanel.getSourceTree().getCellRenderer()).setReverseEngineeringTree(configTree);
+        ((ColorTreeRenderer) 
dbSchemaPanel.getSourceTree().getCellRenderer()).setReverseEngineeringTree(configTree);
         this.configPanel = new ReverseEngineeringConfigPanel(session, this);
         this.loadDbSchemaProgress = new JProgressBar();
         this.reverseEngineeringProgress = new JProgressBar();
-        this.loadDbSchemaButton = (AppAction.CayenneToolbarButton) 
actions.getLoadDbSchemaAction().buildButton(0);
 
         initLayout(actions);
         initBindings();
@@ -96,45 +102,22 @@ public class DbImportView extends ProjectPanel {
 
         FormLayout buttonPanelLayout = new FormLayout("fill:50dlu");
         DefaultFormBuilder buttonBuilder = new 
DefaultFormBuilder(buttonPanelLayout);
-        buttonBuilder.append(sourceTargetPanel.getMoveButton());
-        buttonBuilder.append(sourceTargetPanel.getMoveInvertButton());
+        buttonBuilder.append(dbSchemaPanel.getMoveButton());
+        buttonBuilder.append(dbSchemaPanel.getMoveInvertButton());
+
+        JPanel leftPanel = new JPanel(new BorderLayout());
+        leftPanel.add(configToolbar, BorderLayout.NORTH);
+        leftPanel.add(configTree, BorderLayout.CENTER);
+
+        JPanel rightPanel = new JPanel(new BorderLayout());
+        rightPanel.add(dbSchemaToolbar, BorderLayout.NORTH);
+        rightPanel.add(dbSchemaPanel, BorderLayout.CENTER);
 
         FormLayout layout = new FormLayout("fill:160dlu:grow, 5dlu, 
fill:50dlu, 5dlu, fill:160dlu:grow");
         DefaultFormBuilder builder = new DefaultFormBuilder(layout);
-        builder.append(treeToolbar, ALL_LINE_SPAN);
-
-        FormLayout headerLayout = new FormLayout("fill:80dlu:grow");
-        DefaultFormBuilder reverseEngineeringHeaderBuilder = new 
DefaultFormBuilder(headerLayout);
-        JLabel importLabel = new JLabel("Database Import Configuration");
-        importLabel.setBorder(new EmptyBorder(0, 5, 0, 0));
-        reverseEngineeringHeaderBuilder.append(importLabel);
-        builder.append(reverseEngineeringHeaderBuilder.getPanel());
-
-        DefaultFormBuilder databaseHeaderBuilder = new 
DefaultFormBuilder(headerLayout);
-        JLabel schemaLabel = new JLabel("Database Schema");
-        schemaLabel.setBorder(new EmptyBorder(0, 5, 0, 0));
-        databaseHeaderBuilder.append(schemaLabel);
-
-        loadDbSchemaButton.setShowingText(false);
-        loadDbSchemaButton.setText("Refresh DB Schema");
-        treeToolbar.add(loadDbSchemaButton);
-
-        ModelerDbImportAction dbImportAction = 
actions.getReverseEngineeringAction();
-        AppAction.CayenneToolbarButton reverseEngineeringButton =
-                (AppAction.CayenneToolbarButton) dbImportAction.buildButton(0);
-        reverseEngineeringButton.setShowingText(true);
-        reverseEngineeringButton.setText("Run Import");
-        JPanel reverseEngineeringButtonPanel = new JPanel();
-        reverseEngineeringButtonPanel.setLayout(new 
FlowLayout(FlowLayout.RIGHT));
-        reverseEngineeringButtonPanel.add(reverseEngineeringButton);
-        treeToolbar.addSeparator();
-        treeToolbar.add(reverseEngineeringButtonPanel);
-
-        builder.append("");
-        builder.append(databaseHeaderBuilder.getPanel());
-        builder.append(treePanel);
+        builder.append(leftPanel);
         builder.append(buttonBuilder.getPanel());
-        builder.append(sourceTargetPanel);
+        builder.append(rightPanel);
 
         loadDbSchemaProgress.setIndeterminate(true);
         loadDbSchemaProgress.setVisible(false);
@@ -151,7 +134,7 @@ public class DbImportView extends ProjectPanel {
         builder.append(configPanel, ALL_LINE_SPAN);
         setLayout(new BorderLayout());
         add(builder.getPanel(), BorderLayout.CENTER);
-        sourceTargetPanel.getSourceTree().repaint();
+        dbSchemaPanel.getSourceTree().repaint();
     }
 
     private void initBindings() {
@@ -182,10 +165,10 @@ public class DbImportView extends ProjectPanel {
     }
 
     public void initFromModel(DataMap map) {
-        treePanel.getReverseEngineeringTree().stopEditing();
+        configTree.getReverseEngineeringTree().stopEditing();
         if (map != null) {
             initFromModel = true;
-            treeToolbar.unlockButtons();
+            configToolbar.unlockButtons();
             ReverseEngineering reverseEngineering = DbImportView.this.app
                     .getMetaData().get(map, ReverseEngineering.class);
             if (reverseEngineering == null) {
@@ -203,12 +186,12 @@ public class DbImportView extends ProjectPanel {
                 configPanel.getTableTypes().setText("TABLE, VIEW");
                 configPanel.applyTableTypes("TABLE, VIEW");
             }
-            treePanel.updateTree();
-            DbImportTreeNode root = 
sourceTargetPanel.getSourceTree().getRootNode();
+            configTree.updateTree();
+            DbImportTreeNode root = 
dbSchemaPanel.getSourceTree().getRootNode();
             root.removeAllChildren();
-            sourceTargetPanel.updateTree(session.getSelectedDataMap());
-            sourceTargetPanel.getMoveButton().setEnabled(false);
-            sourceTargetPanel.getMoveInvertButton().setEnabled(false);
+            dbSchemaPanel.updateTree(session.getSelectedDataMap());
+            dbSchemaPanel.getMoveButton().setEnabled(false);
+            dbSchemaPanel.getMoveInvertButton().setEnabled(false);
         }
         initFromModel = false;
     }
@@ -218,11 +201,11 @@ public class DbImportView extends ProjectPanel {
     }
 
     public void lockToolbarButtons() {
-        treeToolbar.changeToolbarButtonsState(false);
+        configToolbar.changeToolbarButtonsState(false);
     }
 
     public void unlockToolbarButtons() {
-        treeToolbar.unlockButtons();
+        configToolbar.unlockButtons();
     }
 
     public JProgressBar getReverseEngineeringProgress() {
@@ -230,11 +213,11 @@ public class DbImportView extends ProjectPanel {
     }
 
     public JButton getLoadDbSchemaButton() {
-        return loadDbSchemaButton;
+        return dbSchemaToolbar.getLoadDbSchemaButton();
     }
 
-    public SourceTargetPanel getDraggableTreePanel() {
-        return sourceTargetPanel;
+    public DBSchemaPanel getDraggableTreePanel() {
+        return dbSchemaPanel;
     }
 
     public boolean isInitFromModel() {
@@ -242,7 +225,7 @@ public class DbImportView extends ProjectPanel {
     }
 
     void invalidateDbSchema() {
-        DbImportTree sourceTree = sourceTargetPanel.getSourceTree();
+        DbImportTree sourceTree = dbSchemaPanel.getSourceTree();
         DbImportTreeNode root = sourceTree.getRootNode();
         root.removeAllChildren();
         sourceTree.setEnabled(false);
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbSchemaToolbar.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbSchemaToolbar.java
new file mode 100644
index 000000000..e1423e009
--- /dev/null
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/DbSchemaToolbar.java
@@ -0,0 +1,55 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+
+package org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport;
+
+import org.apache.cayenne.modeler.toolkit.AppAction;
+import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.action.DbImportActions;
+
+import javax.swing.JButton;
+import javax.swing.JToolBar;
+import javax.swing.border.EmptyBorder;
+
+class DbSchemaToolbar extends JToolBar {
+
+    private final AppAction.CayenneToolbarButton loadDbSchemaButton;
+
+    DbSchemaToolbar(DbImportActions actions) {
+        JButton configureButton = 
actions.getGetDbConnectionAction().buildButton(0);
+
+        this.loadDbSchemaButton = (AppAction.CayenneToolbarButton) 
actions.getLoadDbSchemaAction().buildButton(0);
+        loadDbSchemaButton.setShowingText(false);
+        loadDbSchemaButton.setText("Refresh DB Schema");
+
+        AppAction.CayenneToolbarButton reverseEngineeringButton =
+                (AppAction.CayenneToolbarButton) 
actions.getReverseEngineeringAction().buildButton(0);
+        reverseEngineeringButton.setShowingText(true);
+        reverseEngineeringButton.setText("Run Import");
+
+        setFloatable(false);
+        setBorder(new EmptyBorder(0, 0, 0, 0));
+        add(configureButton);
+        add(loadDbSchemaButton);
+        add(reverseEngineeringButton);
+    }
+
+    JButton getLoadDbSchemaButton() {
+        return loadDbSchemaButton;
+    }
+}
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringTreePanel.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringTreePanel.java
index 26dd92fbb..dad48130a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringTreePanel.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/ReverseEngineeringTreePanel.java
@@ -52,17 +52,17 @@ class ReverseEngineeringTreePanel extends JPanel {
 
     private final ProjectSession session;
     private final DbImportActions actions;
-    private final SourceTargetPanel sourceTargetPanel;
-    private TreeToolbarPanel treeToolbar;
+    private final DBSchemaPanel dbSchemaPanel;
+    private ConfigToolbar treeToolbar;
     private final Map<Class<?>, DefaultPopUpMenu> popups;
 
     ReverseEngineeringTreePanel(ProjectSession session, DbImportTree 
reverseEngineeringTree,
-                                DbImportTree dbSchemaTree, SourceTargetPanel 
sourceTargetPanel,
+                                DbImportTree dbSchemaTree, DBSchemaPanel 
dbSchemaPanel,
                                 DbImportActions actions) {
         this.session = session;
         this.reverseEngineeringTree = reverseEngineeringTree;
         this.dbSchemaTree = dbSchemaTree;
-        this.sourceTargetPanel = sourceTargetPanel;
+        this.dbSchemaPanel = dbSchemaPanel;
         this.actions = actions;
         this.popups = new HashMap<>();
         initLayout();
@@ -158,7 +158,7 @@ class ReverseEngineeringTreePanel extends JPanel {
     private void scrollToNode(JTree tree, DbImportTreeNode node) {
         TreePath path = new TreePath(node.getPath());
         tree.scrollPathToVisible(path);
-        sourceTargetPanel.resetHorizontalScroll();
+        dbSchemaPanel.resetHorizontalScroll();
     }
 
     private ReverseEngineering getReverseEngineeringBySelectedMap() {
@@ -178,7 +178,7 @@ class ReverseEngineeringTreePanel extends JPanel {
         return reverseEngineeringTree;
     }
 
-    void setTreeToolbar(TreeToolbarPanel treeToolbar) {
+    void setTreeToolbar(ConfigToolbar treeToolbar) {
         this.treeToolbar = treeToolbar;
     }
 }
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/LoadDbSchemaAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/LoadDbSchemaAction.java
index b205b36d7..5d228a998 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/LoadDbSchemaAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/LoadDbSchemaAction.java
@@ -29,7 +29,7 @@ import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.DbImpo
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DatabaseSchemaLoader;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportTreeModel;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportView;
-import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.SourceTargetPanel;
+import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DBSchemaPanel;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.PrintColumnsBiFunction;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.PrintTablesBiFunction;
 import org.apache.cayenne.modeler.dbconnector.DBConnector;
@@ -65,7 +65,7 @@ public class LoadDbSchemaAction extends 
DBConnectionAwareAction {
     }
 
     public void loadDbSchema(TreePath tablePath) {
-        SourceTargetPanel sourceTargetPanel = view.getDraggableTreePanel();
+        DBSchemaPanel sourceTargetPanel = view.getDraggableTreePanel();
         view.getLoadDbSchemaProgress().setVisible(true);
         view.getLoadDbSchemaButton().setEnabled(false);
         Thread thread = new Thread(() -> {
@@ -117,7 +117,7 @@ public class LoadDbSchemaAction extends 
DBConnectionAwareAction {
     }
 
     private void loadDataBase(DBConnector connectionInfo) throws Exception {
-        SourceTargetPanel sourceTargetPanel = view.getDraggableTreePanel();
+        DBSchemaPanel sourceTargetPanel = view.getDraggableTreePanel();
         ReverseEngineering databaseReverseEngineering = new 
DatabaseSchemaLoader(app.getDbAdapterFactory())
                 .load(connectionInfo, app.getClassLoader());
         sourceTargetPanel.getSourceTree()
@@ -130,7 +130,7 @@ public class LoadDbSchemaAction extends 
DBConnectionAwareAction {
     }
 
     private void loadTables(DBConnector connectionInfo, TreePath tablePath) 
throws Exception {
-        SourceTargetPanel sourceTargetPanel = view.getDraggableTreePanel();
+        DBSchemaPanel sourceTargetPanel = view.getDraggableTreePanel();
         ReverseEngineering databaseReverseEngineering = new 
DatabaseSchemaLoader(app.getDbAdapterFactory())
                 .loadTables(connectionInfo,
                         app.getClassLoader(),
@@ -142,7 +142,7 @@ public class LoadDbSchemaAction extends 
DBConnectionAwareAction {
     }
 
     private void loadColumns(DBConnector connectionInfo, TreePath tablePath) 
throws SQLException {
-        SourceTargetPanel sourceTargetPanel = view.getDraggableTreePanel();
+        DBSchemaPanel sourceTargetPanel = view.getDraggableTreePanel();
         ReverseEngineering databaseReverseEngineering = new 
DatabaseSchemaLoader(app.getDbAdapterFactory())
                 .loadColumns(connectionInfo, app.getClassLoader(), tablePath);
         sourceTargetPanel.getSourceTree()
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/MoveImportNodeAction.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/MoveImportNodeAction.java
index 2bd09862b..999de1a3a 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/MoveImportNodeAction.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/action/MoveImportNodeAction.java
@@ -33,7 +33,7 @@ import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.tree.DbImpo
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportSorter;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportTree;
 import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DbImportView;
-import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.SourceTargetPanel;
+import 
org.apache.cayenne.modeler.ui.project.editor.datamap.dbimport.DBSchemaPanel;
 import org.apache.cayenne.modeler.undo.DbImportTreeUndoableEdit;
 import org.apache.cayenne.modeler.toolkit.AppAction;
 
@@ -124,7 +124,7 @@ public class MoveImportNodeAction extends AppAction {
         TreeManipulationAction action = null;
         DbImportTreeNode foundNode = null;
         String insertableName = EMPTY_NAME;
-        SourceTargetPanel panel = view.getDraggableTreePanel();
+        DBSchemaPanel panel = view.getDraggableTreePanel();
         view.getReverseEngineeringProgress().setVisible(true);
         if (paths != null) {
             boolean isChanged = false;
diff --git 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/tree/ColorTreeRenderer.java
 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/tree/ColorTreeRenderer.java
index 687dc033e..79a2d8cf6 100644
--- 
a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/tree/ColorTreeRenderer.java
+++ 
b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ui/project/editor/datamap/dbimport/tree/ColorTreeRenderer.java
@@ -56,8 +56,7 @@ public class ColorTreeRenderer extends 
DbImportTreeCellRenderer {
                                                   boolean leaf, int row, 
boolean hasFocus) {
         super.getTreeCellRendererComponent(tree, value, selected, expanded, 
leaf, row, hasFocus);
 
-        if (this.node.isLabel() || this.selected) {
-            setForeground(Color.BLACK);
+        if (this.node.isLabel() || selected) {
             return this;
         }
 


Reply via email to