updated code for kona libs, not quite working yet.
[feisty_meow.git] / kona / src / org / feistymeow / dragdrop / DragonTransferHandler.java
diff --git a/kona/src/org/feistymeow/dragdrop/DragonTransferHandler.java b/kona/src/org/feistymeow/dragdrop/DragonTransferHandler.java
new file mode 100755 (executable)
index 0000000..40833b5
--- /dev/null
@@ -0,0 +1,88 @@
+package org.feistymeow.dragdrop;
+
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.util.List;
+
+import javax.swing.JComponent;
+import javax.swing.TransferHandler;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A transfer handler that can be extended and used to inter-operate with DragonDropManager. This
+ * object is not strictly necessary to use, but it can help if one has not already implemented one's
+ * own transfer handler.
+ * 
+ * @author Chris Koeritz
+ * @copyright Copyright (c) 2012-$now By University of Virginia
+ * @license This file is free software; you can modify and redistribute it under the terms of the
+ *          Apache License v2.0: http://www.apache.org/licenses/LICENSE-2.0
+ */
+@SuppressWarnings("serial")
+public class DragonTransferHandler extends TransferHandler
+{
+    static private Log logger = LogFactory.getLog(DragonTransferHandler.class);
+    IDragonDropDataProvider c_provider;
+
+    public DragonTransferHandler(IDragonDropDataProvider provider)
+    {
+        c_provider = provider;
+    }
+
+    @Override
+    public boolean canImport(TransferSupport support)
+    {
+        if (support == null) return false;
+        if (!support.isDrop())
+            return false; // we don't support cut&paste here.
+        logger.debug("canImport: base just saying okay.");
+        return true;
+    }
+
+    @Override
+    protected Transferable createTransferable(JComponent c)
+    {
+        logger.debug("createTransferable: at base, returning ListTransferable.");
+        return new ListTransferable(c_provider.provideDragList());
+    }
+
+    @Override
+    protected void exportDone(JComponent source, Transferable data, int action)
+    {
+        logger.debug("exportDone: base got event for component " + source.toString());
+    }
+
+    @Override
+    public int getSourceActions(JComponent c)
+    {
+        return COPY;
+    }
+
+    @Override
+    public boolean importData(TransferSupport support)
+    {
+        if (support == null) return false;
+        logger.debug("importData: at base...");
+
+        if (support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
+            logger.debug("importing data with java files flavor");
+            List<Object> files = ListTransferable.extractData(support.getTransferable());
+            if ((files != null) && (files.size() != 0)) {
+                c_provider.consumeDropList(files, support.getDropLocation().getDropPoint());
+                return true;
+            }
+        } else if (support.isDataFlavorSupported(ListTransferable.getURIListFlavor1())
+                || support.isDataFlavorSupported(ListTransferable.getURIListFlavor2())) {
+            logger.debug("importing data with uri list flavor");
+            List<Object> files = ListTransferable.extractData(support.getTransferable());
+            if ((files != null) && (files.size() != 0)) {
+                c_provider.consumeDropList(files, support.getDropLocation().getDropPoint());
+                return true;
+            }
+        }
+        logger.warn("passing importData request to superclass, which will probably fail.");
+        return super.importData(support);
+    }
+}