From 383391df9c002664ac078012ede9e2185df0e511 Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Sat, 14 Mar 2020 15:29:33 +0100 Subject: [PATCH 1/6] fix: not every selected entry will have a file Related #6085 --- .../gui/maintable/OpenFolderAction.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java b/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java index a2c3c211785..cd57881f749 100644 --- a/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java +++ b/src/main/java/org/jabref/gui/maintable/OpenFolderAction.java @@ -27,17 +27,22 @@ public OpenFolderAction(DialogService dialogService, StateManager stateManager, @Override public void execute() { stateManager.getActiveDatabase().ifPresent(databaseContext -> - stateManager.getSelectedEntries().forEach(entry -> { - LinkedFileViewModel linkedFileViewModel = new LinkedFileViewModel( - entry.getFiles().get(0), - entry, - databaseContext, - Globals.TASK_EXECUTOR, - dialogService, - preferencesService.getXMPPreferences(), - preferencesService.getFilePreferences(), - ExternalFileTypes.getInstance()); - linkedFileViewModel.openFolder(); - })); + stateManager.getSelectedEntries().forEach(entry -> { + if (entry.getFiles().isEmpty()) { + return; + } + + LinkedFileViewModel linkedFileViewModel = new LinkedFileViewModel( + entry.getFiles().get(0), + entry, + databaseContext, + Globals.TASK_EXECUTOR, + dialogService, + preferencesService.getXMPPreferences(), + preferencesService.getFilePreferences(), + ExternalFileTypes.getInstance() + ); + linkedFileViewModel.openFolder(); + })); } } From e6e27a9f623a8ac97a18a799e7676764a290e7b2 Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Sat, 14 Mar 2020 15:41:36 +0100 Subject: [PATCH 2/6] fix: this will probably fix missing selection information on Linux I is hard to test this, as normally a selection should be given when the method is triggered. Fixes #6085 --- .../java/org/jabref/gui/actions/ActionHelper.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jabref/gui/actions/ActionHelper.java b/src/main/java/org/jabref/gui/actions/ActionHelper.java index 01e23d67e22..1dcdb70f99f 100644 --- a/src/main/java/org/jabref/gui/actions/ActionHelper.java +++ b/src/main/java/org/jabref/gui/actions/ActionHelper.java @@ -5,6 +5,7 @@ import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanExpression; +import javafx.collections.ObservableList; import org.jabref.gui.StateManager; import org.jabref.model.entry.BibEntry; @@ -30,10 +31,18 @@ public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateMan } public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { - BibEntry entry = stateManager.getSelectedEntries().get(0); + ObservableList selectedEntries = stateManager.getSelectedEntries(); + + // binding should be recreated on every right click + // not sure why selectedEntries might be empty, see https://github.com/JabRef/jabref/issues/6085 + if (selectedEntries.isEmpty()) { + return Bindings.createBooleanBinding(() -> false, selectedEntries); + } + + BibEntry entry = selectedEntries.get(0); return Bindings.createBooleanBinding( () -> entry.getFields().stream().anyMatch(fields::contains), entry.getFieldsObservable(), - stateManager.getSelectedEntries()); + selectedEntries); } } From 1bd27706ba0ba58c516b200308b3a1eef3da7b7b Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Sat, 14 Mar 2020 16:53:19 +0100 Subject: [PATCH 3/6] Update src/main/java/org/jabref/gui/actions/ActionHelper.java Co-Authored-By: Tobias Diez --- src/main/java/org/jabref/gui/actions/ActionHelper.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/actions/ActionHelper.java b/src/main/java/org/jabref/gui/actions/ActionHelper.java index 1dcdb70f99f..4344c278633 100644 --- a/src/main/java/org/jabref/gui/actions/ActionHelper.java +++ b/src/main/java/org/jabref/gui/actions/ActionHelper.java @@ -39,7 +39,13 @@ public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields return Bindings.createBooleanBinding(() -> false, selectedEntries); } - BibEntry entry = selectedEntries.get(0); + ObjectBinding entry = Bindings.valueAt(selectedEntries, 0); + return Bindings.createBooleanBinding(() -> { + if (entry.get() == null) + return false; + else + return entry.get().getFields().stream().anyMatch(fields::contains); + }, entry, entry.getFieldsObserable()); return Bindings.createBooleanBinding( () -> entry.getFields().stream().anyMatch(fields::contains), entry.getFieldsObservable(), From 058c7259878b6f0bcb3b4edc3656379297cb8f6e Mon Sep 17 00:00:00 2001 From: Stefan Kolb Date: Sat, 14 Mar 2020 16:56:45 +0100 Subject: [PATCH 4/6] Update ActionHelper.java --- .../org/jabref/gui/actions/ActionHelper.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/jabref/gui/actions/ActionHelper.java b/src/main/java/org/jabref/gui/actions/ActionHelper.java index 4344c278633..5e8fe6f8fdd 100644 --- a/src/main/java/org/jabref/gui/actions/ActionHelper.java +++ b/src/main/java/org/jabref/gui/actions/ActionHelper.java @@ -5,6 +5,7 @@ import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanExpression; +import javafx.beans.binding.ObjectBinding; import javafx.collections.ObservableList; import org.jabref.gui.StateManager; @@ -33,22 +34,13 @@ public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateMan public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { ObservableList selectedEntries = stateManager.getSelectedEntries(); - // binding should be recreated on every right click - // not sure why selectedEntries might be empty, see https://github.com/JabRef/jabref/issues/6085 - if (selectedEntries.isEmpty()) { - return Bindings.createBooleanBinding(() -> false, selectedEntries); - } - ObjectBinding entry = Bindings.valueAt(selectedEntries, 0); return Bindings.createBooleanBinding(() -> { - if (entry.get() == null) + if (entry.get() == null) { return false; - else - return entry.get().getFields().stream().anyMatch(fields::contains); - }, entry, entry.getFieldsObserable()); - return Bindings.createBooleanBinding( - () -> entry.getFields().stream().anyMatch(fields::contains), - entry.getFieldsObservable(), - selectedEntries); + } else { + return entry.get().getFields().stream().anyMatch(fields::contains); + } + }, selectedEntries); } } From a2aa16fff1aabfc347aa523f236c8e515e241fec Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Sun, 3 May 2020 13:39:38 +0200 Subject: [PATCH 5/6] Fix binding --- .../org/jabref/gui/actions/ActionHelper.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/jabref/gui/actions/ActionHelper.java b/src/main/java/org/jabref/gui/actions/ActionHelper.java index 5e8fe6f8fdd..cb430ad35cb 100644 --- a/src/main/java/org/jabref/gui/actions/ActionHelper.java +++ b/src/main/java/org/jabref/gui/actions/ActionHelper.java @@ -5,13 +5,15 @@ import javafx.beans.binding.Bindings; import javafx.beans.binding.BooleanExpression; -import javafx.beans.binding.ObjectBinding; import javafx.collections.ObservableList; import org.jabref.gui.StateManager; import org.jabref.model.entry.BibEntry; import org.jabref.model.entry.field.Field; +import org.fxmisc.easybind.EasyBind; +import org.fxmisc.easybind.monadic.MonadicBinding; + public class ActionHelper { public static BooleanExpression needsDatabase(StateManager stateManager) { return stateManager.activeDatabaseProperty().isPresent(); @@ -33,14 +35,11 @@ public static BooleanExpression isFieldSetForSelectedEntry(Field field, StateMan public static BooleanExpression isAnyFieldSetForSelectedEntry(List fields, StateManager stateManager) { ObservableList selectedEntries = stateManager.getSelectedEntries(); - - ObjectBinding entry = Bindings.valueAt(selectedEntries, 0); - return Bindings.createBooleanBinding(() -> { - if (entry.get() == null) { - return false; - } else { - return entry.get().getFields().stream().anyMatch(fields::contains); - } - }, selectedEntries); + MonadicBinding fieldsAreSet = EasyBind.monadic(Bindings.valueAt(selectedEntries, 0)) + .flatMap(entry -> Bindings.createBooleanBinding(() -> { + return entry.getFields().stream().anyMatch(fields::contains); + }, entry.getFieldsObservable())) + .orElse(false); + return BooleanExpression.booleanExpression(fieldsAreSet); } } From e032d9d860bbcce6a913540673f56c83b2e87621 Mon Sep 17 00:00:00 2001 From: Tobias Diez Date: Sun, 3 May 2020 13:44:30 +0200 Subject: [PATCH 6/6] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 676baf7503a..8bebacb1226 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ Note that this project **does not** adhere to [Semantic Versioning](http://semve - We fixed an issue where opening a library from the recent libraries menu was not possible. [#5939](https://github.com/JabRef/jabref/issues/5939) - We fixed an issue with inconsistent capitalization of file extensions when downloading files [#6115](https://github.com/JabRef/jabref/issues/6115) - We fixed the display of language and encoding in the preferences dialog. [#6130](https://github.com/JabRef/jabref/pull/6130) +- We fixed an error that sometimes occurred when using the context menu. [#6085](https://github.com/JabRef/jabref/issues/6085) - We fixed an issue where search full-text documents downloaded files with same name, overwriting existing files. [#6174](https://github.com/JabRef/jabref/pull/6174) ### Removed