package org.jabref.logic.autocompleter; import java.util.List; import java.util.Map; import java.util.Objects; import org.jabref.logic.journals.JournalAbbreviationPreferences; import org.jabref.preferences.JabRefPreferences; public class AutoCompletePreferences { private static final String AUTOCOMPLETER_SHORTEST_TO_COMPLETE = "shortestToComplete"; private static final String AUTOCOMPLETER_FIRSTNAME_MODE = "autoCompFirstNameMode"; private static final String AUTOCOMPLETER_LAST_FIRST = "autoCompLF"; private static final String AUTOCOMPLETER_FIRST_LAST = "autoCompFF"; private static final String AUTOCOMPLETER_COMPLETE_FIELDS = "autoCompleteFields"; private final JabRefPreferences preferences; public AutoCompletePreferences(JabRefPreferences preferences) { this.preferences = Objects.requireNonNull(preferences); } public static void putDefaults(Map<String, Object> defaults) { defaults.put(AUTOCOMPLETER_SHORTEST_TO_COMPLETE, 1); defaults.put(AUTOCOMPLETER_FIRSTNAME_MODE, AutoCompleteFirstNameMode.BOTH.name()); defaults.put(AUTOCOMPLETER_FIRST_LAST, Boolean.FALSE); // "Autocomplete names in 'Firstname Lastname' format only" defaults.put(AUTOCOMPLETER_LAST_FIRST, Boolean.FALSE); // "Autocomplete names in 'Lastname, Firstname' format only" defaults.put(AUTOCOMPLETER_COMPLETE_FIELDS, "author;editor;title;journal;publisher;keywords"); } public int getShortestLengthToComplete() { return preferences.getInt(AUTOCOMPLETER_SHORTEST_TO_COMPLETE); } public void setShortestLengthToComplete(Integer value) { preferences.putInt(AUTOCOMPLETER_SHORTEST_TO_COMPLETE, value); } /** * Returns how the first names are handled. * For "ONLY_FULL", the auto completer returns the full name, e.g. "Smith, Bob" * For "ONLY_ABBREVIATED", the auto completer returns the first name abbreviated, e.g. "Smith, B." * For "BOTH", the auto completer returns both versions. */ public AutoCompleteFirstNameMode getFirstnameMode() { try { return AutoCompleteFirstNameMode.valueOf(preferences.get(AUTOCOMPLETER_FIRSTNAME_MODE)); } catch (IllegalArgumentException ex) { // Should only occur when preferences are set directly via preferences.put and not via setFirstnameMode return AutoCompleteFirstNameMode.BOTH; } } public void setFirstnameMode(AutoCompleteFirstNameMode mode) { preferences.put(AUTOCOMPLETER_FIRSTNAME_MODE, mode.name()); } public boolean getOnlyCompleteLastFirst() { return preferences.getBoolean(AUTOCOMPLETER_LAST_FIRST); } public void setOnlyCompleteLastFirst(boolean value) { preferences.putBoolean(AUTOCOMPLETER_LAST_FIRST, value); } public boolean getOnlyCompleteFirstLast() { return preferences.getBoolean(AUTOCOMPLETER_FIRST_LAST); } public void setOnlyCompleteFirstLast(boolean value) { preferences.putBoolean(AUTOCOMPLETER_FIRST_LAST, value); } public List<String> getCompleteNames() { return preferences.getStringList(AUTOCOMPLETER_COMPLETE_FIELDS); } public String getCompleteNamesAsString() { return preferences.get(AUTOCOMPLETER_COMPLETE_FIELDS); } public void setCompleteNames(String value) { preferences.put(AUTOCOMPLETER_COMPLETE_FIELDS, value); } public JournalAbbreviationPreferences getJournalAbbreviationPreferences() { return preferences.getJournalAbbreviationPreferences(); } }