samer@0: /* samer@0: * AgentManager.java samer@0: * samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.core.util.shell; samer@0: import samer.core.*; samer@0: import java.awt.event.*; samer@0: import java.util.*; samer@0: samer@0: public class AgentManager implements Agent, ActionListener samer@0: { samer@0: private Vector agents=new Vector(); samer@0: //private boolean exitOnReturn=false; samer@0: samer@0: public AgentManager() { Shell.put("AgentManager",this); } samer@0: samer@0: public ActionListener getBroadcaster() { return this; } samer@0: samer@0: public void actionPerformed(ActionEvent e) { samer@0: dispatch(e.getActionCommand(),Shell.env()); samer@0: } samer@0: samer@0: public void getCommands(Agent.Registry r) { r.add("help").add("agents"); } samer@0: public void execute(String cmd, Environment env) throws Exception samer@0: { samer@0: if (cmd.equals("agents")) { samer@0: Shell.print("registered agents:"); samer@0: Enumeration i=agents.elements(); samer@0: while(i.hasMoreElements()) { samer@0: Shell.print(i.nextElement().toString()); samer@0: } samer@0: } else if (cmd.equals("help")) help(); samer@0: } samer@0: samer@0: //public void exitOnReturn() { Shell.trace("*** exit on return"); exitOnReturn=true; } samer@0: samer@0: public void registerAgent(Agent a) { samer@0: Shell.trace("registering agent: "+a); samer@0: agents.addElement(a); samer@0: } samer@0: samer@0: public void deregisterAgent(Agent a) { samer@0: Shell.trace("deregistering agent: "+a); samer@0: agents.removeElement(a); samer@0: } samer@0: samer@0: public void dispatch(String cmd, Environment env) samer@0: { samer@0: Enumeration i=agents.elements(); samer@0: while(i.hasMoreElements()) { samer@0: Agent agent=(Agent)i.nextElement(); samer@0: try { agent.execute(cmd,env); } samer@0: catch (Exception ex) { samer@0: Shell.print("*** agent error in "+agent); samer@0: Shell.print("*** exception: "+ex); samer@0: ex.printStackTrace(); samer@0: } samer@0: } samer@0: //if (exitOnReturn) System.exit(0); samer@0: } samer@0: samer@0: public void help() samer@0: { samer@0: Shell.print("____________________________________"); samer@0: Shell.print("Registered Agents and their commands"); samer@0: samer@0: Enumeration i=agents.elements(); samer@0: Agent.Registry printer = new Agent.Registry() { samer@0: public void setTarget(Agent a) {} samer@0: public Registry add( String name) { Shell.print("\t"+name); return this; } samer@0: public Registry add( String name, boolean initialValue) { samer@0: Shell.print("\t"+name+" (boolean)"); return this; samer@0: } samer@0: public void group() { Shell.print("............"); } samer@0: }; samer@0: samer@0: while(i.hasMoreElements()) { samer@0: Agent a=(Agent)(i.nextElement()); samer@0: Shell.print(""); samer@0: Shell.print("---- "+a.getClass().getName()); samer@0: a.getCommands(printer); samer@0: } samer@0: } samer@0: } samer@0: