1 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 ; 22 23 import javax.swing.JPopupMenu ; 24 import javax.swing.ListSelectionModel ; 25 import javax.swing.event.ListSelectionEvent ; 26 import javax.swing.event.ListSelectionListener ; 27 import javax.swing.event.TableModelEvent ; 28 import javax.swing.event.TableModelListener ; 29 import javax.swing.table.TableColumnModel ; 30 31 public class ServersPanel extends ConfigurationEditorPanel 32 implements ConfigurationEditorRoot, 33 ListSelectionListener , 34 TableModelListener 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 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 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 ("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 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 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 [] FIELDS = new String [] { 149 "Name", "Host", "DsoPort", "JmxPort" 150 }; 151 private static final String [] HEADERS = new String [] { 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 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 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 |