Revision: 3974
Author: [email protected]
Date: Thu Nov  4 09:35:52 2010
Log: Refreshing from the Universal SQL Access panel no longer results in an NPE.
http://code.google.com/p/power-architect/source/detail?r=3974

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/swingui/DBTree.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/action/RefreshAction.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/DBTree.java Wed Nov 3 13:56:26 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/DBTree.java Thu Nov 4 09:35:52 2010
@@ -563,7 +563,7 @@
p.getLastPathComponent() != treeModel.getSnapshotContainer()) { // clicked on DBCS item in DBTree
                        newMenu.addSeparator();

-                       newMenu.add(new RefreshAction(session));
+                       newMenu.add(new RefreshAction(session, this));

                        newMenu.addSeparator();

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/action/RefreshAction.java Thu Jul 22 12:40:28 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/action/RefreshAction.java Thu Nov 4 09:35:52 2010
@@ -20,6 +20,7 @@
 package ca.sqlpower.architect.swingui.action;

 import java.awt.Component;
+import java.awt.Window;
 import java.awt.event.ActionEvent;
 import java.util.HashSet;
 import java.util.Set;
@@ -31,6 +32,7 @@
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JProgressBar;
+import javax.swing.SwingUtilities;
 import javax.swing.tree.TreePath;

 import ca.sqlpower.architect.swingui.ASUtils;
@@ -52,6 +54,8 @@

 public class RefreshAction extends AbstractArchitectAction {

+    private DBTree dbTree;
+
     /**
      * This will refresh all of the databases on a different thread and
      * allows the refresh to be monitorable.
@@ -128,9 +132,22 @@
"Refreshes the tree to match current structure in the selected database", new ImageIcon(RefreshAction.class.getResource("/icons/database_refresh.png")));
     }
+
+    /**
+     * Refreshes based on selections in a specific tree.
+     */
+    public RefreshAction(ArchitectSwingSession session, DBTree tree) {
+        super(session,
+              "Refresh",
+ "Refreshes the tree to match current structure in the selected database", + new ImageIcon(RefreshAction.class.getResource("/icons/database_refresh.png")));
+        dbTree = tree;
+    }

     public void actionPerformed(ActionEvent e) {
-        DBTree dbTree = getSession().getDBTree();
+        if (dbTree == null) {
+            dbTree = getSession().getDBTree();
+        }

         Set<SQLDatabase> databasesToRefresh = new HashSet<SQLDatabase>();
         for (TreePath tp : dbTree.getSelectionPaths()) {
@@ -146,14 +163,14 @@
             return;
         }

- final SPSwingWorker worker = new RefreshMonitorableWorker(getSession(), getSession().getArchitectFrame(), databasesToRefresh); + final SPSwingWorker worker = new RefreshMonitorableWorker(getSession(), (Window)SwingUtilities.getRoot(dbTree), databasesToRefresh); final Thread thread = new Thread(worker, "Refresh database worker");
         JProgressBar progressBar = new JProgressBar();
         progressBar.setIndeterminate(true);
         JLabel messageLabel = new JLabel("Refreshing selected databases.");
         ProgressWatcher.watchProgress(progressBar, worker, messageLabel);

- final JDialog dialog = new JDialog(getSession().getArchitectFrame(), "Refresh"); + final JDialog dialog = new JDialog((Window)SwingUtilities.getRoot(dbTree), "Refresh"); DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("pref:grow, 5dlu, pref"));
         builder.setDefaultDialogBorder();
         builder.append(messageLabel, 3);

Reply via email to