Revision: 3536
Author: [email protected]
Date: Thu May 13 11:03:34 2010
Log: Added a fix for a Tree populate bug for the DataMoverPanel.
http://code.google.com/p/power-architect/source/detail?r=3536
Modified:
/trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java
Wed Apr 14 09:10:02 2010
+++ /trunk/src/main/java/ca/sqlpower/architect/swingui/DataMoverPanel.java
Thu May 13 11:03:34 2010
@@ -56,11 +56,11 @@
import ca.sqlpower.sql.DatabaseListChangeListener;
import ca.sqlpower.sql.JDBCDataSource;
import ca.sqlpower.sql.SPDataSource;
-import ca.sqlpower.sqlobject.SQLColumn;
-import ca.sqlpower.sqlobject.SQLObjectException;
import ca.sqlpower.sqlobject.SQLCatalog;
+import ca.sqlpower.sqlobject.SQLColumn;
import ca.sqlpower.sqlobject.SQLDatabase;
import ca.sqlpower.sqlobject.SQLObject;
+import ca.sqlpower.sqlobject.SQLObjectException;
import ca.sqlpower.sqlobject.SQLObjectRoot;
import ca.sqlpower.sqlobject.SQLObjectUtils;
import ca.sqlpower.sqlobject.SQLSchema;
@@ -110,12 +110,16 @@
setupDBTrees();
- sourceTree = new JTree(new DBTreeModel(treeRoot));
+ final DBTreeModel sourceTreeModel = new DBTreeModel(treeRoot);
+ sourceTree = new JTree(sourceTreeModel);
+
sourceTree.addTreeWillExpandListener(sourceTreeModel.getTreeWillExpandListener());
sourceTree.setRootVisible(false);
sourceTree.setShowsRootHandles(true);
sourceTree.setCellRenderer(new DBTreeCellRenderer());
- destTree = new JTree(new DBTreeModel(treeRoot));
+ final DBTreeModel destTreeModel = new DBTreeModel(treeRoot);
+ destTree = new JTree(destTreeModel);
+
destTree.addTreeWillExpandListener(destTreeModel.getTreeWillExpandListener());
destTree.setRootVisible(false);
destTree.setShowsRootHandles(true);
destTree.setCellRenderer(new DBTreeCellRenderer());
=======================================
---
/trunk/src/main/java/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java
Tue May 11 15:34:51 2010
+++
/trunk/src/main/java/ca/sqlpower/architect/swingui/dbtree/DBTreeModel.java
Thu May 13 11:03:34 2010
@@ -32,8 +32,10 @@
import java.util.concurrent.Callable;
import javax.swing.SwingUtilities;
+import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
+import javax.swing.event.TreeWillExpandListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
@@ -386,6 +388,26 @@
*/
protected final Map<SQLTable, List<FolderNode>> foldersInTables =
new HashMap<SQLTable, List<FolderNode>>();
+
+ /**
+ * A listener that should be added to any JTree, that is not a DBTree,
using
+ * this model. It will populate the indices of a table before
expanding it,
+ * to prevent removal events due to reordering from affecting the Tree
in
+ * the middle of the expansion.
+ */
+ private TreeWillExpandListener treeWillExpandListener = new
TreeWillExpandListener() {
+ public void treeWillCollapse(TreeExpansionEvent event) {
+ }
+ public void treeWillExpand(TreeExpansionEvent event) {
+ if (isColumnsFolder(event.getPath().getLastPathComponent())){
+ try {
+ ((SQLTable)
event.getPath().getPathComponent(event.getPath().getPathCount()
-2)).getIndices();
+ } catch (SQLObjectException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+ };
/**
* Creates a tree model with all of the SQLDatabase objects in the
@@ -407,6 +429,10 @@
setupTreeForNode(root);
}
+
+ public TreeWillExpandListener getTreeWillExpandListener() {
+ return treeWillExpandListener;
+ }
/**
* Recursively walks the tree doing any necessary setup for each node.