KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > editors > ServersPanel


1 /*
2  * All content copyright (c) 2003-2006 Terracotta, Inc., except as may otherwise be noted in a separate copyright notice. All rights reserved.
3  */

4 package org.terracotta.dso.editors;
5
6 import org.eclipse.core.resources.IProject;
7
8 import org.dijon.Button;
9 import org.dijon.ContainerResource;
10 import org.dijon.DictionaryResource;
11
12 import org.terracotta.dso.TcPlugin;
13 import com.tc.admin.common.XAbstractAction;
14 import com.tc.admin.common.XObjectTable;
15 import com.tc.admin.common.XObjectTableModel;
16 import com.tc.admin.common.XTable.PortNumberRenderer;
17 import com.terracottatech.config.Server;
18 import com.terracottatech.config.Servers;
19 import com.terracottatech.config.TcConfigDocument.TcConfig;
20
21 import java.awt.event.ActionEvent JavaDoc;
22
23 import javax.swing.JPopupMenu JavaDoc;
24 import javax.swing.ListSelectionModel JavaDoc;
25 import javax.swing.event.ListSelectionEvent JavaDoc;
26 import javax.swing.event.ListSelectionListener JavaDoc;
27 import javax.swing.event.TableModelEvent JavaDoc;
28 import javax.swing.event.TableModelListener JavaDoc;
29 import javax.swing.table.TableColumnModel JavaDoc;
30
31 public class ServersPanel extends ConfigurationEditorPanel
32   implements ConfigurationEditorRoot,
33              ListSelectionListener JavaDoc,
34              TableModelListener JavaDoc
35 {
36   private static ContainerResource m_res;
37   private IProject m_project;
38   private TcConfig m_config;
39   private Servers m_servers;
40   private ServerTableModel m_serverTableModel;
41   private XObjectTable m_serverTable;
42   private JPopupMenu JavaDoc m_popupMenu;
43   private AddServerAction m_addServerAction;
44   private RemoveServerAction m_removeServerAction;
45   private Button m_addServerButton;
46   private Button m_removeServerButton;
47   private ServerPanel m_serverPanel;
48
49   static {
50     TcPlugin plugin = TcPlugin.getDefault();
51     DictionaryResource topRes = plugin.getResources();
52
53     m_res = (ContainerResource)topRes.find("ServersPanel");
54   }
55   
56   public ServersPanel() {
57     super();
58     if(m_res != null) {
59       load(m_res);
60     }
61   }
62
63   public void load(ContainerResource containerRes) {
64     super.load(containerRes);
65
66     m_serverTable = (XObjectTable)findComponent("ServersTable");
67     m_serverTable.setModel(m_serverTableModel = new ServerTableModel());
68     m_serverTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
69     
70     TableColumnModel JavaDoc colModel = m_serverTable.getColumnModel();
71     PortNumberRenderer portRenderer = new XObjectTable.PortNumberRenderer();
72     colModel.getColumn(2).setCellRenderer(portRenderer);
73     colModel.getColumn(3).setCellRenderer(portRenderer);
74   
75     m_serverPanel = (ServerPanel)findComponent("ServerPanel");
76     
77     initMenu();
78     
79     m_addServerButton = (Button)findComponent("AddServerButton");
80     m_addServerButton.setAction(m_addServerAction);
81
82     m_removeServerButton = (Button)findComponent("RemoveServerButton");
83     m_removeServerButton.setAction(m_removeServerAction);
84   }
85
86   private void initMenu() {
87     m_popupMenu = new JPopupMenu JavaDoc("ServersPanel Actions");
88
89     m_popupMenu.add(m_addServerAction = new AddServerAction());
90     m_popupMenu.add(m_removeServerAction = new RemoveServerAction());
91     
92     m_serverTable.setPopupMenu(m_popupMenu);
93   }
94
95   class AddServerAction extends XAbstractAction {
96     public AddServerAction() {
97       super("Add");
98     }
99     
100     public void actionPerformed(ActionEvent JavaDoc ae) {
101       if(m_servers == null) {
102         m_servers = m_config.addNewServers();
103       }
104       
105       int row = m_servers.sizeOfServerArray();
106       Server server = m_servers.addNewServer();
107       
108       server.setName("dev");
109       server.setHost("localhost");
110       server.setDsoPort(9510);
111       server.setJmxPort(9520);
112       
113       m_serverTableModel.add(server);
114       m_serverTableModel.fireTableRowsInserted(row, row);
115       m_serverTable.setRowSelectionInterval(row, row);
116     }
117   }
118   
119   class RemoveServerAction extends XAbstractAction {
120     public RemoveServerAction() {
121       super("Remove");
122       setEnabled(isEnabled());
123     }
124
125     public void actionPerformed(ActionEvent JavaDoc ae) {
126       int row = m_serverTable.getSelectedRow();
127       
128       if(row != -1) {
129         Server server = m_servers.getServerArray(row);
130         
131         m_servers.removeServer(row);
132         m_serverTableModel.remove(server);
133         m_serverTableModel.fireTableRowsDeleted(row, row);
134
135         int count = m_serverTableModel.getRowCount();
136         if(count > 0) {
137           row = Math.min(count-1, row);
138           m_serverTable.setRowSelectionInterval(row, row);
139         }
140       }
141     }
142     
143     public boolean isEnabled() {
144       return !m_serverTable.getSelectionModel().isSelectionEmpty();
145     }
146   }
147   
148   private static final String JavaDoc[] FIELDS = new String JavaDoc[] {
149     "Name", "Host", "DsoPort", "JmxPort"
150   };
151   private static final String JavaDoc[] HEADERS = new String JavaDoc[] {
152     "Name", "Host", "DSO port", "JMX port"
153   };
154   
155   class ServerTableModel extends XObjectTableModel {
156     public ServerTableModel() {
157       super(Server.class, FIELDS, HEADERS);
158     }
159     
160     public void setServers(Servers servers) {
161       ServerTableModel.this.clear();
162       set(servers.getServerArray());
163     }
164   }
165
166   public void tableChanged(TableModelEvent JavaDoc e) {
167     if(m_serverTableModel.getRowCount() == 0) {
168       m_config.unsetServers();
169       m_servers = null;
170       m_serverPanel.setVisible(false);
171     }
172     else {
173       m_serverPanel.setVisible(true);
174     }
175     
176     setDirty();
177   }
178   
179   public void valueChanged(ListSelectionEvent JavaDoc e) {
180     if(!e.getValueIsAdjusting()) {
181       int row = m_serverTable.getSelectedRow();
182       boolean haveSel = row != -1;
183         
184       if(haveSel) {
185         m_serverPanel.tearDown();
186         m_serverPanel.setup((Server)m_serverTableModel.getObjectAt(row));
187       }
188       m_removeServerAction.setEnabled(haveSel);
189     }
190   }
191
192   private void addListeners() {
193     m_serverTableModel.addTableModelListener(this);
194     m_serverTable.getSelectionModel().addListSelectionListener(this);
195     
196     if(m_serverTableModel.getRowCount() > 0) {
197       m_serverTable.setRowSelectionInterval(0, 0);
198     }
199   }
200   
201   private void removeListeners() {
202     m_serverTableModel.removeTableModelListener(this);
203     m_serverTable.getSelectionModel().removeListSelectionListener(this);
204   }
205   
206   private void updateChildren() {
207     m_serverTableModel.clear();
208     if(m_servers != null) {
209       m_serverTableModel.setServers(m_servers);
210     }
211   }
212   
213   public void setup(IProject project) {
214     TcPlugin plugin = TcPlugin.getDefault();
215     
216     setEnabled(true);
217     removeListeners();
218
219     m_project = project;
220     m_config = plugin.getConfiguration(m_project);
221     m_servers = m_config != null ? m_config.getServers() : null;
222
223     updateChildren();
224     addListeners();
225   }
226   
227   public IProject getProject() {
228     return m_project;
229   }
230   
231   public void tearDown() {
232     removeListeners();
233     m_serverTableModel.clear();
234     setEnabled(false);
235   }
236 }
237
Popular Tags