KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > InstrumentedClassesPanel


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 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 JavaDoc;
16 import java.awt.event.ActionListener JavaDoc;
17
18 import javax.swing.JOptionPane JavaDoc;
19 import javax.swing.event.ListSelectionEvent JavaDoc;
20 import javax.swing.event.ListSelectionListener JavaDoc;
21 import javax.swing.event.TableModelEvent JavaDoc;
22 import javax.swing.event.TableModelListener JavaDoc;
23
24 public class InstrumentedClassesPanel extends XContainer
25   implements TableModelListener JavaDoc
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 JavaDoc m_addRuleListener;
33   private Button m_removeRuleButton;
34   private ActionListener JavaDoc m_removeRuleListener;
35   private Button m_moveUpButton;
36   private ActionListener JavaDoc m_moveUpListener;
37   private Button m_moveDownButton;
38   private ActionListener JavaDoc m_moveDownListener;
39   private ListSelectionListener JavaDoc 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 JavaDoc() {
52       public void valueChanged(ListSelectionEvent JavaDoc 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 JavaDoc() {
66       public void actionPerformed(ActionEvent JavaDoc ae) {
67         String JavaDoc 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 JavaDoc() {
81       public void actionPerformed(ActionEvent JavaDoc 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 JavaDoc() {
91       public void actionPerformed(ActionEvent JavaDoc ae) {
92         m_ruleTable.moveUp();
93       }
94     };
95
96     m_moveDownButton = (Button)findComponent("MoveDownButton");
97     m_moveDownListener = new ActionListener JavaDoc() {
98       public void actionPerformed(ActionEvent JavaDoc 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 JavaDoc classExpr) {
185     InstrumentedClasses classes = ensureInstrumentedClasses();
186     int size = classes.sizeOfIncludeArray();
187     Include include;
188     String JavaDoc 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 JavaDoc 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 JavaDoc classExpr) {
210     int count = m_ruleModel.getRowCount();
211     Rule rule;
212     String JavaDoc 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 JavaDoc classExpr) {
230     InstrumentedClasses classes = ensureInstrumentedClasses();
231     int size = classes.sizeOfExcludeArray();
232     String JavaDoc 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 JavaDoc classExpr) {
246     if(classExpr != null && classExpr.length() > 0) {
247       m_ruleModel.addExclude(classExpr);
248     }
249   }
250   
251   private void internalRemoveExclude(String JavaDoc 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 JavaDoc classExpr) {
269     internalAddInclude(classExpr);
270   }
271   
272   public void ensureNotAdaptable(String JavaDoc classExpr) {
273     if(isAdaptable(classExpr)) {
274       internalRemoveInclude(classExpr);
275     }
276   }
277   
278   public void ensureExcluded(String JavaDoc classExpr) {
279     if(!isExcluded(classExpr)) {
280       internalAddExclude(classExpr);
281     }
282   }
283   
284   public void ensureNotExcluded(String JavaDoc classExpr) {
285     if(isExcluded(classExpr)) {
286       internalRemoveExclude(classExpr);
287     }
288   }
289
290   public void tableChanged(TableModelEvent JavaDoc e) {
291     syncModel();
292   }
293 }
294
Popular Tags