1 16 17 package org.mc4j.console.swing.editor.jmx; 18 19 import org.openide.ErrorManager; 20 import org.openide.explorer.propertysheet.PropertySheet; 21 import org.openide.nodes.AbstractNode; 22 import org.openide.nodes.Children; 23 import org.openide.nodes.Node; 24 import org.openide.nodes.PropertySupport; 25 import org.openide.nodes.Sheet; 26 import org.openide.windows.IOProvider; 27 28 import javax.management.openmbean.CompositeData ; 29 import javax.management.openmbean.CompositeDataSupport ; 30 import javax.management.openmbean.OpenDataException ; 31 import javax.swing.*; 32 import java.awt.*; 33 import java.beans.PropertyEditorSupport ; 34 import java.util.Iterator ; 35 import java.util.Set ; 36 37 38 42 public class CompositeDataEditor extends PropertyEditorSupport { 43 44 public boolean supportsCustomEditor() { 45 return true; 46 } 47 48 public Component getCustomEditor() { 49 Object value = getValue(); 50 if (value instanceof CompositeData ) { 51 return new CompositeDataNodePanel((CompositeData ) value, this); 53 } 54 return null; 55 } 56 57 58 public static class CompositeDataNodePanel extends JPanel { 59 60 public CompositeDataNodePanel(CompositeData data, CompositeDataEditor cde) { 61 62 setLayout(new BorderLayout()); 63 PropertySheet sheet = new PropertySheet(); 64 65 CompositeDataNode node = new CompositeDataNode(data, cde); 66 67 try { 68 sheet.setNodes(new Node[]{node}); 69 } catch (Exception e) { 70 ErrorManager.getDefault().notify(e); 71 } 72 add(sheet, BorderLayout.CENTER); 73 } 74 } 75 76 77 public static class CompositeDataNode extends AbstractNode { 78 CompositeData data; 79 CompositeDataEditor cde; 80 81 public CompositeDataNode(CompositeData data, CompositeDataEditor cde) { 82 super(Children.LEAF); 83 this.data = data; 84 this.cde = cde; 85 86 setDisplayName(this.data.getCompositeType().getDescription()); 87 } 88 89 public Node.PropertySet[] getPropertySets() { 90 Sheet.Set props = Sheet.createPropertiesSet(); 91 props.setName("compositeItems"); 92 props.setDisplayName("Composite Items"); 93 props.setShortDescription("Item info that make up this composite data"); 94 95 Set keySet = this.data.getCompositeType().keySet(); 96 for (Iterator iterator = keySet.iterator(); iterator.hasNext();) { 97 final String keyName = (String ) iterator.next(); 98 Class dataClass = null; 99 try { 100 dataClass = Class.forName(this.data.getCompositeType().getType(keyName).getClassName()); 101 } catch (ClassNotFoundException cnfe) { 102 } 103 String description = this.data.getCompositeType().getDescription(keyName); 104 props.put(new PropertySupport.ReadWrite(keyName, 105 dataClass, 106 keyName, 107 description) { 108 109 public Object getValue() { 110 Object value = data.get(keyName); 111 return value; 112 } 113 114 public void setValue(Object value) { 115 CompositeDataSupport cds = null; 116 try { 117 cds = createCompositeData(value); 118 data = cds; 119 cde.setValue(data); 120 } catch (OpenDataException e) { 121 IOProvider.getDefault().getIO("MC4J Errors", false).getOut(). 123 println("CompositeDataSupport exception: " + e.getMessage()); 124 } 125 } 126 127 132 private CompositeDataSupport createCompositeData(Object value) throws OpenDataException { 133 Set set = data.getCompositeType().keySet(); 134 int i = 0; 135 Object [] newData = new Object [set.size()]; 136 String [] newDescriptions = new String [set.size()]; 137 for (Iterator iter = set.iterator(); iter.hasNext();) { 138 String key = (String ) iter.next(); 139 if (keyName.equals(key)) { 140 newData[i] = value; 141 } else { 142 newData[i] = data.get(key); 143 ; 144 } 145 newDescriptions[i] = key; 146 i++; 147 } 148 CompositeDataSupport cds = new CompositeDataSupport (data.getCompositeType(), newDescriptions, newData); 149 return cds; 150 } 151 }); 152 153 } 154 return new Node.PropertySet[]{props}; 155 } 156 157 } 158 159 329 330 } 331 | Popular Tags |