/** * Jeff Rupp * Master's Thesis * 2005 * * This class implements a generic data graphing panel * */ package jdr.mobisim; import java.awt.*; public class NodeColorKeyPanel extends Panel { public static final Dimension s_SIZE = new Dimension(400, 500); private static final int s_Y_SPACING = 20; private java.awt.image.BufferedImage m_offScreen = null; private Graphics2D m_offScreenGraphics = null; public NodeColorKeyPanel() { } public void paint(Graphics g) { if(m_offScreenGraphics == null) { m_offScreen = (java.awt.image.BufferedImage)createImage(s_SIZE.width, s_SIZE.height); m_offScreenGraphics = m_offScreen.createGraphics(); m_offScreenGraphics.setColor(Color.black); m_offScreenGraphics.fillRect(0, 0, s_SIZE.width, s_SIZE.height); int x = 10; int y = 10; m_offScreenGraphics.setColor(Color.pink); m_offScreenGraphics.fillRect(x, y, 7, 7); m_offScreenGraphics.drawString("Sink Node", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.white); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("SEND_HELLO_MESSAGE", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.green); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("AWAITING_RTS", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.magenta); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("AWAITING_CTS", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.blue); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("AWAITING_PACKET", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.pink); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("AWAITING_ACK", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.lightGray); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("SEND_SENSOR_DATA_MESSAGE", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.gray); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("SEND_CLUSTERED_DATA_MESSAGE", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.orange); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("SEND_CLUSTER_HEAD_GETTING_TIRED_MESSAGE", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.yellow); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("TRANSMITTING", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.red); m_offScreenGraphics.fillOval(x, y, 6, 6); m_offScreenGraphics.drawString("UNKNOWN", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.cyan); m_offScreenGraphics.fillRect(x, y, 4, 4); m_offScreenGraphics.drawString("Cluster Head", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.magenta); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Sent RTS, awaiting CTS", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.pink); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Sent message, awaiting ACK", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.blue); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Sent CTS, awaiting message", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.yellow); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Conversation in progress", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.white); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Comm History (cmd line param)", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.blue); m_offScreenGraphics.drawLine(x, y, x+8, y); m_offScreenGraphics.drawString("Comm history, interval bounded (cmd line param)", x + 10, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.green); m_offScreenGraphics.fillArc(x, y, 10, 10, 180, -180); m_offScreenGraphics.drawString("Power Reserve >= 1/2", x + 12, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.yellow); m_offScreenGraphics.fillArc(x, y, 10, 10, 180, -90); m_offScreenGraphics.drawString("Power Reserve < 1/2", x + 12, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.red); m_offScreenGraphics.fillArc(x, y, 10, 10, 180, -20); m_offScreenGraphics.drawString("Power Reserve < 1/10", x + 12, y+7); y += s_Y_SPACING; m_offScreenGraphics.setColor(Color.magenta); m_offScreenGraphics.fillArc(x, y, 10, 10, 180, -180); m_offScreenGraphics.drawString("Power Reserve empty", x + 12, y+7); y += s_Y_SPACING; } if(m_offScreenGraphics != null) { synchronized(m_offScreenGraphics) { ((Graphics2D)g).drawImage(m_offScreen, 0, 0, this); } } } }