KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > terracotta > dso > editors > 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 org.terracotta.dso.editors;
5
6 import org.eclipse.core.resources.IProject;
7 import org.eclipse.jdt.core.IJavaElement;
8 import org.eclipse.jdt.core.IJavaProject;
9 import org.eclipse.jdt.core.IType;
10 import org.eclipse.jdt.core.JavaCore;
11 import org.eclipse.jdt.core.JavaModelException;
12 import org.eclipse.jdt.core.search.IJavaSearchScope;
13 import org.eclipse.jdt.core.search.SearchEngine;
14 import org.eclipse.jdt.ui.IJavaElementSearchConstants;
15 import org.eclipse.jdt.ui.JavaUI;
16 import org.eclipse.swt.widgets.Display;
17 import org.eclipse.ui.dialogs.SelectionDialog;
18
19 import org.dijon.Button;
20 import org.dijon.ContainerResource;
21
22 import com.tc.admin.common.XTable;
23 import com.terracottatech.config.AdditionalBootJarClasses;
24 import com.terracottatech.config.DsoApplication;
25
26 import java.awt.event.ActionEvent JavaDoc;
27 import java.awt.event.ActionListener JavaDoc;
28
29 import javax.swing.SwingUtilities JavaDoc;
30 import javax.swing.event.ListSelectionEvent JavaDoc;
31 import javax.swing.event.ListSelectionListener JavaDoc;
32 import javax.swing.event.TableModelEvent JavaDoc;
33 import javax.swing.event.TableModelListener JavaDoc;
34 import javax.swing.table.DefaultTableModel JavaDoc;
35
36 public class BootClassesPanel extends ConfigurationEditorPanel
37   implements TableModelListener JavaDoc
38 {
39   private IProject m_project;
40   private DsoApplication m_dsoApp;
41   private AdditionalBootJarClasses m_bootClasses;
42   private XTable m_bootClassesTable;
43   private BootClassTableModel m_bootClassesTableModel;
44   private Button m_addButton;
45   private ActionListener JavaDoc m_addListener;
46   private Button m_removeButton;
47   private ActionListener JavaDoc m_removeListener;
48   private ListSelectionListener JavaDoc m_bootClassesListener;
49   
50   public BootClassesPanel() {
51     super();
52   }
53   
54   public void load(ContainerResource containerRes) {
55     super.load(containerRes);
56
57     m_bootClassesTable = (XTable)findComponent("BootClassesTable");
58     m_bootClassesTable.setModel(m_bootClassesTableModel = new BootClassTableModel());
59     m_bootClassesListener = new ListSelectionListener JavaDoc() {
60       public void valueChanged(ListSelectionEvent JavaDoc lse) {
61         if(!lse.getValueIsAdjusting()) {
62           int[] sel = m_bootClassesTable.getSelectedRows();
63           m_removeButton.setEnabled(sel != null && sel.length > 0);
64         }
65       }
66     };
67     
68     m_addButton = (Button)findComponent("AddBootClassButton");
69     m_addListener = new ActionListener JavaDoc() {
70       public void actionPerformed(ActionEvent JavaDoc ae) {
71         Display.getDefault().asyncExec(new Runnable JavaDoc() {
72           public void run() {
73             IJavaProject javaProject = JavaCore.create(m_project);
74             int filter = IJavaSearchScope.SYSTEM_LIBRARIES;
75             IJavaElement[] elements = new IJavaElement[]{javaProject};
76             IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements, filter);
77             int style = IJavaElementSearchConstants.CONSIDER_ALL_TYPES;
78             SelectionDialog dialog;
79             
80             try {
81               dialog = JavaUI.createTypeDialog(null, null, scope, style, true);
82             } catch(JavaModelException jme) {
83               jme.printStackTrace();
84               return;
85             }
86               
87             dialog.setTitle("DSO Application Configuration");
88             dialog.setMessage("Select system classes to add to DSO Boot Jar");
89             dialog.open();
90             
91             final Object JavaDoc[] result = dialog.getResult();
92             
93             SwingUtilities.invokeLater(new Runnable JavaDoc() {
94               public void run() {
95                 IType type;
96             
97                 if(result != null) {
98                   for(int i = 0; i < result.length; i++) {
99                     type = (IType)result[i];
100                     internalAddBootClass(type.getFullyQualifiedName());
101                   }
102                 }
103               }
104             });
105           }
106         });
107       }
108     };
109
110     m_removeButton = (Button)findComponent("RemoveBootClassButton");
111     m_removeListener = new ActionListener JavaDoc() {
112       public void actionPerformed(ActionEvent JavaDoc ae) {
113         int[] selection = m_bootClassesTable.getSelectedRows();
114         
115         for(int i = selection.length-1; i >= 0; i--) {
116           ensureAdditionalBootClasses().removeInclude(selection[i]);
117           m_bootClassesTableModel.removeRow(selection[i]);
118         }
119       }
120     };
121   }
122
123   public boolean hasAnySet() {
124     return m_bootClasses != null &&
125            m_bootClasses.sizeOfIncludeArray() > 0;
126   }
127   
128   private AdditionalBootJarClasses ensureAdditionalBootClasses() {
129     if(m_bootClasses == null) {
130       ensureXmlObject();
131     }
132     return m_bootClasses;
133   }
134   
135   public void ensureXmlObject() {
136     super.ensureXmlObject();
137
138     if(m_bootClasses == null) {
139       removeListeners();
140       m_bootClasses = m_dsoApp.addNewAdditionalBootJarClasses();
141       updateChildren();
142       addListeners();
143     }
144   }
145   
146   private void syncModel() {
147     if(!hasAnySet() && m_dsoApp.getAdditionalBootJarClasses() != null) {
148       m_dsoApp.unsetAdditionalBootJarClasses();
149       m_bootClasses = null;
150       fireXmlObjectStructureChanged(m_dsoApp);
151     }
152
153     setDirty();
154   }
155   
156   private void addListeners() {
157     m_bootClassesTableModel.addTableModelListener(this);
158     m_bootClassesTable.getSelectionModel().addListSelectionListener(m_bootClassesListener);
159     m_addButton.addActionListener(m_addListener);
160     m_removeButton.addActionListener(m_removeListener);
161   }
162   
163   private void removeListeners() {
164     m_bootClassesTableModel.removeTableModelListener(this);
165     m_bootClassesTable.getSelectionModel().removeListSelectionListener(m_bootClassesListener);
166     m_addButton.removeActionListener(m_addListener);
167     m_removeButton.removeActionListener(m_removeListener);
168   }
169   
170   public void updateChildren() {
171     m_bootClassesTableModel.clear();
172
173     if(m_bootClasses != null) {
174       String JavaDoc[] bootClasses = m_bootClasses.getIncludeArray();
175   
176       for(int i = 0; i < bootClasses.length; i++) {
177         m_bootClassesTableModel.addBootClass(bootClasses[i]);
178       }
179     } else {
180       m_bootClassesTableModel.fireTableDataChanged();
181     }
182   }
183
184   public void updateModel() {
185     removeListeners();
186     updateChildren();
187     addListeners();
188   }
189   
190   public void setup(IProject project, DsoApplication dsoApp) {
191     setEnabled(true);
192     removeListeners();
193
194     m_project = project;
195     m_dsoApp = dsoApp;
196     m_bootClasses = m_dsoApp != null ?
197                     m_dsoApp.getAdditionalBootJarClasses() : null;
198
199     updateChildren();
200     addListeners();
201   }
202   
203   public void tearDown() {
204     removeListeners();
205     
206     m_dsoApp = null;
207     m_bootClasses = null;
208
209     m_bootClassesTableModel.clear();
210     
211     setEnabled(false);
212   }
213   
214   class BootClassTableModel extends DefaultTableModel JavaDoc {
215     BootClassTableModel() {
216       super();
217       setColumnIdentifiers(new String JavaDoc[]{"Boot Classes"});
218     }
219     
220     void clear() {
221       setRowCount(0);
222     }
223     
224     void setBootClasses(AdditionalBootJarClasses bootClasses) {
225       clear();
226       
227       if(bootClasses != null) {
228         int count = bootClasses.sizeOfIncludeArray();
229         
230         for(int i = 0; i < count; i++) {
231           addBootClass(bootClasses.getIncludeArray(i));
232         }
233       }
234     }
235       
236     void addBootClass(String JavaDoc typeName) {
237       addRow(new Object JavaDoc[] {typeName});
238     }
239     
240     int indexOf(String JavaDoc typeName) {
241       int count = getRowCount();
242       
243       for(int i = 0; i < count; i++) {
244         if(((String JavaDoc)getValueAt(i, 0)).equals(typeName)) {
245           return i;
246         }
247       }
248       
249       return -1;
250     }
251     
252     public void setValueAt(Object JavaDoc value, int row, int col) {
253       m_bootClasses.setIncludeArray(row, (String JavaDoc)value);
254       super.setValueAt(value, row, col);
255     }
256   }
257   
258   public void tableChanged(TableModelEvent JavaDoc tme) {
259     syncModel();
260   }
261   
262   private void internalAddBootClass(String JavaDoc typeName) {
263     ensureAdditionalBootClasses().addInclude(typeName);
264     m_bootClassesTableModel.addBootClass(typeName);
265     
266     int row = m_bootClassesTableModel.getRowCount()-1;
267     m_bootClassesTable.setRowSelectionInterval(row, row);
268   }
269
270   public boolean isBootClass(String JavaDoc typeName) {
271     AdditionalBootJarClasses bootClasses = ensureAdditionalBootClasses();
272     int count = bootClasses.sizeOfIncludeArray();
273     
274     for(int i = 0; i < count; i++) {
275       if(typeName.equals(bootClasses.getIncludeArray(i))) {
276         return true;
277       }
278     }
279     
280     return false;
281   }
282 }
283
Popular Tags