Author: [EMAIL PROTECTED]
Date: Wed Sep 3 10:06:32 2008
New Revision: 2682
Modified:
trunk/src/ca/sqlpower/architect/swingui/olap/CubePane.java
trunk/src/ca/sqlpower/architect/swingui/olap/OLAPPane.java
Log:
Added the ability to drag and drop dimension usages between cubes.
Modified: trunk/src/ca/sqlpower/architect/swingui/olap/CubePane.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/CubePane.java (original)
+++ trunk/src/ca/sqlpower/architect/swingui/olap/CubePane.java Wed Sep 3
10:06:32 2008
@@ -26,6 +26,7 @@
import ca.sqlpower.architect.ArchitectException;
import ca.sqlpower.architect.olap.OLAPObject;
+import ca.sqlpower.architect.olap.OLAPUtil;
import ca.sqlpower.architect.olap.MondrianModel.Cube;
import ca.sqlpower.architect.olap.MondrianModel.CubeDimension;
import ca.sqlpower.architect.olap.MondrianModel.Dimension;
@@ -112,11 +113,43 @@
protected List<OLAPObject> filterDroppableItems(List<OLAPObject>
items) {
List<OLAPObject> filtered = new ArrayList<OLAPObject>();
for (OLAPObject item : items) {
- if (item instanceof Measure || item instanceof Dimension) {
+ if (item instanceof Measure || item instanceof Dimension ||
item instanceof DimensionUsage) {
filtered.add(item);
+ } else {
+ logger.debug(" Ignoring dropped item of type " +
item.getClass().getName() );
}
}
return filtered;
+ }
+
+ @Override
+ protected int dndRemoveAndAdd(PaneSection<OLAPObject> insertSection,
int insertIndex, OLAPObject item) {
+ OLAPObject newItem = item;
+ if (item instanceof DimensionUsage) {
+ newItem = new DimensionUsage((DimensionUsage) item);
+
+ Dimension refDimension =
OLAPUtil.findReferencedDimension((DimensionUsage) item);
+ PlayPenContentPane contentPane = getParent();
+ DimensionPane dimensionPane = null;
+ for (int i = 0; i < contentPane.getComponentCount(); i++) {
+ if (contentPane.getComponent(i).getModel() ==
refDimension) {
+ dimensionPane = (DimensionPane)
contentPane.getComponent(i);
+ break;
+ }
+ }
+ UsageComponent uc = new UsageComponent(contentPane, newItem,
dimensionPane, this);
+ contentPane.add(uc, contentPane.getComponentCount());
+ }
+ logger.debug(" Dragging and dropping item of type " +
item.getClass().getName());
+ if (insertSection != null && insertIndex >= 0 &&
insertSection.getItemType().isInstance(item)) {
+ item.getParent().removeChild(item);
+ insertSection.addItem(insertIndex++, newItem);
+ } else {
+ item.getParent().removeChild(item);
+ getModel().addChild(newItem);
+ }
+
+ return insertIndex;
}
}
Modified: trunk/src/ca/sqlpower/architect/swingui/olap/OLAPPane.java
==============================================================================
--- trunk/src/ca/sqlpower/architect/swingui/olap/OLAPPane.java (original)
+++ trunk/src/ca/sqlpower/architect/swingui/olap/OLAPPane.java Wed Sep 3
10:06:32 2008
@@ -479,6 +479,7 @@
logger.debug("Resolved Paths = " + coords);
List<OLAPObject> items = getItemsFromCoordinates(coords);
List<C> acceptedItems = filterDroppableItems(items);
+ logger.debug("Accepted Items = " + acceptedItems);
// XXX we don't want to weaken the type here (PaneSection<C>
would be better)
// but without this, the whole thing collapses
@@ -520,12 +521,8 @@
}
}
- if (insertSection != null && insertIndex >= 0 &&
insertSection.getItemType().isInstance(item)) {
- item.getParent().removeChild(item);
- insertSection.addItem(insertIndex++, item);
- } else {
- transferInvalidIndexItem(item, insertSection);
- }
+ insertIndex = dndRemoveAndAdd(insertSection, insertIndex,
item);
+ logger.debug("Moved object: " + item);
}
if (!acceptedItems.isEmpty()) {
@@ -544,6 +541,21 @@
setInsertionPoint(null);
schema.endCompoundEdit();
}
+ }
+
+ /**
+ * This will remove the item being dragged and dropped from its parent
before
+ * adding it to the new insertSection. Some panes need to do special
actions
+ * before or during the remove and add.
+ */
+ protected int dndRemoveAndAdd(PaneSection<OLAPObject> insertSection,
int insertIndex, C item) {
+ if (insertSection != null && insertIndex >= 0 &&
insertSection.getItemType().isInstance(item)) {
+ item.getParent().removeChild(item);
+ insertSection.addItem(insertIndex++, item);
+ } else {
+ transferInvalidIndexItem(item, insertSection);
+ }
+ return insertIndex;
}
/**