1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.plugin.pircbot;
21
22 import java.util.Hashtable;
23 import java.util.Iterator;
24 import java.util.LinkedList;
25 import java.util.List;
26
27 import org.xnap.XNap;
28 import org.xnap.gui.table.Column;
29 import org.xnap.gui.table.DefaultColumnTreeTableModel;
30 import org.xnap.gui.table.StringCellRenderer;
31 import org.xnap.gui.table.TreeTableModel;
32 import org.xnap.gui.table.TreeTableNode;
33
34 public class PircBotServerTableModel extends DefaultColumnTreeTableModel {
35
36
37
38
39
40 private Hashtable nodeByNetwork = new Hashtable();
41 private List servers = new LinkedList();
42
43
44
45 public PircBotServerTableModel()
46 {
47 Column columns[] = new Column[] {
48 new Column("name", XNap.tr("Name"), TreeTableModel.class),
49 new Column("status", XNap.tr("Status"), String.class,
50 new StringCellRenderer()),
51 };
52 addColumns(columns);
53 }
54
55
56
57 public void add(PircBotServer server)
58 {
59 move(server);
60 servers.add(server);
61
62 if (server.getAutoConnect()) {
63 server.connect();
64 }
65 }
66
67 /***
68 *
69 */
70 public PircBotNetworkNode add(String network)
71 {
72 PircBotNetworkNode node = new PircBotNetworkNode(this, network);
73 nodeByNetwork.put(network, node);
74 add(node);
75 return node;
76 }
77
78 /***
79 * Invoked by {@link PircBotNetworkNode} when the network of the server
80 * has changed.
81 */
82 public void move(PircBotServer server)
83 {
84 PircBotNetworkNode node
85 = (PircBotNetworkNode)nodeByNetwork.get(server.getNetwork());
86 if (node == null) {
87 node = add(server.getNetwork());
88 }
89 node.add(server);
90 }
91
92 /***
93 * Removes <code>server</code> from the table model.
94 */
95 public void remove(PircBotServer server)
96 {
97 PircBotNetworkNode node
98 = (PircBotNetworkNode)nodeByNetwork.get(server.getNetwork());
99 node.remove(server);
100 servers.remove(server);
101 }
102
103 public Object getValueAt(Object node, int column)
104 {
105 if (node instanceof PircBotNetworkNode) {
106 switch (column) {
107 case 0:
108
109 return ((PircBotNetworkNode)node).getData();
110 }
111 }
112 else if (node instanceof TreeTableNode) {
113 PircBotServer s = (PircBotServer)((TreeTableNode)node).getData();
114 switch (column) {
115 case 0:
116 return s.getName();
117 case 1:
118 return s.getStatus();
119 }
120 }
121
122 return null;
123 }
124
125 public String[] getNetworks()
126 {
127 return (String[])nodeByNetwork.keySet().toArray(new String[0]);
128 }
129
130 public Iterator servers()
131 {
132 return servers.iterator();
133 }
134
135 }