This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git commit a7154addadc5ee5e7d3d1982514984f9cee30f28 Author: Kevin Morin <morin@codelutin.com> Date: Tue Sep 9 15:59:00 2014 +0200 fixes #3499 Block an action if it is alreay running --- .../nuiton/jaxx/application/swing/ApplicationUIContext.java | 6 ++++++ .../jaxx/application/swing/action/ApplicationUIAction.java | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIContext.java b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIContext.java index d8fc674..0669024 100644 --- a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIContext.java +++ b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/ApplicationUIContext.java @@ -26,6 +26,7 @@ import org.nuiton.jaxx.application.ApplicationContext; import org.nuiton.jaxx.application.swing.action.ApplicationActionEngine; import org.nuiton.jaxx.application.swing.action.ApplicationActionFactory; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; +import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.util.ApplicationErrorHelper; import java.awt.Color; @@ -79,4 +80,9 @@ public interface ApplicationUIContext extends ApplicationContext { String getI18nPrefix(); String getDateFormat(); + + /** Is the action already running? If yes, it will not run again (cf https://forge.nuiton.org/issues/3499) */ + boolean isActionInProgress(ApplicationUIAction action); + + void setActionInProgress(ApplicationUIAction action, boolean actionInProgress); } diff --git a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/action/ApplicationUIAction.java b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/action/ApplicationUIAction.java index a40a754..4b0efa4 100644 --- a/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/action/ApplicationUIAction.java +++ b/jaxx-application-swing/src/main/java/org/nuiton/jaxx/application/swing/action/ApplicationUIAction.java @@ -24,6 +24,7 @@ package org.nuiton.jaxx.application.swing.action; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.swing.ApplicationUIContext; import org.nuiton.util.TimeLog; import javax.swing.AbstractAction; @@ -100,12 +101,23 @@ public class ApplicationUIAction<A extends AbstractApplicationAction> extends Ab A action = getLogicAction(); + ApplicationUIContext actionContext = action.getContext(); + if (actionContext.isActionInProgress(this)) { + if (log.isInfoEnabled()) { + log.info("Task [" + getLogicAction().getClass().getSimpleName() + "] stopped: action already in progress"); + } + return; + } + + actionContext.setActionInProgress(this, true); + // reset status message action.sendMessage(""); try { doAction = action.prepareAction(); } catch (Exception e) { + actionContext.setActionInProgress(this, false); action.releaseAction(); throw ApplicationActionException.propagateError(action, e); } @@ -220,6 +232,7 @@ public class ApplicationUIAction<A extends AbstractApplicationAction> extends Ab protected void unlock() { TIME_LOG.log(t0, "Task [" + getLogicAction().getClass().getSimpleName() + "] End"); + getLogicAction().getContext().setActionInProgress(this, false); if (wait) { synchronized (lock) { lock.notifyAll(); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.