diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 341686c1aae..69ae14cfdff 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -14,9 +14,7 @@ import javafx.scene.layout.StackPane; import org.jabref.Globals; -import org.jabref.JabRefExecutorService; import org.jabref.gui.autocompleter.AutoCompletePreferences; -import org.jabref.gui.autocompleter.AutoCompleteUpdater; import org.jabref.gui.autocompleter.PersonNameSuggestionProvider; import org.jabref.gui.autocompleter.SuggestionProviders; import org.jabref.gui.collab.DatabaseChangeMonitor; @@ -42,7 +40,6 @@ import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.database.KeyCollisionException; import org.jabref.model.database.event.BibDatabaseContextChangedEvent; -import org.jabref.model.database.event.CoarseChangeFilter; import org.jabref.model.database.event.EntriesAddedEvent; import org.jabref.model.database.event.EntriesRemovedEvent; import org.jabref.model.database.shared.DatabaseLocation; @@ -93,12 +90,10 @@ public class BasePanel extends StackPane { // the query the user searches when this BasePanel is active private Optional currentSearchQuery = Optional.empty(); private Optional changeMonitor = Optional.empty(); - private JabRefExecutorService executorService; public BasePanel(JabRefFrame frame, BasePanelPreferences preferences, BibDatabaseContext bibDatabaseContext, ExternalFileTypes externalFileTypes) { this.preferences = Objects.requireNonNull(preferences); this.frame = Objects.requireNonNull(frame); - this.executorService = JabRefExecutorService.INSTANCE; this.bibDatabaseContext = Objects.requireNonNull(bibDatabaseContext); this.externalFileTypes = Objects.requireNonNull(externalFileTypes); this.undoManager = frame.getUndoManager(); @@ -114,6 +109,7 @@ public BasePanel(JabRefFrame frame, BasePanelPreferences preferences, BibDatabas annotationCache = new FileAnnotationCache(bibDatabaseContext, Globals.prefs.getFilePreferences()); setupMainPanel(); + setupAutoCompletion(); this.getDatabase().registerListener(new SearchListener()); this.getDatabase().registerListener(new EntriesRemovedListener()); @@ -379,11 +375,6 @@ public void setupMainPanel() { splitPane.getItems().add(mainTable); - // Set up name autocompleter for search: - setupAutoCompletion(); - executorService.execute(this::instantiateSearchAutoCompleter); - this.getDatabase().registerListener(new SearchAutoCompleteListener()); - // Saves the divider position as soon as it changes // We need to keep a reference to the subscription, otherwise the binding gets garbage collected dividerPositionSubscription = EasyBind.monadic(Bindings.valueAt(splitPane.getDividers(), 0)) @@ -413,28 +404,18 @@ public void setupMainPanel() { private void setupAutoCompletion() { AutoCompletePreferences autoCompletePreferences = preferences.getAutoCompletePreferences(); if (autoCompletePreferences.shouldAutoComplete()) { - suggestionProviders = new SuggestionProviders(autoCompletePreferences, Globals.journalAbbreviationLoader); - suggestionProviders.indexDatabase(getDatabase()); - // Ensure that the suggestion providers are in sync with entries - CoarseChangeFilter changeFilter = new CoarseChangeFilter(bibDatabaseContext); - changeFilter.registerListener(new AutoCompleteUpdater(suggestionProviders)); + suggestionProviders = new SuggestionProviders(getDatabase(), autoCompletePreferences, Globals.journalAbbreviationLoader); } else { // Create empty suggestion providers if auto completion is deactivated suggestionProviders = new SuggestionProviders(); } + searchAutoCompleter = new PersonNameSuggestionProvider(FieldFactory.getPersonNameFields(), getDatabase()); } public void updateSearchManager() { frame.getGlobalSearchBar().setAutoCompleter(searchAutoCompleter); } - private void instantiateSearchAutoCompleter() { - searchAutoCompleter = new PersonNameSuggestionProvider(FieldFactory.getPersonNameFields()); - for (BibEntry entry : bibDatabaseContext.getDatabase().getEntries()) { - searchAutoCompleter.indexEntry(entry); - } - } - private void adjustSplitter() { if (mode == BasePanelMode.SHOWING_EDITOR) { splitPane.setDividerPositions(preferences.getEntryEditorDividerPosition()); @@ -730,23 +711,6 @@ public void listen(EntriesRemovedEvent entriesRemovedEvent) { } } - /** - * Ensures that the search auto completer is up to date when entries are changed AKA Let the auto completer, if any, - * harvest words from the entry Actual methods for autocomplete indexing must run in javafx thread - */ - private class SearchAutoCompleteListener { - - @Subscribe - public void listen(EntriesAddedEvent addedEntriesEvent) { - DefaultTaskExecutor.runInJavaFXThread(() -> addedEntriesEvent.getBibEntries().forEach(entry -> searchAutoCompleter.indexEntry(entry))); - } - - @Subscribe - public void listen(EntryChangedEvent entryChangedEvent) { - DefaultTaskExecutor.runInJavaFXThread(() -> searchAutoCompleter.indexEntry(entryChangedEvent.getBibEntry())); - } - } - /** * Ensures that the results of the current search are updated when a new entry is inserted into the database Actual * methods for performing search must run in javafx thread diff --git a/src/main/java/org/jabref/gui/autocompleter/AutoCompleteSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/AutoCompleteSuggestionProvider.java deleted file mode 100644 index 1f188238191..00000000000 --- a/src/main/java/org/jabref/gui/autocompleter/AutoCompleteSuggestionProvider.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jabref.gui.autocompleter; - -import java.util.Collection; - -import javafx.util.Callback; - -import org.jabref.model.entry.BibEntry; - -import org.controlsfx.control.textfield.AutoCompletionBinding; - -public interface AutoCompleteSuggestionProvider extends Callback> { - void indexEntry(BibEntry entry); -} diff --git a/src/main/java/org/jabref/gui/autocompleter/AutoCompleteUpdater.java b/src/main/java/org/jabref/gui/autocompleter/AutoCompleteUpdater.java deleted file mode 100644 index 7ace3ef5bba..00000000000 --- a/src/main/java/org/jabref/gui/autocompleter/AutoCompleteUpdater.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.jabref.gui.autocompleter; - -import java.util.List; - -import org.jabref.model.database.event.EntriesAddedEvent; -import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.event.EntryChangedEvent; - -import com.google.common.eventbus.Subscribe; - -/** - * Ensures that suggestion providers are up to date when entries are changed or added. - */ -public class AutoCompleteUpdater { - - private final SuggestionProviders suggestionProviders; - - public AutoCompleteUpdater(SuggestionProviders suggestionProviders) { - this.suggestionProviders = suggestionProviders; - } - - @Subscribe - public void listen(EntriesAddedEvent entryAddedEvent) { - List entries = entryAddedEvent.getBibEntries(); - for (BibEntry entry : entries) { - suggestionProviders.indexEntry(entry); - } - } - - @Subscribe - public void listen(EntryChangedEvent entryChangedEvent) { - suggestionProviders.indexEntry(entryChangedEvent.getBibEntry()); - } -} diff --git a/src/main/java/org/jabref/gui/autocompleter/BibEntrySuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/BibEntrySuggestionProvider.java index 3a5ecbffae4..3cf297c71c1 100644 --- a/src/main/java/org/jabref/gui/autocompleter/BibEntrySuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/BibEntrySuggestionProvider.java @@ -1,25 +1,31 @@ package org.jabref.gui.autocompleter; import java.util.Comparator; +import java.util.stream.Stream; import org.jabref.logic.bibtex.comparator.EntryComparator; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.InternalField; +import org.jabref.model.strings.StringUtil; +import com.google.common.base.Equivalence; import org.controlsfx.control.textfield.AutoCompletionBinding; /** * Delivers possible completions as a list of {@link BibEntry} based on their cite key. */ -public class BibEntrySuggestionProvider extends SuggestionProvider implements AutoCompleteSuggestionProvider { +public class BibEntrySuggestionProvider extends SuggestionProvider { - @Override - public void indexEntry(BibEntry entry) { - if (entry == null) { - return; - } + private final BibDatabase database; + + public BibEntrySuggestionProvider(BibDatabase database) { + this.database = database; + } - addPossibleSuggestions(entry); + @Override + protected Equivalence getEquivalence() { + return Equivalence.equals().onResultOf(BibEntry::getCiteKeyOptional); } @Override @@ -28,10 +34,15 @@ protected Comparator getComparator() { } @Override - protected boolean isMatch(BibEntry suggestion, AutoCompletionBinding.ISuggestionRequest request) { - String userTextLower = request.getUserText().toLowerCase(); - return suggestion.getCiteKeyOptional() - .map(key -> key.toLowerCase().contains(userTextLower)) - .orElse(false); + protected boolean isMatch(BibEntry entry, AutoCompletionBinding.ISuggestionRequest request) { + String userText = request.getUserText(); + return entry.getCiteKeyOptional() + .map(key -> StringUtil.containsIgnoreCase(key, userText)) + .orElse(false); + } + + @Override + public Stream getSource() { + return database.getEntries().parallelStream(); } } diff --git a/src/main/java/org/jabref/gui/autocompleter/ContentSelectorSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/ContentSelectorSuggestionProvider.java index 6c969f2713b..dc2299fa685 100644 --- a/src/main/java/org/jabref/gui/autocompleter/ContentSelectorSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/ContentSelectorSuggestionProvider.java @@ -1,22 +1,17 @@ package org.jabref.gui.autocompleter; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; - -import org.jabref.model.entry.BibEntry; - -import org.controlsfx.control.textfield.AutoCompletionBinding; +import java.util.stream.Stream; /** * Enriches a suggestion provider by a given set of content selector values. */ -public class ContentSelectorSuggestionProvider implements AutoCompleteSuggestionProvider { +public class ContentSelectorSuggestionProvider extends StringSuggestionProvider { - private final AutoCompleteSuggestionProvider suggestionProvider; + private final SuggestionProvider suggestionProvider; private final List contentSelectorValues; - public ContentSelectorSuggestionProvider(AutoCompleteSuggestionProvider suggestionProvider, + public ContentSelectorSuggestionProvider(SuggestionProvider suggestionProvider, List contentSelectorValues) { this.suggestionProvider = suggestionProvider; @@ -24,17 +19,7 @@ public ContentSelectorSuggestionProvider(AutoCompleteSuggestionProvider } @Override - public Collection call(AutoCompletionBinding.ISuggestionRequest request) { - List suggestions = new ArrayList<>(); - if (suggestionProvider != null) { - suggestions.addAll(suggestionProvider.call(request)); - } - suggestions.addAll(contentSelectorValues); - return suggestions; - } - - @Override - public void indexEntry(BibEntry entry) { - suggestionProvider.indexEntry(entry); + public Stream getSource() { + return Stream.concat(contentSelectorValues.stream(), suggestionProvider.getSource()); } } diff --git a/src/main/java/org/jabref/gui/autocompleter/EmptySuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/EmptySuggestionProvider.java new file mode 100644 index 00000000000..ab7df191fb5 --- /dev/null +++ b/src/main/java/org/jabref/gui/autocompleter/EmptySuggestionProvider.java @@ -0,0 +1,29 @@ +package org.jabref.gui.autocompleter; + +import java.util.Comparator; +import java.util.stream.Stream; + +import com.google.common.base.Equivalence; +import org.controlsfx.control.textfield.AutoCompletionBinding; + +public class EmptySuggestionProvider extends SuggestionProvider { + @Override + protected Equivalence getEquivalence() { + return Equivalence.equals().onResultOf(value -> value); + } + + @Override + protected Comparator getComparator() { + return Comparator.naturalOrder(); + } + + @Override + protected boolean isMatch(String candidate, AutoCompletionBinding.ISuggestionRequest request) { + return false; + } + + @Override + public Stream getSource() { + return Stream.empty(); + } +} diff --git a/src/main/java/org/jabref/gui/autocompleter/FieldValueSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/FieldValueSuggestionProvider.java index 87048951ec4..1fae672e250 100644 --- a/src/main/java/org/jabref/gui/autocompleter/FieldValueSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/FieldValueSuggestionProvider.java @@ -1,27 +1,26 @@ package org.jabref.gui.autocompleter; import java.util.Objects; +import java.util.stream.Stream; -import org.jabref.model.entry.BibEntry; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.field.Field; /** * Stores the full content of one field. */ -class FieldValueSuggestionProvider extends StringSuggestionProvider implements AutoCompleteSuggestionProvider { +class FieldValueSuggestionProvider extends StringSuggestionProvider { private final Field field; + private final BibDatabase database; - FieldValueSuggestionProvider(Field field) { + FieldValueSuggestionProvider(Field field, BibDatabase database) { this.field = Objects.requireNonNull(field); + this.database = database; } @Override - public void indexEntry(BibEntry entry) { - if (entry == null) { - return; - } - - entry.getField(field).ifPresent(fieldValue -> addPossibleSuggestions(fieldValue.trim())); + public Stream getSource() { + return database.getEntries().parallelStream().flatMap(entry -> entry.getField(field).stream()); } } diff --git a/src/main/java/org/jabref/gui/autocompleter/JournalsSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/JournalsSuggestionProvider.java index 5e8b5c95f4d..37e5d872977 100644 --- a/src/main/java/org/jabref/gui/autocompleter/JournalsSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/JournalsSuggestionProvider.java @@ -1,18 +1,17 @@ package org.jabref.gui.autocompleter; -import java.util.List; -import java.util.stream.Collectors; - -import org.jabref.logic.journals.Abbreviation; import org.jabref.logic.journals.JournalAbbreviationLoader; -import org.jabref.logic.journals.JournalAbbreviationPreferences; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.field.Field; public class JournalsSuggestionProvider extends FieldValueSuggestionProvider { - JournalsSuggestionProvider(Field field, AutoCompletePreferences preferences, + JournalsSuggestionProvider(Field field, BibDatabase database, AutoCompletePreferences preferences, JournalAbbreviationLoader abbreviationLoader) { - super(field); + super(field, database); + + /* + TODO: Reenable JournalAbbreviationPreferences journalAbbreviationPreferences = preferences.getJournalAbbreviationPreferences(); List journals = abbreviationLoader.getRepository(journalAbbreviationPreferences) @@ -20,5 +19,6 @@ public class JournalsSuggestionProvider extends FieldValueSuggestionProvider { .map(Abbreviation::getName) .collect(Collectors.toList()); addPossibleSuggestions(journals); + */ } } diff --git a/src/main/java/org/jabref/gui/autocompleter/PersonNameSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/PersonNameSuggestionProvider.java index db84646648d..2ff7d4a4ed1 100644 --- a/src/main/java/org/jabref/gui/autocompleter/PersonNameSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/PersonNameSuggestionProvider.java @@ -3,59 +3,68 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; +import java.util.Map; import java.util.Objects; +import java.util.stream.Stream; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.Author; import org.jabref.model.entry.AuthorList; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; +import org.jabref.model.strings.StringUtil; +import com.google.common.base.Equivalence; import org.controlsfx.control.textfield.AutoCompletionBinding; /** * Delivers possible completions as a list of {@link Author}s. */ -public class PersonNameSuggestionProvider extends SuggestionProvider implements AutoCompleteSuggestionProvider { +public class PersonNameSuggestionProvider extends SuggestionProvider { private final Collection fields; - private final Comparator authorComparator = Comparator.comparing(Author::getNameForAlphabetization); + private final BibDatabase database; - PersonNameSuggestionProvider(Field fieldName) { - this(Collections.singletonList(Objects.requireNonNull(fieldName))); + PersonNameSuggestionProvider(Field field, BibDatabase database) { + this(Collections.singletonList(Objects.requireNonNull(field)), database); } - public PersonNameSuggestionProvider(Collection fields) { + public PersonNameSuggestionProvider(Collection fields, BibDatabase database) { super(); this.fields = Objects.requireNonNull(fields); + this.database = database; + } + public Stream getAuthors(BibEntry entry) { + return entry.getFieldMap() + .entrySet() + .stream() + .filter(fieldValuePair -> fields.contains(fieldValuePair.getKey())) + .map(Map.Entry::getValue) + .map(AuthorList::parse) + .flatMap(authors -> authors.getAuthors().stream()); } @Override - public void indexEntry(BibEntry entry) { - if (entry == null) { - return; - } - - for (Field field : fields) { - entry.getField(field).ifPresent(fieldValue -> { - AuthorList authorList = AuthorList.parse(fieldValue); - for (Author author : authorList.getAuthors()) { - addPossibleSuggestions(author); - } - }); - } + protected Equivalence getEquivalence() { + return Equivalence.equals().onResultOf(Author::getLastOnly); } @Override protected Comparator getComparator() { - return authorComparator; + return Comparator.comparing(Author::getNameForAlphabetization); + } + + @Override + protected boolean isMatch(Author candidate, AutoCompletionBinding.ISuggestionRequest request) { + return StringUtil.containsIgnoreCase(candidate.getLastFirst(false), request.getUserText()); } @Override - protected boolean isMatch(Author suggestion, AutoCompletionBinding.ISuggestionRequest request) { - String userTextLower = request.getUserText().toLowerCase(); - String suggestionStr = suggestion.getLastFirst(false).toLowerCase(); - return suggestionStr.contains(userTextLower); + public Stream getSource() { + return database.getEntries() + .parallelStream() + .flatMap(this::getAuthors); } } diff --git a/src/main/java/org/jabref/gui/autocompleter/StringSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/StringSuggestionProvider.java index 1ec2cf0c97d..01ba19ef39e 100644 --- a/src/main/java/org/jabref/gui/autocompleter/StringSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/StringSuggestionProvider.java @@ -1,26 +1,30 @@ package org.jabref.gui.autocompleter; import java.util.Comparator; +import java.util.stream.Stream; -import org.controlsfx.control.textfield.AutoCompletionBinding; - -class StringSuggestionProvider extends SuggestionProvider { +import org.jabref.model.strings.StringUtil; - private final Comparator stringComparator = Comparator.naturalOrder(); +import com.google.common.base.Equivalence; +import org.controlsfx.control.textfield.AutoCompletionBinding; - public StringSuggestionProvider() { +abstract class StringSuggestionProvider extends SuggestionProvider { + @Override + protected Equivalence getEquivalence() { + return Equivalence.equals().onResultOf(value -> value); } @Override protected Comparator getComparator() { - return stringComparator; + return Comparator.naturalOrder(); } @Override - protected boolean isMatch(String suggestion, AutoCompletionBinding.ISuggestionRequest request) { - String userTextLower = request.getUserText().toLowerCase(); - String suggestionStr = suggestion.toLowerCase(); - return suggestionStr.contains(userTextLower); + protected boolean isMatch(String candidate, AutoCompletionBinding.ISuggestionRequest request) { + return StringUtil.containsIgnoreCase(candidate, request.getUserText()); } + + @Override + public abstract Stream getSource(); } diff --git a/src/main/java/org/jabref/gui/autocompleter/SuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/SuggestionProvider.java index ee18b7d7b26..8d6bba4633a 100644 --- a/src/main/java/org/jabref/gui/autocompleter/SuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/SuggestionProvider.java @@ -26,145 +26,49 @@ */ package org.jabref.gui.autocompleter; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Comparator; -import java.util.HashSet; -import java.util.List; - -import javafx.util.Callback; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import com.google.common.base.Equivalence; import org.controlsfx.control.textfield.AutoCompletionBinding.ISuggestionRequest; /** * This is a simple implementation of a generic suggestion provider callback. - * The complexity of suggestion generation is O(n) where n is the number of possible suggestions. * * @param Type of suggestions - * - * This class is a copy of {@link impl.org.controlsfx.autocompletion.SuggestionProvider} with the only difference that - * we use a set instead of list to store the suggestions in order to eliminate duplicates. */ -public abstract class SuggestionProvider implements Callback> { - - private final Collection possibleSuggestions = new HashSet<>(); - private final Object possibleSuggestionsLock = new Object(); - - /** - * Create a default suggestion provider based on the toString() method of the generic objects - * @param possibleSuggestions All possible suggestions - */ - public static SuggestionProvider create(Collection possibleSuggestions) { - return create(null, possibleSuggestions); - } - - /** - * Create a default suggestion provider based on the toString() method of the generic objects - * using the provided stringConverter - * - * @param stringConverter A stringConverter which converts generic T into a string - * @param possibleSuggestions All possible suggestions - */ - public static SuggestionProvider create(Callback stringConverter, Collection possibleSuggestions) { - SuggestionProviderString suggestionProvider = new SuggestionProviderString<>(stringConverter); - suggestionProvider.addPossibleSuggestions(possibleSuggestions); - return suggestionProvider; - } - - /** - * Add the given new possible suggestions to this SuggestionProvider - */ - public void addPossibleSuggestions(@SuppressWarnings("unchecked") T... newPossible) { - addPossibleSuggestions(Arrays.asList(newPossible)); - } - - /** - * Add the given new possible suggestions to this SuggestionProvider - */ - public void addPossibleSuggestions(Collection newPossible) { - synchronized (possibleSuggestionsLock) { - possibleSuggestions.addAll(newPossible); - } - } - - /** - * Remove all current possible suggestions - */ - public void clearSuggestions() { - synchronized (possibleSuggestionsLock) { - possibleSuggestions.clear(); - } - } +public abstract class SuggestionProvider { - @Override - public final Collection call(final ISuggestionRequest request) { - List suggestions = new ArrayList<>(); + public final Collection provideSuggestions(ISuggestionRequest request) { if (!request.getUserText().isEmpty()) { - synchronized (possibleSuggestionsLock) { - for (T possibleSuggestion : possibleSuggestions) { - if (isMatch(possibleSuggestion, request)) { - suggestions.add(possibleSuggestion); - } - } - } - suggestions.sort(getComparator()); + Comparator comparator = getComparator(); + Equivalence equivalence = getEquivalence(); + return getSource().filter(candidate -> isMatch(candidate, request)) + .map(equivalence::wrap) // Need to do a bit of acrobatic as there is no distinctBy method + .distinct() + .limit(10) + .map(Equivalence.Wrapper::get) + .sorted(comparator) + .collect(Collectors.toList()); + } else { + return Collections.emptyList(); } - return suggestions; } + protected abstract Equivalence getEquivalence(); + /** * Get the comparator to order the suggestions */ protected abstract Comparator getComparator(); /** - * Check the given possible suggestion is a match (is a valid suggestion) - */ - protected abstract boolean isMatch(T suggestion, ISuggestionRequest request); - - /** - * This is a simple string based suggestion provider. - * All generic suggestions T are turned into strings for processing. - * + * Check the given candidate is a match (ie a valid suggestion) */ - private static class SuggestionProviderString extends SuggestionProvider { + protected abstract boolean isMatch(T candidate, ISuggestionRequest request); - private Callback stringConverter; - - private final Comparator stringComparator = new Comparator() { - @Override - public int compare(T o1, T o2) { - String o1str = stringConverter.call(o1); - String o2str = stringConverter.call(o2); - return o1str.compareTo(o2str); - } - }; - - /** - * Create a new SuggestionProviderString - */ - public SuggestionProviderString(Callback stringConverter) { - this.stringConverter = stringConverter; - - // In case no stringConverter was provided, use the default strategy - if (this.stringConverter == null) { - this.stringConverter = obj -> obj != null ? obj.toString() : ""; - } - } - - /**{@inheritDoc}*/ - @Override - protected Comparator getComparator() { - return stringComparator; - } - - /**{@inheritDoc}*/ - @Override - protected boolean isMatch(T suggestion, ISuggestionRequest request) { - String userTextLower = request.getUserText().toLowerCase(); - String suggestionStr = suggestion.toString().toLowerCase(); - return suggestionStr.contains(userTextLower); - } - } + public abstract Stream getSource(); } diff --git a/src/main/java/org/jabref/gui/autocompleter/SuggestionProviders.java b/src/main/java/org/jabref/gui/autocompleter/SuggestionProviders.java index 4f8f76a405c..b05caec70c8 100644 --- a/src/main/java/org/jabref/gui/autocompleter/SuggestionProviders.java +++ b/src/main/java/org/jabref/gui/autocompleter/SuggestionProviders.java @@ -1,72 +1,47 @@ package org.jabref.gui.autocompleter; -import java.util.HashMap; -import java.util.Map; import java.util.Objects; import java.util.Set; import org.jabref.logic.journals.JournalAbbreviationLoader; import org.jabref.model.database.BibDatabase; -import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.FieldProperty; import org.jabref.model.entry.field.StandardField; public class SuggestionProviders { - /** - * key: field name - */ - private final Map> providers = new HashMap<>(); + private final boolean isEmpty; + private BibDatabase database; + private AutoCompletePreferences preferences; + private JournalAbbreviationLoader abbreviationLoader; - /** - * Empty - */ - public SuggestionProviders() { - - } - - public SuggestionProviders(AutoCompletePreferences preferences, - JournalAbbreviationLoader abbreviationLoader) { - Objects.requireNonNull(preferences); - - Set completeFields = preferences.getCompleteFields(); - for (Field field : completeFields) { - AutoCompleteSuggestionProvider autoCompleter = initalizeSuggestionProvider(field, preferences, abbreviationLoader); - providers.put(field, autoCompleter); - } + public SuggestionProviders(BibDatabase database, AutoCompletePreferences preferences, JournalAbbreviationLoader abbreviationLoader) { + this.database = database; + this.preferences = Objects.requireNonNull(preferences); + this.abbreviationLoader = abbreviationLoader; + this.isEmpty = false; } - public AutoCompleteSuggestionProvider getForField(Field field) { - return providers.get(field); - } - - public void indexDatabase(BibDatabase database) { - for (BibEntry entry : database.getEntries()) { - indexEntry(entry); - } + public SuggestionProviders() { + this.isEmpty = true; } - /** - * This methods assures all information in the given entry is included as suggestions. - */ - public void indexEntry(BibEntry bibEntry) { - for (AutoCompleteSuggestionProvider autoCompleter : providers.values()) { - autoCompleter.indexEntry(bibEntry); + public SuggestionProvider getForField(Field field) { + if (isEmpty) { + return new EmptySuggestionProvider(); } - } - private AutoCompleteSuggestionProvider initalizeSuggestionProvider(Field field, AutoCompletePreferences preferences, JournalAbbreviationLoader abbreviationLoader) { Set fieldProperties = field.getProperties(); if (fieldProperties.contains(FieldProperty.PERSON_NAMES)) { - return new PersonNameSuggestionProvider(field); + return new PersonNameSuggestionProvider(field, database); } else if (fieldProperties.contains(FieldProperty.SINGLE_ENTRY_LINK)) { - return new BibEntrySuggestionProvider(); + return new BibEntrySuggestionProvider(database); } else if (fieldProperties.contains(FieldProperty.JOURNAL_NAME) || StandardField.PUBLISHER.equals(field)) { - return new JournalsSuggestionProvider(field, preferences, abbreviationLoader); + return new JournalsSuggestionProvider(field, database, preferences, abbreviationLoader); } else { - return new WordSuggestionProvider(field); + return new WordSuggestionProvider(field, database); } } } diff --git a/src/main/java/org/jabref/gui/autocompleter/WordSuggestionProvider.java b/src/main/java/org/jabref/gui/autocompleter/WordSuggestionProvider.java index a591d684a3b..f83d047b0f7 100644 --- a/src/main/java/org/jabref/gui/autocompleter/WordSuggestionProvider.java +++ b/src/main/java/org/jabref/gui/autocompleter/WordSuggestionProvider.java @@ -1,35 +1,28 @@ package org.jabref.gui.autocompleter; import java.util.Objects; -import java.util.StringTokenizer; +import java.util.stream.Stream; -import org.jabref.model.entry.BibEntry; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.field.Field; /** - * Stores all words in the given field which are separated by SEPARATING_CHARS. + * Stores all words in the given field. */ -public class WordSuggestionProvider extends StringSuggestionProvider implements AutoCompleteSuggestionProvider { - - private static final String SEPARATING_CHARS = ";,\n "; +public class WordSuggestionProvider extends StringSuggestionProvider { private final Field field; + private final BibDatabase database; - public WordSuggestionProvider(Field field) { + public WordSuggestionProvider(Field field, BibDatabase database) { this.field = Objects.requireNonNull(field); + this.database = database; } @Override - public void indexEntry(BibEntry entry) { - if (entry == null) { - return; - } - - entry.getField(field).ifPresent(fieldValue -> { - StringTokenizer tok = new StringTokenizer(fieldValue, SEPARATING_CHARS); - while (tok.hasMoreTokens()) { - addPossibleSuggestions(tok.nextToken()); - } - }); + public Stream getSource() { + return database.getEntries() + .parallelStream() + .flatMap(entry -> entry.getFieldAsWords(field).stream()); } } diff --git a/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java index a699f15f20c..eb21c30ea53 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/AbstractEditorViewModel.java @@ -10,7 +10,7 @@ import org.jabref.JabRefGUI; import org.jabref.gui.AbstractViewModel; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.undo.UndoableFieldChange; import org.jabref.gui.util.BindingsHelper; import org.jabref.logic.integrity.FieldCheckers; @@ -28,11 +28,11 @@ public class AbstractEditorViewModel extends AbstractViewModel { protected final Field field; protected StringProperty text = new SimpleStringProperty(""); protected BibEntry entry; - private final AutoCompleteSuggestionProvider suggestionProvider; + private final SuggestionProvider suggestionProvider; private final CompositeValidator fieldValidator; private ObjectBinding fieldBinding; - public AbstractEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public AbstractEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { this.field = field; this.suggestionProvider = suggestionProvider; @@ -72,6 +72,6 @@ public void bindToEntry(BibEntry entry) { } public Collection complete(AutoCompletionBinding.ISuggestionRequest request) { - return suggestionProvider.call(request); + return suggestionProvider.provideSuggestions(request); } } diff --git a/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditor.java b/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditor.java index 89737ceaa0f..581a927b19a 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditor.java @@ -10,7 +10,7 @@ import org.jabref.gui.DialogService; import org.jabref.gui.actions.ActionFactory; import org.jabref.gui.actions.StandardActions; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.database.BibDatabaseContext; import org.jabref.model.entry.BibEntry; @@ -26,7 +26,7 @@ public class BibtexKeyEditor extends HBox implements FieldEditorFX { @FXML private Button generateCiteKeyButton; @FXML private EditorTextField textField; - public BibtexKeyEditor(Field field, JabRefPreferences preferences, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, BibDatabaseContext databaseContext, UndoManager undoManager, DialogService dialogService) { + public BibtexKeyEditor(Field field, JabRefPreferences preferences, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, BibDatabaseContext databaseContext, UndoManager undoManager, DialogService dialogService) { this.preferences = preferences; this.viewModel = new BibtexKeyEditorViewModel(field, suggestionProvider, fieldCheckers, preferences.getEntryEditorPreferences(), databaseContext, undoManager, dialogService); diff --git a/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditorViewModel.java index 4da93f60b87..5bf29034fbb 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/BibtexKeyEditorViewModel.java @@ -3,7 +3,7 @@ import javax.swing.undo.UndoManager; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.bibtexkeypattern.GenerateBibtexKeySingleAction; import org.jabref.gui.entryeditor.EntryEditorPreferences; import org.jabref.logic.integrity.FieldCheckers; @@ -18,7 +18,7 @@ public class BibtexKeyEditorViewModel extends AbstractEditorViewModel { private final UndoManager undoManager; private final DialogService dialogService; - public BibtexKeyEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, EntryEditorPreferences preferences, BibDatabaseContext databaseContext, UndoManager undoManager, DialogService dialogService) { + public BibtexKeyEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, EntryEditorPreferences preferences, BibDatabaseContext databaseContext, UndoManager undoManager, DialogService dialogService) { super(field, suggestionProvider, fieldCheckers); this.preferences = preferences; this.databaseContext = databaseContext; diff --git a/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java index c6d8a8a58e6..cd8ad8785ca 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/DateEditor.java @@ -6,7 +6,7 @@ import javafx.scene.Parent; import javafx.scene.layout.HBox; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.util.component.TemporalAccessorPicker; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.BibEntry; @@ -19,7 +19,7 @@ public class DateEditor extends HBox implements FieldEditorFX { @FXML private DateEditorViewModel viewModel; @FXML private TemporalAccessorPicker datePicker; - public DateEditor(Field field, DateTimeFormatter dateFormatter, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public DateEditor(Field field, DateTimeFormatter dateFormatter, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { this.viewModel = new DateEditorViewModel(field, suggestionProvider, dateFormatter, fieldCheckers); ViewLoader.view(this) diff --git a/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java index 7dc8f3735a8..96ffe10c09e 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/DateEditorViewModel.java @@ -6,7 +6,7 @@ import javafx.util.StringConverter; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.Date; import org.jabref.model.entry.field.Field; @@ -15,7 +15,7 @@ public class DateEditorViewModel extends AbstractEditorViewModel { private final DateTimeFormatter dateFormatter; - public DateEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, DateTimeFormatter dateFormatter, FieldCheckers fieldCheckers) { + public DateEditorViewModel(Field field, SuggestionProvider suggestionProvider, DateTimeFormatter dateFormatter, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.dateFormatter = dateFormatter; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/EditorTypeEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/EditorTypeEditorViewModel.java index b11500977b9..1de303d3f8d 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/EditorTypeEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/EditorTypeEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; @@ -12,7 +12,7 @@ public class EditorTypeEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(7); - public EditorTypeEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public EditorTypeEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("editor", Localization.lang("Editor")); diff --git a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java index 77c02ef2e2d..b8396cedd42 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java +++ b/src/main/java/org/jabref/gui/fieldeditors/FieldEditors.java @@ -8,8 +8,8 @@ import org.jabref.Globals; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.ContentSelectorSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.autocompleter.SuggestionProviders; import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.integrity.FieldCheckers; @@ -43,7 +43,7 @@ public static FieldEditorFX getForField(final Field field, final UndoManager undoManager) { final Set fieldProperties = field.getProperties(); - final AutoCompleteSuggestionProvider suggestionProvider = getSuggestionProvider(field, suggestionProviders, databaseContext.getMetaData()); + final SuggestionProvider suggestionProvider = getSuggestionProvider(field, suggestionProviders, databaseContext.getMetaData()); final FieldCheckers fieldCheckers = new FieldCheckers( databaseContext, @@ -101,14 +101,14 @@ public static FieldEditorFX getForField(final Field field, } @SuppressWarnings("unchecked") - private static AutoCompleteSuggestionProvider getSuggestionProvider(Field field, SuggestionProviders suggestionProviders, MetaData metaData) { - AutoCompleteSuggestionProvider suggestionProvider = suggestionProviders.getForField(field); + private static SuggestionProvider getSuggestionProvider(Field field, SuggestionProviders suggestionProviders, MetaData metaData) { + SuggestionProvider suggestionProvider = suggestionProviders.getForField(field); List contentSelectorValues = metaData.getContentSelectorValuesForField(field); if (!contentSelectorValues.isEmpty()) { // Enrich auto completion by content selector values try { - return new ContentSelectorSuggestionProvider((AutoCompleteSuggestionProvider) suggestionProvider, contentSelectorValues); + return new ContentSelectorSuggestionProvider((SuggestionProvider) suggestionProvider, contentSelectorValues); } catch (ClassCastException exception) { LOGGER.error("Content selectors are only supported for normal fields with string-based auto completion."); return suggestionProvider; diff --git a/src/main/java/org/jabref/gui/fieldeditors/GenderEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/GenderEditorViewModel.java index 090f49eeba3..0a71d908215 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/GenderEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/GenderEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; @@ -12,7 +12,7 @@ public class GenderEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(7); - public GenderEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public GenderEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("sf", Localization.lang("Female name")); diff --git a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java index 9a3262dee69..cbc572f5216 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditor.java @@ -10,7 +10,7 @@ import javafx.scene.layout.HBox; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.fieldeditors.contextmenu.EditorMenus; import org.jabref.gui.util.TaskExecutor; import org.jabref.logic.integrity.FieldCheckers; @@ -30,7 +30,7 @@ public class IdentifierEditor extends HBox implements FieldEditorFX { @FXML private Button lookupIdentifierButton; private Optional entry; - public IdentifierEditor(Field field, TaskExecutor taskExecutor, DialogService dialogService, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { + public IdentifierEditor(Field field, TaskExecutor taskExecutor, DialogService dialogService, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { this.viewModel = new IdentifierEditorViewModel(field, suggestionProvider, taskExecutor, dialogService, fieldCheckers); ViewLoader.view(this) diff --git a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java index caf29158122..c35c1a5d9b3 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModel.java @@ -10,7 +10,7 @@ import org.jabref.JabRefGUI; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.gui.mergeentries.FetchAndMergeEntry; import org.jabref.gui.util.BackgroundTask; @@ -33,7 +33,7 @@ public class IdentifierEditorViewModel extends AbstractEditorViewModel { private TaskExecutor taskExecutor; private DialogService dialogService; - public IdentifierEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, TaskExecutor taskExecutor, DialogService dialogService, FieldCheckers fieldCheckers) { + public IdentifierEditorViewModel(Field field, SuggestionProvider suggestionProvider, TaskExecutor taskExecutor, DialogService dialogService, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.taskExecutor = taskExecutor; diff --git a/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java b/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java index f4d46b93262..9c9bc5ee9c8 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/JournalEditor.java @@ -4,8 +4,8 @@ import javafx.scene.Parent; import javafx.scene.layout.HBox; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionTextInputBinding; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.fieldeditors.contextmenu.EditorMenus; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.journals.JournalAbbreviationRepository; @@ -20,7 +20,7 @@ public class JournalEditor extends HBox implements FieldEditorFX { @FXML private JournalEditorViewModel viewModel; @FXML private EditorTextField textField; - public JournalEditor(Field field, JournalAbbreviationRepository journalAbbreviationRepository, JabRefPreferences preferences, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public JournalEditor(Field field, JournalAbbreviationRepository journalAbbreviationRepository, JabRefPreferences preferences, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { this.viewModel = new JournalEditorViewModel(field, suggestionProvider, journalAbbreviationRepository, fieldCheckers); ViewLoader.view(this) diff --git a/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java index 4f3f20e94f6..e07401b91e2 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/JournalEditorViewModel.java @@ -2,7 +2,7 @@ import java.util.Optional; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.journals.JournalAbbreviationRepository; import org.jabref.model.entry.field.Field; @@ -11,7 +11,7 @@ public class JournalEditorViewModel extends AbstractEditorViewModel { private final JournalAbbreviationRepository journalAbbreviationRepository; - public JournalEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, JournalAbbreviationRepository journalAbbreviationRepository, FieldCheckers fieldCheckers) { + public JournalEditorViewModel(Field field, SuggestionProvider suggestionProvider, JournalAbbreviationRepository journalAbbreviationRepository, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.journalAbbreviationRepository = journalAbbreviationRepository; diff --git a/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java b/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java index 02b885c80d3..4af7971c052 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/KeywordsEditor.java @@ -1,13 +1,13 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; import org.jabref.preferences.JabRefPreferences; public class KeywordsEditor extends SimpleEditor implements FieldEditorFX { - public KeywordsEditor(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { + public KeywordsEditor(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { super(field, suggestionProvider, fieldCheckers, preferences); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java index f510063ee90..9568cfce925 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditor.java @@ -5,8 +5,8 @@ import javafx.scene.Parent; import javafx.scene.layout.HBox; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionTextInputBinding; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.util.component.TagBar; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.database.BibDatabaseContext; @@ -23,12 +23,12 @@ public class LinkedEntriesEditor extends HBox implements FieldEditorFX { @FXML private TagBar linkedEntriesBar; - public LinkedEntriesEditor(Field field, BibDatabaseContext databaseContext, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public LinkedEntriesEditor(Field field, BibDatabaseContext databaseContext, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { this.viewModel = new LinkedEntriesEditorViewModel(field, suggestionProvider, databaseContext, fieldCheckers); ViewLoader.view(this) - .root(this) - .load(); + .root(this) + .load(); linkedEntriesBar.setFieldProperties(field.getProperties()); linkedEntriesBar.setStringConverter(viewModel.getStringConverter()); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java index 19af58758fe..425f87b6034 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedEntriesEditorViewModel.java @@ -8,7 +8,7 @@ import javafx.collections.FXCollections; import javafx.util.StringConverter; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.util.BindingsHelper; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.database.BibDatabaseContext; @@ -24,7 +24,7 @@ public class LinkedEntriesEditorViewModel extends AbstractEditorViewModel { private final BibDatabaseContext databaseContext; private final ListProperty linkedEntries; - public LinkedEntriesEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, BibDatabaseContext databaseContext, FieldCheckers fieldCheckers) { + public LinkedEntriesEditorViewModel(Field field, SuggestionProvider suggestionProvider, BibDatabaseContext databaseContext, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.databaseContext = databaseContext; diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java index 7dbacc13bc8..56b1086303a 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java @@ -28,7 +28,7 @@ import org.jabref.Globals; import org.jabref.gui.DialogService; import org.jabref.gui.DragAndDropDataFormats; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.copyfiles.CopySingleFileAction; import org.jabref.gui.icon.IconTheme; import org.jabref.gui.keyboard.KeyBinding; @@ -54,7 +54,7 @@ public class LinkedFilesEditor extends HBox implements FieldEditorFX { private final BibDatabaseContext databaseContext; private final UiThreadObservableList decoratedModelList; - public LinkedFilesEditor(Field field, DialogService dialogService, BibDatabaseContext databaseContext, TaskExecutor taskExecutor, AutoCompleteSuggestionProvider suggestionProvider, + public LinkedFilesEditor(Field field, DialogService dialogService, BibDatabaseContext databaseContext, TaskExecutor taskExecutor, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { this.viewModel = new LinkedFilesEditorViewModel(field, suggestionProvider, dialogService, databaseContext, taskExecutor, fieldCheckers, preferences); diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java index 471af98aa2f..68413ff3019 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java @@ -17,7 +17,7 @@ import javafx.collections.ObservableList; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.externalfiles.AutoSetFileLinksUtil; import org.jabref.gui.externalfiletype.CustomExternalFileType; import org.jabref.gui.externalfiletype.ExternalFileType; @@ -51,7 +51,7 @@ public class LinkedFilesEditorViewModel extends AbstractEditorViewModel { private final PreferencesService preferences; private final ExternalFileTypes externalFileTypes = ExternalFileTypes.getInstance(); - public LinkedFilesEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, + public LinkedFilesEditorViewModel(Field field, SuggestionProvider suggestionProvider, DialogService dialogService, BibDatabaseContext databaseContext, TaskExecutor taskExecutor, diff --git a/src/main/java/org/jabref/gui/fieldeditors/MapBasedEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/MapBasedEditorViewModel.java index 9fce68893e1..8eeae4fe2e4 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/MapBasedEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/MapBasedEditorViewModel.java @@ -5,7 +5,7 @@ import javafx.util.StringConverter; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; @@ -20,7 +20,7 @@ public abstract class MapBasedEditorViewModel extends OptionEditorViewModel suggestionProvider, FieldCheckers fieldCheckers) { + public MapBasedEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/MonthEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/MonthEditorViewModel.java index 3132f8e874d..0e13805984a 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/MonthEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/MonthEditorViewModel.java @@ -5,7 +5,7 @@ import javafx.util.StringConverter; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.database.BibDatabaseMode; import org.jabref.model.entry.Month; @@ -15,7 +15,7 @@ public class MonthEditorViewModel extends OptionEditorViewModel { private BibDatabaseMode databaseMode; - public MonthEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, BibDatabaseMode databaseMode, FieldCheckers fieldCheckers) { + public MonthEditorViewModel(Field field, SuggestionProvider suggestionProvider, BibDatabaseMode databaseMode, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.databaseMode = databaseMode; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/OptionEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/OptionEditorViewModel.java index b72a90bf1e6..c98d7a0d28c 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/OptionEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/OptionEditorViewModel.java @@ -4,13 +4,13 @@ import javafx.util.StringConverter; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; public abstract class OptionEditorViewModel extends AbstractEditorViewModel { - public OptionEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public OptionEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java index 0f3660e6e35..1a40dbb6e08 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditor.java @@ -5,7 +5,7 @@ import javafx.scene.Parent; import javafx.scene.layout.HBox; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; @@ -18,7 +18,7 @@ public class OwnerEditor extends HBox implements FieldEditorFX { @FXML private OwnerEditorViewModel viewModel; @FXML private EditorTextArea textArea; - public OwnerEditor(Field field, JabRefPreferences preferences, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public OwnerEditor(Field field, JabRefPreferences preferences, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { this.viewModel = new OwnerEditorViewModel(field, suggestionProvider, preferences, fieldCheckers); ViewLoader.view(this) diff --git a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java index 171188ad71b..2a1f506ec36 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/OwnerEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; import org.jabref.preferences.JabRefPreferences; @@ -8,7 +8,7 @@ public class OwnerEditorViewModel extends AbstractEditorViewModel { private final JabRefPreferences preferences; - public OwnerEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, JabRefPreferences preferences, FieldCheckers fieldCheckers) { + public OwnerEditorViewModel(Field field, SuggestionProvider suggestionProvider, JabRefPreferences preferences, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.preferences = preferences; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/PaginationEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/PaginationEditorViewModel.java index 218c37641c9..991f3d2ac96 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/PaginationEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/PaginationEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; @@ -12,7 +12,7 @@ public class PaginationEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(7); - public PaginationEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public PaginationEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("page", Localization.lang("Page")); diff --git a/src/main/java/org/jabref/gui/fieldeditors/PatentTypeEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/PatentTypeEditorViewModel.java index d7410aabf19..89b586c253c 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/PatentTypeEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/PatentTypeEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; @@ -12,7 +12,7 @@ public class PatentTypeEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(12); - public PatentTypeEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public PatentTypeEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("patent", Localization.lang("Patent")); diff --git a/src/main/java/org/jabref/gui/fieldeditors/PersonsEditor.java b/src/main/java/org/jabref/gui/fieldeditors/PersonsEditor.java index 5faa0dbb26d..6b3b9dc1680 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/PersonsEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/PersonsEditor.java @@ -4,8 +4,8 @@ import javafx.scene.control.TextInputControl; import javafx.scene.layout.HBox; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionTextInputBinding; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.fieldeditors.contextmenu.EditorMenus; import org.jabref.gui.util.uithreadaware.UiThreadStringProperty; import org.jabref.logic.integrity.FieldCheckers; @@ -20,7 +20,7 @@ public class PersonsEditor extends HBox implements FieldEditorFX { private final UiThreadStringProperty decoratedStringProperty; public PersonsEditor(final Field field, - final AutoCompleteSuggestionProvider suggestionProvider, + final SuggestionProvider suggestionProvider, final JabRefPreferences preferences, final FieldCheckers fieldCheckers, final boolean isSingleLine) { diff --git a/src/main/java/org/jabref/gui/fieldeditors/PersonsEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/PersonsEditorViewModel.java index c85197a8aca..e1354a1ac5f 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/PersonsEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/PersonsEditorViewModel.java @@ -6,9 +6,9 @@ import org.jabref.gui.autocompleter.AppendPersonNamesStrategy; import org.jabref.gui.autocompleter.AutoCompletePreferences; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionStrategy; import org.jabref.gui.autocompleter.PersonNameStringConverter; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.Author; import org.jabref.model.entry.field.Field; @@ -19,7 +19,7 @@ public class PersonsEditorViewModel extends AbstractEditorViewModel { private final AutoCompletePreferences preferences; - public PersonsEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, AutoCompletePreferences preferences, FieldCheckers fieldCheckers) { + public PersonsEditorViewModel(Field field, SuggestionProvider suggestionProvider, AutoCompletePreferences preferences, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.preferences = preferences; } diff --git a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java index a8e2e91a372..10a0882a91e 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditor.java @@ -5,9 +5,9 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Priority; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionTextInputBinding; import org.jabref.gui.autocompleter.ContentSelectorSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.fieldeditors.contextmenu.EditorMenus; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.BibEntry; @@ -20,7 +20,7 @@ public class SimpleEditor extends HBox implements FieldEditorFX { private final TextInputControl textInput; public SimpleEditor(final Field field, - final AutoCompleteSuggestionProvider suggestionProvider, + final SuggestionProvider suggestionProvider, final FieldCheckers fieldCheckers, final JabRefPreferences preferences, final boolean isSingleLine) { @@ -45,7 +45,7 @@ public SimpleEditor(final Field field, } public SimpleEditor(final Field field, - final AutoCompleteSuggestionProvider suggestionProvider, + final SuggestionProvider suggestionProvider, final FieldCheckers fieldCheckers, final JabRefPreferences preferences) { this(field, suggestionProvider, fieldCheckers, preferences, false); diff --git a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java index cc5b9176e4a..52b4f6b2f07 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/SimpleEditorViewModel.java @@ -1,14 +1,14 @@ package org.jabref.gui.fieldeditors; import org.jabref.gui.autocompleter.AppendWordsStrategy; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionStrategy; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; public class SimpleEditorViewModel extends AbstractEditorViewModel { - public SimpleEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public SimpleEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/TypeEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/TypeEditorViewModel.java index 72b16eda2c9..c4f64880e55 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/TypeEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/TypeEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.field.Field; @@ -12,7 +12,7 @@ public class TypeEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(8); - public TypeEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public TypeEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("mathesis", Localization.lang("Master's thesis")); diff --git a/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java b/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java index 270770a2ea1..b4d53a6d6e0 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/UrlEditor.java @@ -10,7 +10,7 @@ import javafx.scene.layout.HBox; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.fieldeditors.contextmenu.EditorMenus; import org.jabref.logic.formatter.bibtexfields.CleanupUrlFormatter; import org.jabref.logic.formatter.bibtexfields.TrimWhitespaceFormatter; @@ -26,7 +26,7 @@ public class UrlEditor extends HBox implements FieldEditorFX { @FXML private final UrlEditorViewModel viewModel; @FXML private EditorTextArea textArea; - public UrlEditor(Field field, DialogService dialogService, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { + public UrlEditor(Field field, DialogService dialogService, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers, JabRefPreferences preferences) { this.viewModel = new UrlEditorViewModel(field, suggestionProvider, dialogService, fieldCheckers); ViewLoader.view(this) diff --git a/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java index be2a3702c34..76f6f465ef0 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/UrlEditorViewModel.java @@ -6,7 +6,7 @@ import javafx.beans.property.SimpleBooleanProperty; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.logic.l10n.Localization; @@ -19,7 +19,7 @@ public class UrlEditorViewModel extends AbstractEditorViewModel { private DialogService dialogService; private BooleanProperty validUrlIsNotPresent = new SimpleBooleanProperty(true); - public UrlEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, DialogService dialogService, FieldCheckers fieldCheckers) { + public UrlEditorViewModel(Field field, SuggestionProvider suggestionProvider, DialogService dialogService, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); this.dialogService = dialogService; diff --git a/src/main/java/org/jabref/gui/fieldeditors/YesNoEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/YesNoEditorViewModel.java index b4d3c81dafc..a1210b1d2eb 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/YesNoEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/YesNoEditorViewModel.java @@ -1,6 +1,6 @@ package org.jabref.gui.fieldeditors; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.Field; @@ -11,7 +11,7 @@ public class YesNoEditorViewModel extends MapBasedEditorViewModel { private BiMap itemMap = HashBiMap.create(2); - public YesNoEditorViewModel(Field field, AutoCompleteSuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { + public YesNoEditorViewModel(Field field, SuggestionProvider suggestionProvider, FieldCheckers fieldCheckers) { super(field, suggestionProvider, fieldCheckers); itemMap.put("yes", "Yes"); diff --git a/src/main/java/org/jabref/gui/search/GlobalSearchBar.java b/src/main/java/org/jabref/gui/search/GlobalSearchBar.java index 341ff97cc92..94a5e0cbc79 100644 --- a/src/main/java/org/jabref/gui/search/GlobalSearchBar.java +++ b/src/main/java/org/jabref/gui/search/GlobalSearchBar.java @@ -42,9 +42,9 @@ import org.jabref.gui.StateManager; import org.jabref.gui.autocompleter.AppendPersonNamesStrategy; import org.jabref.gui.autocompleter.AutoCompleteFirstNameMode; -import org.jabref.gui.autocompleter.AutoCompleteSuggestionProvider; import org.jabref.gui.autocompleter.AutoCompletionTextInputBinding; import org.jabref.gui.autocompleter.PersonNameStringConverter; +import org.jabref.gui.autocompleter.SuggestionProvider; import org.jabref.gui.icon.IconTheme; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.keyboard.KeyBindingRepository; @@ -276,12 +276,12 @@ private void informUserAboutInvalidSearchQuery() { currentResults.setText(illegalSearch); } - public void setAutoCompleter(AutoCompleteSuggestionProvider searchCompleter) { + public void setAutoCompleter(SuggestionProvider searchCompleter) { if (Globals.prefs.getAutoCompletePreferences().shouldAutoComplete()) { AutoCompletionTextInputBinding autoComplete = AutoCompletionTextInputBinding.autoComplete(searchField, - searchCompleter, - new PersonNameStringConverter(false, false, AutoCompleteFirstNameMode.BOTH), - new AppendPersonNamesStrategy()); + searchCompleter::provideSuggestions, + new PersonNameStringConverter(false, false, AutoCompleteFirstNameMode.BOTH), + new AppendPersonNamesStrategy()); AutoCompletePopup popup = getPopup(autoComplete); popup.setSkin(new SearchPopupSkin<>(popup)); } diff --git a/src/test/java/org/jabref/gui/autocompleter/BibEntrySuggestionProviderTest.java b/src/test/java/org/jabref/gui/autocompleter/BibEntrySuggestionProviderTest.java index 099f6cab1af..8843b932c82 100644 --- a/src/test/java/org/jabref/gui/autocompleter/BibEntrySuggestionProviderTest.java +++ b/src/test/java/org/jabref/gui/autocompleter/BibEntrySuggestionProviderTest.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Collections; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.junit.jupiter.api.BeforeEach; @@ -13,107 +14,101 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class BibEntrySuggestionProviderTest { +class BibEntrySuggestionProviderTest { private BibEntrySuggestionProvider autoCompleter; + private BibDatabase database; @BeforeEach - public void setUp() throws Exception { - autoCompleter = new BibEntrySuggestionProvider(); + void setUp() throws Exception { + database = new BibDatabase(); + autoCompleter = new BibEntrySuggestionProvider(database); } @Test - public void completeWithoutAddingAnythingReturnsNothing() { - Collection result = autoCompleter.call(getRequest(("test"))); + void completeWithoutAddingAnythingReturnsNothing() { + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingNullReturnsNothing() { - autoCompleter.indexEntry(null); - - Collection result = autoCompleter.call(getRequest(("test"))); - assertEquals(Collections.emptyList(), result); - } - - @Test - public void completeAfterAddingEmptyEntryReturnsNothing() { + void completeAfterAddingEmptyEntryReturnsNothing() { BibEntry entry = new BibEntry(); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeKeyReturnsKey() { + void completeKeyReturnsKey() { BibEntry entry = new BibEntry(); entry.setCiteKey("testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testKey"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testKey"))); assertEquals(Collections.singletonList(entry), result); } @Test - public void completeBeginnigOfKeyReturnsKey() { + void completeBeginningOfKeyReturnsKey() { BibEntry entry = new BibEntry(); entry.setCiteKey("testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.singletonList(entry), result); } @Test - public void completeLowercaseKeyReturnsKey() { + void completeLowercaseKeyReturnsKey() { BibEntry entry = new BibEntry(); entry.setCiteKey("testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testkey"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testkey"))); assertEquals(Collections.singletonList(entry), result); } @Test - public void completeNullThrowsException() { + void completeNullThrowsException() { BibEntry entry = new BibEntry(); entry.setCiteKey("testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - assertThrows(NullPointerException.class, () -> autoCompleter.call(getRequest((null)))); + assertThrows(NullPointerException.class, () -> autoCompleter.provideSuggestions(getRequest((null)))); } @Test - public void completeEmptyStringReturnsNothing() { + void completeEmptyStringReturnsNothing() { BibEntry entry = new BibEntry(); entry.setCiteKey("testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest((""))); + Collection result = autoCompleter.provideSuggestions(getRequest((""))); assertEquals(Collections.emptyList(), result); } @Test - public void completeReturnsMultipleResults() { + void completeReturnsMultipleResults() { BibEntry entryOne = new BibEntry(); entryOne.setCiteKey("testKeyOne"); - autoCompleter.indexEntry(entryOne); + database.insertEntry(entryOne); BibEntry entryTwo = new BibEntry(); entryTwo.setCiteKey("testKeyTwo"); - autoCompleter.indexEntry(entryTwo); + database.insertEntry(entryTwo); - Collection result = autoCompleter.call(getRequest(("testKey"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testKey"))); assertEquals(Arrays.asList(entryTwo, entryOne), result); } @Test - public void completeShortKeyReturnsKey() { + void completeShortKeyReturnsKey() { BibEntry entry = new BibEntry(); entry.setCiteKey("key"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("k"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("k"))); assertEquals(Collections.singletonList(entry), result); } } diff --git a/src/test/java/org/jabref/gui/autocompleter/DefaultAutoCompleterTest.java b/src/test/java/org/jabref/gui/autocompleter/DefaultAutoCompleterTest.java index f99b4de1b85..8d833b199aa 100644 --- a/src/test/java/org/jabref/gui/autocompleter/DefaultAutoCompleterTest.java +++ b/src/test/java/org/jabref/gui/autocompleter/DefaultAutoCompleterTest.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Collections; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; @@ -14,142 +15,136 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class DefaultAutoCompleterTest { +class DefaultAutoCompleterTest { private WordSuggestionProvider autoCompleter; - - @Test - public void initAutoCompleterWithNullFieldThrowsException() { - assertThrows(NullPointerException.class, () -> new WordSuggestionProvider(null)); - } + private BibDatabase database; @BeforeEach - public void setUp() throws Exception { - autoCompleter = new WordSuggestionProvider(StandardField.TITLE); + void setUp() throws Exception { + database = new BibDatabase(); + autoCompleter = new WordSuggestionProvider(StandardField.TITLE, database); } @Test - public void completeWithoutAddingAnythingReturnsNothing() { - Collection result = autoCompleter.call(getRequest(("test"))); - assertEquals(Collections.emptyList(), result); + void initAutoCompleterWithNullFieldThrowsException() { + assertThrows(NullPointerException.class, () -> new WordSuggestionProvider(null, database)); } @Test - public void completeAfterAddingNullReturnsNothing() { - autoCompleter.indexEntry(null); - - Collection result = autoCompleter.call(getRequest(("test"))); + void completeWithoutAddingAnythingReturnsNothing() { + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingEmptyEntryReturnsNothing() { + void completeAfterAddingEmptyEntryReturnsNothing() { BibEntry entry = new BibEntry(); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingEntryWithoutFieldReturnsNothing() { + void completeAfterAddingEntryWithoutFieldReturnsNothing() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "testAuthor"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeValueReturnsValue() { + void completeValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testValue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testValue"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeBeginningOfValueReturnsValue() { + void completeBeginningOfValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeLowercaseValueReturnsValue() { + void completeLowercaseValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testvalue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testvalue"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeNullThrowsException() { + void completeNullThrowsException() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - assertThrows(NullPointerException.class, () -> autoCompleter.call(getRequest((null)))); + assertThrows(NullPointerException.class, () -> autoCompleter.provideSuggestions(getRequest((null)))); } @Test - public void completeEmptyStringReturnsNothing() { + void completeEmptyStringReturnsNothing() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest((""))); + Collection result = autoCompleter.provideSuggestions(getRequest((""))); assertEquals(Collections.emptyList(), result); } @Test - public void completeReturnsMultipleResults() { + void completeReturnsMultipleResults() { BibEntry entryOne = new BibEntry(); entryOne.setField(StandardField.TITLE, "testValueOne"); - autoCompleter.indexEntry(entryOne); + database.insertEntry(entryOne); BibEntry entryTwo = new BibEntry(); entryTwo.setField(StandardField.TITLE, "testValueTwo"); - autoCompleter.indexEntry(entryTwo); + database.insertEntry(entryTwo); - Collection result = autoCompleter.call(getRequest(("testValue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testValue"))); assertEquals(Arrays.asList("testValueOne", "testValueTwo"), result); } @Test - public void completeShortStringReturnsValue() { + void completeShortStringReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "val"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("va"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("va"))); assertEquals(Collections.singletonList("val"), result); } @Test - public void completeBeginnigOfSecondWordReturnsWord() { + void completeBeginnigOfSecondWordReturnsWord() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "test value"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("val"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("val"))); assertEquals(Collections.singletonList("value"), result); } @Test - public void completePartOfWordReturnsValue() { + void completePartOfWordReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "test value"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("lue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("lue"))); assertEquals(Collections.singletonList("value"), result); } } diff --git a/src/test/java/org/jabref/gui/autocompleter/FieldValueSuggestionProviderTest.java b/src/test/java/org/jabref/gui/autocompleter/FieldValueSuggestionProviderTest.java index 51ef4e8e988..99d5728fb03 100644 --- a/src/test/java/org/jabref/gui/autocompleter/FieldValueSuggestionProviderTest.java +++ b/src/test/java/org/jabref/gui/autocompleter/FieldValueSuggestionProviderTest.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Collections; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; @@ -14,152 +15,146 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class FieldValueSuggestionProviderTest { +class FieldValueSuggestionProviderTest { private FieldValueSuggestionProvider autoCompleter; + private BibDatabase database; @BeforeEach - public void setUp() throws Exception { - autoCompleter = new FieldValueSuggestionProvider(StandardField.TITLE); + void setUp() throws Exception { + database = new BibDatabase(); + autoCompleter = new FieldValueSuggestionProvider(StandardField.TITLE, database); } @Test - public void initAutoCompleterWithNullFieldThrowsException() { - assertThrows(NullPointerException.class, () -> new FieldValueSuggestionProvider(null)); + void initAutoCompleterWithNullFieldThrowsException() { + assertThrows(NullPointerException.class, () -> new FieldValueSuggestionProvider(null, new BibDatabase())); } @Test - public void completeWithoutAddingAnythingReturnsNothing() { - Collection result = autoCompleter.call(getRequest(("test"))); + void completeWithoutAddingAnythingReturnsNothing() { + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingNullReturnsNothing() { - autoCompleter.indexEntry(null); - - Collection result = autoCompleter.call(getRequest(("test"))); - assertEquals(Collections.emptyList(), result); - } - - @Test - public void completeAfterAddingEmptyEntryReturnsNothing() { + void completeAfterAddingEmptyEntryReturnsNothing() { BibEntry entry = new BibEntry(); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingEntryWithoutFieldReturnsNothing() { + void completeAfterAddingEntryWithoutFieldReturnsNothing() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "testAuthor"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeValueReturnsValue() { + void completeValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testValue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testValue"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeBeginnigOfValueReturnsValue() { + void completeBeginnigOfValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeLowercaseValueReturnsValue() { + void completeLowercaseValueReturnsValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testValue"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("testvalue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testvalue"))); assertEquals(Arrays.asList("testValue"), result); } @Test - public void completeNullThrowsException() { + void completeNullThrowsException() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - assertThrows(NullPointerException.class, () -> autoCompleter.call(getRequest(null))); + assertThrows(NullPointerException.class, () -> autoCompleter.provideSuggestions(getRequest(null))); } @Test - public void completeEmptyStringReturnsNothing() { + void completeEmptyStringReturnsNothing() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testKey"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest((""))); + Collection result = autoCompleter.provideSuggestions(getRequest((""))); assertEquals(Collections.emptyList(), result); } @Test - public void completeReturnsMultipleResults() { + void completeReturnsMultipleResults() { BibEntry entryOne = new BibEntry(); entryOne.setField(StandardField.TITLE, "testValueOne"); - autoCompleter.indexEntry(entryOne); + database.insertEntry(entryOne); BibEntry entryTwo = new BibEntry(); entryTwo.setField(StandardField.TITLE, "testValueTwo"); - autoCompleter.indexEntry(entryTwo); + database.insertEntry(entryTwo); - Collection result = autoCompleter.call(getRequest(("testValue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("testValue"))); assertEquals(Arrays.asList("testValueOne", "testValueTwo"), result); } @Test - public void completeShortStringReturnsFieldValue() { + void completeShortStringReturnsFieldValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "val"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("va"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("va"))); assertEquals(Collections.singletonList("val"), result); } @Test - public void completeBeginnigOfSecondWordReturnsWholeFieldValue() { + void completeBeginnigOfSecondWordReturnsWholeFieldValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "test value"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("val"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("val"))); assertEquals(Collections.singletonList("test value"), result); } @Test - public void completePartOfWordReturnsWholeFieldValue() { + void completePartOfWordReturnsWholeFieldValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "test value"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("lue"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("lue"))); assertEquals(Collections.singletonList("test value"), result); } @Test - public void completeReturnsWholeFieldValue() { + void completeReturnsWholeFieldValue() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "test value"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("te"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("te"))); assertEquals(Collections.singletonList("test value"), result); } } diff --git a/src/test/java/org/jabref/gui/autocompleter/PersonNameSuggestionProviderTest.java b/src/test/java/org/jabref/gui/autocompleter/PersonNameSuggestionProviderTest.java index ccc681febdd..1c3f344f5da 100644 --- a/src/test/java/org/jabref/gui/autocompleter/PersonNameSuggestionProviderTest.java +++ b/src/test/java/org/jabref/gui/autocompleter/PersonNameSuggestionProviderTest.java @@ -4,6 +4,7 @@ import java.util.Collection; import java.util.Collections; +import org.jabref.model.database.BibDatabase; import org.jabref.model.entry.Author; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; @@ -16,174 +17,168 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -public class PersonNameSuggestionProviderTest { +class PersonNameSuggestionProviderTest { private final Author vassilisKostakos = new Author("Vassilis", "V.", "", "Kostakos", ""); private PersonNameSuggestionProvider autoCompleter; private BibEntry entry; - - @Test - public void initAutoCompleterWithNullFieldThrowsException() { - assertThrows(NullPointerException.class, () -> new PersonNameSuggestionProvider((Field) null)); - } + private BibDatabase database; @BeforeEach - public void setUp() throws Exception { - autoCompleter = new PersonNameSuggestionProvider(StandardField.AUTHOR); + void setUp() throws Exception { + database = new BibDatabase(); + autoCompleter = new PersonNameSuggestionProvider(StandardField.AUTHOR, database); entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Vassilis Kostakos"); } @Test - public void completeWithoutAddingAnythingReturnsNothing() { - Collection result = autoCompleter.call(getRequest(("test"))); - assertEquals(Collections.emptyList(), result); + void initAutoCompleterWithNullFieldThrowsException() { + assertThrows(NullPointerException.class, () -> new PersonNameSuggestionProvider((Field) null, new BibDatabase())); } @Test - public void completeAfterAddingNullReturnsNothing() { - autoCompleter.indexEntry(null); - - Collection result = autoCompleter.call(getRequest(("test"))); + void completeWithoutAddingAnythingReturnsNothing() { + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingEmptyEntryReturnsNothing() { + void completeAfterAddingEmptyEntryReturnsNothing() { BibEntry entry = new BibEntry(); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeAfterAddingEntryWithoutFieldReturnsNothing() { + void completeAfterAddingEntryWithoutFieldReturnsNothing() { BibEntry entry = new BibEntry(); entry.setField(StandardField.TITLE, "testTitle"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("test"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("test"))); assertEquals(Collections.emptyList(), result); } @Test - public void completeNameReturnsName() { - autoCompleter.indexEntry(entry); + void completeNameReturnsName() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("Kostakos"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Kostakos"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } @Test - public void completeBeginningOfNameReturnsName() { - autoCompleter.indexEntry(entry); + void completeBeginningOfNameReturnsName() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("Kosta"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Kosta"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } @Test - public void completeLowercaseBeginningOfNameReturnsName() { - autoCompleter.indexEntry(entry); + void completeLowercaseBeginningOfNameReturnsName() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("kosta"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("kosta"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } @Test - public void completeNullThrowsException() { - assertThrows(NullPointerException.class, () -> autoCompleter.call(getRequest((null)))); + void completeNullThrowsException() { + assertThrows(NullPointerException.class, () -> autoCompleter.provideSuggestions(getRequest((null)))); } @Test - public void completeEmptyStringReturnsNothing() { - autoCompleter.indexEntry(entry); + void completeEmptyStringReturnsNothing() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest((""))); + Collection result = autoCompleter.provideSuggestions(getRequest((""))); assertEquals(Collections.emptyList(), result); } @Test - public void completeReturnsMultipleResults() { - autoCompleter.indexEntry(entry); + void completeReturnsMultipleResults() { + database.insertEntry(entry); BibEntry entryTwo = new BibEntry(); entryTwo.setField(StandardField.AUTHOR, "Kosta"); - autoCompleter.indexEntry(entryTwo); + database.insertEntry(entryTwo); Author authorTwo = new Author("", "", "", "Kosta", ""); - Collection result = autoCompleter.call(getRequest(("Ko"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Ko"))); assertEquals(Arrays.asList(authorTwo, vassilisKostakos), result); } @Test - public void completePartOfNameReturnsName() { - autoCompleter.indexEntry(entry); + void completePartOfNameReturnsName() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("osta"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("osta"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } @Test - public void completeBeginningOfFirstNameReturnsName() { - autoCompleter.indexEntry(entry); + void completeBeginningOfFirstNameReturnsName() { + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("Vas"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Vas"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } @Test - public void completeBeginningOfFirstNameReturnsNameWithJr() { + void completeBeginningOfFirstNameReturnsNameWithJr() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Reagle, Jr., Joseph M."); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); Author author = new Author("Joseph M.", "J. M.", "", "Reagle", "Jr."); - Collection result = autoCompleter.call(getRequest(("Jos"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Jos"))); assertEquals(Collections.singletonList(author), result); } @Test - public void completeBeginningOfFirstNameReturnsNameWithVon() { + void completeBeginningOfFirstNameReturnsNameWithVon() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Eric von Hippel"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); Author author = new Author("Eric", "E.", "von", "Hippel", ""); - Collection result = autoCompleter.call(getRequest(("Eric"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Eric"))); assertEquals(Collections.singletonList(author), result); } @Test - public void completeBeginningOfLastNameReturnsNameWithUmlauts() { + void completeBeginningOfLastNameReturnsNameWithUmlauts() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Honig Bär"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); Author author = new Author("Honig", "H.", "", "Bär", ""); - Collection result = autoCompleter.call(getRequest(("Bä"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Bä"))); assertEquals(Collections.singletonList(author), result); } @Test - public void completeVonReturnsName() { + void completeVonReturnsName() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Eric von Hippel"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); Author author = new Author("Eric", "E.", "von", "Hippel", ""); - Collection result = autoCompleter.call(getRequest(("von"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("von"))); assertEquals(Collections.singletonList(author), result); } @Test - public void completeBeginningOfFullNameReturnsName() { + void completeBeginningOfFullNameReturnsName() { BibEntry entry = new BibEntry(); entry.setField(StandardField.AUTHOR, "Vassilis Kostakos"); - autoCompleter.indexEntry(entry); + database.insertEntry(entry); - Collection result = autoCompleter.call(getRequest(("Kostakos, Va"))); + Collection result = autoCompleter.provideSuggestions(getRequest(("Kostakos, Va"))); assertEquals(Collections.singletonList(vassilisKostakos), result); } } diff --git a/src/test/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModelTest.java b/src/test/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModelTest.java index 4f5c437e800..d9bc547941c 100644 --- a/src/test/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModelTest.java +++ b/src/test/java/org/jabref/gui/fieldeditors/IdentifierEditorViewModelTest.java @@ -1,7 +1,7 @@ package org.jabref.gui.fieldeditors; import org.jabref.gui.DialogService; -import org.jabref.gui.autocompleter.WordSuggestionProvider; +import org.jabref.gui.autocompleter.EmptySuggestionProvider; import org.jabref.gui.util.CurrentThreadTaskExecutor; import org.jabref.logic.integrity.FieldCheckers; import org.jabref.model.entry.field.StandardField; @@ -12,17 +12,17 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; -public class IdentifierEditorViewModelTest { +class IdentifierEditorViewModelTest { private IdentifierEditorViewModel viewModel; @BeforeEach - public void setUp() throws Exception { - viewModel = new IdentifierEditorViewModel(StandardField.DOI, new WordSuggestionProvider(StandardField.DOI), new CurrentThreadTaskExecutor(), mock(DialogService.class), mock(FieldCheckers.class)); + void setUp() throws Exception { + viewModel = new IdentifierEditorViewModel(StandardField.DOI, new EmptySuggestionProvider(), new CurrentThreadTaskExecutor(), mock(DialogService.class), mock(FieldCheckers.class)); } @Test - public void validIdentifierIsNotPresentIsTrueForEmptyText() throws Exception { + void validIdentifierIsNotPresentIsTrueForEmptyText() throws Exception { assertTrue(viewModel.validIdentifierIsNotPresentProperty().get()); } }