From e9456664378d313234762718ba30cde60817ce3a Mon Sep 17 00:00:00 2001 From: Arsh Chawla Date: Wed, 16 Oct 2024 21:45:31 +1100 Subject: [PATCH] Modified GROBID dialog logic, allowing users to explicitly save GROBID usage preference. "Do not ask" checkbox replaced with "Save Preference", and GROBID_OPTOUT replaced with GROBID_PREFERENCE to reduce ambiguity. --- .../jabref/gui/entryeditor/EntryEditor.java | 4 ++-- .../gui/fieldeditors/LinkedFilesEditor.java | 4 ++-- ...java => GrobidPreferenceDialogHelper.java} | 18 ++++++++--------- .../jabref/gui/importer/ImportCommand.java | 4 ++-- .../websearch/WebSearchTabViewModel.java | 2 +- .../importer/util/GrobidPreferences.java | 20 +++++++++---------- .../preferences/JabRefCliPreferences.java | 8 ++++---- 7 files changed, 29 insertions(+), 31 deletions(-) rename src/main/java/org/jabref/gui/importer/{GrobidOptInDialogHelper.java => GrobidPreferenceDialogHelper.java} (75%) diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 6a382a7a59e..4f02c61dc6e 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -37,7 +37,7 @@ import org.jabref.gui.entryeditor.fileannotationtab.FulltextSearchResultsTab; import org.jabref.gui.externalfiles.ExternalFilesEntryLinker; import org.jabref.gui.help.HelpAction; -import org.jabref.gui.importer.GrobidOptInDialogHelper; +import org.jabref.gui.importer.GrobidPreferenceDialogHelper; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.keyboard.KeyBindingRepository; import org.jabref.gui.menus.ChangeEntryTypeMenu; @@ -432,7 +432,7 @@ private void setupToolBar() { if (fetcher instanceof PdfMergeMetadataImporter.EntryBasedFetcherWrapper) { // Handle Grobid Opt-In in case of the PdfMergeMetadataImporter fetcherMenuItem.setOnAction(event -> { - GrobidOptInDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences()); + GrobidPreferenceDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences()); PdfMergeMetadataImporter.EntryBasedFetcherWrapper pdfMergeMetadataImporter = new PdfMergeMetadataImporter.EntryBasedFetcherWrapper( preferences.getImportFormatPreferences(), diff --git a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java index 5a95b3e42f2..ca7d95bd2a6 100644 --- a/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java +++ b/src/main/java/org/jabref/gui/fieldeditors/LinkedFilesEditor.java @@ -41,7 +41,7 @@ import org.jabref.gui.copyfiles.CopySingleFileAction; import org.jabref.gui.icon.IconTheme; import org.jabref.gui.icon.JabRefIconView; -import org.jabref.gui.importer.GrobidOptInDialogHelper; +import org.jabref.gui.importer.GrobidPreferenceDialogHelper; import org.jabref.gui.keyboard.KeyBinding; import org.jabref.gui.linkedfile.DeleteFileAction; import org.jabref.gui.linkedfile.LinkedFileEditDialog; @@ -236,7 +236,7 @@ private Node createFileDisplay(LinkedFileViewModel linkedFile) { parsePdfMetadata.setTooltip(new Tooltip(Localization.lang("Parse Metadata from PDF."))); parsePdfMetadata.visibleProperty().bind(linkedFile.isOfflinePdfProperty()); parsePdfMetadata.setOnAction(event -> { - GrobidOptInDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences()); + GrobidPreferenceDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences()); linkedFile.parsePdfMetadataAndShowMergeDialog(); }); parsePdfMetadata.getStyleClass().setAll("icon-button"); diff --git a/src/main/java/org/jabref/gui/importer/GrobidOptInDialogHelper.java b/src/main/java/org/jabref/gui/importer/GrobidPreferenceDialogHelper.java similarity index 75% rename from src/main/java/org/jabref/gui/importer/GrobidOptInDialogHelper.java rename to src/main/java/org/jabref/gui/importer/GrobidPreferenceDialogHelper.java index 6ef67bc17a0..8d391f895f0 100644 --- a/src/main/java/org/jabref/gui/importer/GrobidOptInDialogHelper.java +++ b/src/main/java/org/jabref/gui/importer/GrobidPreferenceDialogHelper.java @@ -9,27 +9,25 @@ * due to data privacy concerns. * To make users aware of the feature, we ask each time before querying Grobid, giving the option to opt-out. */ -public class GrobidOptInDialogHelper { +public class GrobidPreferenceDialogHelper { /** * If Grobid is not enabled but the user has not explicitly opted-out of Grobid, we ask for permission to send data - * to Grobid using a dialog and giving an opt-out option. + * to Grobid by using a dialog and giving an explicit 'save preference' option. * * @param dialogService the DialogService to use - * @return if the user enabled Grobid, either in the past or after being asked by the dialog. + * @return if the user enabled Grobid, either in the past or after being asked by the dialog, save preference + * if specified. */ public static boolean showAndWaitIfUserIsUndecided(DialogService dialogService, GrobidPreferences preferences) { - if (preferences.isGrobidEnabled()) { - return true; - } - if (preferences.isGrobidOptOut()) { - return false; + if (preferences.isGrobidPreference()) { + return preferences.isGrobidEnabled(); } boolean grobidEnabled = dialogService.showConfirmationDialogWithOptOutAndWait( Localization.lang("Remote services"), Localization.lang("Allow sending PDF files and raw citation strings to a JabRef online service (Grobid) to determine Metadata. This produces better results."), - Localization.lang("Do not ask again"), - optOut -> preferences.setGrobidOptOut(optOut)); + Localization.lang("Save Preference"), + preferences::setGrobidPreference); preferences.setGrobidEnabled(grobidEnabled); return grobidEnabled; } diff --git a/src/main/java/org/jabref/gui/importer/ImportCommand.java b/src/main/java/org/jabref/gui/importer/ImportCommand.java index 55469924eb9..d74ba47d775 100644 --- a/src/main/java/org/jabref/gui/importer/ImportCommand.java +++ b/src/main/java/org/jabref/gui/importer/ImportCommand.java @@ -144,7 +144,7 @@ private ParserResult doImport(List files, Importer importFormat) throws IO if (importer.isEmpty()) { // Unknown format UiTaskExecutor.runAndWaitInJavaFXThread(() -> { - if (FileUtil.isPDFFile(filename) && GrobidOptInDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences())) { + if (FileUtil.isPDFFile(filename) && GrobidPreferenceDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences())) { importFormatReader.reset(); } dialogService.notify(Localization.lang("Importing file %0 as unknown format", filename.getFileName().toString())); @@ -155,7 +155,7 @@ private ParserResult doImport(List files, Importer importFormat) throws IO UiTaskExecutor.runAndWaitInJavaFXThread(() -> { if (((importer.get() instanceof PdfGrobidImporter) || (importer.get() instanceof PdfMergeMetadataImporter)) - && GrobidOptInDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences())) { + && GrobidPreferenceDialogHelper.showAndWaitIfUserIsUndecided(dialogService, preferences.getGrobidPreferences())) { importFormatReader.reset(); } dialogService.notify(Localization.lang("Importing in %0 format", importer.get().getName()) + "..."); diff --git a/src/main/java/org/jabref/gui/preferences/websearch/WebSearchTabViewModel.java b/src/main/java/org/jabref/gui/preferences/websearch/WebSearchTabViewModel.java index 37f33badb6a..ad0d5b77009 100644 --- a/src/main/java/org/jabref/gui/preferences/websearch/WebSearchTabViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/websearch/WebSearchTabViewModel.java @@ -161,7 +161,7 @@ public void storeSettings() { filePreferences.setKeepDownloadUrl(shouldkeepDownloadUrl.getValue()); importerPreferences.setDefaultPlainCitationParser(defaultPlainCitationParser.getValue()); grobidPreferences.setGrobidEnabled(grobidEnabledProperty.getValue()); - grobidPreferences.setGrobidOptOut(grobidPreferences.isGrobidOptOut()); + grobidPreferences.setGrobidPreference(grobidPreferences.isGrobidPreference()); grobidPreferences.setGrobidURL(grobidURLProperty.getValue()); doiPreferences.setUseCustom(useCustomDOIProperty.get()); doiPreferences.setDefaultBaseURI(useCustomDOINameProperty.getValue().trim()); diff --git a/src/main/java/org/jabref/logic/importer/util/GrobidPreferences.java b/src/main/java/org/jabref/logic/importer/util/GrobidPreferences.java index c58c84b4bcd..4470cbe821d 100644 --- a/src/main/java/org/jabref/logic/importer/util/GrobidPreferences.java +++ b/src/main/java/org/jabref/logic/importer/util/GrobidPreferences.java @@ -7,14 +7,14 @@ public class GrobidPreferences { private final BooleanProperty grobidEnabled; - private final BooleanProperty grobidOptOut; + private final BooleanProperty grobidPreference; private final StringProperty grobidURL; public GrobidPreferences(boolean grobidEnabled, - boolean grobidOptOut, + boolean grobidPreference, String grobidURL) { this.grobidEnabled = new SimpleBooleanProperty(grobidEnabled); - this.grobidOptOut = new SimpleBooleanProperty(grobidOptOut); + this.grobidPreference = new SimpleBooleanProperty(grobidPreference); this.grobidURL = new SimpleStringProperty(grobidURL); } @@ -30,17 +30,17 @@ public void setGrobidEnabled(boolean grobidEnabled) { this.grobidEnabled.set(grobidEnabled); } - // region: optout; models "Do not ask again" option - public boolean isGrobidOptOut() { - return grobidOptOut.get(); + // region: preference; models "Save Preference" option + public boolean isGrobidPreference() { + return grobidPreference.get(); } - public BooleanProperty grobidOptOutProperty() { - return grobidOptOut; + public BooleanProperty grobidPreferenceProperty() { + return grobidPreference; } - public void setGrobidOptOut(boolean grobidOptOut) { - this.grobidOptOut.set(grobidOptOut); + public void setGrobidPreference(boolean grobidPreference) { + this.grobidPreference.set(grobidPreference); } // endregion: optout diff --git a/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java b/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java index 79492a8f72c..2e175405c1b 100644 --- a/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java +++ b/src/main/java/org/jabref/logic/preferences/JabRefCliPreferences.java @@ -220,7 +220,7 @@ public class JabRefCliPreferences implements CliPreferences { public static final String IMPORTERS_ENABLED = "importersEnabled"; public static final String GENERATE_KEY_ON_IMPORT = "generateKeyOnImport"; public static final String GROBID_ENABLED = "grobidEnabled"; - public static final String GROBID_OPT_OUT = "grobidOptOut"; + public static final String GROBID_PREFERENCE = "grobidPreference"; public static final String GROBID_URL = "grobidURL"; public static final String DEFAULT_CITATION_KEY_PATTERN = "defaultBibtexKeyPattern"; @@ -451,7 +451,7 @@ protected JabRefCliPreferences() { // region: Grobid defaults.put(GROBID_ENABLED, Boolean.FALSE); - defaults.put(GROBID_OPT_OUT, Boolean.FALSE); + defaults.put(GROBID_PREFERENCE, Boolean.FALSE); defaults.put(GROBID_URL, "http://grobid.jabref.org:8070"); // endregion @@ -2174,11 +2174,11 @@ public GrobidPreferences getGrobidPreferences() { grobidPreferences = new GrobidPreferences( getBoolean(GROBID_ENABLED), - getBoolean(GROBID_OPT_OUT), + getBoolean(GROBID_PREFERENCE), get(GROBID_URL)); EasyBind.listen(grobidPreferences.grobidEnabledProperty(), (obs, oldValue, newValue) -> putBoolean(GROBID_ENABLED, newValue)); - EasyBind.listen(grobidPreferences.grobidOptOutProperty(), (obs, oldValue, newValue) -> putBoolean(GROBID_OPT_OUT, newValue)); + EasyBind.listen(grobidPreferences.grobidPreferenceProperty(), (obs, oldValue, newValue) -> putBoolean(GROBID_PREFERENCE, newValue)); EasyBind.listen(grobidPreferences.grobidURLProperty(), (obs, oldValue, newValue) -> put(GROBID_URL, newValue)); return grobidPreferences;