View Javadoc

1   /*
2    *  XNap - A P2P framework and client.
3    *
4    *  See the file AUTHORS for copyright information.
5    *
6    *  This program is free software; you can redistribute it and/or modify
7    *  it under the terms of the GNU General Public License as published by
8    *  the Free Software Foundation.
9    *
10   *  This program is distributed in the hope that it will be useful,
11   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   *  GNU General Public License for more details.
14   *
15   *  You should have received a copy of the GNU General Public License
16   *  along with this program; if not, write to the Free Software
17   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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      //--- Constant(s) ---
37      
38      //--- Data field(s) ---
39  
40      private Hashtable nodeByNetwork = new Hashtable();
41      private List servers = new LinkedList();
42  
43      //--- Constructor(s) ---
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      //--- Method(s) ---
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 				// return network name
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 }