/** * */ package glug.gui; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.Reader; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; import javax.swing.TransferHandler; public abstract class FileImportDragAndDropTransferHandler extends TransferHandler { private static final long serialVersionUID = 1L; @Override public boolean canImport(TransferSupport support) { return extractUriListDataFlavour(support.getDataFlavors())!=null; } @Override public boolean importData(TransferSupport support) { try { DataFlavor uriListDataFlavour = extractUriListDataFlavour(support.getDataFlavors()); Reader uriListReader=(Reader) support.getTransferable().getTransferData(uriListDataFlavour); List<File> files = convertUriList(uriListReader); System.out.println(files); load(files); } catch (UnsupportedFlavorException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } public abstract void load(List<File> files); private List<File> convertUriList(Reader uriListReader) throws IOException { BufferedReader bufferedReader = new BufferedReader(uriListReader); List<File> fileList = new ArrayList<File>(); String line; while ((line=bufferedReader.readLine())!=null) { try { File file = new File(new URI(line)); if (file.exists()) { fileList.add(file); } } catch (URISyntaxException e) { e.printStackTrace(); } } return fileList; } private DataFlavor extractUriListDataFlavour(DataFlavor[] dataFlavors) { for (DataFlavor dataFlavor : dataFlavors) { if (dataFlavor.isMimeTypeEqual("text/uri-list") && dataFlavor.getRepresentationClass().equals(Reader.class)) { return dataFlavor; } } return null; } }