5050import org .jabref .gui .actions .BaseAction ;
5151import org .jabref .gui .actions .CleanupAction ;
5252import org .jabref .gui .actions .CopyBibTeXKeyAndLinkAction ;
53+ import org .jabref .gui .autocompleter .AutoCompletePreferences ;
54+ import org .jabref .gui .autocompleter .AutoCompleteUpdater ;
55+ import org .jabref .gui .autocompleter .PersonNameSuggestionProvider ;
56+ import org .jabref .gui .autocompleter .SuggestionProviders ;
5357import org .jabref .gui .bibtexkeypattern .SearchFixDuplicateLabels ;
5458import org .jabref .gui .contentselector .ContentSelectorDialog ;
5559import org .jabref .gui .desktop .JabRefDesktop ;
96100import org .jabref .gui .worker .CitationStyleToClipboardWorker ;
97101import org .jabref .gui .worker .MarkEntriesAction ;
98102import org .jabref .gui .worker .SendAsEMailAction ;
99- import org .jabref .logic .autocompleter .AutoCompletePreferences ;
100- import org .jabref .logic .autocompleter .AutoCompleter ;
101- import org .jabref .logic .autocompleter .AutoCompleterFactory ;
102- import org .jabref .logic .autocompleter .ContentAutoCompleters ;
103103import org .jabref .logic .bibtexkeypattern .BibtexKeyPatternUtil ;
104104import org .jabref .logic .citationstyle .CitationStyleCache ;
105105import org .jabref .logic .citationstyle .CitationStyleOutputFormat ;
131131import org .jabref .model .entry .BibEntry ;
132132import org .jabref .model .entry .EntryType ;
133133import org .jabref .model .entry .FieldName ;
134+ import org .jabref .model .entry .InternalBibtexFields ;
134135import org .jabref .model .entry .event .EntryChangedEvent ;
135136import org .jabref .model .entry .event .EntryEventSource ;
136137import org .jabref .model .entry .specialfields .SpecialField ;
@@ -179,7 +180,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
179180 private boolean saving ;
180181 private boolean updatedExternally ;
181182 // AutoCompleter used in the search bar
182- private AutoCompleter < String > searchAutoCompleter ;
183+ private PersonNameSuggestionProvider searchAutoCompleter ;
183184 private boolean baseChanged ;
184185 private boolean nonUndoableChange ;
185186 // Used to track whether the base has changed since last save.
@@ -193,7 +194,7 @@ public class BasePanel extends JPanel implements ClipboardOwner, FileUpdateListe
193194 private PreambleEditor preambleEditor ;
194195 // Keeps track of the preamble dialog if it is open.
195196 private StringDialog stringDialog ;
196- private ContentAutoCompleters autoCompleters ;
197+ private SuggestionProviders suggestionProviders ;
197198
198199 /** the query the user searches when this basepanel is active */
199200 private Optional <SearchQuery > currentSearchQuery = Optional .empty ();
@@ -258,9 +259,11 @@ public static void runWorker(AbstractWorker worker) throws Exception {
258259 clb .update (); // Runs the update() method on the EDT.
259260 }
260261
261- // Returns a collection of AutoCompleters, which are populated from the current library
262- public ContentAutoCompleters getAutoCompleters () {
263- return autoCompleters ;
262+ /**
263+ * Returns a collection of suggestion providers, which are populated from the current library.
264+ */
265+ public SuggestionProviders getSuggestionProviders () {
266+ return suggestionProviders ;
264267 }
265268
266269 public String getTabTitle () {
@@ -1364,17 +1367,7 @@ public void setupMainPanel() {
13641367 instantiateSearchAutoCompleter ();
13651368 this .getDatabase ().registerListener (new SearchAutoCompleteListener ());
13661369
1367- AutoCompletePreferences autoCompletePreferences = new AutoCompletePreferences (Globals .prefs );
1368- // Set up AutoCompleters for this panel:
1369- if (Globals .prefs .getBoolean (JabRefPreferences .AUTO_COMPLETE )) {
1370- autoCompleters = new ContentAutoCompleters (getDatabase (), bibDatabaseContext .getMetaData (),
1371- autoCompletePreferences , Globals .journalAbbreviationLoader );
1372- // ensure that the autocompleters are in sync with entries
1373- this .getDatabase ().registerListener (new AutoCompleteListener ());
1374- } else {
1375- // create empty ContentAutoCompleters() if autoCompletion is deactivated
1376- autoCompleters = new ContentAutoCompleters ();
1377- }
1370+ setupAutoCompletion ();
13781371
13791372 // restore floating search result
13801373 // (needed if preferences have been changed which causes a recreation of the main table)
@@ -1390,17 +1383,30 @@ public void setupMainPanel() {
13901383 splitPane .addPropertyChangeListener (JSplitPane .DIVIDER_LOCATION_PROPERTY , event -> saveDividerLocation ());
13911384 }
13921385
1386+ /**
1387+ * Set up auto completion for this database
1388+ */
1389+ private void setupAutoCompletion () {
1390+ AutoCompletePreferences autoCompletePreferences = Globals .prefs .getAutoCompletePreferences ();
1391+ if (autoCompletePreferences .shouldAutoComplete ()) {
1392+ suggestionProviders = new SuggestionProviders (autoCompletePreferences , Globals .journalAbbreviationLoader );
1393+ suggestionProviders .indexDatabase (getDatabase ());
1394+ // Ensure that the suggestion providers are in sync with entries
1395+ this .getDatabase ().registerListener (new AutoCompleteUpdater (suggestionProviders ));
1396+ } else {
1397+ // Create empty suggestion providers if auto completion is deactivated
1398+ suggestionProviders = new SuggestionProviders ();
1399+ }
1400+ }
1401+
13931402 public void updateSearchManager () {
13941403 frame .getGlobalSearchBar ().setAutoCompleter (searchAutoCompleter );
13951404 }
13961405
13971406 private void instantiateSearchAutoCompleter () {
1398- AutoCompletePreferences autoCompletePreferences = new AutoCompletePreferences (Globals .prefs );
1399- AutoCompleterFactory autoCompleterFactory = new AutoCompleterFactory (autoCompletePreferences ,
1400- Globals .journalAbbreviationLoader );
1401- searchAutoCompleter = autoCompleterFactory .getPersonAutoCompleter ();
1407+ searchAutoCompleter = new PersonNameSuggestionProvider (InternalBibtexFields .getPersonNameFields ());
14021408 for (BibEntry entry : bibDatabaseContext .getDatabase ().getEntries ()) {
1403- searchAutoCompleter .addBibtexEntry (entry );
1409+ searchAutoCompleter .indexEntry (entry );
14041410 }
14051411 }
14061412
@@ -2107,29 +2113,12 @@ private class SearchAutoCompleteListener {
21072113
21082114 @ Subscribe
21092115 public void listen (EntryAddedEvent addedEntryEvent ) {
2110- searchAutoCompleter .addBibtexEntry (addedEntryEvent .getBibEntry ());
2111- }
2112-
2113- @ Subscribe
2114- public void listen (EntryChangedEvent entryChangedEvent ) {
2115- searchAutoCompleter .addBibtexEntry (entryChangedEvent .getBibEntry ());
2116- }
2117- }
2118-
2119- /**
2120- * Ensures that auto completers are up to date when entries are changed AKA Let the auto completer, if any, harvest
2121- * words from the entry
2122- */
2123- private class AutoCompleteListener {
2124-
2125- @ Subscribe
2126- public void listen (EntryAddedEvent addedEntryEvent ) {
2127- BasePanel .this .autoCompleters .addEntry (addedEntryEvent .getBibEntry ());
2116+ searchAutoCompleter .indexEntry (addedEntryEvent .getBibEntry ());
21282117 }
21292118
21302119 @ Subscribe
21312120 public void listen (EntryChangedEvent entryChangedEvent ) {
2132- BasePanel . this . autoCompleters . addEntry (entryChangedEvent .getBibEntry ());
2121+ searchAutoCompleter . indexEntry (entryChangedEvent .getBibEntry ());
21332122 }
21342123 }
21352124
@@ -2145,7 +2134,7 @@ public void listen(EntryAddedEvent addedEntryEvent) {
21452134
21462135 @ Subscribe
21472136 public void listen (EntryChangedEvent entryChangedEvent ) {
2148- frame .getGlobalSearchBar ().setDontSelectSearchBar (true );
2137+ frame .getGlobalSearchBar ().setDontSelectSearchBar ();
21492138 frame .getGlobalSearchBar ().performSearch ();
21502139 }
21512140
0 commit comments