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.

Reply via email to