From 5a6a0e2ac5b8c7c8f9248fac465325ff5a8000ee Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 20 Feb 2023 09:43:29 -0600 Subject: [PATCH] Add method to let some lower-level actions try to generically update counts, but not to go lower than original counts were. --- .../core/actions/async/AsyncJobCallback.java | 17 ++++++++++ .../actions/async/AsyncJobCallbackTest.java | 32 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallback.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallback.java index 4623914e..ac98b55b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallback.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallback.java @@ -95,6 +95,23 @@ public class AsyncJobCallback + /******************************************************************************* + ** Update the current and total fields, but ONLY if the new values are + ** both >= the previous values. + *******************************************************************************/ + public void updateStatusOnlyUpwards(int current, int total) + { + boolean currentIsOkay = (this.asyncJobStatus.getCurrent() == null || this.asyncJobStatus.getCurrent() <= current); + boolean totalIsOkay = (this.asyncJobStatus.getTotal() == null || this.asyncJobStatus.getTotal() <= total); + + if(currentIsOkay && totalIsOkay) + { + updateStatus(current, total); + } + } + + + /******************************************************************************* ** Increase the 'current' value in the '1 of 2' sense. *******************************************************************************/ diff --git a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallbackTest.java b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallbackTest.java index 8938c2e9..1f12442d 100644 --- a/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallbackTest.java +++ b/qqq-backend-core/src/test/java/com/kingsrook/qqq/backend/core/actions/async/AsyncJobCallbackTest.java @@ -84,4 +84,36 @@ class AsyncJobCallbackTest extends BaseTest assertEquals(3, asyncJobStatus.getCurrent()); } + + + /******************************************************************************* + ** + *******************************************************************************/ + @Test + void testUpdateStatusOnlyUpwards() + { + AsyncJobStatus asyncJobStatus = new AsyncJobStatus(); + AsyncJobCallback asyncJobCallback = new AsyncJobCallback(UUID.randomUUID(), asyncJobStatus); + + asyncJobCallback.updateStatusOnlyUpwards(10, 100); + assertEquals(10, asyncJobStatus.getCurrent()); + assertEquals(100, asyncJobStatus.getTotal()); + + asyncJobCallback.updateStatusOnlyUpwards(5, 100); + assertEquals(10, asyncJobStatus.getCurrent()); + assertEquals(100, asyncJobStatus.getTotal()); + + asyncJobCallback.updateStatusOnlyUpwards(11, 99); + assertEquals(10, asyncJobStatus.getCurrent()); + assertEquals(100, asyncJobStatus.getTotal()); + + asyncJobCallback.updateStatusOnlyUpwards(11, 100); + assertEquals(11, asyncJobStatus.getCurrent()); + assertEquals(100, asyncJobStatus.getTotal()); + + asyncJobCallback.updateStatusOnlyUpwards(11, 101); + assertEquals(11, asyncJobStatus.getCurrent()); + assertEquals(101, asyncJobStatus.getTotal()); + } + } \ No newline at end of file