/** * Unabbreviate the journal name of the given entry. * * @param entry The entry to be treated. * @param fieldName The field name (e.g. "journal") * @param ce If the entry is changed, add an edit to this compound. * @return true if the entry was changed, false otherwise. */ public boolean unabbreviate( BibDatabase database, BibEntry entry, String fieldName, CompoundEdit ce) { if (!entry.hasField(fieldName)) { return false; } String text = entry.getFieldOptional(fieldName).get(); String origText = text; if (database != null) { text = database.resolveForStrings(text); } if (!journalAbbreviationRepository.isKnownName(text)) { return false; // cannot do anything if it is not known } if (!journalAbbreviationRepository.isAbbreviatedName(text)) { return false; // cannot unabbreviate unabbreviated name. } Abbreviation abbreviation = journalAbbreviationRepository.getAbbreviation(text).get(); // must be here String newText = abbreviation.getName(); entry.setField(fieldName, newText); ce.addEdit(new UndoableFieldChange(entry, fieldName, origText, newText)); return true; }
/** * Add controls for switching between abbreviated and full journal names. If this field also has a * FieldContentSelector, we need to combine these. * * @param panel * @param editor * @param entry * @param storeFieldAction * @return */ public static Optional<JComponent> getJournalExtraComponent( JabRefFrame frame, BasePanel panel, FieldEditor editor, BibEntry entry, Set<FieldContentSelector> contentSelectors, StoreFieldAction storeFieldAction) { JPanel controls = new JPanel(); controls.setLayout(new BorderLayout()); if (!panel .getBibDatabaseContext() .getMetaData() .getContentSelectorValuesForField(editor.getFieldName()) .isEmpty()) { FieldContentSelector ws = new FieldContentSelector(frame, panel, frame, editor, storeFieldAction, false, ", "); contentSelectors.add(ws); controls.add(ws, BorderLayout.NORTH); } // Button to toggle abbreviated/full journal names JButton button = new JButton(Localization.lang("Toggle abbreviation")); button.setToolTipText(ABBREVIATION_TOOLTIP_TEXT); button.addActionListener( actionEvent -> { String text = editor.getText(); JournalAbbreviationRepository abbreviationRepository = Globals.journalAbbreviationLoader.getRepository( Globals.prefs.getJournalAbbreviationPreferences()); if (abbreviationRepository.isKnownName(text)) { String s = abbreviationRepository.getNextAbbreviation(text).orElse(text); if (s != null) { editor.setText(s); storeFieldAction.actionPerformed(new ActionEvent(editor, 0, "")); panel .getUndoManager() .addEdit(new UndoableFieldChange(entry, editor.getFieldName(), text, s)); } } }); controls.add(button, BorderLayout.SOUTH); return Optional.of(controls); }