package org.jabref.gui.exporter; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Arrays; import java.util.List; public class RtfTransferable implements Transferable { private static final DataFlavor RTF_FLAVOR = new DataFlavor("text/rtf; class=java.io.InputStream", "RTF Format"); private static final DataFlavor TEXT_FLAVOR = DataFlavor.stringFlavor; private static final List<DataFlavor> ALL_FLAVORS = Arrays.asList(RTF_FLAVOR, TEXT_FLAVOR); private final String rtfText; private final String plainText; public RtfTransferable(String text) { this.rtfText = text; this.plainText = text; } public RtfTransferable(String rtfText, String plainText) { this.rtfText = rtfText; this.plainText = plainText; } @Override public DataFlavor[] getTransferDataFlavors() { return ALL_FLAVORS.toArray(new DataFlavor[ALL_FLAVORS.size()]); } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return ALL_FLAVORS.parallelStream().anyMatch(flavor::equals); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(RTF_FLAVOR)) { return new ByteArrayInputStream(rtfText.getBytes()); } else if (flavor.equals(TEXT_FLAVOR)) { return plainText; } else { throw new UnsupportedFlavorException(flavor); } } }