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 11 import org.terracotta.dso.editors.chooser.ClassChooser; 12 import com.terracottatech.config.DsoApplication; 13 import com.terracottatech.config.InstrumentedClasses; 14 15 import java.awt.Frame ; 16 import java.awt.event.ActionEvent ; 17 import java.awt.event.ActionListener ; 18 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 ConfigurationEditorPanel 25 implements TableModelListener 26 { 27 private IProject m_project; 28 private DsoApplication m_dsoApp; 29 private InstrumentedClasses m_instrumentedClasses; 30 private RuleTable m_ruleTable; 31 private RuleModel m_ruleModel; 32 private Button m_addRuleButton; 33 private ActionListener m_addRuleListener; 34 private Button m_removeRuleButton; 35 private ActionListener m_removeRuleListener; 36 private Button m_moveUpButton; 37 private ActionListener m_moveUpListener; 38 private Button m_moveDownButton; 39 private ActionListener m_moveDownListener; 40 private ListSelectionListener m_rulesListener; 41 private ClassChooser m_classChooser; 42 private ActionListener m_instrumentedClassChooserListener; 43 44 public InstrumentedClassesPanel() { 45 super(); 46 } 47 48 public void load(ContainerResource containerRes) { 49 super.load(containerRes); 50 51 m_ruleTable = (RuleTable)findComponent("RuleTable"); 52 m_ruleTable.setModel(m_ruleModel = new RuleModel()); 53 m_rulesListener = new ListSelectionListener () { 54 public void valueChanged(ListSelectionEvent lse) { 55 if(!lse.getValueIsAdjusting()) { 56 int sel = m_ruleTable.getSelectedRow(); 57 int rowCount = m_ruleModel.size(); 58 59 m_removeRuleButton.setEnabled(sel != -1); 60 m_moveUpButton.setEnabled(rowCount > 1 && sel > 0); 61 m_moveDownButton.setEnabled(rowCount > 1 && sel < rowCount-1); 62 } 63 } 64 }; 65 66 m_addRuleButton = (Button)findComponent("AddRuleButton"); 67 m_addRuleListener = new ActionListener () { 68 public void actionPerformed(ActionEvent ae) { 69 ClassChooser chsr = getInstrumentedClassChooser(); 70 71 chsr.setup(m_project); 72 chsr.center(InstrumentedClassesPanel.this.getAncestorOfClass(Frame .class)); 73 chsr.setVisible(true); 74 } 75 }; 76 77 m_removeRuleButton = (Button)findComponent("RemoveRuleButton"); 78 m_removeRuleListener = new ActionListener () { 79 public void actionPerformed(ActionEvent ae) { 80 int row = m_ruleTable.getSelectedRow(); 81 82 m_ruleModel.removeRuleAt(row); 83 if(m_ruleModel.getRowCount() == 0) { 84 m_dsoApp.unsetInstrumentedClasses(); 85 } 86 m_ruleModel.fireTableDataChanged(); 87 } 88 }; 89 90 m_moveUpButton = (Button)findComponent("MoveUpButton"); 91 m_moveUpListener = new ActionListener () { 92 public void actionPerformed(ActionEvent ae) { 93 m_ruleTable.moveUp(); 94 } 95 }; 96 97 m_moveDownButton = (Button)findComponent("MoveDownButton"); 98 m_moveDownListener = new ActionListener () { 99 public void actionPerformed(ActionEvent ae) { 100 m_ruleTable.moveDown(); 101 } 102 }; 103 } 104 105 private ActionListener getInstrumentedClassChooserListener() { 106 if(m_instrumentedClassChooserListener == null) { 107 m_instrumentedClassChooserListener = new InstrumentedClassChooserListener(); 108 } 109 110 return m_instrumentedClassChooserListener; 111 } 112 113 private ClassChooser getInstrumentedClassChooser() { 114 if(m_classChooser == null) { 115 m_classChooser = new ClassChooser((Frame )getAncestorOfClass(Frame .class)); 116 } 117 m_classChooser.setListener(getInstrumentedClassChooserListener()); 118 119 return m_classChooser; 120 } 121 122 class InstrumentedClassChooserListener implements ActionListener { 123 public void actionPerformed(ActionEvent ae) { 124 String [] classExprs = m_classChooser.getClassnames(); 125 String classExpr; 126 127 for(int i = 0; i < classExprs.length; i++) { 128 classExpr = classExprs[i]; 129 130 if(classExpr != null && 131 (classExpr = classExpr.trim()) != null && 132 classExpr.length() > 0) 133 { 134 internalAddInclude(classExpr); 135 } 136 } 137 } 138 } 139 140 public boolean hasAnySet() { 141 return m_instrumentedClasses != null && 142 (m_instrumentedClasses.sizeOfExcludeArray() > 0 || 143 m_instrumentedClasses.sizeOfIncludeArray() > 0); 144 } 145 146 public void ensureXmlObject() { 147 super.ensureXmlObject(); 148 149 if(m_instrumentedClasses == null) { 150 removeListeners(); 151 m_instrumentedClasses = m_dsoApp.addNewInstrumentedClasses(); 152 updateChildren(); 153 addListeners(); 154 } 155 } 156 157 private void syncModel() { 158 setDirty(); 159 } 160 161 private void addListeners() { 162 m_ruleModel.addTableModelListener(this); 163 m_ruleTable.getSelectionModel().addListSelectionListener(m_rulesListener); 164 m_addRuleButton.addActionListener(m_addRuleListener); 165 m_removeRuleButton.addActionListener(m_removeRuleListener); 166 m_moveUpButton.addActionListener(m_moveUpListener); 167 m_moveDownButton.addActionListener(m_moveDownListener); 168 } 169 170 private void removeListeners() { 171 m_ruleModel.removeTableModelListener(this); 172 m_ruleTable.getSelectionModel().removeListSelectionListener(m_rulesListener); 173 m_addRuleButton.removeActionListener(m_addRuleListener); 174 m_removeRuleButton.removeActionListener(m_removeRuleListener); 175 m_moveUpButton.removeActionListener(m_moveUpListener); 176 m_moveDownButton.removeActionListener(m_moveDownListener); 177 } 178 179 public void updateChildren() { 180 m_ruleModel.setInstrumentedClasses(m_instrumentedClasses); 181 } 182 183 public void updateModel() { 184 removeListeners(); 185 updateChildren(); 186 addListeners(); 187 } 188 189 public void setup(IProject project, DsoApplication dsoApp) { 190 setEnabled(true); 191 removeListeners(); 192 193 m_project = project; 194 m_dsoApp = dsoApp; 195 m_instrumentedClasses = m_dsoApp != null ? 196 m_dsoApp.getInstrumentedClasses() : 197 null; 198 199 updateChildren(); 200 addListeners(); 201 } 202 203 public void tearDown() { 204 removeListeners(); 205 206 m_dsoApp = null; 207 m_instrumentedClasses = null; 208 209 m_ruleModel.clear(); 210 211 setEnabled(false); 212 } 213 214 private void internalAddInclude(String classExpr) { 215 ensureXmlObject(); 216 int row = m_ruleModel.getRowCount(); 217 m_ruleModel.addInclude(classExpr); 218 m_ruleModel.fireTableRowsInserted(row, row); 219 } 220 221 public void tableChanged(TableModelEvent e) { 222 syncModel(); 223 } 224 } 225 | Popular Tags |