filebot/source/net/sourceforge/filebot/ui/transfer/FileTransferable.java

85 lines
1.8 KiB
Java
Raw Normal View History

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;
import java.util.Arrays;
2007-12-26 11:48:28 -05:00
import java.util.Collection;
2007-12-26 11:48:28 -05:00
public class FileTransferable implements Transferable {
public static final DataFlavor uriListFlavor = createUriListFlavor();
2009-06-19 18:24:27 -04:00
private static DataFlavor createUriListFlavor() {
try {
return new DataFlavor("text/uri-list;class=java.lang.String");
} catch (ClassNotFoundException e) {
// will never happen
2009-06-19 18:24:27 -04:00
throw new RuntimeException(e);
}
}
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
public FileTransferable(File... files) {
2009-06-19 18:24:27 -04:00
this.files = files;
2007-12-26 11:48:28 -05: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
}
@Override
2007-12-26 11:48:28 -05:00
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
if (flavor.isFlavorJavaFileListType())
2009-06-19 18:24:27 -04:00
return Arrays.asList(files);
else if (flavor.equals(uriListFlavor))
return getUriList();
else
2007-12-26 11:48:28 -05:00
throw new UnsupportedFlavorException(flavor);
}
/**
* @return line separated list of file URIs
*/
private String getUriList() {
2009-06-19 18:24:27 -04:00
StringBuilder sb = new StringBuilder(80 * files.length);
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");
}
2007-12-26 11:48:28 -05:00
return sb.toString();
2007-12-26 11:48:28 -05:00
}
@Override
2007-12-26 11:48:28 -05:00
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor, uriListFlavor };
2007-12-26 11:48:28 -05:00
}
@Override
2007-12-26 11:48:28 -05:00
public boolean isDataFlavorSupported(DataFlavor flavor) {
return isFileListFlavor(flavor);
}
public static boolean isFileListFlavor(DataFlavor flavor) {
return flavor.isFlavorJavaFileListType() || flavor.equals(uriListFlavor);
2007-12-26 11:48:28 -05:00
}
2007-12-26 11:48:28 -05:00
}