package org.netbeans.gradle.project.output; import javax.swing.AbstractAction; import javax.swing.SwingUtilities; import org.jtrim.cancel.CancellationSource; import org.netbeans.gradle.project.tasks.AsyncGradleTask; import org.netbeans.gradle.project.tasks.GradleTaskDef; @SuppressWarnings("serial") public abstract class TaskTabAction extends AbstractAction { private final boolean enableWhileRunning; private volatile GradleTaskDef lastSourceTask; private volatile AsyncGradleTask lastTask; private volatile CancellationSource lastCancellation; public TaskTabAction() { this(false); } public TaskTabAction(boolean enableWhileRunning) { this.enableWhileRunning = enableWhileRunning; this.lastSourceTask = null; this.lastTask = null; this.lastCancellation = null; if (enableWhileRunning) { setEnabled(false); } } protected void taskStarted(CancellationSource cancellation) { lastCancellation = cancellation; setEnableAction(enableWhileRunning); } protected void taskCompleted() { setEnableAction(!enableWhileRunning); lastCancellation = null; // Do not refernece it needlessly } protected final void cancelCurrentlyRunning() { CancellationSource currentCancellation = lastCancellation; if (currentCancellation != null) { currentCancellation.getController().cancel(); } } protected final void setLastTask(GradleTaskDef lastSourceTask, AsyncGradleTask lastTask) { this.lastSourceTask = lastSourceTask; this.lastTask = lastTask; } protected final GradleTaskDef getLastSourceTask() { return lastSourceTask; } protected final AsyncGradleTask getLastTask() { return lastTask; } public final void setEnableAction(final boolean enabled) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { setEnabled(enabled); } }); } }