Revision: 3679
Author: [email protected]
Date: Tue Jul  6 11:49:13 2010
Log: NEW - bug 2458: Create Critic Manager
http://trillian.sqlpower.ca/bugzilla/show_bug.cgi?id=2458

Grouping the critic setting changes into one transaction to simplify the persist calls.
http://code.google.com/p/power-architect/source/detail?r=3679

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

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticManagerPanel.java Tue Jul 6 10:54:22 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/critic/CriticManagerPanel.java Tue Jul 6 11:49:13 2010
@@ -55,12 +55,17 @@
      */
private final List<CriticGroupingPanel> groupingPanels = new ArrayList<CriticGroupingPanel>();

+    /**
+     * The critic manager being updated by this panel.
+     */
+    private CriticManager criticManager;
+
     public CriticManagerPanel(ArchitectSwingSession session) {

         mainPanel = new JPanel();
DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout("pref"));

- final CriticManager criticManager = session.getWorkspace().getCriticManager();
+        criticManager = session.getWorkspace().getCriticManager();
for (CriticGrouping grouping : criticManager.getCriticGroupings()) { CriticGroupingPanel criticGroupingPanel = new CriticGroupingPanel(grouping);
             builder.append(criticGroupingPanel.getPanel());
@@ -103,10 +108,18 @@
     }

     private boolean doApplyChanges() {
-        for (CriticGroupingPanel panel : groupingPanels) {
-            if (!panel.applyChanges()) {
-                return false;
-            }
+        try {
+            criticManager.begin("Updating manager by user");
+            for (CriticGroupingPanel panel : groupingPanels) {
+                if (!panel.applyChanges()) {
+                    criticManager.rollback("Could not apply changes.");
+                    return false;
+                }
+            }
+            criticManager.commit();
+        } catch (Throwable t) {
+            criticManager.rollback(t.getMessage());
+            throw new RuntimeException(t);
         }
         return true;
     }

Reply via email to