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;
}