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;
     }

     /**

Reply via email to