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.pattern.PatternHelper; 11 import com.terracottatech.config.DsoApplication; 12 import com.terracottatech.config.Include; 13 import com.terracottatech.config.InstrumentedClasses; 14 15 import java.awt.event.ActionEvent ; 16 import java.awt.event.ActionListener ; 17 18 import javax.swing.JOptionPane ; 19 import javax.swing.event.ListSelectionEvent ; 20 import javax.swing.event.ListSelectionListener ; 21 import javax.swing.event.TableModelEvent ; 22 import javax.swing.event.TableModelListener ; 23 24 public class InstrumentedClassesPanel extends XContainer 25 implements TableModelListener 26 { 27 private DsoApplication m_dsoApp; 28 private InstrumentedClasses m_instrumentedClasses; 29 private RuleTable m_ruleTable; 30 private RuleModel m_ruleModel; 31 private Button m_addRuleButton; 32 private ActionListener m_addRuleListener; 33 private Button m_removeRuleButton; 34 private ActionListener m_removeRuleListener; 35 private Button m_moveUpButton; 36 private ActionListener m_moveUpListener; 37 private Button m_moveDownButton; 38 private ActionListener m_moveDownListener; 39 private ListSelectionListener m_rulesListener; 40 private boolean m_syncingModel; 41 42 public InstrumentedClassesPanel() { 43 super(); 44 } 45 46 public void load(ContainerResource containerRes) { 47 super.load(containerRes); 48 49 m_ruleTable = (RuleTable)findComponent("RuleTable"); 50 m_ruleTable.setModel(m_ruleModel = new RuleModel()); 51 m_rulesListener = new ListSelectionListener () { 52 public void valueChanged(ListSelectionEvent lse) { 53 if(!lse.getValueIsAdjusting()) { 54 int sel = m_ruleTable.getSelectedRow(); 55 int rowCount = m_ruleModel.size(); 56 57 m_removeRuleButton.setEnabled(sel != -1); 58 m_moveUpButton.setEnabled(rowCount > 1 && sel > 0); 59 m_moveDownButton.setEnabled(rowCount > 1 && sel < rowCount-1); 60 } 61 } 62 }; 63 64 m_addRuleButton = (Button)findComponent("AddRuleButton"); 65 m_addRuleListener = new ActionListener () { 66 public void actionPerformed(ActionEvent ae) { 67 String include = JOptionPane.showInputDialog("Enter rule expression", ""); 68 69 if(include != null) { 70 include = include.trim(); 71 72 if(include != null && include.length() > 0) { 73 internalAddInclude(include); 74 } 75 } 76 } 77 }; 78 79 m_removeRuleButton = (Button)findComponent("RemoveRuleButton"); 80 m_removeRuleListener = new ActionListener () { 81 public void actionPerformed(ActionEvent ae) { 82 int row = m_ruleTable.getSelectedRow(); 83 84 m_ruleModel.removeRuleAt(row); 85 m_ruleModel.fireTableDataChanged(); 86 } 87 }; 88 89 m_moveUpButton = (Button)findComponent("MoveUpButton"); 90 m_moveUpListener = new ActionListener () { 91 public void actionPerformed(ActionEvent ae) { 92 m_ruleTable.moveUp(); 93 } 94 }; 95 96 m_moveDownButton = (Button)findComponent("MoveDownButton"); 97 m_moveDownListener = new ActionListener () { 98 public void actionPerformed(ActionEvent ae) { 99 m_ruleTable.moveDown(); 100 } 101 }; 102 } 103 104 public boolean hasAnySet() { 105 return m_instrumentedClasses != null && 106 (m_instrumentedClasses.sizeOfExcludeArray() > 0 || 107 m_instrumentedClasses.sizeOfIncludeArray() > 0); 108 } 109 110 private InstrumentedClasses ensureInstrumentedClasses() { 111 if(m_instrumentedClasses == null) { 112 ensureXmlObject(); 113 } 114 return m_instrumentedClasses; 115 } 116 117 public void ensureXmlObject() { 118 if(m_instrumentedClasses == null) { 119 removeListeners(); 120 m_instrumentedClasses = m_dsoApp.addNewInstrumentedClasses(); 121 updateChildren(); 122 addListeners(); 123 } 124 } 125 126 private void syncModel() { 127 m_syncingModel = true; 128 SessionIntegratorFrame frame = 129 (SessionIntegratorFrame)getAncestorOfClass(SessionIntegratorFrame.class); 130 frame.modelChanged(); 131 m_syncingModel = false; 132 } 133 134 private void addListeners() { 135 m_ruleModel.addTableModelListener(this); 136 m_ruleTable.getSelectionModel().addListSelectionListener(m_rulesListener); 137 m_addRuleButton.addActionListener(m_addRuleListener); 138 m_removeRuleButton.addActionListener(m_removeRuleListener); 139 m_moveUpButton.addActionListener(m_moveUpListener); 140 m_moveDownButton.addActionListener(m_moveDownListener); 141 } 142 143 private void removeListeners() { 144 m_ruleModel.removeTableModelListener(this); 145 m_ruleTable.getSelectionModel().removeListSelectionListener(m_rulesListener); 146 m_addRuleButton.removeActionListener(m_addRuleListener); 147 m_removeRuleButton.removeActionListener(m_removeRuleListener); 148 m_moveUpButton.removeActionListener(m_moveUpListener); 149 m_moveDownButton.removeActionListener(m_moveDownListener); 150 } 151 152 private void updateChildren() { 153 m_ruleModel.setInstrumentedClasses(m_instrumentedClasses); 154 } 155 156 public void setup(DsoApplication dsoApp) { 157 if(!m_syncingModel) { 158 setEnabled(true); 159 m_moveUpButton.setEnabled(false); 160 m_moveDownButton.setEnabled(false); 161 removeListeners(); 162 163 m_dsoApp = dsoApp; 164 m_instrumentedClasses = m_dsoApp != null ? 165 m_dsoApp.getInstrumentedClasses() : 166 null; 167 168 updateChildren(); 169 addListeners(); 170 } 171 } 172 173 public void tearDown() { 174 removeListeners(); 175 176 m_dsoApp = null; 177 m_instrumentedClasses = null; 178 179 m_ruleModel.clear(); 180 181 setEnabled(false); 182 } 183 184 private boolean isAdaptable(String classExpr) { 185 InstrumentedClasses classes = ensureInstrumentedClasses(); 186 int size = classes.sizeOfIncludeArray(); 187 Include include; 188 String expr; 189 190 for(int i = 0; i < size; i++) { 191 include = classes.getIncludeArray(i); 192 expr = include.getClassExpression(); 193 194 if(PatternHelper.getHelper().matchesClass(expr, classExpr)) { 195 return true; 196 } 197 } 198 199 return false; 200 } 201 202 private void internalAddInclude(String classExpr) { 203 int row = m_ruleModel.getRowCount(); 204 205 m_ruleModel.addInclude(classExpr); 206 m_ruleModel.fireTableRowsInserted(row, row); 207 } 208 209 private void internalRemoveInclude(String classExpr) { 210 int count = m_ruleModel.getRowCount(); 211 Rule rule; 212 String expr; 213 214 for(int i = 0; i < count; i++) { 215 rule = m_ruleModel.getRuleAt(i); 216 217 if(rule.isIncludeRule()) { 218 expr = ((Include)rule).getClassExpression(); 219 220 if(PatternHelper.getHelper().matchesClass(expr, classExpr)) { 221 m_ruleModel.removeRuleAt(i); 222 m_ruleModel.fireTableRowsDeleted(i, i); 223 break; 224 } 225 } 226 } 227 } 228 229 private boolean isExcluded(String classExpr) { 230 InstrumentedClasses classes = ensureInstrumentedClasses(); 231 int size = classes.sizeOfExcludeArray(); 232 String expr; 233 234 for(int i = 0; i < size; i++) { 235 expr = classes.getExcludeArray(i); 236 237 if(PatternHelper.getHelper().matchesClass(expr, classExpr)) { 238 return true; 239 } 240 } 241 242 return false; 243 } 244 245 private void internalAddExclude(String classExpr) { 246 if(classExpr != null && classExpr.length() > 0) { 247 m_ruleModel.addExclude(classExpr); 248 } 249 } 250 251 private void internalRemoveExclude(String classExpr) { 252 int count = m_ruleModel.size(); 253 Rule rule; 254 255 for(int i = 0; i < count; i++) { 256 rule = m_ruleModel.getRuleAt(i); 257 258 if(rule.isExcludeRule()) { 259 if(PatternHelper.getHelper().matchesClass(rule.getExpression(), classExpr)) { 260 m_ruleModel.removeRuleAt(i); 261 m_ruleModel.fireTableRowsDeleted(i, i); 262 break; 263 } 264 } 265 } 266 } 267 268 public void ensureAdaptable(String classExpr) { 269 internalAddInclude(classExpr); 270 } 271 272 public void ensureNotAdaptable(String classExpr) { 273 if(isAdaptable(classExpr)) { 274 internalRemoveInclude(classExpr); 275 } 276 } 277 278 public void ensureExcluded(String classExpr) { 279 if(!isExcluded(classExpr)) { 280 internalAddExclude(classExpr); 281 } 282 } 283 284 public void ensureNotExcluded(String classExpr) { 285 if(isExcluded(classExpr)) { 286 internalRemoveExclude(classExpr); 287 } 288 } 289 290 public void tableChanged(TableModelEvent e) { 291 syncModel(); 292 } 293 } 294 | Popular Tags |