package org.jabref.gui; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.io.StringWriter; import java.util.List; import javax.swing.JOptionPane; import org.jabref.Globals; import org.jabref.logic.bibtex.BibEntryWriter; import org.jabref.logic.bibtex.LatexFieldFormatter; import org.jabref.logic.l10n.Localization; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.BibEntry; /* * A transferable object containing an array of BibEntry objects. Used * for copy-paste operations. */ public class TransferableBibtexEntry implements Transferable { public static final DataFlavor entryFlavor = new DataFlavor(BibEntry.class, "JabRef entry"); private final List<BibEntry> data; public TransferableBibtexEntry(List<BibEntry> bes) { this.data = bes; } @Override public DataFlavor[] getTransferDataFlavors() { return new DataFlavor[] {TransferableBibtexEntry.entryFlavor, DataFlavor.stringFlavor}; } @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor.equals(TransferableBibtexEntry.entryFlavor) || flavor.equals(DataFlavor.stringFlavor); } @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(TransferableBibtexEntry.entryFlavor)) { return data; } else if (flavor.equals(DataFlavor.stringFlavor)) { try { StringWriter sw = new StringWriter(); BibEntryWriter bibtexEntryWriter = new BibEntryWriter( new LatexFieldFormatter(Globals.prefs.getLatexFieldFormatterPreferences()), false); for (BibEntry entry : data) { bibtexEntryWriter.write(entry, sw, BibDatabaseMode.BIBTEX); } return sw.toString(); } catch (IOException ex) { JOptionPane.showMessageDialog(null, Localization.lang("Could not paste entry as text:") + "\n" + ex.getLocalizedMessage(), Localization.lang("Clipboard"), JOptionPane.ERROR_MESSAGE); return ""; } } else { throw new UnsupportedFlavorException(flavor); } } }