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