package aima.gui.swing.framework; import javax.swing.JComponent; import aima.core.agent.Environment; import aima.core.agent.EnvironmentView; /** * Base class for all graphical environment view implementations. * An environment view visualizes agents in their environment. * Typically, 2D graphics will be used for visualization. Environment * changes are communicated to the viewer by means of an observer pattern. * * @author Ruediger Lunde */ public abstract class AgentAppEnvironmentView extends JComponent implements EnvironmentView { private static final long serialVersionUID = 1L; /** The environment providing the data to be visualized. */ protected Environment env; /** * If the view provides interactive means to modify the environment, * this controller should be responsible to initiate the changes. */ private AgentAppController controller; /** Message display is delegated to a separate logger. */ private MessageLogger logger; /** Sets the data source for the viewer. */ public void setEnvironment(Environment env) { if (this.env != null) this.env.removeEnvironmentView(this); this.env = env; env.addEnvironmentView(this); repaint(); } /** Is called by the agent application frame. */ protected void setController(AgentAppController controller) { this.controller = controller; } /** * Provides a controller which is responsible for all * environment modifications initiated by user interactions. */ protected AgentAppController getController() { return controller; } /** Selects a logger for message display. */ public void setMessageLogger(MessageLogger logger) { this.logger = logger; } /** * Provides a logger which is responsible for message display. */ protected MessageLogger getLogger() { return logger; } /** Forwards a given message to the selected message logger. */ public void notify(String msg) { if (logger != null) logger.log(msg); } }