/* 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.groups;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import net.sf.jabref.BibtexEntry;
public class TransferableEntrySelection implements Transferable {
public static final DataFlavor flavorInternal;
public static final DataFlavor flavorExternal;
public static final DataFlavor[] flavors;
public final BibtexEntry[] selectedEntries;
public final String selectedEntriesCiteKeys;
protected boolean includeCiteKeyword = false;
static {
DataFlavor df1 = null;
DataFlavor df2 = null;
try {
df1 = new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType
+ ";class=net.sf.jabref.groups.TransferableEntrySelection");
df2 = DataFlavor.getTextPlainUnicodeFlavor();
} catch (ClassNotFoundException e) {
// never happens
}
flavorInternal = df1;
flavorExternal = df2;
flavors = new DataFlavor[] { flavorInternal, flavorExternal };
}
public TransferableEntrySelection(BibtexEntry[] selectedEntries) {
this.selectedEntries = selectedEntries;
StringBuffer keys = new StringBuffer();
for (int i = 0; i < selectedEntries.length; ++i) {
keys.append(selectedEntries[i].getCiteKey());
if (i + 1 < selectedEntries.length)
keys.append(",");
}
selectedEntriesCiteKeys = keys.toString();
}
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor someFlavor) {
return someFlavor.equals(flavorInternal)
|| someFlavor.equals(flavorExternal);
}
public Object getTransferData(DataFlavor someFlavor)
throws UnsupportedFlavorException, IOException {
if (!isDataFlavorSupported(someFlavor))
throw new UnsupportedFlavorException(someFlavor);
if (someFlavor.equals(flavorInternal))
return this;
String s = includeCiteKeyword ?
"\\cite{" + selectedEntriesCiteKeys + "}"
: selectedEntriesCiteKeys;
return new ByteArrayInputStream(s.getBytes(
flavorExternal.getParameter("charset").trim()));
}
public BibtexEntry[] getSelection() {
return selectedEntries;
}
public void setIncludeCiteKeyword(boolean includeCiteKeyword) {
this.includeCiteKeyword = includeCiteKeyword;
}
}