Revision: 3453
Author: silva.josemanuel1
Date: Tue Apr 13 12:48:01 2010
Log: Fixed OLAP persistence bugs due to magical side effects. Also made OLAP object creation transactions shorter.
http://code.google.com/p/power-architect/source/detail?r=3453

Modified:
 /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenContentPane.java
/trunk/src/main/java/ca/sqlpower/architect/swingui/olap/OLAPPlayPenFactory.java /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeAction.java /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeUsageAction.java /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionAction.java /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionUsageAction.java /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateVirtualCubeAction.java

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenContentPane.java Fri Apr 9 11:56:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/PlayPenContentPane.java Tue Apr 13 12:48:01 2010
@@ -251,7 +251,9 @@
         if (!removed) return false;
         fireChildRemoved(child.getClass(), child, index);
         child.setParent(null);
-        playPen.repaint();
+        if (playPen != null) {
+            playPen.repaint();
+        }
         return true;
     }

=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/OLAPPlayPenFactory.java Tue Apr 6 14:44:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/OLAPPlayPenFactory.java Tue Apr 13 12:48:01 2010
@@ -271,7 +271,7 @@
             SQLPowerUtils.listenToHierarchy(e.getChild(), this);
             RemovedComponentInfo compInfo = removedPPCs.get(e.getChild());
logger.debug("OLAP Child was added. Previously removed component: " + compInfo);
-            if (compInfo != null) {
+ if (compInfo != null && pp.getContentPane().isMagicEnabled() && e.getSource().isMagicEnabled()) {
                 PlayPenComponent ppc = compInfo.getComponent();
                 int oldIndex = compInfo.getIndex();
                 pp.getContentPane().addChild(ppc, oldIndex);
@@ -281,19 +281,21 @@
         public void childRemoved(SPChildEvent e) {
             SQLPowerUtils.unlistenToHierarchy(e.getChild(), this);
// Go through the list backwards when removing to eliminate problems. - for (int j = pp.getContentPane().getChildren().size() - 1; j
= 0; j--) {
- PlayPenComponent ppc = pp.getContentPane().getChildren().get(j);
-                if (ppc.getModel() == e.getChild()) {
-                    ppc.setSelected(false, SelectionEvent.SINGLE_SELECT);
-                    try {
-                        pp.getContentPane().removeChild(ppc);
-                    } catch (ObjectDependentException ex) {
-                        throw new RuntimeException(ex);
-                    }
- removedPPCs.put((OLAPObject) e.getChild(), new RemovedComponentInfo(ppc, j)); - logger.debug("Put dead component in map: " + e.getChild().getName() + " -> " + ppc + " @ " + j);
-                }
-            }
+ if (pp.getContentPane().isMagicEnabled() && e.getSource().isMagicEnabled()) { + for (int j = pp.getContentPane().getChildren().size() - 1; j >= 0; j--) { + PlayPenComponent ppc = pp.getContentPane().getChildren().get(j);
+                    if (ppc.getModel() == e.getChild()) {
+ ppc.setSelected(false, SelectionEvent.SINGLE_SELECT);
+                        try {
+                            pp.getContentPane().removeChild(ppc);
+                        } catch (ObjectDependentException ex) {
+                            throw new RuntimeException(ex);
+                        }
+ removedPPCs.put((OLAPObject) e.getChild(), new RemovedComponentInfo(ppc, j)); + logger.debug("Put dead component in map: " + e.getChild().getName() + " -> " + ppc + " @ " + j);
+                    }
+                }
+            }
         }

         /**
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeAction.java Tue Apr 6 14:44:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeAction.java Tue Apr 13 12:48:01 2010
@@ -87,24 +87,27 @@

         @Override
         public DataEntryPanel place(Point p) throws SQLObjectException {
-            schema.begin("Create Cube");
-            schema.addCube(cp.getModel());
-            playpen.selectNone();
-            playpen.addPlayPenComponent(cp, p);
-            cp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+            try {
+                session.getWorkspace().begin("Create Cube");
+                schema.addCube(cp.getModel());
+                playpen.selectNone();
+                playpen.addPlayPenComponent(cp, p);
+                cp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+                session.getWorkspace().commit();
+            } catch (Throwable e) {
+ session.getWorkspace().rollback("Exception occured: " + e.toString());
+                throw new RuntimeException(e);
+            }

CubeEditPanel editPanel = new CubeEditPanel(cp.getModel(), cp.getPlayPen(), cp.getPlayPen().getSession()) {
                 @Override
                 public void discardChanges() {
                     schema.removeCube(cp.getModel());
-                    schema.commit();
                 }

                 @Override
                 public boolean applyChanges() {
-                    boolean applied = super.applyChanges();
-                    schema.commit();
-                    return applied;
+                    return super.applyChanges();
                 }
             };
             return editPanel;
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeUsageAction.java Tue Apr 6 14:44:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateCubeUsageAction.java Tue Apr 13 12:48:01 2010
@@ -49,12 +49,19 @@

     @Override
     protected void createUsage(CubePane cp, VirtualCubePane vcp) {
- if (OLAPUtil.isNameUnique(vcp.getModel(), CubeUsage.class, cp.getModel().getName())) {
-            CubeUsage cu = new CubeUsage();
-            cu.setCubeName(cp.getModel().getName());
-            vcp.getModel().getCubeUsage().addCubeUsage(cu);
- UsageComponent uc = new UsageComponent(playpen.getContentPane(), cu, cp, vcp); - playpen.getContentPane().addChild(uc, playpen.getContentPane().getChildren().size()); + if (OLAPUtil.isNameUnique(vcp.getModel(), CubeUsage.class, cp.getModel().getName())) {
+            try {
+                session.getWorkspace().begin("Creating cube usage");
+                CubeUsage cu = new CubeUsage();
+                cu.setCubeName(cp.getModel().getName());
+                vcp.getModel().getCubeUsage().addCubeUsage(cu);
+ UsageComponent uc = new UsageComponent(playpen.getContentPane(), cu, cp, vcp); + playpen.getContentPane().addChild(uc, playpen.getContentPane().getChildren().size());
+                session.getWorkspace().commit();
+            } catch (Throwable e) {
+ session.getWorkspace().rollback("Error occurred: " + e.toString());
+                throw new RuntimeException(e);
+            }
         } else {
String errorMsg = "Cube Usage \"" + cp.getModel().getName() + "\" alreadys exists in \"" + vcp.getModel().getName() + "\"\nCube Usage was not created.";
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionAction.java Fri Mar 12 08:02:18 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionAction.java Tue Apr 13 12:48:01 2010
@@ -81,24 +81,27 @@

         @Override
         public DataEntryPanel place(Point p) throws SQLObjectException {
-            schema.begin("Create a dimension");
-            schema.addDimension(dp.getModel());
-            playpen.selectNone();
-            playpen.addPlayPenComponent(dp, p);
-            dp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+            try {
+                session.getWorkspace().begin("Create a dimension");
+                schema.addDimension(dp.getModel());
+                playpen.selectNone();
+                playpen.addPlayPenComponent(dp, p);
+                dp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+                session.getWorkspace().commit();
+            } catch (Throwable e) {
+ session.getWorkspace().rollback("Error occurred: " + e.toString());
+                throw new RuntimeException(e);
+            }

DimensionEditPanel editPanel = new DimensionEditPanel(dp.getModel()) {
                 @Override
                 public void discardChanges() {
                     schema.removeDimension(dp.getModel());
-                    schema.commit();
                 }

                 @Override
                 public boolean applyChanges() {
-                    boolean applied = super.applyChanges();
-                    schema.commit();
-                    return applied;
+                    return super.applyChanges();
                 }
             };
             return editPanel;
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionUsageAction.java Tue Apr 6 14:44:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateDimensionUsageAction.java Tue Apr 13 12:48:01 2010
@@ -63,27 +63,30 @@
         final Dimension dimension = dp.getModel();
         final Cube cube = cp.getModel();
if (OLAPUtil.isNameUnique(cp.getModel(), DimensionUsage.class, dimension.getName())) {
-            cube.begin("Create dimension usage");
+            session.getWorkspace().begin("Create dimension usage");
             final DimensionUsage du = new DimensionUsage();
-            du.setName(dimension.getName());
-            du.setSource(dimension.getName());
-            cube.addChild(du);
- UsageComponent uc = new UsageComponent(playpen.getContentPane(), du, dp, cp); - playpen.getContentPane().addChild(uc, playpen.getContentPane().getChildren().size());
+            try {
+                du.setName(dimension.getName());
+                du.setSource(dimension.getName());
+                cube.addChild(du);
+ UsageComponent uc = new UsageComponent(playpen.getContentPane(), du, dp, cp); + playpen.getContentPane().addChild(uc, playpen.getContentPane().getChildren().size());
+                session.getWorkspace().commit();
+            } catch (Throwable e) {
+ session.getWorkspace().rollback("Error occurred: " + e.toString());
+                throw new RuntimeException(e);
+            }

             try {
                 final DataEntryPanel mep = new DimensionUsageEditPanel(du);
                 Callable<Boolean> okCall = new Callable<Boolean>() {
                     public Boolean call() throws Exception {
-                        boolean applied = mep.applyChanges();
-                        cube.commit();
-                        return applied;
+                        return mep.applyChanges();
                     }
                 };
                 Callable<Boolean> cancelCall = new Callable<Boolean>() {
                     public Boolean call() throws Exception {
                         du.getParent().removeChild(du);
-                        cube.commit();
                         return true;
                     }
                 };
=======================================
--- /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateVirtualCubeAction.java Tue Apr 6 14:44:35 2010 +++ /trunk/src/main/java/ca/sqlpower/architect/swingui/olap/action/CreateVirtualCubeAction.java Tue Apr 13 12:48:01 2010
@@ -87,25 +87,28 @@

         @Override
         public DataEntryPanel place(Point p) throws SQLObjectException {
-            schema.begin("Create a virtual cube");
-            schema.addVirtualCube(vcp.getModel());
-
-            playpen.selectNone();
-            playpen.addPlayPenComponent(vcp, p);
-            vcp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+
+            try {
+                session.getWorkspace().begin("Create a virtual cube");
+                schema.addVirtualCube(vcp.getModel());
+                playpen.selectNone();
+                playpen.addPlayPenComponent(vcp, p);
+                vcp.setSelected(true,SelectionEvent.SINGLE_SELECT);
+                session.getWorkspace().commit();
+            } catch (Throwable e) {
+ session.getWorkspace().rollback("Error occurred: " + e.toString());
+                throw new RuntimeException(e);
+            }

VirtualCubeEditPanel editPanel = new VirtualCubeEditPanel(vcp.getModel()) {
                 @Override
                 public void discardChanges() {
                     schema.removeVirtualCube(vcp.getModel());
-                    schema.commit();
                 }

                 @Override
                 public boolean applyChanges() {
-                    boolean applied = super.applyChanges();
-                    schema.commit();
-                    return applied;
+                    return super.applyChanges();
                 }
             };
             return editPanel;


--
To unsubscribe, reply using "remove me" as the subject.

Reply via email to