2007-12-26 11:48:28 -05:00
|
|
|
|
|
|
|
package net.sourceforge.filebot.ui.transfer;
|
|
|
|
|
|
|
|
|
|
|
|
import java.awt.datatransfer.DataFlavor;
|
|
|
|
import java.awt.datatransfer.Transferable;
|
|
|
|
import java.awt.datatransfer.UnsupportedFlavorException;
|
|
|
|
import java.io.File;
|
2009-06-30 08:12:34 -04:00
|
|
|
import java.nio.CharBuffer;
|
2008-03-19 18:14:38 -04:00
|
|
|
import java.util.Arrays;
|
2007-12-26 11:48:28 -05:00
|
|
|
import java.util.Collection;
|
2008-02-14 18:07:10 -05:00
|
|
|
|
2007-12-26 11:48:28 -05:00
|
|
|
|
|
|
|
public class FileTransferable implements Transferable {
|
|
|
|
|
2008-02-26 15:45:28 -05:00
|
|
|
public static final DataFlavor uriListFlavor = createUriListFlavor();
|
|
|
|
|
2009-06-19 18:24:27 -04:00
|
|
|
|
2008-02-26 15:45:28 -05:00
|
|
|
private static DataFlavor createUriListFlavor() {
|
|
|
|
try {
|
2009-06-30 08:12:34 -04:00
|
|
|
return new DataFlavor("text/uri-list;class=java.nio.CharBuffer");
|
2008-02-26 15:45:28 -05:00
|
|
|
} catch (ClassNotFoundException e) {
|
|
|
|
// will never happen
|
2009-06-19 18:24:27 -04:00
|
|
|
throw new RuntimeException(e);
|
2008-02-26 15:45:28 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-06-19 18:24:27 -04:00
|
|
|
|
|
|
|
private final File[] files;
|
2007-12-26 11:48:28 -05:00
|
|
|
|
2009-06-19 18:24:27 -04:00
|
|
|
|
2008-03-19 18:14:38 -04:00
|
|
|
public FileTransferable(File... files) {
|
2009-06-19 18:24:27 -04:00
|
|
|
this.files = files;
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-03-19 18:14:38 -04:00
|
|
|
public FileTransferable(Collection<File> files) {
|
2009-06-19 18:24:27 -04:00
|
|
|
this.files = files.toArray(new File[0]);
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-10-06 15:13:58 -04:00
|
|
|
@Override
|
2007-12-26 11:48:28 -05:00
|
|
|
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
|
2008-02-14 18:07:10 -05:00
|
|
|
if (flavor.isFlavorJavaFileListType())
|
2009-06-19 18:24:27 -04:00
|
|
|
return Arrays.asList(files);
|
2008-02-26 15:45:28 -05:00
|
|
|
else if (flavor.equals(uriListFlavor))
|
2009-06-30 08:12:34 -04:00
|
|
|
return CharBuffer.wrap(getUriList());
|
2008-02-14 18:07:10 -05:00
|
|
|
else
|
2007-12-26 11:48:28 -05:00
|
|
|
throw new UnsupportedFlavorException(flavor);
|
2008-02-14 18:07:10 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2008-10-06 15:13:58 -04:00
|
|
|
* @return line separated list of file URIs
|
2008-02-14 18:07:10 -05:00
|
|
|
*/
|
|
|
|
private String getUriList() {
|
2009-06-19 18:24:27 -04:00
|
|
|
StringBuilder sb = new StringBuilder(80 * files.length);
|
2008-02-14 18:07:10 -05:00
|
|
|
|
|
|
|
for (File file : files) {
|
2009-06-19 18:24:27 -04:00
|
|
|
// use URI encoded path
|
|
|
|
sb.append("file://").append(file.toURI().getRawPath());
|
2008-02-15 13:57:18 -05:00
|
|
|
sb.append("\r\n");
|
2008-02-14 18:07:10 -05:00
|
|
|
}
|
2007-12-26 11:48:28 -05:00
|
|
|
|
2008-02-14 18:07:10 -05:00
|
|
|
return sb.toString();
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-10-06 15:13:58 -04:00
|
|
|
@Override
|
2007-12-26 11:48:28 -05:00
|
|
|
public DataFlavor[] getTransferDataFlavors() {
|
2008-10-06 15:13:58 -04:00
|
|
|
return new DataFlavor[] { DataFlavor.javaFileListFlavor, uriListFlavor };
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-10-06 15:13:58 -04:00
|
|
|
@Override
|
2007-12-26 11:48:28 -05:00
|
|
|
public boolean isDataFlavorSupported(DataFlavor flavor) {
|
2008-10-06 15:13:58 -04:00
|
|
|
return isFileListFlavor(flavor);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public static boolean isFileListFlavor(DataFlavor flavor) {
|
|
|
|
return flavor.isFlavorJavaFileListType() || flavor.equals(uriListFlavor);
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|
2008-02-26 15:45:28 -05:00
|
|
|
|
2007-12-26 11:48:28 -05:00
|
|
|
}
|