From 2766a98d70a19c74e58cbd1c8339dfbe9bbd315e Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Tue, 26 Oct 2021 21:53:31 +0100 Subject: [PATCH 1/8] Close the tab that the cursor is on when right-clicking and selecting close --- src/main/java/org/jabref/gui/JabRefFrame.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 7a262d5981b..528fc1b6d0b 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1004,7 +1004,7 @@ public void setupAllTables() { }); } - private ContextMenu createTabContextMenu(KeyBindingRepository keyBindingRepository) { + private ContextMenu createTabContextMenuFor(LibraryTab tab, KeyBindingRepository keyBindingRepository) { ContextMenu contextMenu = new ContextMenu(); ActionFactory factory = new ActionFactory(keyBindingRepository); @@ -1012,8 +1012,8 @@ private ContextMenu createTabContextMenu(KeyBindingRepository keyBindingReposito factory.createMenuItem(StandardActions.OPEN_DATABASE_FOLDER, new OpenDatabaseFolder()), factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager, prefs)), new SeparatorMenuItem(), - factory.createMenuItem(StandardActions.CLOSE_LIBRARY, new CloseDatabaseAction()), - factory.createMenuItem(StandardActions.CLOSE_OTHER_LIBRARIES, new CloseOthersDatabaseAction()), + factory.createMenuItem(StandardActions.CLOSE_LIBRARY, new CloseDatabaseAction(tab)), + factory.createMenuItem(StandardActions.CLOSE_OTHER_LIBRARIES, new CloseOthersDatabaseAction(tab)), factory.createMenuItem(StandardActions.CLOSE_ALL_LIBRARIES, new CloseAllDatabaseAction()) ); @@ -1029,7 +1029,7 @@ public void addTab(LibraryTab libraryTab, boolean raisePanel) { event.consume(); }); - libraryTab.setContextMenu(createTabContextMenu(Globals.getKeyPrefs())); + libraryTab.setContextMenu(createTabContextMenuFor(libraryTab, Globals.getKeyPrefs())); if (raisePanel) { tabbedPane.getSelectionModel().select(libraryTab); @@ -1199,25 +1199,40 @@ public void execute() { } private class CloseDatabaseAction extends SimpleCommand { + private final LibraryTab libraryTab; + + public CloseDatabaseAction(LibraryTab libraryTab) { + this.libraryTab = libraryTab; + } + + public CloseDatabaseAction() { + this(null); + } @Override public void execute() { - closeTab(getCurrentLibraryTab()); + closeTab(Optional.of(libraryTab).orElse(getCurrentLibraryTab())); } } private class CloseOthersDatabaseAction extends SimpleCommand { + private final LibraryTab libraryTab; - public CloseOthersDatabaseAction() { + public CloseOthersDatabaseAction(LibraryTab libraryTab) { + this.libraryTab = libraryTab; this.executable.bind(ActionHelper.isOpenMultiDatabase(tabbedPane)); } + public CloseOthersDatabaseAction() { + this(null); + } + @Override public void execute() { - LibraryTab currentLibraryTab = getCurrentLibraryTab(); + LibraryTab toKeepLibraryTab = Optional.of(libraryTab).orElse(getCurrentLibraryTab()); for (Tab tab : tabbedPane.getTabs()) { LibraryTab libraryTab = (LibraryTab) tab; - if (libraryTab != currentLibraryTab) { + if (libraryTab != toKeepLibraryTab) { closeTab(libraryTab); } } From 1470a835f968cf6ef2e9ae02b09b1a482e269941 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Tue, 26 Oct 2021 22:05:17 +0100 Subject: [PATCH 2/8] CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82ff46b4e4d..21ab27d7f42 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where typing an invalid UNC path into the "Main file directory" text field caused an error. [#8107](https://github.com/JabRef/jabref/issues/8107) - We fixed an issue where "Open Folder" didn't select the file on macOS in Finder [#8130](https://github.com/JabRef/jabref/issues/8130) - We fixed an issue where importing PDFs resulted in an uncaught exception [#8143](https://github.com/JabRef/jabref/issues/8143) +- We fixed an issue where right-clicking on a tab and selecting close will close the focused tab even if it is not the tab we right-clicked [#8193](https://github.com/JabRef/jabref/pull/8193) ### Removed From 08aa40b952b1dc3f44fd83f7c11202aafdbf63a5 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Tue, 26 Oct 2021 22:34:15 +0100 Subject: [PATCH 3/8] Fix checkstyle --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 21ab27d7f42..6456e3bf36a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,7 +49,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where typing an invalid UNC path into the "Main file directory" text field caused an error. [#8107](https://github.com/JabRef/jabref/issues/8107) - We fixed an issue where "Open Folder" didn't select the file on macOS in Finder [#8130](https://github.com/JabRef/jabref/issues/8130) - We fixed an issue where importing PDFs resulted in an uncaught exception [#8143](https://github.com/JabRef/jabref/issues/8143) -- We fixed an issue where right-clicking on a tab and selecting close will close the focused tab even if it is not the tab we right-clicked [#8193](https://github.com/JabRef/jabref/pull/8193) +- We fixed an issue where right-clicking on a tab and selecting close will close the focused tab even if it is not the tab we right-clicked [#8193](https://github.com/JabRef/jabref/pull/8193) ### Removed From b5117cd47036bb5bcc77730ebd7770e1b29d95f8 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Wed, 27 Oct 2021 21:13:13 +0100 Subject: [PATCH 4/8] YAGNI --- src/main/java/org/jabref/gui/JabRefFrame.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 528fc1b6d0b..f38c89ca7e2 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1223,13 +1223,9 @@ public CloseOthersDatabaseAction(LibraryTab libraryTab) { this.executable.bind(ActionHelper.isOpenMultiDatabase(tabbedPane)); } - public CloseOthersDatabaseAction() { - this(null); - } - @Override public void execute() { - LibraryTab toKeepLibraryTab = Optional.of(libraryTab).orElse(getCurrentLibraryTab()); + LibraryTab toKeepLibraryTab = Optional.of(libraryTab).get(); for (Tab tab : tabbedPane.getTabs()) { LibraryTab libraryTab = (LibraryTab) tab; if (libraryTab != toKeepLibraryTab) { From 1b04a10b21c18610d642edcc615b81cf91f63323 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Wed, 27 Oct 2021 21:17:55 +0100 Subject: [PATCH 5/8] Open database folder for the tab our cursor is on --- src/main/java/org/jabref/gui/JabRefFrame.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index f38c89ca7e2..18a3688acd7 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1009,7 +1009,7 @@ private ContextMenu createTabContextMenuFor(LibraryTab tab, KeyBindingRepository ActionFactory factory = new ActionFactory(keyBindingRepository); contextMenu.getItems().addAll( - factory.createMenuItem(StandardActions.OPEN_DATABASE_FOLDER, new OpenDatabaseFolder()), + factory.createMenuItem(StandardActions.OPEN_DATABASE_FOLDER, new OpenDatabaseFolder(tab.getBibDatabaseContext())), factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager, prefs)), new SeparatorMenuItem(), factory.createMenuItem(StandardActions.CLOSE_LIBRARY, new CloseDatabaseAction(tab)), @@ -1246,10 +1246,15 @@ public void execute() { } private class OpenDatabaseFolder extends SimpleCommand { + private final BibDatabaseContext databaseContext; + + public OpenDatabaseFolder(BibDatabaseContext databaseContext) { + this.databaseContext = databaseContext; + } @Override public void execute() { - stateManager.getActiveDatabase().flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { + Optional.of(databaseContext).flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { try { JabRefDesktop.openFolderAndSelectFile(path, prefs); } catch (IOException e) { From 2e61d7c7bdde248962e1d825ef1efddcdf08ef4d Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Wed, 27 Oct 2021 21:27:50 +0100 Subject: [PATCH 6/8] Open console for the tab our cursor is on --- src/main/java/org/jabref/gui/JabRefFrame.java | 2 +- .../java/org/jabref/gui/OpenConsoleAction.java | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 18a3688acd7..75d5c1acff7 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1010,7 +1010,7 @@ private ContextMenu createTabContextMenuFor(LibraryTab tab, KeyBindingRepository contextMenu.getItems().addAll( factory.createMenuItem(StandardActions.OPEN_DATABASE_FOLDER, new OpenDatabaseFolder(tab.getBibDatabaseContext())), - factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(stateManager, prefs)), + factory.createMenuItem(StandardActions.OPEN_CONSOLE, new OpenConsoleAction(tab.getBibDatabaseContext(), stateManager, prefs)), new SeparatorMenuItem(), factory.createMenuItem(StandardActions.CLOSE_LIBRARY, new CloseDatabaseAction(tab)), factory.createMenuItem(StandardActions.CLOSE_OTHER_LIBRARIES, new CloseOthersDatabaseAction(tab)), diff --git a/src/main/java/org/jabref/gui/OpenConsoleAction.java b/src/main/java/org/jabref/gui/OpenConsoleAction.java index c95ff39d65b..bbd2de42509 100644 --- a/src/main/java/org/jabref/gui/OpenConsoleAction.java +++ b/src/main/java/org/jabref/gui/OpenConsoleAction.java @@ -1,6 +1,7 @@ package org.jabref.gui; import java.io.IOException; +import java.util.Optional; import org.jabref.gui.actions.ActionHelper; import org.jabref.gui.actions.SimpleCommand; @@ -14,19 +15,28 @@ public class OpenConsoleAction extends SimpleCommand { private static final Logger LOGGER = LoggerFactory.getLogger(OpenConsoleAction.class); + private final BibDatabaseContext databaseContext; private final StateManager stateManager; private final PreferencesService preferencesService; - public OpenConsoleAction(StateManager stateManager, PreferencesService preferencesService) { + public OpenConsoleAction(BibDatabaseContext databaseContext, StateManager stateManager, PreferencesService preferencesService) { + this.databaseContext = databaseContext; this.stateManager = stateManager; this.preferencesService = preferencesService; this.executable.bind(ActionHelper.needsDatabase(stateManager)); } + /** + * Using this constructor will result in executing the command on the active database + */ + public OpenConsoleAction(StateManager stateManager, PreferencesService preferencesService) { + this(null, stateManager, preferencesService); + } + @Override public void execute() { - stateManager.getActiveDatabase().flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { + Optional.ofNullable(databaseContext).or(stateManager::getActiveDatabase).flatMap(BibDatabaseContext::getDatabasePath).ifPresent(path -> { try { JabRefDesktop.openConsole(path.toFile(), preferencesService); } catch (IOException e) { From 2dcaa88869384716275a8389d10d3e13ac03b887 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Wed, 27 Oct 2021 21:30:14 +0100 Subject: [PATCH 7/8] Refactor CloseDatabaseAction --- src/main/java/org/jabref/gui/JabRefFrame.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java index 75d5c1acff7..df6de85649f 100644 --- a/src/main/java/org/jabref/gui/JabRefFrame.java +++ b/src/main/java/org/jabref/gui/JabRefFrame.java @@ -1205,13 +1205,16 @@ public CloseDatabaseAction(LibraryTab libraryTab) { this.libraryTab = libraryTab; } + /** + * Using this constructor will result in executing the command on the currently open library tab + * */ public CloseDatabaseAction() { this(null); } @Override public void execute() { - closeTab(Optional.of(libraryTab).orElse(getCurrentLibraryTab())); + closeTab(Optional.ofNullable(libraryTab).orElse(getCurrentLibraryTab())); } } From f1f6cc72205cf508ea7082ae52412b3cef0de6e8 Mon Sep 17 00:00:00 2001 From: Houssem Nasri Date: Thu, 28 Oct 2021 20:32:09 +0100 Subject: [PATCH 8/8] Add @FetcherTest annotation to CompositeIdFetcherTest --- .../jabref/logic/importer/fetcher/CompositeIdFetcherTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/org/jabref/logic/importer/fetcher/CompositeIdFetcherTest.java b/src/test/java/org/jabref/logic/importer/fetcher/CompositeIdFetcherTest.java index fb17d02c6e8..c1543e6d2d6 100644 --- a/src/test/java/org/jabref/logic/importer/fetcher/CompositeIdFetcherTest.java +++ b/src/test/java/org/jabref/logic/importer/fetcher/CompositeIdFetcherTest.java @@ -11,6 +11,7 @@ import org.jabref.model.entry.field.StandardField; import org.jabref.model.entry.field.UnknownField; import org.jabref.model.entry.types.StandardEntryType; +import org.jabref.testutils.category.FetcherTest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; @@ -26,6 +27,7 @@ * Tests the CompositeIdFetcher, for which Fetchers implementing the * IdBasedFetcher interface are a prerequisite. Excluding TitleFetcher. */ +@FetcherTest class CompositeIdFetcherTest { private CompositeIdFetcher compositeIdFetcher;