package org.jabref.gui.worker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JMenuItem;
import org.jabref.Globals;
import org.jabref.gui.BasePanel;
import org.jabref.gui.EntryMarker;
import org.jabref.gui.JabRefFrame;
import org.jabref.gui.undo.NamedCompound;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.entry.BibEntry;
import org.jabref.preferences.JabRefPreferences;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class MarkEntriesAction extends AbstractWorker implements ActionListener {
private static final Log LOGGER = LogFactory.getLog(MarkEntriesAction.class);
private final JabRefFrame frame;
private final int level;
private final JMenuItem menuItem;
private int besLength;
public MarkEntriesAction(JabRefFrame frame, int level) {
this.frame = frame;
this.level = level;
//menuItem = new JMenuItem(Globals.menuTitle("Mark entries").replace("&",""));
menuItem = new JMenuItem(Localization.lang("Level") + " " + level + " ");
menuItem.setMnemonic(String.valueOf(level + 1).charAt(0));
menuItem.setBackground(Globals.prefs.getColor(JabRefPreferences.MARKED_ENTRY_BACKGROUND + this.level));
menuItem.setOpaque(true);
menuItem.addActionListener(this);
}
public JMenuItem getMenuItem() {
return menuItem;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
try {
this.init();
getWorker().run();
getCallBack().update();
} catch (Throwable t) {
LOGGER.warn("Problem marking entries", t);
}
}
@Override
public void run() {
BasePanel panel = frame.getCurrentBasePanel();
if (panel != null) {
List<BibEntry> bes = panel.getSelectedEntries();
// used at update() to determine output string
besLength = bes.size();
if (!bes.isEmpty()) {
NamedCompound ce = new NamedCompound(Localization.lang("Mark entries"));
for (BibEntry be : bes) {
EntryMarker.markEntry(be, level + 1, false, ce);
}
ce.end();
panel.getUndoManager().addEdit(ce);
}
}
}
@Override
public void update() {
String outputStr;
switch (besLength) {
case 0:
outputStr = Localization.lang("This operation requires one or more entries to be selected.");
break;
case 1:
frame.getCurrentBasePanel().markBaseChanged();
outputStr = Localization.lang("Marked selected entry");
break;
default:
frame.getCurrentBasePanel().markBaseChanged();
outputStr = Localization.lang("Marked all %0 selected entries", Integer.toString(besLength));
break;
}
frame.output(outputStr);
}
}