From 8f5af44d8e7296303b061220e7b2cc4dddd64a07 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 29 May 2024 22:19:36 +0200 Subject: [PATCH 1/3] Add documentation for BackgroundTask (and improve code) Co-authored-by: Carl Christian Snethlage <50491877+calixtus@users.noreply.github.com> Co-authored-by: Loay Ghreeb <52158423+LoayGhreeb@users.noreply.github.com> --- .../org/jabref/gui/util/BackgroundTask.java | 23 ++++++++++++++++++- .../jabref/gui/util/DefaultTaskExecutor.java | 10 +++++--- .../logic/pdf/search/IndexingTaskManager.java | 6 ++--- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/jabref/gui/util/BackgroundTask.java b/src/main/java/org/jabref/gui/util/BackgroundTask.java index 0262e54cb61..b63a2a6ac02 100644 --- a/src/main/java/org/jabref/gui/util/BackgroundTask.java +++ b/src/main/java/org/jabref/gui/util/BackgroundTask.java @@ -17,6 +17,7 @@ import javafx.concurrent.Task; import javafx.scene.Node; +import org.jabref.gui.StateManager; import org.jabref.gui.icon.IconTheme; import org.jabref.logic.l10n.Localization; @@ -31,6 +32,25 @@ * and so makes testing harder. * We take the opportunity and implement a fluid interface. * + * A task created here is to be submitted to {@link org.jabref.gui.Globals#TASK_EXECUTOR}: Use {@link TaskExecutor#execute(BackgroundTask)} to submit. + * + * Example (for using the fluent interface) + * + * + * BackgroundTask + * .wrap(() -> ...) + * .showToUser(true) + * .onRunning(() -> ...) + * .onSuccess(() -> ...) + * .onFailure(exception -> { + * LOGGER.error("Error while generating citation style", exception); + * }) + * .executeWith(taskExecutor); + * + * + * Baacgkround: The task executor one takes care to show it in the UI. See {@link StateManager#addBackgroundTask(BackgroundTask, Task)} for details.* + * + * * TODO: Think of migrating to RxJava; * CompletableFuture do not seem to support everything. * If this is not possible, add an @implNote why. @@ -136,8 +156,9 @@ public boolean showToUser() { return showToUser.get(); } - public void showToUser(boolean show) { + public BackgroundTask showToUser(boolean show) { showToUser.set(show); + return this; } public boolean willBeRecoveredAutomatically() { diff --git a/src/main/java/org/jabref/gui/util/DefaultTaskExecutor.java b/src/main/java/org/jabref/gui/util/DefaultTaskExecutor.java index 6490ad85946..29a86a9d636 100644 --- a/src/main/java/org/jabref/gui/util/DefaultTaskExecutor.java +++ b/src/main/java/org/jabref/gui/util/DefaultTaskExecutor.java @@ -41,9 +41,6 @@ public DefaultTaskExecutor(StateManager stateManager) { this.stateManager = stateManager; } - /** - * - */ public static V runInJavaFXThread(Callable callable) { if (Platform.isFxApplicationThread()) { try { @@ -140,6 +137,13 @@ public DelayTaskThrottler createThrottler(int delay) { return throttler; } + /** + * Generates a wrapper JavaFX {@link Task} monitoring the progress based on the data given from the task. + * call is routed to the given task object. + * + * @param task the BackgroundTask to wrap + * @return a new Task object + */ private Task getJavaFXTask(BackgroundTask task) { Task javaTask = new Task<>() { { diff --git a/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java b/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java index 8ae4117e72d..333e5962947 100644 --- a/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java +++ b/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java @@ -56,10 +56,8 @@ protected Void call() throws Exception { } private void updateProgress() { - DefaultTaskExecutor.runInJavaFXThread(() -> { - updateMessage(Localization.lang("%0 of %1 linked files added to the index", numOfIndexedFiles, numOfIndexedFiles + taskQueue.size())); - updateProgress(numOfIndexedFiles, numOfIndexedFiles + taskQueue.size()); - }); + updateMessage(Localization.lang("%0 of %1 linked files added to the index", numOfIndexedFiles, numOfIndexedFiles + taskQueue.size())); + updateProgress(numOfIndexedFiles, numOfIndexedFiles + taskQueue.size()); } private void enqueueTask(Runnable indexingTask) { From 6119029dbc4b242fb07d9259895a382c88a7d4aa Mon Sep 17 00:00:00 2001 From: Loay Ghreeb Date: Thu, 30 May 2024 15:25:34 +0300 Subject: [PATCH 2/3] Use
 tag for code example

---
 .../org/jabref/gui/util/BackgroundTask.java   | 32 ++++++++-----------
 1 file changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/main/java/org/jabref/gui/util/BackgroundTask.java b/src/main/java/org/jabref/gui/util/BackgroundTask.java
index b63a2a6ac02..09614c75259 100644
--- a/src/main/java/org/jabref/gui/util/BackgroundTask.java
+++ b/src/main/java/org/jabref/gui/util/BackgroundTask.java
@@ -17,7 +17,6 @@
 import javafx.concurrent.Task;
 import javafx.scene.Node;
 
-import org.jabref.gui.StateManager;
 import org.jabref.gui.icon.IconTheme;
 import org.jabref.logic.l10n.Localization;
 
@@ -31,26 +30,21 @@
  * We cannot use {@link Task} directly since it runs certain update notifications on the JavaFX thread,
  * and so makes testing harder.
  * We take the opportunity and implement a fluid interface.
- *
+ * 

* A task created here is to be submitted to {@link org.jabref.gui.Globals#TASK_EXECUTOR}: Use {@link TaskExecutor#execute(BackgroundTask)} to submit. - * + *

* Example (for using the fluent interface) - * - * - * BackgroundTask - * .wrap(() -> ...) - * .showToUser(true) - * .onRunning(() -> ...) - * .onSuccess(() -> ...) - * .onFailure(exception -> { - * LOGGER.error("Error while generating citation style", exception); - * }) - * .executeWith(taskExecutor); - * - * - * Baacgkround: The task executor one takes care to show it in the UI. See {@link StateManager#addBackgroundTask(BackgroundTask, Task)} for details.* - * - * + *

{@code
+ * BackgroundTask
+ *     .wrap(() -> ...)
+ *     .showToUser(true)
+ *     .onRunning(() -> ...)
+ *     .onSuccess(() -> ...)
+ *     .onFailure(() -> ...)
+ *     .executeWith(taskExecutor);
+ * }
+ * Background: The task executor one takes care to show it in the UI. See {@link org.jabref.gui.StateManager#addBackgroundTask(BackgroundTask, Task)} for details. + *

* TODO: Think of migrating to RxJava; * CompletableFuture do not seem to support everything. * If this is not possible, add an @implNote why. From ccdc8f88ad04fc926e3ecceea5061b4de513f02e Mon Sep 17 00:00:00 2001 From: Siedlerchr Date: Mon, 3 Jun 2024 21:05:54 +0200 Subject: [PATCH 3/3] another useless wrap --- .../org/jabref/logic/pdf/search/IndexingTaskManager.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java b/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java index 333e5962947..2940daff56c 100644 --- a/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java +++ b/src/main/java/org/jabref/logic/pdf/search/IndexingTaskManager.java @@ -32,10 +32,9 @@ public IndexingTaskManager(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; showToUser(true); willBeRecoveredAutomatically(true); - DefaultTaskExecutor.runInJavaFXThread(() -> { - this.updateProgress(1, 1); - this.titleProperty().set(Localization.lang("Indexing pdf files")); - }); + // runs on fx thread, no need to wrap + this.updateProgress(1, 1); + this.titleProperty().set(Localization.lang("Indexing pdf files")); } @Override