/* Copyright (C) 2003-2011 JabRef contributors.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package net.sf.jabref;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.StringWriter;
import javax.swing.JOptionPane;
import net.sf.jabref.export.LatexFieldFormatter;
/*
* A transferable object containing an array of BibtexEntry objects. Used
* for copy-paste operations.
*/
public class TransferableBibtexEntry implements Transferable {
private BibtexEntry[] data;
public static DataFlavor entryFlavor = new DataFlavor(BibtexEntry.class, "JabRef entry");
public TransferableBibtexEntry(BibtexEntry[] data) {
this.data = data;
}
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[] {TransferableBibtexEntry.entryFlavor,
DataFlavor.stringFlavor};
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
return (flavor.equals(entryFlavor) ||
flavor.equals(DataFlavor.stringFlavor));
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException {
if (flavor.equals(entryFlavor))
return data;
else if (flavor.equals(DataFlavor.stringFlavor)) {
try {
StringWriter sw = new StringWriter();
LatexFieldFormatter ff = new LatexFieldFormatter();
for (int i=0; i<data.length; i++)
data[i].write(sw, ff, false);
return sw.toString();
} catch (IOException ex) {
JOptionPane.showMessageDialog
(null, "Could not paste entry as text:\n"+ex.getMessage(),
"Clipboard", JOptionPane.ERROR_MESSAGE);
return "";
}
} else
throw new UnsupportedFlavorException(flavor);
}
}