import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
-import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
public void drop(DropTargetDropEvent evt)
{
Transferable t = evt.getTransferable();
- java.util.List files = null;
+ java.util.List<String> files = new ArrayList<String>(), protocols = new ArrayList<String>();
try
{
- DataFlavor uriListFlavor = new DataFlavor(
- "text/uri-list;class=java.lang.String");
- if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
- {
- Cache.log.debug("Drop handled as javaFileListFlavor");
- // Works on Windows and MacOSX
- evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
- files = (java.util.List) t
- .getTransferData(DataFlavor.javaFileListFlavor);
- }
- else if (t.isDataFlavorSupported(uriListFlavor))
- {
- Cache.log.debug("Drop handled as uriListFlavor");
- // This is used by Unix drag system
- evt.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
- String data = (String) t.getTransferData(uriListFlavor);
- if (data == null)
- {
- Cache.log.debug("standard URIListFlavor (" + uriListFlavor
- + ") doesn't resolve. trying others.");
- // try 'best' dataflavor
- data = (String) t.getTransferData(DataFlavor
- .selectBestTextFlavor(t.getTransferDataFlavors()));
- Cache.log.debug("Dataflavor "
- + DataFlavor.selectBestTextFlavor(t
- .getTransferDataFlavors()) + " returned " + data);
- }
- files = new java.util.ArrayList(1);
- for (java.util.StringTokenizer st = new java.util.StringTokenizer(
- data, "\r\n"); st.hasMoreTokens();)
- {
- String s = st.nextToken();
- if (s.startsWith("#"))
- {
- // the line is a comment (as per the RFC 2483)
- continue;
- }
-
- java.net.URI uri = new java.net.URI(s);
- // check to see if we can handle this kind of URI
- if (uri.getScheme().toLowerCase().startsWith("http"))
- {
- files.add(uri.toString());
- }
- else
- {
- // otherwise preserve old behaviour: catch all for file objects
- java.io.File file = new java.io.File(uri);
- files.add(file.toString());
- }
- }
- if (files.size() < 1)
- {
- Cache.log
- .debug("Couldn't resolve drop data with 'best text'. Here are the supported flavors:");
- if (data == null && Cache.log.isDebugEnabled())
- {
- for (DataFlavor fl : t.getTransferDataFlavors())
- {
- Cache.log.debug("Supported transfer dataflavor: "
- + fl.toString());
- Object df = t.getTransferData(fl);
- if (df != null)
- {
- Cache.log.debug("Retrieves: " + df);
- }
- }
- }
- }
- }
+ Desktop.transferFromDropTarget(files, protocols, evt, t);
} catch (Exception e)
{
e.printStackTrace();