package aima.gui.swing.framework; /** * Provides the base class for all controller implementations. * * @author Ruediger Lunde */ public abstract class AgentAppController { protected AgentAppFrame frame; /** * Gives the controller access to the frame. This is useful to display * status information. */ public void setFrame(AgentAppFrame frame) { this.frame = frame; } /** * The associated {@link AgentAppFrame} calls this method when the clear * button is pressed. */ public abstract void clear(); /** * The associated {@link AgentAppFrame} calls this method when the prepare * button is pressed or the selection state of the selectors changes. * @param changedSelector Name of the changed selector or null. */ public abstract void prepare(String changedSelector); /** * Checks whether the current environment is prepared for starting * simulation. */ public abstract boolean isPrepared(); /** * The associated {@link AgentAppFrame} calls this method when the run * button is activated. This code runs in a second thread, which can be * stopped by the GUI at any time. Implementations should avoid to * access swing components because they are not thread-safe. */ public abstract void run(MessageLogger logger); /** * The associated {@link AgentAppFrame} calls this method when the step * button is activated. This code runs in a second thread, which can be * stopped by the GUI at any time. Implementations should avoid to * access swing components because they are not thread-safe. */ public abstract void step(MessageLogger logger); /** * This method is automatically called after the run and step methods * have finished. Implementations are responsible for displaying status * information in the frame and also for cleaning up the prepared * environment if the simulation was canceled. * @param simulationThread The thread which was used to run the simulation. */ public abstract void update(SimulationThread simulationThread); }