1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package zeus.agentviewer.msghandler;
25
26 import javax.swing.table.*;
27 import java.util.*;
28 import zeus.concepts.Performative;
29 import zeus.actors.event.*;
30 import zeus.actors.*;
31
32
33 public class MsgHandlerTableModel extends AbstractTableModel
34 implements MessageHandlerMonitor {
35
36 static final int SENDER = 0;
37 static final int TYPE = 1;
38 static final int OBJECT = 2;
39 static final int METHOD = 3;
40
41 protected int messageCount = 0;
42
43 private int BUFFER_CAPACITY = 50;
44 private int REMOVE_INDEX = 0;
45
46 private String[] header = { "Sender", "Type", "Object", "Method" };
47 private Vector data;
48 private AgentContext context;
49
50
51 public MsgHandlerTableModel(AgentContext context){
52 this.context = context;
53 data = new Vector();
54 context.MsgHandler().addMessageHandlerMonitor(this,MessageHandlerEvent.FIRE_MASK);
55 }
56
57
58 /***
59 *return the number of messages that you have processed
60 *@author Simon Thompson
61 *@since 1.3
62 */
63 public int getNumberMessages() {
64 return (messageCount);
65 }
66
67
68 public int getRowCount() { return data.size(); }
69
70 public int getColumnCount() { return header.length; }
71
72 public Object getValueAt(int row, int col) {
73 MessageHandlerEvent evt = (MessageHandlerEvent) data.elementAt(row);
74 switch(col) {
75 case SENDER:
76 return evt.getSender();
77
78 case TYPE:
79 return evt.getMessageType();
80
81 case OBJECT:
82 return evt.getDestination();
83
84 case METHOD:
85 return evt.getMethod();
86 }
87 return null;
88 }
89
90 Performative getMessage(int row){
91 return ((MessageHandlerEvent)data.elementAt(row)).getMessage();
92 }
93 public String getColumnName(int col) { return header[col]; }
94
95 public void messageRuleFailedEvent(MessageHandlerEvent event) {}
96 public void messageRuleAddedEvent(MessageHandlerEvent event) {}
97 public void messageRuleDeletedEvent(MessageHandlerEvent event) {}
98
99 public void messageRuleFiredEvent(MessageHandlerEvent event) {
100 if ( data.contains(event) )
101 return;
102
103 if (data.size() > BUFFER_CAPACITY )
104 data.removeElementAt(REMOVE_INDEX);
105 data.addElement(event);
106 messageCount++;
107 fireTableDataChanged();
108 }
109
110 public void removeZeusEventMonitors(){
111 context.MsgHandler().removeMessageHandlerMonitor(this,MessageHandlerEvent.FIRE_MASK);
112 }
113 }