/* Copyright (C) 2012 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.specialfields; import net.sf.jabref.BaseAction; import net.sf.jabref.BibtexEntry; import net.sf.jabref.Globals; import net.sf.jabref.JabRefFrame; import net.sf.jabref.undo.NamedCompound; public class SpecialFieldAction extends BaseAction { private JabRefFrame frame; private String doneTextPattern; private SpecialField c; String value; private boolean nullFieldIfValueIsTheSame; private String undoText; /** * * @param nullFieldIfValueIsTheSame - false also causes that doneTextPattern has two place holders %0 for the value and %1 for the sum of entries * @param doneTextPattern - the pattern to use to update status information shown in MainFrame */ public SpecialFieldAction( JabRefFrame frame, SpecialField c, String value, boolean nullFieldIfValueIsTheSame, String undoText, String doneTextPattern ) { this.frame = frame; this.c = c; this.value = value; this.nullFieldIfValueIsTheSame = nullFieldIfValueIsTheSame; this.undoText = undoText; this.doneTextPattern = doneTextPattern; } public void action() { try { NamedCompound ce = new NamedCompound(undoText); BibtexEntry[] bes = frame.basePanel().getSelectedEntries(); if (bes == null) return; for (BibtexEntry be: bes) { // if (value==null) and then call nullField has been ommited as updatefield also handles value==null SpecialFieldsUtils.updateField(c, value, be, ce, nullFieldIfValueIsTheSame); } ce.end(); if (ce.hasEdits()) { frame.basePanel().undoManager.addEdit(ce); frame.basePanel().markBaseChanged(); frame.basePanel().updateEntryEditorIfShowing(); String outText; if (nullFieldIfValueIsTheSame) outText = Globals.lang(doneTextPattern, Integer.toString(bes.length)); else outText = Globals.lang(doneTextPattern, value, Integer.toString(bes.length)); frame.output(outText); } else { // if user does not change anything with his action, we do not do anything either // even no output message } } catch (Throwable ex) { ex.printStackTrace(); } } }