KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > BootClassesPanel


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.admin.common.XTable;
11 import com.terracottatech.config.AdditionalBootJarClasses;
12 import com.terracottatech.config.DsoApplication;
13
14 import java.awt.event.ActionEvent JavaDoc;
15 import java.awt.event.ActionListener JavaDoc;
16
17 import javax.swing.JOptionPane JavaDoc;
18 import javax.swing.event.ListSelectionEvent JavaDoc;
19 import javax.swing.event.ListSelectionListener JavaDoc;
20 import javax.swing.event.TableModelEvent JavaDoc;
21 import javax.swing.event.TableModelListener JavaDoc;
22 import javax.swing.table.DefaultTableModel JavaDoc;
23
24 public class BootClassesPanel extends XContainer
25   implements TableModelListener JavaDoc
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 JavaDoc m_addListener;
33   private Button m_removeButton;
34   private ActionListener JavaDoc m_removeListener;
35   private ListSelectionListener JavaDoc 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 JavaDoc() {
47       public void valueChanged(ListSelectionEvent JavaDoc 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 JavaDoc() {
57       public void actionPerformed(ActionEvent JavaDoc ae) {
58         String JavaDoc 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 JavaDoc() {
72       public void actionPerformed(ActionEvent JavaDoc 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   // make sure parent exists
97
public void ensureXmlObject() {
98     if(m_bootClasses == null) {
99       removeListeners();
100       m_bootClasses = m_dsoApp.addNewAdditionalBootJarClasses();
101       updateChildren();
102       addListeners();
103     }
104   }
105   
106   // write xml and remove if not needed
107
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   // match table to xmlbeans
133
private void updateChildren() {
134     m_bootClassesTableModel.clear();
135
136     if(m_bootClasses != null) {
137       String JavaDoc[] 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 JavaDoc {
169     BootClassTableModel() {
170       super();
171       setColumnIdentifiers(new String JavaDoc[]{"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 JavaDoc typeName) {
191       addRow(new Object JavaDoc[] {typeName});
192     }
193     
194     int indexOf(String JavaDoc typeName) {
195       int count = getRowCount();
196       
197       for(int i = 0; i < count; i++) {
198         if(((String JavaDoc)getValueAt(i, 0)).equals(typeName)) {
199           return i;
200         }
201       }
202       
203       return -1;
204     }
205     
206     public void setValueAt(Object JavaDoc value, int row, int col) {
207       m_bootClasses.setIncludeArray(row, (String JavaDoc)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 JavaDoc tme) {
222     syncModel();
223   }
224   
225   private void internalAddBootClass(String JavaDoc 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 JavaDoc 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 JavaDoc 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 JavaDoc typeName) {
261     if(!isBootClass(typeName)) {
262       internalAddBootClass(typeName);
263     }
264   }
265   
266   public void ensureNotBootClass(String JavaDoc fieldName) {
267     if(isBootClass(fieldName)) {
268       internalRemoveBootClass(fieldName);
269     }
270   }
271 }
272
Popular Tags