Revision: 3757
Author: [email protected]
Date: Mon Jul 19 11:32:40 2010
Log: Saving a project in a separate thread now works on an executor of one thread, so that only project may be saving at once. This saves some headaches from having multiple projects save to the same file at the same time.
http://code.google.com/p/power-architect/source/detail?r=3757

Modified:
/trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java Fri Jul 16 08:41:08 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/ArchitectSwingSessionImpl.java Mon Jul 19 11:32:40 2010
@@ -33,6 +33,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ScheduledThreadPoolExecutor;

 import javax.swing.Action;
 import javax.swing.JColorChooser;
@@ -98,6 +100,7 @@
 import ca.sqlpower.swingui.db.DatabaseConnectionManager;
 import ca.sqlpower.swingui.event.SessionLifecycleEvent;
 import ca.sqlpower.swingui.event.SessionLifecycleListener;
+import ca.sqlpower.util.DefaultUserPrompterFactory;
 import ca.sqlpower.util.SQLPowerUtils;
 import ca.sqlpower.util.UserPrompter;
 import ca.sqlpower.util.UserPrompterFactory;
@@ -110,6 +113,8 @@
 public class ArchitectSwingSessionImpl implements ArchitectSwingSession {

private static final Logger logger = Logger.getLogger(ArchitectSwingSessionImpl.class);
+
+ private static final Executor saveExecutor = new ScheduledThreadPoolExecutor(1);

     private final ArchitectSwingSessionContext context;

@@ -264,7 +269,7 @@
"as its workspace. If there is no way to pass in a delegate with a swing" +
                        "project we may need to make the reference non-final.");
         }
-        swinguiUserPrompterFactory = new SwingUIUserPrompterFactory(null);
+        swinguiUserPrompterFactory = new DefaultUserPrompterFactory();

         this.isNew = true;
         this.context = context;
@@ -396,9 +401,7 @@
         ToolTipManager.sharedInstance().registerComponent(playPen);
         ToolTipManager.sharedInstance().registerComponent(dbTree);

- if (swinguiUserPrompterFactory instanceof SwingUIUserPrompterFactory) { - ((SwingUIUserPrompterFactory) swinguiUserPrompterFactory).setParentFrame(frame);
-        }
+ swinguiUserPrompterFactory = new SwingUIUserPrompterFactory(parentFrame);

         if (projectPanel == null) {
             playPenScrollPane = new JScrollPane(playPen);
@@ -610,7 +613,7 @@
         }
         SaverTask saveTask = new SaverTask();
         if (separateThread) {
-            new Thread(saveTask).start();
+            saveExecutor.execute(saveTask);
             return true; // this is an optimistic lie
         } else {
             saveTask.run();

Reply via email to