package model.transferhandler; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.TransferHandler; import logging.LogUtil; abstract public class FileFolderTransferHandler extends TransferHandler { /** * */ private static final long serialVersionUID = 202925720699164453L; /* * (non-Javadoc) * * @see javax.swing.TransferHandler#canImport(javax.swing.TransferHandler. * TransferSupport) */ @Override public boolean canImport(TransferHandler.TransferSupport info) { // we only import FileList if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { return false; } return true; } /* * (non-Javadoc) * * @see javax.swing.TransferHandler#importData(javax.swing.TransferHandler. * TransferSupport) */ @SuppressWarnings("unchecked") @Override public boolean importData(TransferHandler.TransferSupport info) { if (!info.isDrop()) { return false; } // Check for FileList flavor if (!info.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) { return false; } try { // Get the fileList that is being dropped. Transferable t = info.getTransferable(); List<File> data = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor); List<String> folder = new ArrayList<>(); List<String> files = new ArrayList<>(); // sort lists in files and folders for (File f : data) { if (f.isDirectory()) folder.add(f.getAbsolutePath()); else if (f.isFile()) files.add(f.getAbsolutePath()); } // folders to add? -> add if (folder.size() > 0) { for (String f : folder) addFolder(f); } // files to add? -> add if (files.size() > 0) addFiles(files); } catch (UnsupportedFlavorException | IOException e) { Logger.getLogger(this.getClass().getName()).log(Level.SEVERE, "Error while adding file or folder:\n" + LogUtil.getStackTrace(e), e); } return true; } /** * adds a folder * * @param path * path to the folder */ abstract public void addFolder(String path); /** * adds files * * @param files * paths to the files */ abstract public void addFiles(List<String> files); }