/* 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.external;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import net.sf.jabref.BasePanel;
import net.sf.jabref.BibtexEntry;
import net.sf.jabref.BibtexFields;
import net.sf.jabref.Globals;
import net.sf.jabref.JabRefFrame;
/**
* An Action class representing the process of invoking a PushToApplication operation.
*/
public class PushToApplicationAction extends AbstractAction implements Runnable {
private PushToApplication operation;
private JabRefFrame frame;
private BasePanel panel;
private BibtexEntry[] entries;
public PushToApplicationAction(JabRefFrame frame, PushToApplication operation) {
this.frame = frame;
putValue(SMALL_ICON, operation.getIcon());
putValue(NAME, operation.getName());
putValue(SHORT_DESCRIPTION, operation.getTooltip());
if (operation.getKeyStrokeName() != null)
putValue(ACCELERATOR_KEY, Globals.prefs.getKey(operation.getKeyStrokeName()));
this.operation = operation;
}
public void actionPerformed(ActionEvent e) {
panel = frame.basePanel();
// Check if a BasePanel exists:
if (panel == null)
return;
// Check if any entries are selected:
entries = panel.getSelectedEntries();
if (entries.length == 0) {
JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires one or more entries to be selected."),
(String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
return;
}
// If required, check that all entries have BibTeX keys defined:
if (operation.requiresBibtexKeys())
for (int i=0; i<entries.length; i++) {
if ((entries[i].getCiteKey() == null) || (entries[i].getCiteKey().trim().length() == 0)) {
JOptionPane.showMessageDialog(frame, Globals.lang("This operation requires all selected entries to have BibTex keys defined."),
(String)getValue(NAME), JOptionPane.ERROR_MESSAGE);
return;
}
}
// All set, call the operation in a new thread:
Thread t = new Thread(this);
t.start();
}
public void run() {
// Do the operation:
operation.pushEntries(panel.database(), entries, getKeyString(entries), panel.metaData());
// Call the operationCompleted() method on the event dispatch thread:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
operation.operationCompleted(panel);
}
});
}
protected String getKeyString(BibtexEntry[] entries) {
StringBuffer result = new StringBuffer();
String citeKey = "";//, message = "";
boolean first = true;
for (int i=0; i<entries.length; i++) {
BibtexEntry bes = entries[i];
citeKey = bes.getField(BibtexFields.KEY_FIELD);
// if the key is empty we give a warning and ignore this entry
if (citeKey == null || citeKey.equals(""))
continue;
if (first) {
result.append(citeKey);
first = false;
} else {
result.append(",").append(citeKey);
}
}
return result.toString();
}
}