package net.filebot.ui.transfer;
import static java.nio.charset.StandardCharsets.*;
import static java.util.Collections.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.AbstractMap;
import java.util.Set;
public class TextFileTransferable extends ByteBufferTransferable {
private final String text;
public TextFileTransferable(String name, String text) {
this(name, text, UTF_8);
}
public TextFileTransferable(String name, String text, Charset charset) {
// lazy data map for file transfer
super(new AbstractMap<String, ByteBuffer>() {
@Override
public Set<Entry<String, ByteBuffer>> entrySet() {
return singletonMap(name, charset.encode(text)).entrySet();
}
});
// text transfer
this.text = text;
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException {
// check file flavor first, because text/uri-list is also text flavor
if (super.isDataFlavorSupported(flavor)) {
return super.getTransferData(flavor);
}
// check text flavor
if (flavor.isFlavorTextType()) {
return text;
}
throw new UnsupportedFlavorException(flavor);
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] { DataFlavor.javaFileListFlavor, FileTransferable.uriListFlavor, DataFlavor.stringFlavor };
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
// file flavor or text flavor
return super.isDataFlavorSupported(flavor) || flavor.isFlavorTextType();
}
}