1 package org.sape.carbon.services.console; 2 3 import java.awt.BorderLayout ; 4 import java.awt.Color ; 5 import java.awt.geom.Point2D ; 6 7 import javax.management.MBeanAttributeInfo ; 8 import javax.management.MBeanServer ; 9 import javax.management.ObjectName ; 10 11 import org.sape.carbon.services.swing.graph.GraphCanvas; 12 import org.sape.carbon.services.swing.ui.VerticalLabelUI; 13 14 21 public class AttributeGraph extends javax.swing.JFrame implements Runnable { 22 23 private GraphCanvas graphCanvas; 24 private ObjectName objectName; 25 private MBeanAttributeInfo [] attributeInfo; 26 private MBeanServer server; 27 28 private boolean isRunning = true; 29 30 private static Color [] COLORS = 31 new Color [] { 32 Color.red, 33 Color.blue, 34 Color.black, 35 Color.orange, 36 Color.pink, 37 Color.magenta }; 38 39 40 public AttributeGraph(ObjectName objectName, MBeanAttributeInfo attributeInfo, MBeanServer server) { 41 this(objectName, new MBeanAttributeInfo [] { attributeInfo }, server); 42 } 43 44 public AttributeGraph(ObjectName objectName, MBeanAttributeInfo [] attributeInfo, MBeanServer server) { 45 this.objectName = objectName; 46 this.attributeInfo = attributeInfo; 47 this.server = server; 48 49 initComponents(); 50 51 this.sleepLabel.setUI(new VerticalLabelUI(false)); 52 53 54 this.graphCanvas = new GraphCanvas(); 55 56 for (int i = 0; i < this.attributeInfo.length; i++) { 57 this.graphCanvas.addTrack(this.attributeInfo[i].getName(), AttributeGraph.COLORS[i % COLORS.length]); 58 } 59 this.setTitle("Graph of: " + this.objectName.toString()); 60 61 this.getContentPane().add(this.graphCanvas, BorderLayout.CENTER); 62 63 Thread runner = new Thread (this); 64 runner.start(); 65 66 } 67 68 public void run() { 69 70 long time = 0L; 71 72 while (isRunning) { 73 try { 74 75 for (int i = 0; i < this.attributeInfo.length; i++) { 76 String attributeName = this.attributeInfo[i].getName(); 77 Object value = this.server.getAttribute(this.objectName,attributeName); 78 79 Number num = (Number ) value; 80 81 Point2D pt = new Point2D.Double (time, num.doubleValue()); 82 this.graphCanvas.addPoint(attributeName,pt); 83 84 } 85 time++; 86 87 if (time > 100) 88 this.graphCanvas.translate(1,0); 89 90 if ((time % 2) == 0) 91 this.graphCanvas.verticalBound(); 92 93 this.graphCanvas.repaint(); 94 95 long sleep = this.sleepSlider.getValue(); 96 try { 97 Thread.currentThread().sleep(sleep); 98 } catch (InterruptedException ie) { } 99 } catch (Exception e) { 100 e.printStackTrace(); 101 } 102 } 103 104 } 105 106 107 112 private void initComponents() { jPanel1 = new javax.swing.JPanel (); 114 jButton1 = new javax.swing.JButton (); 115 jPanel2 = new javax.swing.JPanel (); 116 sleepLabel = new javax.swing.JLabel (); 117 sleepSlider = new javax.swing.JSlider (); 118 119 addWindowListener(new java.awt.event.WindowAdapter () { 120 public void windowClosing(java.awt.event.WindowEvent evt) { 121 exitForm(evt); 122 } 123 }); 124 125 jButton1.setText("Close"); 126 jButton1.addActionListener(new java.awt.event.ActionListener () { 127 public void actionPerformed(java.awt.event.ActionEvent evt) { 128 jButton1ActionPerformed(evt); 129 } 130 }); 131 132 jPanel1.add(jButton1); 133 134 getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH); 135 136 sleepLabel.setFont(new java.awt.Font ("Dialog", 0, 12)); 137 sleepLabel.setText("Update delay (milleseconds)"); 138 jPanel2.add(sleepLabel); 139 140 sleepSlider.setFont(new java.awt.Font ("Dialog", 0, 10)); 141 sleepSlider.setMajorTickSpacing(400); 142 sleepSlider.setMaximum(2050); 143 sleepSlider.setMinimum(50); 144 sleepSlider.setOrientation(javax.swing.JSlider.VERTICAL); 145 sleepSlider.setPaintLabels(true); 146 sleepSlider.setPaintTicks(true); 147 sleepSlider.setToolTipText("Choose the number of milleseconds between updates"); 148 sleepSlider.setValue(500); 149 jPanel2.add(sleepSlider); 150 151 getContentPane().add(jPanel2, java.awt.BorderLayout.EAST); 152 153 pack(); 154 java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 155 setSize(new java.awt.Dimension (576, 305)); 156 setLocation((screenSize.width-576)/2,(screenSize.height-305)/2); 157 } 159 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { this.isRunning = false; 162 this.setVisible(false); 163 this.dispose(); 164 165 } 167 168 private void exitForm(java.awt.event.WindowEvent evt) { this.isRunning = false; 170 } 172 175 public static void main(String args[]) { 176 } 178 179 180 private javax.swing.JButton jButton1; 182 private javax.swing.JLabel sleepLabel; 183 private javax.swing.JPanel jPanel2; 184 private javax.swing.JPanel jPanel1; 185 private javax.swing.JSlider sleepSlider; 186 188 } 189 | Popular Tags |