package org.korsakow.ide.ui.dnd; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JComponent; import javax.swing.TransferHandler; public class AggregateFileTransferHandler extends TransferHandler { public static interface FileTransferHandler { boolean importData(List<File> files); } protected List<FileTransferHandler> handlers = new ArrayList<FileTransferHandler>(); public AggregateFileTransferHandler() { } @Override public int getSourceActions(JComponent comp) { return TransferHandler.COPY_OR_MOVE; } public void addHandler(FileTransferHandler handler) { handlers.add(handler); } @Override public boolean canImport(JComponent comp, DataFlavor[] flavours) { if (!Arrays.asList(flavours).contains(DataFlavor.javaFileListFlavor)) return false; return true; } @SuppressWarnings("unchecked") @Override public boolean importData(TransferSupport support) { if (!support.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) return false; List<File> files; try { files = (List<File>)support.getTransferable().getTransferData(DataFlavor.javaFileListFlavor); } catch (UnsupportedFlavorException e) { return false; } catch (IOException e) { return false; } for (FileTransferHandler handler : handlers) if (handler.importData(files)) return true; return false; } }