package org.jabref.gui.actions;
import java.awt.event.ActionEvent;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JDialog;
import org.jabref.Globals;
import org.jabref.JabRefExecutorService;
import org.jabref.JabRefGUI;
import org.jabref.gui.IconTheme;
import org.jabref.gui.externalfiles.AutoSetLinks;
import org.jabref.gui.keyboard.KeyBinding;
import org.jabref.gui.undo.NamedCompound;
import org.jabref.logic.l10n.Localization;
import org.jabref.model.entry.BibEntry;
/**
* This Action may only be used in a menu or button.
* Never in the entry editor. FileListEditor and EntryEditor have other ways to update the file links
*/
public class AutoLinkFilesAction extends AbstractAction {
public AutoLinkFilesAction() {
putValue(Action.SMALL_ICON, IconTheme.JabRefIcon.AUTO_FILE_LINK.getSmallIcon());
putValue(Action.LARGE_ICON_KEY, IconTheme.JabRefIcon.AUTO_FILE_LINK.getIcon());
putValue(Action.NAME, Localization.lang("Automatically set file links"));
putValue(Action.ACCELERATOR_KEY, Globals.getKeyPrefs().getKey(KeyBinding.AUTOMATICALLY_LINK_FILES));
}
@Override
public void actionPerformed(ActionEvent event) {
List<BibEntry> entries = JabRefGUI.getMainFrame().getCurrentBasePanel().getSelectedEntries();
if (entries.isEmpty()) {
JabRefGUI.getMainFrame().getCurrentBasePanel()
.output(Localization.lang("This operation requires one or more entries to be selected."));
return;
}
JDialog diag = new JDialog(JabRefGUI.getMainFrame(), true);
final NamedCompound nc = new NamedCompound(Localization.lang("Automatically set file links"));
Runnable runnable = AutoSetLinks.autoSetLinks(entries, nc, null, null,
JabRefGUI.getMainFrame().getCurrentBasePanel().getBibDatabaseContext(), e -> {
if (e.getID() > 0) {
// entry has been updated in Util.autoSetLinks, only treat nc and status message
if (nc.hasEdits()) {
nc.end();
JabRefGUI.getMainFrame().getCurrentBasePanel().getUndoManager().addEdit(nc);
JabRefGUI.getMainFrame().getCurrentBasePanel().markBaseChanged();
}
JabRefGUI.getMainFrame().output(Localization.lang("Finished automatically setting external links."));
} else {
JabRefGUI.getMainFrame().output(Localization.lang("Finished automatically setting external links.") + " "
+ Localization.lang("No files found."));
}
} , diag);
JabRefExecutorService.INSTANCE.execute(runnable);
}
}