From 531b7f33e620ba4eb3a96a6eae86f9f64e3fe9ff Mon Sep 17 00:00:00 2001 From: David Stevens Date: Tue, 25 Feb 2020 13:48:24 +0100 Subject: [PATCH 01/15] [feat] Implement mockup of ShortScience integration This commit adds a simple integration of ShortScience.org in the form of an additional context menu action when an entry is selected. This action opens the user's web browser to the search page of ShortScience with the title of the paper entered. Essentially, this is our MVP for the integration towards ShortScience bar some testing. [Issue: #3] --- src/main/java/org/jabref/gui/BasePanel.java | 36 +++++++++++++++++++ .../java/org/jabref/gui/actions/Actions.java | 1 + .../jabref/gui/actions/StandardActions.java | 1 + .../jabref/gui/maintable/RightClickMenu.java | 7 ++++ 4 files changed, 45 insertions(+) diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index efec6542ab0..1925e62eed5 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -2,6 +2,9 @@ import java.io.IOException; import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -329,6 +332,8 @@ private void setupActions() { actions.put(Actions.OPEN_URL, new OpenURLAction()); + actions.put(Actions.OPEN_SHORTSCIENCE, new OpenShortScienceAction()); + actions.put(Actions.MERGE_WITH_FETCHED_ENTRY, new MergeWithFetchedEntryAction(this, frame.getDialogService())); actions.put(Actions.REPLACE_ALL, () -> (new ReplaceStringAction(this)).execute()); @@ -1200,6 +1205,37 @@ public void action() { } } + private class OpenShortScienceAction implements BaseAction { + + @Override + public void action() { + final List bes = mainTable.getSelectedEntries(); + if (bes.size() == 1) { + Optional title = bes.get(0).getField(StandardField.TITLE); + if (title.isPresent()) { + String link; + try { + link = String.format("https://www.shortscience.org/internalsearch?q=%s", URLEncoder.encode(title.get(), StandardCharsets.UTF_8.name())); + } catch (UnsupportedEncodingException ex) { + output(Localization.lang("Error") + ": " + ex.getMessage()); + return; + } + try { + JabRefDesktop.openExternalViewer(bibDatabaseContext, link, StandardField.URL); + output(Localization.lang("External viewer called") + '.'); + } catch (IOException ex) { + output(Localization.lang("Error") + ": " + ex.getMessage()); + } + } else { + //No title entered, we shouldn't be able to get here + throw new AssertionError("OpenShortScienceAction called without title."); + } + } else { + output(Localization.lang("This operation requires exactly one item to be selected.")); + } + } + } + private class OpenURLAction implements BaseAction { @Override diff --git a/src/main/java/org/jabref/gui/actions/Actions.java b/src/main/java/org/jabref/gui/actions/Actions.java index 49040b8e00b..3d462bb4c8f 100644 --- a/src/main/java/org/jabref/gui/actions/Actions.java +++ b/src/main/java/org/jabref/gui/actions/Actions.java @@ -38,6 +38,7 @@ public enum Actions { OPEN_EXTERNAL_FILE, OPEN_FOLDER, OPEN_URL, + OPEN_SHORTSCIENCE, PASTE, PREVIOUS_PREVIEW_STYLE, PULL_CHANGES_FROM_SHARED_DATABASE, diff --git a/src/main/java/org/jabref/gui/actions/StandardActions.java b/src/main/java/org/jabref/gui/actions/StandardActions.java index c1b7a2dfa7c..f9c978d8931 100644 --- a/src/main/java/org/jabref/gui/actions/StandardActions.java +++ b/src/main/java/org/jabref/gui/actions/StandardActions.java @@ -33,6 +33,7 @@ public enum StandardActions implements Action { SEND_AS_EMAIL(Localization.lang("Send as email"), IconTheme.JabRefIcons.EMAIL), OPEN_EXTERNAL_FILE(Localization.lang("Open file"), IconTheme.JabRefIcons.FILE, KeyBinding.OPEN_FILE), OPEN_URL(Localization.lang("Open URL or DOI"), IconTheme.JabRefIcons.WWW, KeyBinding.OPEN_URL_OR_DOI), + OPEN_SHORTSCIENCE(Localization.lang("Open ShortScience"), IconTheme.JabRefIcons.WWW), MERGE_WITH_FETCHED_ENTRY(Localization.lang("Get BibTeX data from %0", "DOI/ISBN/...")), ATTACH_FILE(Localization.lang("Attach file"), IconTheme.JabRefIcons.ATTACH_FILE), PRIORITY(Localization.lang("Priority"), IconTheme.JabRefIcons.PRIORITY), diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 7029810a2fa..cf24697e5e5 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -61,6 +61,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, KeyBindingReposit contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_FOLDER, getOpenFolderCommand(panel))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_EXTERNAL_FILE, getOpenExternalFileCommand(panel))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_URL, getOpenUrlCommand(panel))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_SHORTSCIENCE, getOpenShortScienceCommand(panel))); contextMenu.getItems().add(new SeparatorMenuItem()); @@ -90,6 +91,12 @@ private static OldCommandWrapper getOpenUrlCommand(BasePanel panel) { return command; } + private static OldCommandWrapper getOpenShortScienceCommand(BasePanel panel) { + OldCommandWrapper command = new OldCommandWrapper(Actions.OPEN_SHORTSCIENCE, panel); + command.setExecutable(isFieldSetForSelectedEntry(StandardField.TITLE, panel)); + return command; + } + private static OldCommandWrapper getOpenExternalFileCommand(BasePanel panel) { OldCommandWrapper command = new OldCommandWrapper(Actions.OPEN_EXTERNAL_FILE, panel); command.setExecutable(isFieldSetForSelectedEntry(StandardField.FILE, panel)); From f949a008725c7d885949ab5fe00b8ecd0a00cc75 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Tue, 25 Feb 2020 16:54:50 +0100 Subject: [PATCH 02/15] [fix] Rename menu item for searching ShortScience --- src/main/java/org/jabref/gui/actions/StandardActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/actions/StandardActions.java b/src/main/java/org/jabref/gui/actions/StandardActions.java index f9c978d8931..e8ee9ca41d8 100644 --- a/src/main/java/org/jabref/gui/actions/StandardActions.java +++ b/src/main/java/org/jabref/gui/actions/StandardActions.java @@ -33,7 +33,7 @@ public enum StandardActions implements Action { SEND_AS_EMAIL(Localization.lang("Send as email"), IconTheme.JabRefIcons.EMAIL), OPEN_EXTERNAL_FILE(Localization.lang("Open file"), IconTheme.JabRefIcons.FILE, KeyBinding.OPEN_FILE), OPEN_URL(Localization.lang("Open URL or DOI"), IconTheme.JabRefIcons.WWW, KeyBinding.OPEN_URL_OR_DOI), - OPEN_SHORTSCIENCE(Localization.lang("Open ShortScience"), IconTheme.JabRefIcons.WWW), + OPEN_SHORTSCIENCE(Localization.lang("Search ShortScience")), MERGE_WITH_FETCHED_ENTRY(Localization.lang("Get BibTeX data from %0", "DOI/ISBN/...")), ATTACH_FILE(Localization.lang("Attach file"), IconTheme.JabRefIcons.ATTACH_FILE), PRIORITY(Localization.lang("Priority"), IconTheme.JabRefIcons.PRIORITY), From 7303b233d681c7941e0738ee5ba3943e93a06fe7 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Tue, 25 Feb 2020 20:59:30 +0100 Subject: [PATCH 03/15] [refactor] Use URIBuilder for constructing URI --- src/main/java/org/jabref/gui/BasePanel.java | 23 ++++++++++----------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 1925e62eed5..36be80d19b4 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -2,9 +2,7 @@ import java.io.IOException; import java.io.StringReader; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; +import java.net.URISyntaxException; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; @@ -100,6 +98,7 @@ import org.jabref.preferences.JabRefPreferences; import com.google.common.eventbus.Subscribe; +import org.apache.http.client.utils.URIBuilder; import org.fxmisc.easybind.EasyBind; import org.fxmisc.easybind.Subscription; import org.slf4j.Logger; @@ -1206,6 +1205,7 @@ public void action() { } private class OpenShortScienceAction implements BaseAction { + private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; @Override public void action() { @@ -1213,22 +1213,21 @@ public void action() { if (bes.size() == 1) { Optional title = bes.get(0).getField(StandardField.TITLE); if (title.isPresent()) { - String link; + URIBuilder uriBuilder; try { - link = String.format("https://www.shortscience.org/internalsearch?q=%s", URLEncoder.encode(title.get(), StandardCharsets.UTF_8.name())); - } catch (UnsupportedEncodingException ex) { - output(Localization.lang("Error") + ": " + ex.getMessage()); - return; + uriBuilder = new URIBuilder(BASIC_SEARCH_URL); + } catch (URISyntaxException e) { + // This should never be able to happen as it would require the field to be misconfigured. + throw new AssertionError("ShortScience URL is invalid."); } + // Direct the user to the search results for the title. + uriBuilder.addParameter("q", title.get()); try { - JabRefDesktop.openExternalViewer(bibDatabaseContext, link, StandardField.URL); + JabRefDesktop.openExternalViewer(bibDatabaseContext, uriBuilder.toString(), StandardField.URL); output(Localization.lang("External viewer called") + '.'); } catch (IOException ex) { output(Localization.lang("Error") + ": " + ex.getMessage()); } - } else { - //No title entered, we shouldn't be able to get here - throw new AssertionError("OpenShortScienceAction called without title."); } } else { output(Localization.lang("This operation requires exactly one item to be selected.")); From 617d853ad05aedfe91a27185493f2183b934f716 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Wed, 26 Feb 2020 09:32:54 +0100 Subject: [PATCH 04/15] [refactor] Use new JavaFX style --- src/main/java/org/jabref/gui/BasePanel.java | 31 ------- .../gui/maintable/OpenShortScienceAction.java | 89 +++++++++++++++++++ .../jabref/gui/maintable/RightClickMenu.java | 2 +- 3 files changed, 90 insertions(+), 32 deletions(-) create mode 100644 src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 36be80d19b4..602a3cca3ec 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -1204,37 +1204,6 @@ public void action() { } } - private class OpenShortScienceAction implements BaseAction { - private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; - - @Override - public void action() { - final List bes = mainTable.getSelectedEntries(); - if (bes.size() == 1) { - Optional title = bes.get(0).getField(StandardField.TITLE); - if (title.isPresent()) { - URIBuilder uriBuilder; - try { - uriBuilder = new URIBuilder(BASIC_SEARCH_URL); - } catch (URISyntaxException e) { - // This should never be able to happen as it would require the field to be misconfigured. - throw new AssertionError("ShortScience URL is invalid."); - } - // Direct the user to the search results for the title. - uriBuilder.addParameter("q", title.get()); - try { - JabRefDesktop.openExternalViewer(bibDatabaseContext, uriBuilder.toString(), StandardField.URL); - output(Localization.lang("External viewer called") + '.'); - } catch (IOException ex) { - output(Localization.lang("Error") + ": " + ex.getMessage()); - } - } - } else { - output(Localization.lang("This operation requires exactly one item to be selected.")); - } - } - } - private class OpenURLAction implements BaseAction { @Override diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java new file mode 100644 index 00000000000..a0ae6cb5d1b --- /dev/null +++ b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java @@ -0,0 +1,89 @@ +package org.jabref.gui.maintable; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import javafx.beans.binding.Bindings; +import javafx.beans.binding.BooleanExpression; + +import org.apache.http.client.utils.URIBuilder; +import org.jabref.gui.DialogService; +import org.jabref.gui.StateManager; +import org.jabref.gui.actions.SimpleCommand; +import org.jabref.gui.desktop.JabRefDesktop; +import org.jabref.logic.l10n.Localization; +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.field.Field; +import org.jabref.model.entry.field.StandardField; + + +public class OpenShortScienceAction extends SimpleCommand { + private final DialogService dialogService; + private final StateManager stateManager; + private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; + + public OpenShortScienceAction(DialogService dialogService, StateManager stateManager) { + this.dialogService = dialogService; + this.stateManager = stateManager; + + BooleanExpression fieldIsSet = isFieldSetForSelectedEntry(StandardField.TITLE, stateManager); + this.executable.bind(needsEntriesSelected(1, stateManager).and(fieldIsSet)); + } + + @Override + public void execute() { + stateManager.getActiveDatabase().ifPresent(databaseContext -> { + final List bibEntries = stateManager.getSelectedEntries(); + + if (bibEntries.size() != 1) { + dialogService.notify(Localization.lang("This operation requires exactly one item to be selected.")); + return; + } + Optional title = bibEntries.get(0).getField(StandardField.TITLE); + if (!title.isPresent()) { + // TODO: Consider outputting feedback to user? + return; + } + URIBuilder uriBuilder; + try { + uriBuilder = new URIBuilder(BASIC_SEARCH_URL); + } catch (URISyntaxException e) { + // This should never be able to happen as it would require the field to be misconfigured. + throw new AssertionError("ShortScience URL is invalid."); + } + // Direct the user to the search results for the title. + uriBuilder.addParameter("q", title.get()); + try { + JabRefDesktop.openExternalViewer(databaseContext, uriBuilder.toString(), StandardField.URL); + } catch (IOException ex) { + dialogService.showErrorDialogAndWait(Localization.lang("Unable to open ShortScience."), ex); + } + }); + } + + /* + * TODO: These three methods are taken from ActionHelper in PR #5958, but were part of a combined + * commit there, making them hard to cherry-pick. They should be removed when that PR is + * merged. + */ + public static BooleanExpression needsEntriesSelected(int numberOfEntries, StateManager stateManager) { + return Bindings.createBooleanBinding( + () -> stateManager.getSelectedEntries().size() == numberOfEntries, + stateManager.getSelectedEntries()); + } + + public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateManager stateManager) { + return isAnyFieldSetForSelectedEntry(Collections.singletonList(field), stateManager); + } + + public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { + BibEntry entry = stateManager.getSelectedEntries().get(0); + return Bindings.createBooleanBinding( + () -> entry.getFields().stream().anyMatch(fields::contains), + entry.getFieldsObservable(), + stateManager.getSelectedEntries()); + } +} diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index cf24697e5e5..704d1cf5837 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -61,7 +61,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, KeyBindingReposit contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_FOLDER, getOpenFolderCommand(panel))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_EXTERNAL_FILE, getOpenExternalFileCommand(panel))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_URL, getOpenUrlCommand(panel))); - contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_SHORTSCIENCE, getOpenShortScienceCommand(panel))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_SHORTSCIENCE, new OpenShortScienceAction(dialogService, stateManager))); contextMenu.getItems().add(new SeparatorMenuItem()); From 31a0f0f0a8000236af948deae4c2968e82a78a11 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Wed, 26 Feb 2020 14:12:04 +0100 Subject: [PATCH 05/15] Add localization strings --- src/main/resources/l10n/JabRef_en.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties index 52d29e22470..96af670ff59 100644 --- a/src/main/resources/l10n/JabRef_en.properties +++ b/src/main/resources/l10n/JabRef_en.properties @@ -2114,3 +2114,6 @@ Optional=Optional Required=Required Entry\ type\ cannot\ be\ empty.\ Please\ enter\ a\ name.=Entry type cannot be empty. Please enter a name. Field\ cannot\ be\ empty.\ Please\ enter\ a\ name.=Field cannot be empty. Please enter a name. + +Search\ ShortScience=Search ShortScience +Unable\ to\ open\ ShortScience.=Unable to open ShortScience. From 172e0ef15f633bcdc7e08d70041b0b861ada1ea9 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Wed, 26 Feb 2020 14:12:31 +0100 Subject: [PATCH 06/15] Port to new context menu style The new context menu style that is proposed in #5958 is now used for the ShortScience integration. --- .../gui/maintable/OpenShortScienceAction.java | 71 ++++++++----------- .../jabref/gui/maintable/RightClickMenu.java | 1 + .../maintable/OpenShortScienceActionTest.java | 56 +++++++++++++++ 3 files changed, 86 insertions(+), 42 deletions(-) create mode 100644 src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java index a0ae6cb5d1b..34c21a9ce87 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java @@ -2,11 +2,9 @@ import java.io.IOException; import java.net.URISyntaxException; -import java.util.Collections; import java.util.List; import java.util.Optional; -import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanExpression; import org.apache.http.client.utils.URIBuilder; @@ -16,9 +14,11 @@ import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.field.Field; import org.jabref.model.entry.field.StandardField; +import static org.jabref.gui.actions.ActionHelper.isFieldSetForSelectedEntry; +import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; + public class OpenShortScienceAction extends SimpleCommand { private final DialogService dialogService; @@ -42,48 +42,35 @@ public void execute() { dialogService.notify(Localization.lang("This operation requires exactly one item to be selected.")); return; } - Optional title = bibEntries.get(0).getField(StandardField.TITLE); - if (!title.isPresent()) { - // TODO: Consider outputting feedback to user? - return; - } - URIBuilder uriBuilder; - try { - uriBuilder = new URIBuilder(BASIC_SEARCH_URL); - } catch (URISyntaxException e) { - // This should never be able to happen as it would require the field to be misconfigured. - throw new AssertionError("ShortScience URL is invalid."); - } - // Direct the user to the search results for the title. - uriBuilder.addParameter("q", title.get()); - try { - JabRefDesktop.openExternalViewer(databaseContext, uriBuilder.toString(), StandardField.URL); - } catch (IOException ex) { - dialogService.showErrorDialogAndWait(Localization.lang("Unable to open ShortScience."), ex); - } + getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { + try { + JabRefDesktop.openExternalViewer(databaseContext, url, StandardField.URL); + } catch (IOException ex) { + dialogService.showErrorDialogAndWait(Localization.lang("Unable to open ShortScience."), ex); + } + }); }); } - /* - * TODO: These three methods are taken from ActionHelper in PR #5958, but were part of a combined - * commit there, making them hard to cherry-pick. They should be removed when that PR is - * merged. + /** + * Get a URL to the search results of ShortScience for the BibEntry's title + * @param entry The entry to search for. Expects TITLE to be set for successful return. + * @return The URL if it was successfully created */ - public static BooleanExpression needsEntriesSelected(int numberOfEntries, StateManager stateManager) { - return Bindings.createBooleanBinding( - () -> stateManager.getSelectedEntries().size() == numberOfEntries, - stateManager.getSelectedEntries()); - } - - public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateManager stateManager) { - return isAnyFieldSetForSelectedEntry(Collections.singletonList(field), stateManager); - } - - public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { - BibEntry entry = stateManager.getSelectedEntries().get(0); - return Bindings.createBooleanBinding( - () -> entry.getFields().stream().anyMatch(fields::contains), - entry.getFieldsObservable(), - stateManager.getSelectedEntries()); + public static Optional getShortScienceSearchURL(BibEntry entry) { + Optional title = entry.getField(StandardField.TITLE); + if (!title.isPresent()) { + return Optional.empty(); + } + URIBuilder uriBuilder; + try { + uriBuilder = new URIBuilder(BASIC_SEARCH_URL); + } catch (URISyntaxException e) { + // This should never be able to happen as it would require the field to be misconfigured. + throw new AssertionError("ShortScience URL is invalid."); + } + // Direct the user to the search results for the title. + uriBuilder.addParameter("q", title.get()); + return Optional.of(uriBuilder.toString()); } } diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 441c1698ed4..8937fcd830b 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -63,6 +63,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, KeyBindingReposit contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_FOLDER, new OpenFolderAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_EXTERNAL_FILE, new OpenExternalFileAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_URL, new OpenUrlAction(dialogService, stateManager))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_SHORTSCIENCE, new OpenShortScienceAction(dialogService, stateManager))); contextMenu.getItems().add(new SeparatorMenuItem()); diff --git a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java new file mode 100644 index 00000000000..facf9cc9579 --- /dev/null +++ b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java @@ -0,0 +1,56 @@ +package org.jabref.gui.maintable; + +import org.junit.jupiter.api.Test; + +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Optional; + +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.field.StandardField; + +import static org.jabref.gui.maintable.OpenShortScienceAction.getShortScienceSearchURL; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class OpenShortScienceActionTest { + + /** + * Validates URL conformance to RFC2396. Does not perform complex checks such as opening connections. + */ + private boolean urlIsValid(String url) { + try { + // This will throw on non-compliance to RFC2396. + new URL(url).toURI(); + return true; + } catch (MalformedURLException | URISyntaxException e) { + return false; + } + } + + @Test + void getShortScienceSearchURLEncodesSpecialCharacters() { + BibEntry entry = new BibEntry(); + String rfc3986ReservedCharacters = "!*'();:@&=+$,/?#[]"; + entry.setField(StandardField.TITLE, rfc3986ReservedCharacters); + Optional url = getShortScienceSearchURL(entry); + assertTrue(url.isPresent() && urlIsValid(url.get())); + } + + @Test + void getShortScienceSearchURLReturnsEmptyOnMissingTitle() { + BibEntry entry = new BibEntry(); + assertTrue(getShortScienceSearchURL(entry).isEmpty()); + } + + @Test + void getShortScienceSearchURLLinksToSearchResults() { + BibEntry entry = new BibEntry(); + // Take an arbitrary article name + String title = "JabRef bibliography management"; + entry.setField(StandardField.TITLE, title); + Optional url = getShortScienceSearchURL(entry); + // Expected behaviour is to link to the search results page, /internalsearch + assertTrue(url.isPresent() && url.get().equals("https://www.shortscience.org/internalsearch?q=JabRef+bibliography+management")); + } +} From fbe8ce6dbdadb6e1f93a29312a2860b52c031c68 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Wed, 26 Feb 2020 14:26:08 +0100 Subject: [PATCH 07/15] Remove unused import --- src/main/java/org/jabref/gui/BasePanel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index f06d7fc6f3c..ff5baf2606d 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -71,7 +71,6 @@ import org.jabref.preferences.JabRefPreferences; import com.google.common.eventbus.Subscribe; -import org.apache.http.client.utils.URIBuilder; import org.fxmisc.easybind.EasyBind; import org.fxmisc.easybind.Subscription; import org.slf4j.Logger; From a4363b22f33e6fd3609ce4223b85e83bb688d43f Mon Sep 17 00:00:00 2001 From: David Stevens Date: Wed, 26 Feb 2020 17:04:58 +0100 Subject: [PATCH 08/15] Fix checkstyle compliance --- .../org/jabref/gui/maintable/OpenShortScienceAction.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java index 34c21a9ce87..69524ee66f2 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java @@ -7,7 +7,6 @@ import javafx.beans.binding.BooleanExpression; -import org.apache.http.client.utils.URIBuilder; import org.jabref.gui.DialogService; import org.jabref.gui.StateManager; import org.jabref.gui.actions.SimpleCommand; @@ -16,14 +15,15 @@ import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; +import org.apache.http.client.utils.URIBuilder; + import static org.jabref.gui.actions.ActionHelper.isFieldSetForSelectedEntry; import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; - public class OpenShortScienceAction extends SimpleCommand { + private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; private final DialogService dialogService; private final StateManager stateManager; - private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; public OpenShortScienceAction(DialogService dialogService, StateManager stateManager) { this.dialogService = dialogService; From 436a1766bb7c2d13dee5f3855f2f9aa7a0e7163c Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 09:40:44 +0100 Subject: [PATCH 09/15] [refactor] Adjust code according to feedback --- .../gui/maintable/OpenShortScienceAction.java | 30 ++-------------- .../logic/util/ExternalLinkGenerator.java | 34 +++++++++++++++++++ .../maintable/OpenShortScienceActionTest.java | 16 ++++----- 3 files changed, 44 insertions(+), 36 deletions(-) create mode 100644 src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java index 69524ee66f2..fecb986cd46 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java @@ -1,9 +1,7 @@ package org.jabref.gui.maintable; import java.io.IOException; -import java.net.URISyntaxException; import java.util.List; -import java.util.Optional; import javafx.beans.binding.BooleanExpression; @@ -12,16 +10,14 @@ import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.logic.l10n.Localization; +import org.jabref.logic.util.ExternalLinkGenerator; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; -import org.apache.http.client.utils.URIBuilder; - import static org.jabref.gui.actions.ActionHelper.isFieldSetForSelectedEntry; import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; public class OpenShortScienceAction extends SimpleCommand { - private static final String BASIC_SEARCH_URL = "https://www.shortscience.org/internalsearch"; private final DialogService dialogService; private final StateManager stateManager; @@ -42,7 +38,7 @@ public void execute() { dialogService.notify(Localization.lang("This operation requires exactly one item to be selected.")); return; } - getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { + ExternalLinkGenerator.getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { try { JabRefDesktop.openExternalViewer(databaseContext, url, StandardField.URL); } catch (IOException ex) { @@ -51,26 +47,4 @@ public void execute() { }); }); } - - /** - * Get a URL to the search results of ShortScience for the BibEntry's title - * @param entry The entry to search for. Expects TITLE to be set for successful return. - * @return The URL if it was successfully created - */ - public static Optional getShortScienceSearchURL(BibEntry entry) { - Optional title = entry.getField(StandardField.TITLE); - if (!title.isPresent()) { - return Optional.empty(); - } - URIBuilder uriBuilder; - try { - uriBuilder = new URIBuilder(BASIC_SEARCH_URL); - } catch (URISyntaxException e) { - // This should never be able to happen as it would require the field to be misconfigured. - throw new AssertionError("ShortScience URL is invalid."); - } - // Direct the user to the search results for the title. - uriBuilder.addParameter("q", title.get()); - return Optional.of(uriBuilder.toString()); - } } diff --git a/src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java b/src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java new file mode 100644 index 00000000000..566ef81bea8 --- /dev/null +++ b/src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java @@ -0,0 +1,34 @@ +package org.jabref.logic.util; + +import java.net.URISyntaxException; +import java.util.Optional; + +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.field.StandardField; + +import org.apache.http.client.utils.URIBuilder; + +public class ExternalLinkGenerator { + private static final String SHORTSCIENCE_SEARCH_URL = "https://www.shortscience.org/internalsearch"; + + /** + * Get a URL to the search results of ShortScience for the BibEntry's title + * + * @param entry The entry to search for. Expects the BibEntry's title to be set for successful return. + * @return The URL if it was successfully created + */ + public static Optional getShortScienceSearchURL(BibEntry entry) { + return entry.getField(StandardField.TITLE).map(title -> { + URIBuilder uriBuilder; + try { + uriBuilder = new URIBuilder(SHORTSCIENCE_SEARCH_URL); + } catch (URISyntaxException e) { + // This should never be able to happen as it would require the field to be misconfigured. + throw new AssertionError("ShortScience URL is invalid."); + } + // Direct the user to the search results for the title. + uriBuilder.addParameter("q", title); + return uriBuilder.toString(); + }); + } +} diff --git a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java index facf9cc9579..91a25747556 100644 --- a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java +++ b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java @@ -10,10 +10,11 @@ import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; -import static org.jabref.gui.maintable.OpenShortScienceAction.getShortScienceSearchURL; +import static org.jabref.logic.util.ExternalLinkGenerator.getShortScienceSearchURL; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -class OpenShortScienceActionTest { +class ExternalLinkGeneratorTest { /** * Validates URL conformance to RFC2396. Does not perform complex checks such as opening connections. @@ -34,23 +35,22 @@ void getShortScienceSearchURLEncodesSpecialCharacters() { String rfc3986ReservedCharacters = "!*'();:@&=+$,/?#[]"; entry.setField(StandardField.TITLE, rfc3986ReservedCharacters); Optional url = getShortScienceSearchURL(entry); - assertTrue(url.isPresent() && urlIsValid(url.get())); + assertTrue(url.isPresent()); + assertTrue(urlIsValid(url.get())); } @Test void getShortScienceSearchURLReturnsEmptyOnMissingTitle() { BibEntry entry = new BibEntry(); - assertTrue(getShortScienceSearchURL(entry).isEmpty()); + assertEquals(Optional.empty(), getShortScienceSearchURL(entry)); } @Test void getShortScienceSearchURLLinksToSearchResults() { - BibEntry entry = new BibEntry(); // Take an arbitrary article name - String title = "JabRef bibliography management"; - entry.setField(StandardField.TITLE, title); + BibEntry entry = new BibEntry().withField(StandardField.TITLE, "JabRef bibliography management"); Optional url = getShortScienceSearchURL(entry); // Expected behaviour is to link to the search results page, /internalsearch - assertTrue(url.isPresent() && url.get().equals("https://www.shortscience.org/internalsearch?q=JabRef+bibliography+management")); + assertEquals(Optional.of("https://www.shortscience.org/internalsearch?q=JabRef+bibliography+management"), url); } } From b21b543f3f79c36fd94d8cfb30faeda367bfed3e Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 09:51:28 +0100 Subject: [PATCH 10/15] Add changelog note about shortscience --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c62dc2e347b..f5006658f2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Filenames of external files can no longer contain curly braces. [#5926](https://github.com/JabRef/jabref/pull/5926) - We made the filters more easily accessible in the integrity check dialog. [#5955](https://github.com/JabRef/jabref/pull/5955) - We reimplemented and improved the dialog "Customize entry types" [#4719](https://github.com/JabRef/jabref/issues/4719) +- We added support for searching ShortScience for an entry through the user's browser. [#6018](https://github.com/JabRef/jabref/pull/6018) ### Fixed From d9d305383b431aa06b7d8bc7f022df3cbda7de0b Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 09:56:20 +0100 Subject: [PATCH 11/15] Fix import order --- .../org/jabref/gui/maintable/OpenShortScienceActionTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java index 91a25747556..7b51852b1a5 100644 --- a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java +++ b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java @@ -1,7 +1,5 @@ package org.jabref.gui.maintable; -import org.junit.jupiter.api.Test; - import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; @@ -10,6 +8,8 @@ import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; +import org.junit.jupiter.api.Test; + import static org.jabref.logic.util.ExternalLinkGenerator.getShortScienceSearchURL; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; From a68d38b63ca27dd8e664b0176fa2f200da89b19a Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 11:58:47 +0100 Subject: [PATCH 12/15] Rename ExternalLinkGenerator to ExternalLinkCreator --- .../java/org/jabref/gui/maintable/OpenShortScienceAction.java | 4 ++-- .../{ExternalLinkGenerator.java => ExternalLinkCreator.java} | 2 +- .../org/jabref/gui/maintable/OpenShortScienceActionTest.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/org/jabref/logic/util/{ExternalLinkGenerator.java => ExternalLinkCreator.java} (97%) diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java index fecb986cd46..ea8e5314219 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java @@ -10,7 +10,7 @@ import org.jabref.gui.actions.SimpleCommand; import org.jabref.gui.desktop.JabRefDesktop; import org.jabref.logic.l10n.Localization; -import org.jabref.logic.util.ExternalLinkGenerator; +import org.jabref.logic.util.ExternalLinkCreator; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.StandardField; @@ -38,7 +38,7 @@ public void execute() { dialogService.notify(Localization.lang("This operation requires exactly one item to be selected.")); return; } - ExternalLinkGenerator.getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { + ExternalLinkCreator.getShortScienceSearchURL(bibEntries.get(0)).ifPresent(url -> { try { JabRefDesktop.openExternalViewer(databaseContext, url, StandardField.URL); } catch (IOException ex) { diff --git a/src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java b/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java similarity index 97% rename from src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java rename to src/main/java/org/jabref/logic/util/ExternalLinkCreator.java index 566ef81bea8..6726efbc83f 100644 --- a/src/main/java/org/jabref/logic/util/ExternalLinkGenerator.java +++ b/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java @@ -8,7 +8,7 @@ import org.apache.http.client.utils.URIBuilder; -public class ExternalLinkGenerator { +public class ExternalLinkCreator { private static final String SHORTSCIENCE_SEARCH_URL = "https://www.shortscience.org/internalsearch"; /** diff --git a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java index 7b51852b1a5..e1357dee0dd 100644 --- a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java +++ b/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java @@ -10,11 +10,11 @@ import org.junit.jupiter.api.Test; -import static org.jabref.logic.util.ExternalLinkGenerator.getShortScienceSearchURL; +import static org.jabref.logic.util.ExternalLinkCreator.getShortScienceSearchURL; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -class ExternalLinkGeneratorTest { +class ExternalLinkCreatorTest { /** * Validates URL conformance to RFC2396. Does not perform complex checks such as opening connections. From eb90e80dcf2f84a756d198b25640d34c898c8c74 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 15:57:21 +0100 Subject: [PATCH 13/15] Move test to proper location and file name --- .../util/ExternalLinkCreatorTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test/java/org/jabref/{gui/maintable/OpenShortScienceActionTest.java => logic/util/ExternalLinkCreatorTest.java} (98%) diff --git a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java b/src/test/java/org/jabref/logic/util/ExternalLinkCreatorTest.java similarity index 98% rename from src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java rename to src/test/java/org/jabref/logic/util/ExternalLinkCreatorTest.java index e1357dee0dd..736518e843d 100644 --- a/src/test/java/org/jabref/gui/maintable/OpenShortScienceActionTest.java +++ b/src/test/java/org/jabref/logic/util/ExternalLinkCreatorTest.java @@ -1,4 +1,4 @@ -package org.jabref.gui.maintable; +package org.jabref.logic.util; import java.net.MalformedURLException; import java.net.URISyntaxException; From 9abcb14ae3946fa0d75f3860313a7ccd91276e3e Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 21:11:36 +0100 Subject: [PATCH 14/15] Fix inconsistent naming and add exception cause --- src/main/java/org/jabref/gui/actions/StandardActions.java | 2 +- src/main/java/org/jabref/logic/util/ExternalLinkCreator.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/actions/StandardActions.java b/src/main/java/org/jabref/gui/actions/StandardActions.java index e8ee9ca41d8..19e9ffe2fcd 100644 --- a/src/main/java/org/jabref/gui/actions/StandardActions.java +++ b/src/main/java/org/jabref/gui/actions/StandardActions.java @@ -33,7 +33,7 @@ public enum StandardActions implements Action { SEND_AS_EMAIL(Localization.lang("Send as email"), IconTheme.JabRefIcons.EMAIL), OPEN_EXTERNAL_FILE(Localization.lang("Open file"), IconTheme.JabRefIcons.FILE, KeyBinding.OPEN_FILE), OPEN_URL(Localization.lang("Open URL or DOI"), IconTheme.JabRefIcons.WWW, KeyBinding.OPEN_URL_OR_DOI), - OPEN_SHORTSCIENCE(Localization.lang("Search ShortScience")), + SEARCH_SHORTSCIENCE(Localization.lang("Search ShortScience")), MERGE_WITH_FETCHED_ENTRY(Localization.lang("Get BibTeX data from %0", "DOI/ISBN/...")), ATTACH_FILE(Localization.lang("Attach file"), IconTheme.JabRefIcons.ATTACH_FILE), PRIORITY(Localization.lang("Priority"), IconTheme.JabRefIcons.PRIORITY), diff --git a/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java b/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java index 6726efbc83f..8e98318b544 100644 --- a/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java +++ b/src/main/java/org/jabref/logic/util/ExternalLinkCreator.java @@ -24,7 +24,7 @@ public static Optional getShortScienceSearchURL(BibEntry entry) { uriBuilder = new URIBuilder(SHORTSCIENCE_SEARCH_URL); } catch (URISyntaxException e) { // This should never be able to happen as it would require the field to be misconfigured. - throw new AssertionError("ShortScience URL is invalid."); + throw new AssertionError("ShortScience URL is invalid.", e); } // Direct the user to the search results for the title. uriBuilder.addParameter("q", title); From 742dc5eb77f7f5d345f978ad42bd225301205b08 Mon Sep 17 00:00:00 2001 From: David Stevens Date: Thu, 27 Feb 2020 21:15:59 +0100 Subject: [PATCH 15/15] Rename missed references to Search Shortscience --- src/main/java/org/jabref/gui/maintable/RightClickMenu.java | 2 +- ...nShortScienceAction.java => SearchShortScienceAction.java} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename src/main/java/org/jabref/gui/maintable/{OpenShortScienceAction.java => SearchShortScienceAction.java} (92%) diff --git a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java index 93e85afff9c..359569fbfd4 100644 --- a/src/main/java/org/jabref/gui/maintable/RightClickMenu.java +++ b/src/main/java/org/jabref/gui/maintable/RightClickMenu.java @@ -63,7 +63,7 @@ public static ContextMenu create(BibEntryTableViewModel entry, KeyBindingReposit contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_FOLDER, new OpenFolderAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_EXTERNAL_FILE, new OpenExternalFileAction(dialogService, stateManager, preferencesService))); contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_URL, new OpenUrlAction(dialogService, stateManager))); - contextMenu.getItems().add(factory.createMenuItem(StandardActions.OPEN_SHORTSCIENCE, new OpenShortScienceAction(dialogService, stateManager))); + contextMenu.getItems().add(factory.createMenuItem(StandardActions.SEARCH_SHORTSCIENCE, new SearchShortScienceAction(dialogService, stateManager))); contextMenu.getItems().add(new SeparatorMenuItem()); diff --git a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java b/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java similarity index 92% rename from src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java rename to src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java index ea8e5314219..663fd5be697 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenShortScienceAction.java +++ b/src/main/java/org/jabref/gui/maintable/SearchShortScienceAction.java @@ -17,11 +17,11 @@ import static org.jabref.gui.actions.ActionHelper.isFieldSetForSelectedEntry; import static org.jabref.gui.actions.ActionHelper.needsEntriesSelected; -public class OpenShortScienceAction extends SimpleCommand { +public class SearchShortScienceAction extends SimpleCommand { private final DialogService dialogService; private final StateManager stateManager; - public OpenShortScienceAction(DialogService dialogService, StateManager stateManager) { + public SearchShortScienceAction(DialogService dialogService, StateManager stateManager) { this.dialogService = dialogService; this.stateManager = stateManager;