/** * */ package org.hyperdata.scute.status; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import org.hyperdata.scute.main.Scute; /** * The Class StatusAction. * * @author danny */ public class StatusAction extends AbstractAction implements StatusChangeListener { private StatusEvent status = new StatusEvent(StatusMonitor.AMBER); // uncertain // status private Thread thread; public StatusAction() { super(); } public StatusAction(String label) { super(label); } /* * (non-Javadoc) * * @see * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent) */ @Override public void actionPerformed(ActionEvent e) { runTask(); } /** * Run task. */ private void runTask() { System.out.println("runTask "+getStatusTask()); thread = new Thread(getStatusTask()); thread.start(); } public void stop() { System.out.println("in StatusAction stop()1"); getStatusTask().stop(); System.out.println("in StatusAction stop()2"); if (thread != null) { System.out.println("STOP!"); thread.interrupt(); thread = null; // drastic, but what else to do? getStatusTask().stateChanged(new StatusEvent(StatusMonitor.GREEN)); // reset } } /** * Sets the status task. * * @param task * the new status task */ public void setStatusTask(StatusTask task) { StatusTask currentTask = getStatusTask(); if(currentTask != null){ task.addStatusChangeListeners(currentTask.getStatusChangeListeners()); } putValue("StatusTask", task); } /** * Gets the status task. * * @return the status task */ public StatusTask getStatusTask() { Object object = getValue("StatusTask"); // System.out.println("XXXXXXXXXXXXXXX getValue(StatusTask)="+object); if (object != null) { // System.out.println("XXXXXXXXXXXXXXX getValue(StatusTask)="+((StatusTask) object).getClass()); return (StatusTask) object; } return null; } /* * (non-Javadoc) * * @see * org.hyperdata.scute.swing.status.StatusChangeListener#statusChanged(org * .hyperdata.scute.swing.status.StatusEvent) */ @Override public void statusChanged(StatusEvent status) { this.status = status; } /** * Adds the status change listener. * * @param listener * the listener */ public void addStatusChangeListener(StatusChangeListener listener) { // pass // it // on getStatusTask().addStatusListener(listener); } }