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.