KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > sape > carbon > services > console > ComponentFrame


1 package org.sape.carbon.services.console;
2
3 import java.lang.reflect.Array JavaDoc;
4 import java.lang.reflect.Method JavaDoc;
5
6 import javax.swing.JInternalFrame JavaDoc;
7 import javax.swing.JLabel JavaDoc;
8 import javax.swing.JTable JavaDoc;
9 import javax.swing.table.DefaultTableModel JavaDoc;
10 import javax.swing.table.JTableHeader JavaDoc;
11 import javax.swing.tree.DefaultMutableTreeNode JavaDoc;
12 import javax.swing.tree.DefaultTreeModel JavaDoc;
13
14 import org.sape.carbon.core.component.Component;
15 import org.sape.carbon.core.component.ComponentConfiguration;
16 import org.sape.carbon.core.config.Configuration;
17
18 /**
19  * <P>This class provides a tree and xml view into configuration objects.</P>
20  *
21  *
22  * @since carbon 1.0
23  * @author Greg Hinkle, January 2002
24  * @version $Revision: 1.8 $($Author: ghinkl $ / $Date: 2003/04/04 01:11:49 $)
25  * <br>Copyright 2002 Sapient
26  */

27 public class ComponentFrame extends JInternalFrame JavaDoc {
28
29     protected Component component;
30
31     /** Creates new form ObjectFrame */
32     public ComponentFrame(Component component) {
33         this.component = component;
34         System.out.println("Showing ObjectFrame for [" + component + "]");
35         initComponents();
36
37         loadModel();
38         this.setTitle(component.getComponentName());
39         this.functionalInterfaceLabel.setText(
40             ((ComponentConfiguration)component).getFunctionalInterface().getName());
41         this.functionalImplementationLabel.setText(
42             ((ComponentConfiguration)component).getFunctionalImplementationClass().getName());
43     }
44
45     private void loadModel() {
46         DefaultMutableTreeNode JavaDoc root =
47             new DefaultMutableTreeNode JavaDoc(
48                 new InterfaceNode(this.component.toString(),this.component));
49
50         addInterfaces(root);
51
52         DefaultTreeModel JavaDoc model =
53             new DefaultTreeModel JavaDoc(root);
54
55         this.objectTree.setModel(model);
56
57         this.objectTree.repaint();
58
59     }
60
61     private void addInterfaces(DefaultMutableTreeNode JavaDoc node) {
62
63         InterfaceNode interfaceNode = (InterfaceNode)node.getUserObject();
64         Object JavaDoc tNode = interfaceNode.getObject();
65         Method JavaDoc[] methods = tNode.getClass().getDeclaredMethods();
66
67         for (int i=0;i<methods.length;i++) {
68
69             Method JavaDoc m = methods[i];
70             if ((m.getName().startsWith("get")) &&
71                 (m.getParameterTypes().length == 0) &&
72                 (m.getDeclaringClass() != Class JavaDoc.class)) {
73
74                 String JavaDoc name = m.getName().substring(3);
75
76                 Object JavaDoc obj = null;
77                 try {
78                     System.out.println("Invoking: " + m.getName());
79                     obj = m.invoke(tNode,new Object JavaDoc[0]);
80                 } catch (Exception JavaDoc e) {e.printStackTrace();}
81
82                 DefaultMutableTreeNode JavaDoc childNode =
83                     new DefaultMutableTreeNode JavaDoc(
84                         new InterfaceNode(name,obj));
85
86
87                 if (obj != null && obj.getClass().isArray()) {
88                     for (int j=0;j< Array.getLength(obj);j++) {
89
90                         DefaultMutableTreeNode JavaDoc arrNode =
91                         new DefaultMutableTreeNode JavaDoc(
92                             new InterfaceNode(name+"["+j+"]"
93                                 ,Array.get(obj,j)));
94
95                         //addInterfaces(arrNode);
96

97                         childNode.add(arrNode);
98                     }
99                 } else if (methods[i].getReturnType().getClass().isAssignableFrom(Configuration.class)) {
100                     addInterfaces(childNode);
101                 }
102                 node.add(childNode);
103             }
104         }
105     }
106
107     public static class InterfaceNode {
108
109         String JavaDoc name;
110         Object JavaDoc obj;
111
112         public InterfaceNode(String JavaDoc name, Object JavaDoc obj) {
113             this.name = name;
114             this.obj = obj;
115         }
116
117         public Object JavaDoc getObject() {
118             return this.obj;
119         }
120
121         public String JavaDoc toString() {
122             return this.name + "[" + this.name + "]";
123             //String name = this.obj.getClass().getName();
124
//return name.substring(name.lastIndexOf('.')+1);
125
}
126
127         private String JavaDoc getTypeName() {
128             Class JavaDoc type = this.obj.getClass();
129             boolean isArray = false;
130             if (type.isArray()) {
131                 type = type.getComponentType();
132                 isArray = true;
133             }
134             String JavaDoc name = type.getName();
135             name = name.substring(name.lastIndexOf('.')+1);
136             if (isArray)
137                 return "Array:" + name;
138             else
139                 return name;
140         }
141     }
142
143     /** This method is called from within the constructor to
144      * initialize the form.
145      * WARNING: Do NOT modify this code. The content of this method is
146      * always regenerated by the Form Editor.
147      */

148     private void initComponents() {//GEN-BEGIN:initComponents
149
java.awt.GridBagConstraints JavaDoc gridBagConstraints;
150
151         ObjectViewJTabbedPane = new javax.swing.JTabbedPane JavaDoc();
152         jSplitPane1 = new javax.swing.JSplitPane JavaDoc();
153         jScrollPane1 = new javax.swing.JScrollPane JavaDoc();
154         objectTree = new javax.swing.JTree JavaDoc();
155         jScrollPane3 = new javax.swing.JScrollPane JavaDoc();
156         parameterTable = new javax.swing.JTable JavaDoc();
157         infoPanel = new javax.swing.JPanel JavaDoc();
158         jLabel1 = new javax.swing.JLabel JavaDoc();
159         functionalInterfaceLabel = new javax.swing.JLabel JavaDoc();
160         jLabel3 = new javax.swing.JLabel JavaDoc();
161         functionalImplementationLabel = new javax.swing.JLabel JavaDoc();
162
163         setClosable(true);
164         setIconifiable(true);
165         setMaximizable(true);
166         setResizable(true);
167         setPreferredSize(new java.awt.Dimension JavaDoc(225, 406));
168         jSplitPane1.setDividerLocation(130);
169         jSplitPane1.setDividerSize(7);
170         jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);
171         jSplitPane1.setResizeWeight(1.0);
172         jSplitPane1.setPreferredSize(new java.awt.Dimension JavaDoc(225, 300));
173         jSplitPane1.addInputMethodListener(new java.awt.event.InputMethodListener JavaDoc() {
174             public void inputMethodTextChanged(java.awt.event.InputMethodEvent JavaDoc evt) {
175                 jSplitPane1InputMethodTextChanged(evt);
176             }
177             public void caretPositionChanged(java.awt.event.InputMethodEvent JavaDoc evt) {
178             }
179         });
180
181         objectTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener JavaDoc() {
182             public void valueChanged(javax.swing.event.TreeSelectionEvent JavaDoc evt) {
183                 objectTreeValueChanged(evt);
184             }
185         });
186
187         jScrollPane1.setViewportView(objectTree);
188
189         jSplitPane1.setTopComponent(jScrollPane1);
190
191         parameterTable.setBorder(new javax.swing.border.EtchedBorder JavaDoc());
192         parameterTable.setModel(new javax.swing.table.DefaultTableModel JavaDoc(
193             new Object JavaDoc [][] {
194
195             },
196             new String JavaDoc [] {
197
198             }
199         ));
200         parameterTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN);
201         parameterTable.setColumnSelectionAllowed(true);
202         parameterTable.addPropertyChangeListener(new java.beans.PropertyChangeListener JavaDoc() {
203             public void propertyChange(java.beans.PropertyChangeEvent JavaDoc evt) {
204                 parameterTablePropertyChange(evt);
205             }
206         });
207
208         jScrollPane3.setViewportView(parameterTable);
209
210         jSplitPane1.setBottomComponent(jScrollPane3);
211
212         ObjectViewJTabbedPane.addTab("Object Graph", jSplitPane1);
213
214         getContentPane().add(ObjectViewJTabbedPane, java.awt.BorderLayout.CENTER);
215
216         infoPanel.setLayout(new java.awt.GridBagLayout JavaDoc());
217
218         jLabel1.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
219         jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
220         jLabel1.setText("Functional Interface");
221         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
222         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
223         infoPanel.add(jLabel1, gridBagConstraints);
224
225         functionalInterfaceLabel.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
226         functionalInterfaceLabel.setText("jLabel2");
227         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
228         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
229         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 8, 0, 0);
230         infoPanel.add(functionalInterfaceLabel, gridBagConstraints);
231
232         jLabel3.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
233         jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
234         jLabel3.setText("Functional Implementation");
235         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
236         gridBagConstraints.gridx = 0;
237         gridBagConstraints.gridy = 1;
238         gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
239         infoPanel.add(jLabel3, gridBagConstraints);
240
241         functionalImplementationLabel.setFont(new java.awt.Font JavaDoc("Dialog", 0, 12));
242         functionalImplementationLabel.setText("jLabel4");
243         gridBagConstraints = new java.awt.GridBagConstraints JavaDoc();
244         gridBagConstraints.gridx = 1;
245         gridBagConstraints.gridy = 1;
246         gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
247         gridBagConstraints.insets = new java.awt.Insets JavaDoc(0, 8, 0, 0);
248         infoPanel.add(functionalImplementationLabel, gridBagConstraints);
249
250         getContentPane().add(infoPanel, java.awt.BorderLayout.NORTH);
251
252         pack();
253     }//GEN-END:initComponents
254

255     private void parameterTablePropertyChange(java.beans.PropertyChangeEvent JavaDoc evt) {//GEN-FIRST:event_parameterTablePropertyChange
256
// Add your handling code here:
257
System.out.println("Edited: " + evt.getPropertyName());
258         System.out.println("\tsource: " + evt.getSource());
259         Object JavaDoc source = evt.getSource();
260         if (source instanceof JTable JavaDoc) {
261             JTable JavaDoc table = ((JTable JavaDoc)source);
262
263             if (table.isEditing()) {
264                 int row = table.getEditingRow();
265                 Object JavaDoc value= table.getValueAt(row, 2);
266                 Object JavaDoc name = table.getValueAt(row, 1);
267
268                 //Reflect.invoke(this.config,"set"+name,new Class[] { String.class }, new Object[] { value });
269
}
270         }
271
272     }//GEN-LAST:event_parameterTablePropertyChange
273

274     private void jSplitPane1InputMethodTextChanged(java.awt.event.InputMethodEvent JavaDoc evt) {//GEN-FIRST:event_jSplitPane1InputMethodTextChanged
275
// Add your handling code here:
276
System.out.println("Changed: " + evt.getSource());
277         System.out.println("To: " + evt.getText());
278     }//GEN-LAST:event_jSplitPane1InputMethodTextChanged
279

280     private void objectTreeValueChanged(javax.swing.event.TreeSelectionEvent JavaDoc evt) {//GEN-FIRST:event_objectTreeValueChanged
281
// Add your handling code here:
282

283         DefaultMutableTreeNode JavaDoc dmtn =
284             (DefaultMutableTreeNode JavaDoc) this.objectTree.getSelectionPath().getLastPathComponent();
285
286         InterfaceNode in =
287             (InterfaceNode) dmtn.getUserObject();
288
289         Object JavaDoc obj = in.getObject();
290
291         Method JavaDoc[] methods = obj.getClass().getDeclaredMethods();
292
293         DefaultTableModel JavaDoc dtm =
294                 new DefaultTableModel JavaDoc();
295         if (obj instanceof java.lang.Number JavaDoc) {
296             dtm.addColumn("Value");
297             dtm.addRow(new Object JavaDoc[] { obj });
298
299         } else {
300
301             dtm.addColumn("Name");
302             dtm.addColumn("Value");
303
304             for (int i=0;i<methods.length;i++) {
305
306                 Method JavaDoc m = methods[i];
307                 if ((m.getName().startsWith("get")) &&
308                     (m.getParameterTypes().length == 0)) {
309
310                     String JavaDoc name = m.getName().substring(3);
311                     Object JavaDoc value = null;
312                     try {
313                         value = m.invoke(obj,new Object JavaDoc[0]);
314                     } catch (Exception JavaDoc e) {e.printStackTrace();}
315                     dtm.addRow(new Object JavaDoc[] {name, value});
316                 }
317             }
318         }
319
320         this.parameterTable.setModel(dtm);
321         JTableHeader JavaDoc jth = new JTableHeader JavaDoc();
322         jth.add(new JLabel JavaDoc("Name"));
323         jth.add(new JLabel JavaDoc("Value"));
324         jth.setTable(this.parameterTable);
325         this.parameterTable.setTableHeader(jth);
326
327         this.parameterTable.repaint();
328     }//GEN-LAST:event_objectTreeValueChanged
329

330
331     // Variables declaration - do not modify//GEN-BEGIN:variables
332
private javax.swing.JTree JavaDoc objectTree;
333     private javax.swing.JPanel JavaDoc infoPanel;
334     private javax.swing.JScrollPane JavaDoc jScrollPane3;
335     private javax.swing.JScrollPane JavaDoc jScrollPane1;
336     private javax.swing.JTable JavaDoc parameterTable;
337     private javax.swing.JLabel JavaDoc functionalImplementationLabel;
338     private javax.swing.JLabel JavaDoc functionalInterfaceLabel;
339     private javax.swing.JTabbedPane JavaDoc ObjectViewJTabbedPane;
340     private javax.swing.JSplitPane JavaDoc jSplitPane1;
341     private javax.swing.JLabel JavaDoc jLabel3;
342     private javax.swing.JLabel JavaDoc jLabel1;
343     // End of variables declaration//GEN-END:variables
344

345 }
346
Popular Tags