1 4 package com.tc; 5 6 import org.dijon.Button; 7 import org.dijon.ContainerResource; 8 9 import com.tc.admin.common.XContainer; 10 import com.tc.admin.common.XTable; 11 import com.terracottatech.config.AdditionalBootJarClasses; 12 import com.terracottatech.config.DsoApplication; 13 14 import java.awt.event.ActionEvent ; 15 import java.awt.event.ActionListener ; 16 17 import javax.swing.JOptionPane ; 18 import javax.swing.event.ListSelectionEvent ; 19 import javax.swing.event.ListSelectionListener ; 20 import javax.swing.event.TableModelEvent ; 21 import javax.swing.event.TableModelListener ; 22 import javax.swing.table.DefaultTableModel ; 23 24 public class BootClassesPanel extends XContainer 25 implements TableModelListener  26 { 27 private DsoApplication m_dsoApp; 28 private AdditionalBootJarClasses m_bootClasses; 29 private XTable m_bootClassesTable; 30 private BootClassTableModel m_bootClassesTableModel; 31 private Button m_addButton; 32 private ActionListener m_addListener; 33 private Button m_removeButton; 34 private ActionListener m_removeListener; 35 private ListSelectionListener m_bootClassesListener; 36 37 public BootClassesPanel() { 38 super(); 39 } 40 41 public void load(ContainerResource containerRes) { 42 super.load(containerRes); 43 44 m_bootClassesTable = (XTable)findComponent("BootClassesTable"); 45 m_bootClassesTable.setModel(m_bootClassesTableModel = new BootClassTableModel()); 46 m_bootClassesListener = new ListSelectionListener () { 47 public void valueChanged(ListSelectionEvent lse) { 48 if(!lse.getValueIsAdjusting()) { 49 int[] sel = m_bootClassesTable.getSelectedRows(); 50 m_removeButton.setEnabled(sel != null && sel.length > 0); 51 } 52 } 53 }; 54 55 m_addButton = (Button)findComponent("AddBootClassButton"); 56 m_addListener = new ActionListener () { 57 public void actionPerformed(ActionEvent ae) { 58 String bootType = JOptionPane.showInputDialog("Boot class"); 59 60 if(bootType != null) { 61 bootType = bootType.trim(); 62 63 if(bootType != null && bootType.length() > 0) { 64 internalAddBootClass(bootType); 65 } 66 } 67 } 68 }; 69 70 m_removeButton = (Button)findComponent("RemoveBootClassButton"); 71 m_removeListener = new ActionListener () { 72 public void actionPerformed(ActionEvent ae) { 73 AdditionalBootJarClasses abjc = ensureAdditionalBootClasses(); 74 int[] selection = m_bootClassesTable.getSelectedRows(); 75 76 for(int i = selection.length-1; i >= 0; i--) { 77 abjc.removeInclude(selection[i]); 78 } 79 m_bootClassesTableModel.removeRows(selection); 80 } 81 }; 82 } 83 84 public boolean hasAnySet() { 85 return m_bootClasses != null && 86 m_bootClasses.sizeOfIncludeArray() > 0; 87 } 88 89 private AdditionalBootJarClasses ensureAdditionalBootClasses() { 90 if(m_bootClasses == null) { 91 ensureXmlObject(); 92 } 93 return m_bootClasses; 94 } 95 96 public void ensureXmlObject() { 98 if(m_bootClasses == null) { 99 removeListeners(); 100 m_bootClasses = m_dsoApp.addNewAdditionalBootJarClasses(); 101 updateChildren(); 102 addListeners(); 103 } 104 } 105 106 private void syncModel() { 108 if(!hasAnySet() && m_dsoApp.getAdditionalBootJarClasses() != null) { 109 m_dsoApp.unsetAdditionalBootJarClasses(); 110 m_bootClasses = null; 111 } 112 113 SessionIntegratorFrame frame = 114 (SessionIntegratorFrame)getAncestorOfClass(SessionIntegratorFrame.class); 115 frame.modelChanged(); 116 } 117 118 private void addListeners() { 119 m_bootClassesTableModel.addTableModelListener(this); 120 m_bootClassesTable.getSelectionModel().addListSelectionListener(m_bootClassesListener); 121 m_addButton.addActionListener(m_addListener); 122 m_removeButton.addActionListener(m_removeListener); 123 } 124 125 private void removeListeners() { 126 m_bootClassesTableModel.removeTableModelListener(this); 127 m_bootClassesTable.getSelectionModel().removeListSelectionListener(m_bootClassesListener); 128 m_addButton.removeActionListener(m_addListener); 129 m_removeButton.removeActionListener(m_removeListener); 130 } 131 132 private void updateChildren() { 134 m_bootClassesTableModel.clear(); 135 136 if(m_bootClasses != null) { 137 String [] bootClasses = m_bootClasses.getIncludeArray(); 138 139 for(int i = 0; i < bootClasses.length; i++) { 140 m_bootClassesTableModel.addBootClass(bootClasses[i]); 141 } 142 } 143 } 144 145 public void setup(DsoApplication dsoApp) { 146 setEnabled(true); 147 removeListeners(); 148 149 m_dsoApp = dsoApp; 150 m_bootClasses = m_dsoApp != null ? 151 m_dsoApp.getAdditionalBootJarClasses() : null; 152 153 updateChildren(); 154 addListeners(); 155 } 156 157 public void tearDown() { 158 removeListeners(); 159 160 m_dsoApp = null; 161 m_bootClasses = null; 162 163 m_bootClassesTableModel.clear(); 164 165 setEnabled(false); 166 } 167 168 class BootClassTableModel extends DefaultTableModel { 169 BootClassTableModel() { 170 super(); 171 setColumnIdentifiers(new String []{"Boot Classes"}); 172 } 173 174 void clear() { 175 setRowCount(0); 176 } 177 178 void setBootClasses(AdditionalBootJarClasses bootClasses) { 179 clear(); 180 181 if(bootClasses != null) { 182 int count = bootClasses.sizeOfIncludeArray(); 183 184 for(int i = 0; i < count; i++) { 185 addBootClass(bootClasses.getIncludeArray(i)); 186 } 187 } 188 } 189 190 void addBootClass(String typeName) { 191 addRow(new Object [] {typeName}); 192 } 193 194 int indexOf(String typeName) { 195 int count = getRowCount(); 196 197 for(int i = 0; i < count; i++) { 198 if(((String )getValueAt(i, 0)).equals(typeName)) { 199 return i; 200 } 201 } 202 203 return -1; 204 } 205 206 public void setValueAt(Object value, int row, int col) { 207 m_bootClasses.setIncludeArray(row, (String )value); 208 super.setValueAt(value, row, col); 209 } 210 211 void removeRows(int[] rows) { 212 removeTableModelListener(BootClassesPanel.this); 213 for(int i = rows.length-1; i >= 0; i--) { 214 removeRow(rows[i]); 215 } 216 addTableModelListener(BootClassesPanel.this); 217 syncModel(); 218 } 219 } 220 221 public void tableChanged(TableModelEvent tme) { 222 syncModel(); 223 } 224 225 private void internalAddBootClass(String typeName) { 226 ensureAdditionalBootClasses().addInclude(typeName); 227 m_bootClassesTableModel.addBootClass(typeName); 228 229 int row = m_bootClassesTableModel.getRowCount()-1; 230 m_bootClassesTable.setRowSelectionInterval(row, row); 231 } 232 233 private void internalRemoveBootClass(String typeName) { 234 int row = m_bootClassesTableModel.indexOf(typeName); 235 236 if(row >= 0) { 237 ensureAdditionalBootClasses().removeInclude(row); 238 m_bootClassesTableModel.removeRow(row); 239 240 if(row > 0) { 241 row = Math.min(m_bootClassesTableModel.getRowCount()-1, row); 242 m_bootClassesTable.setRowSelectionInterval(row, row); 243 } 244 } 245 } 246 247 public boolean isBootClass(String typeName) { 248 AdditionalBootJarClasses bootClasses = ensureAdditionalBootClasses(); 249 int count = bootClasses.sizeOfIncludeArray(); 250 251 for(int i = 0; i < count; i++) { 252 if(typeName.equals(bootClasses.getIncludeArray(i))) { 253 return true; 254 } 255 } 256 257 return false; 258 } 259 260 public void ensureBootClass(String typeName) { 261 if(!isBootClass(typeName)) { 262 internalAddBootClass(typeName); 263 } 264 } 265 266 public void ensureNotBootClass(String fieldName) { 267 if(isBootClass(fieldName)) { 268 internalRemoveBootClass(fieldName); 269 } 270 } 271 } 272
| Popular Tags
|