1 package org.sape.carbon.services.console; 2 3 import java.lang.reflect.Array ; 4 import java.lang.reflect.Method ; 5 6 import javax.swing.JInternalFrame ; 7 import javax.swing.JLabel ; 8 import javax.swing.JTable ; 9 import javax.swing.table.DefaultTableModel ; 10 import javax.swing.table.JTableHeader ; 11 import javax.swing.tree.DefaultMutableTreeNode ; 12 import javax.swing.tree.DefaultTreeModel ; 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 27 public class ComponentFrame extends JInternalFrame { 28 29 protected Component component; 30 31 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 root = 47 new DefaultMutableTreeNode ( 48 new InterfaceNode(this.component.toString(),this.component)); 49 50 addInterfaces(root); 51 52 DefaultTreeModel model = 53 new DefaultTreeModel (root); 54 55 this.objectTree.setModel(model); 56 57 this.objectTree.repaint(); 58 59 } 60 61 private void addInterfaces(DefaultMutableTreeNode node) { 62 63 InterfaceNode interfaceNode = (InterfaceNode)node.getUserObject(); 64 Object tNode = interfaceNode.getObject(); 65 Method [] methods = tNode.getClass().getDeclaredMethods(); 66 67 for (int i=0;i<methods.length;i++) { 68 69 Method m = methods[i]; 70 if ((m.getName().startsWith("get")) && 71 (m.getParameterTypes().length == 0) && 72 (m.getDeclaringClass() != Class .class)) { 73 74 String name = m.getName().substring(3); 75 76 Object obj = null; 77 try { 78 System.out.println("Invoking: " + m.getName()); 79 obj = m.invoke(tNode,new Object [0]); 80 } catch (Exception e) {e.printStackTrace();} 81 82 DefaultMutableTreeNode childNode = 83 new DefaultMutableTreeNode ( 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 arrNode = 91 new DefaultMutableTreeNode ( 92 new InterfaceNode(name+"["+j+"]" 93 ,Array.get(obj,j))); 94 95 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 name; 110 Object obj; 111 112 public InterfaceNode(String name, Object obj) { 113 this.name = name; 114 this.obj = obj; 115 } 116 117 public Object getObject() { 118 return this.obj; 119 } 120 121 public String toString() { 122 return this.name + "[" + this.name + "]"; 123 } 126 127 private String getTypeName() { 128 Class type = this.obj.getClass(); 129 boolean isArray = false; 130 if (type.isArray()) { 131 type = type.getComponentType(); 132 isArray = true; 133 } 134 String 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 148 private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; 150 151 ObjectViewJTabbedPane = new javax.swing.JTabbedPane (); 152 jSplitPane1 = new javax.swing.JSplitPane (); 153 jScrollPane1 = new javax.swing.JScrollPane (); 154 objectTree = new javax.swing.JTree (); 155 jScrollPane3 = new javax.swing.JScrollPane (); 156 parameterTable = new javax.swing.JTable (); 157 infoPanel = new javax.swing.JPanel (); 158 jLabel1 = new javax.swing.JLabel (); 159 functionalInterfaceLabel = new javax.swing.JLabel (); 160 jLabel3 = new javax.swing.JLabel (); 161 functionalImplementationLabel = new javax.swing.JLabel (); 162 163 setClosable(true); 164 setIconifiable(true); 165 setMaximizable(true); 166 setResizable(true); 167 setPreferredSize(new java.awt.Dimension (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 (225, 300)); 173 jSplitPane1.addInputMethodListener(new java.awt.event.InputMethodListener () { 174 public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) { 175 jSplitPane1InputMethodTextChanged(evt); 176 } 177 public void caretPositionChanged(java.awt.event.InputMethodEvent evt) { 178 } 179 }); 180 181 objectTree.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener () { 182 public void valueChanged(javax.swing.event.TreeSelectionEvent 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 ()); 192 parameterTable.setModel(new javax.swing.table.DefaultTableModel ( 193 new Object [][] { 194 195 }, 196 new String [] { 197 198 } 199 )); 200 parameterTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_LAST_COLUMN); 201 parameterTable.setColumnSelectionAllowed(true); 202 parameterTable.addPropertyChangeListener(new java.beans.PropertyChangeListener () { 203 public void propertyChange(java.beans.PropertyChangeEvent 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 ()); 217 218 jLabel1.setFont(new java.awt.Font ("Dialog", 0, 12)); 219 jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 220 jLabel1.setText("Functional Interface"); 221 gridBagConstraints = new java.awt.GridBagConstraints (); 222 gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; 223 infoPanel.add(jLabel1, gridBagConstraints); 224 225 functionalInterfaceLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 226 functionalInterfaceLabel.setText("jLabel2"); 227 gridBagConstraints = new java.awt.GridBagConstraints (); 228 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 229 gridBagConstraints.insets = new java.awt.Insets (0, 8, 0, 0); 230 infoPanel.add(functionalInterfaceLabel, gridBagConstraints); 231 232 jLabel3.setFont(new java.awt.Font ("Dialog", 0, 12)); 233 jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); 234 jLabel3.setText("Functional Implementation"); 235 gridBagConstraints = new java.awt.GridBagConstraints (); 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 ("Dialog", 0, 12)); 242 functionalImplementationLabel.setText("jLabel4"); 243 gridBagConstraints = new java.awt.GridBagConstraints (); 244 gridBagConstraints.gridx = 1; 245 gridBagConstraints.gridy = 1; 246 gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; 247 gridBagConstraints.insets = new java.awt.Insets (0, 8, 0, 0); 248 infoPanel.add(functionalImplementationLabel, gridBagConstraints); 249 250 getContentPane().add(infoPanel, java.awt.BorderLayout.NORTH); 251 252 pack(); 253 } 255 private void parameterTablePropertyChange(java.beans.PropertyChangeEvent evt) { System.out.println("Edited: " + evt.getPropertyName()); 258 System.out.println("\tsource: " + evt.getSource()); 259 Object source = evt.getSource(); 260 if (source instanceof JTable ) { 261 JTable table = ((JTable )source); 262 263 if (table.isEditing()) { 264 int row = table.getEditingRow(); 265 Object value= table.getValueAt(row, 2); 266 Object name = table.getValueAt(row, 1); 267 268 } 270 } 271 272 } 274 private void jSplitPane1InputMethodTextChanged(java.awt.event.InputMethodEvent evt) { System.out.println("Changed: " + evt.getSource()); 277 System.out.println("To: " + evt.getText()); 278 } 280 private void objectTreeValueChanged(javax.swing.event.TreeSelectionEvent evt) { 283 DefaultMutableTreeNode dmtn = 284 (DefaultMutableTreeNode ) this.objectTree.getSelectionPath().getLastPathComponent(); 285 286 InterfaceNode in = 287 (InterfaceNode) dmtn.getUserObject(); 288 289 Object obj = in.getObject(); 290 291 Method [] methods = obj.getClass().getDeclaredMethods(); 292 293 DefaultTableModel dtm = 294 new DefaultTableModel (); 295 if (obj instanceof java.lang.Number ) { 296 dtm.addColumn("Value"); 297 dtm.addRow(new Object [] { 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 m = methods[i]; 307 if ((m.getName().startsWith("get")) && 308 (m.getParameterTypes().length == 0)) { 309 310 String name = m.getName().substring(3); 311 Object value = null; 312 try { 313 value = m.invoke(obj,new Object [0]); 314 } catch (Exception e) {e.printStackTrace();} 315 dtm.addRow(new Object [] {name, value}); 316 } 317 } 318 } 319 320 this.parameterTable.setModel(dtm); 321 JTableHeader jth = new JTableHeader (); 322 jth.add(new JLabel ("Name")); 323 jth.add(new JLabel ("Value")); 324 jth.setTable(this.parameterTable); 325 this.parameterTable.setTableHeader(jth); 326 327 this.parameterTable.repaint(); 328 } 330 331 private javax.swing.JTree objectTree; 333 private javax.swing.JPanel infoPanel; 334 private javax.swing.JScrollPane jScrollPane3; 335 private javax.swing.JScrollPane jScrollPane1; 336 private javax.swing.JTable parameterTable; 337 private javax.swing.JLabel functionalImplementationLabel; 338 private javax.swing.JLabel functionalInterfaceLabel; 339 private javax.swing.JTabbedPane ObjectViewJTabbedPane; 340 private javax.swing.JSplitPane jSplitPane1; 341 private javax.swing.JLabel jLabel3; 342 private javax.swing.JLabel jLabel1; 343 345 } 346 | Popular Tags |