samer@0
|
1 /*
|
samer@0
|
2 * AgentManager.java
|
samer@0
|
3 *
|
samer@0
|
4 * Copyright (c) 2000, Samer Abdallah, King's College London.
|
samer@0
|
5 * All rights reserved.
|
samer@0
|
6 *
|
samer@0
|
7 * This software is provided AS iS and WITHOUT ANY WARRANTY;
|
samer@0
|
8 * without even the implied warranty of MERCHANTABILITY or
|
samer@0
|
9 * FITNESS FOR A PARTICULAR PURPOSE.
|
samer@0
|
10 */
|
samer@0
|
11
|
samer@0
|
12 package samer.core.util.shell;
|
samer@0
|
13 import samer.core.*;
|
samer@0
|
14 import java.awt.event.*;
|
samer@0
|
15 import java.util.*;
|
samer@0
|
16
|
samer@0
|
17 public class AgentManager implements Agent, ActionListener
|
samer@0
|
18 {
|
samer@0
|
19 private Vector agents=new Vector();
|
samer@0
|
20 //private boolean exitOnReturn=false;
|
samer@0
|
21
|
samer@0
|
22 public AgentManager() { Shell.put("AgentManager",this); }
|
samer@0
|
23
|
samer@0
|
24 public ActionListener getBroadcaster() { return this; }
|
samer@0
|
25
|
samer@0
|
26 public void actionPerformed(ActionEvent e) {
|
samer@0
|
27 dispatch(e.getActionCommand(),Shell.env());
|
samer@0
|
28 }
|
samer@0
|
29
|
samer@0
|
30 public void getCommands(Agent.Registry r) { r.add("help").add("agents"); }
|
samer@0
|
31 public void execute(String cmd, Environment env) throws Exception
|
samer@0
|
32 {
|
samer@0
|
33 if (cmd.equals("agents")) {
|
samer@0
|
34 Shell.print("registered agents:");
|
samer@0
|
35 Enumeration i=agents.elements();
|
samer@0
|
36 while(i.hasMoreElements()) {
|
samer@0
|
37 Shell.print(i.nextElement().toString());
|
samer@0
|
38 }
|
samer@0
|
39 } else if (cmd.equals("help")) help();
|
samer@0
|
40 }
|
samer@0
|
41
|
samer@0
|
42 //public void exitOnReturn() { Shell.trace("*** exit on return"); exitOnReturn=true; }
|
samer@0
|
43
|
samer@0
|
44 public void registerAgent(Agent a) {
|
samer@0
|
45 Shell.trace("registering agent: "+a);
|
samer@0
|
46 agents.addElement(a);
|
samer@0
|
47 }
|
samer@0
|
48
|
samer@0
|
49 public void deregisterAgent(Agent a) {
|
samer@0
|
50 Shell.trace("deregistering agent: "+a);
|
samer@0
|
51 agents.removeElement(a);
|
samer@0
|
52 }
|
samer@0
|
53
|
samer@0
|
54 public void dispatch(String cmd, Environment env)
|
samer@0
|
55 {
|
samer@0
|
56 Enumeration i=agents.elements();
|
samer@0
|
57 while(i.hasMoreElements()) {
|
samer@0
|
58 Agent agent=(Agent)i.nextElement();
|
samer@0
|
59 try { agent.execute(cmd,env); }
|
samer@0
|
60 catch (Exception ex) {
|
samer@0
|
61 Shell.print("*** agent error in "+agent);
|
samer@0
|
62 Shell.print("*** exception: "+ex);
|
samer@0
|
63 ex.printStackTrace();
|
samer@0
|
64 }
|
samer@0
|
65 }
|
samer@0
|
66 //if (exitOnReturn) System.exit(0);
|
samer@0
|
67 }
|
samer@0
|
68
|
samer@0
|
69 public void help()
|
samer@0
|
70 {
|
samer@0
|
71 Shell.print("____________________________________");
|
samer@0
|
72 Shell.print("Registered Agents and their commands");
|
samer@0
|
73
|
samer@0
|
74 Enumeration i=agents.elements();
|
samer@0
|
75 Agent.Registry printer = new Agent.Registry() {
|
samer@0
|
76 public void setTarget(Agent a) {}
|
samer@0
|
77 public Registry add( String name) { Shell.print("\t"+name); return this; }
|
samer@0
|
78 public Registry add( String name, boolean initialValue) {
|
samer@0
|
79 Shell.print("\t"+name+" (boolean)"); return this;
|
samer@0
|
80 }
|
samer@0
|
81 public void group() { Shell.print("............"); }
|
samer@0
|
82 };
|
samer@0
|
83
|
samer@0
|
84 while(i.hasMoreElements()) {
|
samer@0
|
85 Agent a=(Agent)(i.nextElement());
|
samer@0
|
86 Shell.print("");
|
samer@0
|
87 Shell.print("---- "+a.getClass().getName());
|
samer@0
|
88 a.getCommands(printer);
|
samer@0
|
89 }
|
samer@0
|
90 }
|
samer@0
|
91 }
|
samer@0
|
92
|