From 6dfc2e00b4fc1dd76f4865e81894e2f7b2e50968 Mon Sep 17 00:00:00 2001 From: Ruan <47767371+Ryyyc@users.noreply.github.com> Date: Tue, 26 Apr 2022 02:27:27 +0800 Subject: [PATCH] Fix for issue 6877: Allow users to customize the API Key (#7720) Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> --- CHANGELOG.md | 1 + .../org/jabref/cli/ArgumentProcessor.java | 24 ++++- .../org/jabref/gui/EntryTypeViewModel.java | 25 ++++- .../externalfiles/DownloadFullTextAction.java | 4 +- .../LinkedFilesEditorViewModel.java | 4 +- .../fetcher/WebSearchPaneViewModel.java | 7 +- .../importexport/ImportExportTab.fxml | 16 ++- .../importexport/ImportExportTab.java | 47 ++++++++- .../ImportExportTabViewModel.java | 94 +++++++++++++++++- .../gui/slr/ExistingStudySearchAction.java | 17 +++- .../gui/slr/ManageStudyDefinitionView.java | 6 +- .../slr/ManageStudyDefinitionViewModel.java | 23 +++-- .../org/jabref/logic/crawler/Crawler.java | 29 +++++- .../StudyDatabaseToFetcherConverter.java | 11 ++- .../jabref/logic/crawler/StudyRepository.java | 13 ++- .../logic/importer/FulltextFetchers.java | 4 +- .../logic/importer/ImporterPreferences.java | 18 +++- .../jabref/logic/importer/WebFetchers.java | 36 ++++--- .../fetcher/AstrophysicsDataSystem.java | 27 +++-- .../fetcher/CustomizableKeyFetcher.java | 9 ++ .../jabref/logic/importer/fetcher/IEEE.java | 41 ++++++-- .../logic/importer/fetcher/ScienceDirect.java | 28 +++++- .../importer/fetcher/SpringerFetcher.java | 46 +++++++-- .../logic/importer/fetcher/SpringerLink.java | 25 ++++- .../logic/preferences/FetcherApiKey.java | 46 +++++++++ .../jabref/preferences/JabRefPreferences.java | 98 ++++++++++++------- src/main/resources/l10n/JabRef_en.properties | 6 ++ .../org/jabref/logic/crawler/CrawlerTest.java | 15 ++- .../StudyDatabaseToFetcherConverterTest.java | 21 +++- .../logic/crawler/StudyRepositoryTest.java | 29 +++++- .../logic/importer/WebFetchersTest.java | 20 ++-- .../fetcher/AstrophysicsDataSystemTest.java | 7 +- .../CompositeSearchBasedFetcherTest.java | 11 ++- .../importer/fetcher/FulltextFetcherTest.java | 3 +- .../fetcher/GrobidCitationFetcherTest.java | 2 +- .../logic/importer/fetcher/IEEETest.java | 7 +- .../importer/fetcher/ScienceDirectTest.java | 9 +- .../importer/fetcher/SpringerFetcherTest.java | 20 ++-- .../importer/fetcher/SpringerLinkTest.java | 9 +- .../importer/util/GrobidServiceTest.java | 20 +++- 40 files changed, 729 insertions(+), 149 deletions(-) create mode 100644 src/main/java/org/jabref/logic/importer/fetcher/CustomizableKeyFetcher.java create mode 100644 src/main/java/org/jabref/logic/preferences/FetcherApiKey.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e4d92b3ca60..002096aa0ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve ### Added +- We enabled the user to customize the API Key for some fetchers. [#6877](https://github.com/JabRef/jabref/issues/6877) - We added an extra option when right-clicking an entry in the Entry List to copy either the DOI or the DOI url. - We added a fetcher for [Directory of Open Access Books (DOAB)](https://doabooks.org/) [8576](https://github.com/JabRef/jabref/issues/8576) - We added an extra option to ask the user whether they want to open to reveal the folder holding the saved file with the file selected. [#8195](https://github.com/JabRef/jabref/issues/8195) diff --git a/src/main/java/org/jabref/cli/ArgumentProcessor.java b/src/main/java/org/jabref/cli/ArgumentProcessor.java index 7a7075539a3..f1aaa0653d7 100644 --- a/src/main/java/org/jabref/cli/ArgumentProcessor.java +++ b/src/main/java/org/jabref/cli/ArgumentProcessor.java @@ -157,7 +157,8 @@ private static Optional importFile(Path file, String importFormat) // * means "guess the format": System.out.println(Localization.lang("Importing in unknown format") + ": " + file); - ImportFormatReader.UnknownFormatImport importResult = Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, new DummyFileUpdateMonitor()); + ImportFormatReader.UnknownFormatImport importResult = + Globals.IMPORT_FORMAT_READER.importUnknownFormat(file, new DummyFileUpdateMonitor()); System.out.println(Localization.lang("Format used") + ": " + importResult.format); return Optional.of(importResult.parserResult); @@ -526,7 +527,11 @@ private void saveDatabase(BibDatabase newBase, String subName) { SavePreferences savePreferences = preferencesService.getSavePreferences(); AtomicFileWriter fileWriter = new AtomicFileWriter(Path.of(subName), StandardCharsets.UTF_8); BibWriter bibWriter = new BibWriter(fileWriter, OS.NEWLINE); - BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter(bibWriter, generalPreferences, savePreferences, Globals.entryTypesManager); + BibDatabaseWriter databaseWriter = new BibtexDatabaseWriter( + bibWriter, + generalPreferences, + savePreferences, + Globals.entryTypesManager); databaseWriter.saveDatabase(new BibDatabaseContext(newBase)); // Show just a warning message if encoding did not work for all characters: @@ -586,13 +591,20 @@ private void importPreferences() { preferencesService.importPreferences(Path.of(cli.getPreferencesImport())); Globals.entryTypesManager.addCustomOrModifiedTypes(preferencesService.getBibEntryTypes(BibDatabaseMode.BIBTEX), preferencesService.getBibEntryTypes(BibDatabaseMode.BIBLATEX)); - List customExporters = preferencesService.getCustomExportFormats(Globals.journalAbbreviationRepository); + List customExporters = + preferencesService.getCustomExportFormats(Globals.journalAbbreviationRepository); LayoutFormatterPreferences layoutPreferences = preferencesService.getLayoutFormatterPreferences(Globals.journalAbbreviationRepository); SavePreferences savePreferences = preferencesService.getSavePreferencesForExport(); XmpPreferences xmpPreferences = preferencesService.getXmpPreferences(); BibDatabaseMode bibDatabaseMode = preferencesService.getGeneralPreferences().getDefaultBibDatabaseMode(); - Globals.exportFactory = ExporterFactory.create(customExporters, layoutPreferences, savePreferences, xmpPreferences, bibDatabaseMode, Globals.entryTypesManager); + Globals.exportFactory = ExporterFactory.create( + customExporters, + layoutPreferences, + savePreferences, + xmpPreferences, + bibDatabaseMode, + Globals.entryTypesManager); } catch (JabRefException ex) { LOGGER.error("Cannot import preferences", ex); } @@ -666,7 +678,9 @@ private Optional fetch(String fetchCommand) { String engine = split[0]; String query = split[1]; - Set fetchers = WebFetchers.getSearchBasedFetchers(preferencesService.getImportFormatPreferences()); + Set fetchers = WebFetchers.getSearchBasedFetchers( + preferencesService.getImportFormatPreferences(), + preferencesService.getImporterPreferences()); Optional selectedFetcher = fetchers.stream() .filter(fetcher -> fetcher.getName().equalsIgnoreCase(engine)) .findFirst(); diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java index c48a061158f..16782b19c00 100644 --- a/src/main/java/org/jabref/gui/EntryTypeViewModel.java +++ b/src/main/java/org/jabref/gui/EntryTypeViewModel.java @@ -59,9 +59,14 @@ public EntryTypeViewModel(PreferencesService preferences, this.preferencesService = preferences; this.dialogService = dialogService; this.stateManager = stateManager; - fetchers.addAll(WebFetchers.getIdBasedFetchers(preferences.getImportFormatPreferences())); + fetchers.addAll(WebFetchers.getIdBasedFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences())); selectedItemProperty.setValue(getLastSelectedFetcher()); - idFieldValidator = new FunctionBasedValidator<>(idText, StringUtil::isNotBlank, ValidationMessage.error(Localization.lang("Required field \"%0\" is empty.", Localization.lang("ID")))); + idFieldValidator = new FunctionBasedValidator<>( + idText, + StringUtil::isNotBlank, + ValidationMessage.error(Localization.lang("Required field \"%0\" is empty.", Localization.lang("ID")))); } public BooleanProperty searchSuccesfulProperty() { @@ -152,7 +157,14 @@ public void runFetcherWorker() { if (result.isPresent()) { final BibEntry entry = result.get(); - ImportHandler handler = new ImportHandler(libraryTab.getBibDatabaseContext(), ExternalFileTypes.getInstance(), preferencesService, Globals.getFileUpdateMonitor(), libraryTab.getUndoManager(), stateManager, dialogService); + ImportHandler handler = new ImportHandler( + libraryTab.getBibDatabaseContext(), + ExternalFileTypes.getInstance(), + preferencesService, + Globals.getFileUpdateMonitor(), + libraryTab.getUndoManager(), + stateManager, + dialogService); handler.importEntryWithDuplicateCheck(libraryTab.getBibDatabaseContext(), entry); searchSuccesfulProperty.set(true); @@ -170,7 +182,12 @@ public void runFetcherWorker() { Localization.lang("Add entry manually"), Localization.lang("Return to dialog")); if (addEntryFlag) { - new NewEntryAction(libraryTab.frame(), StandardEntryType.Article, dialogService, preferencesService, stateManager).execute(); + new NewEntryAction( + libraryTab.frame(), + StandardEntryType.Article, + dialogService, + preferencesService, + stateManager).execute(); searchSuccesfulProperty.set(true); } } diff --git a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java index 56068fa847e..53be917cea1 100644 --- a/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java +++ b/src/main/java/org/jabref/gui/externalfiles/DownloadFullTextAction.java @@ -85,7 +85,9 @@ protected Map> call() { Map> downloads = new ConcurrentHashMap<>(); int count = 0; for (BibEntry entry : entries) { - FulltextFetchers fetchers = new FulltextFetchers(preferences.getImportFormatPreferences()); + FulltextFetchers fetchers = new FulltextFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences()); downloads.put(entry, fetchers.findFullTextPDF(entry)); updateProgress(++count, entries.size()); } diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java index 1c9b452c551..4525c7f050c 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditorViewModel.java @@ -202,7 +202,9 @@ private List findAssociatedNotLinkedFiles(BibEntry entry) { } public void fetchFulltext() { - FulltextFetchers fetcher = new FulltextFetchers(preferences.getImportFormatPreferences()); + FulltextFetchers fetcher = new FulltextFetchers( + preferences.getImportFormatPreferences(), + preferences.getImporterPreferences()); BackgroundTask .wrap(() -> fetcher.findFullTextPDF(entry)) .onRunning(() -> fulltextLookupInProgress.setValue(true)) diff --git a/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java b/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java index bb24c28f4bb..6aa6e7177d5 100644 --- a/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java +++ b/src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java @@ -52,7 +52,9 @@ public WebSearchPaneViewModel(PreferencesService preferencesService, DialogServi this.dialogService = dialogService; this.stateManager = stateManager; - SortedSet allFetchers = WebFetchers.getSearchBasedFetchers(preferencesService.getImportFormatPreferences()); + SortedSet allFetchers = WebFetchers.getSearchBasedFetchers( + preferencesService.getImportFormatPreferences(), + preferencesService.getImporterPreferences()); fetchers.setAll(allFetchers); // Choose last-selected fetcher as default @@ -128,7 +130,8 @@ public void search() { } SearchBasedFetcher activeFetcher = getSelectedFetcher(); - Globals.getTelemetryClient().ifPresent(client -> client.trackEvent("search", Map.of("fetcher", activeFetcher.getName()), Map.of())); + Globals.getTelemetryClient().ifPresent(client -> + client.trackEvent("search", Map.of("fetcher", activeFetcher.getName()), Map.of())); BackgroundTask task; task = BackgroundTask.wrap(() -> new ParserResult(activeFetcher.performSearch(query))) diff --git a/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml b/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml index 10cc58d0d5c..7d3756d1bb0 100644 --- a/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml +++ b/src/main/java/org/jabref/gui/preferences/importexport/ImportExportTab.fxml @@ -1,12 +1,14 @@ + + + - @@ -30,4 +32,16 @@