package Simulator; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.io.*; import java.util.*; import javax.swing.*; public class Chart extends JFrame implements ActionListener { JButton Start = new JButton(); JButton Stop = new JButton(); JPanel controlPanel = new JPanel(); JPanel TrafficChoice = new JPanel(new GridLayout(3,1,5,5)); JPanel TimeSetting = new JPanel(); JPanel MethodChoice = new JPanel(new GridLayout(4,1,5,5)); JPanel Action = new JPanel(new GridLayout(2,1,15,15)); JPanel ChartPanel = new JPanel(); JMenuBar menuBar; JMenu menu; JMenuItem menuItem; JRadioButton flat; JRadioButton slope; JRadioButton web; ButtonGroup group; JCheckBox single; JCheckBox multiple; JCheckBox cprobe; JCheckBox adaptive; JTextField SMT = new JTextField(6); // probe start time JTextField EMT = new JTextField(6); // probe end time JTextField TMI = new JTextField(6); // traffic measurement Interval JTextField PMI = new JTextField(6); // probing measurement Interval int begin_seconds; double Tcurx,Tcury; int HUnit,VUnit; public Chart() { enableEvents(AWTEvent.WINDOW_EVENT_MASK); try { jbInit(); } catch (Exception e) { e.printStackTrace(); } } private void jbInit() throws Exception { this.setSize(new Dimension(800,650)); this.setTitle("BandWidth/Time Chart"); this.getContentPane().setLayout(null); controlPanel.setBackground(Color.lightGray); controlPanel.setBounds(new Rectangle(0,0,800,146)); //controlPanel.setLayout(new BorderLayout()); controlPanel.setLayout(new FlowLayout()); controlPanel.setBorder(BorderFactory.createEmptyBorder(4,3,4,2)); //TrafficChoice.setMinimumSize(new Dimension(100,120)); MethodChoice.setPreferredSize(new Dimension(130,130)); //TrafficChoice.setMaximumSize(new Dimension(200,120)); MethodChoice.setBorder(BorderFactory.createTitledBorder("Methods")); single = new JCheckBox("SingleMsg"); single.setSelected(true); multiple = new JCheckBox("MultipleMsg"); cprobe = new JCheckBox("Cprobing"); adaptive = new JCheckBox("Adaptive Cprobe"); MethodChoice.add(single); MethodChoice.add(multiple); MethodChoice.add(cprobe); MethodChoice.add(adaptive); GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); TimeSetting.setLayout(gridbag); c.fill = GridBagConstraints.HORIZONTAL; TimeSetting.setBorder(BorderFactory.createTitledBorder("Time Setting")); JLabel label = new JLabel("Measurement Start Time: ",JLabel.RIGHT); c.gridx=0; c.gridy=0; c.weightx = 0.5; c.insets = new Insets(3,0,3,5); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=1; c.gridy=0; gridbag.setConstraints(SMT,c); SMT.setText("0.5"); TimeSetting.add(SMT); c.gridx=2; c.gridy=0; label = new JLabel("Seconds"); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=0; c.gridy=1; label = new JLabel("Measurement End Time: ",JLabel.RIGHT); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=1; c.gridy=1; gridbag.setConstraints(EMT,c); EMT.setText("8"); TimeSetting.add(EMT); c.gridx=2; c.gridy=1; label = new JLabel("Seconds"); gridbag.setConstraints(label,c); TimeSetting.add(label); //TimeSetting.add(new JLabel("Seconds")); c.gridx=0; c.gridy=2; label = new JLabel("Traffic Measurement Interval: ",JLabel.RIGHT); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=1; c.gridy=2; gridbag.setConstraints(TMI,c); TMI.setText("0.0064"); TimeSetting.add(TMI); c.gridx=2; c.gridy=2; label = new JLabel("Seconds"); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=0; c.gridy=3; label = new JLabel("Probe Measurement Interval: ",JLabel.RIGHT); gridbag.setConstraints(label,c); TimeSetting.add(label); c.gridx=1; c.gridy=3; gridbag.setConstraints(PMI,c); PMI.setText("0.1"); TimeSetting.add(PMI); c.gridx=2; c.gridy=3; label = new JLabel("Seconds"); gridbag.setConstraints(label,c); TimeSetting.add(label); TimeSetting.setPreferredSize(new Dimension(380,130)); TrafficChoice.setMinimumSize(new Dimension(100,120)); TrafficChoice.setPreferredSize(new Dimension(105,130)); TrafficChoice.setMaximumSize(new Dimension(200,120)); TrafficChoice.setBorder(BorderFactory.createTitledBorder("Traffic Pattern")); flat = new JRadioButton("Flat"); flat.setActionCommand("flat"); flat.setSelected(true); slope = new JRadioButton("Slope"); slope.setActionCommand("slope"); web = new JRadioButton("Web"); web.setActionCommand("web"); group = new ButtonGroup(); group.add(flat); group.add(slope); group.add(web); TrafficChoice.add(flat); TrafficChoice.add(slope); TrafficChoice.add(web); Action.setBorder(BorderFactory.createEmptyBorder(5,4,2,3)); Start.setName("Start"); Start.setLabel("Start Simulation"); Start.addActionListener(this); Start.setActionCommand("Start"); Start.setMargin(new Insets(5,3,5,3)); Start.setBorder(BorderFactory.createEtchedBorder()); Stop.setName("Stop"); Stop.setLabel("Stop Simulation"); Stop.addActionListener(this); Stop.setActionCommand("Stop"); //Stop.setPreferredSize(new Dimension(40,10)); //Stop.setMaximumSize(new Dimension(60,10)); Stop.setMargin(new Insets(5,3,5,3)); Stop.setBorder(BorderFactory.createEtchedBorder()); Stop.setEnabled(false); Action.add(Start); Action.add(Stop); Action.setPreferredSize(new Dimension(120,120)); this.getContentPane().add(controlPanel,null); controlPanel.add(MethodChoice); controlPanel.add(Box.createHorizontalBox()); controlPanel.add(TimeSetting); controlPanel.add(Box.createHorizontalBox()); controlPanel.add(TrafficChoice); controlPanel.add(Box.createHorizontalBox()); controlPanel.add(Action); ChartPanel.setBackground(Color.darkGray); ChartPanel.setBounds(new Rectangle(0,148,800,450)); ChartPanel.setLayout(null); this.getContentPane().add(ChartPanel,null); // create menu bar menuBar = new JMenuBar(); setJMenuBar(menuBar); // build the first menu menu = new JMenu("Cprobing Statistic"); menuBar.add(menu); // a group of JmenuItems menuItem = new JMenuItem("Message Size"); menu.add(menuItem); menuItem.addActionListener(this); menuItem = new JMenuItem("Message Quantity"); menu.add(menuItem); menuItem.addActionListener(this); menuItem = new JMenuItem("Link Length"); menu.add(menuItem); menuItem.addActionListener(this); menu.addSeparator(); menuItem = new JMenuItem("Router Processing Speed"); menu.add(menuItem); menuItem.addActionListener(this); menuItem = new JMenuItem("Hop(Router) Number"); menu.add(menuItem); menuItem.addActionListener(this); this.setVisible(true); show(); } // overridden so we can exit on System Close protected void processWindowEvent(WindowEvent e) { super.processWindowEvent(e); if (e.getID() == WindowEvent.WINDOW_CLOSING) { System.exit(0); } } public void actionPerformed(ActionEvent e) { Thread SM = null; Thread MM = null; Thread CB = null; Thread AB = null; ThreadGroup tg = new ThreadGroup("Measurements"); // if there are more than one method choosen boolean trafficoutput = true; if (e.getActionCommand().equals("Start")) { // check the traffic pattern String trafficpattern = group.getSelection().getActionCommand(); // get the time setting Double doublevalue = Double.valueOf(SMT.getText()); double smt = doublevalue.doubleValue(); doublevalue = Double.valueOf(EMT.getText()); double emt = doublevalue.doubleValue(); doublevalue = Double.valueOf(TMI.getText()); double tmi = doublevalue.doubleValue(); doublevalue = Double.valueOf(PMI.getText()); double pmi = doublevalue.doubleValue(); if (single.isSelected()) { SM = new Thread(tg,new SingleMessMeasurement(ChartPanel,trafficpattern,smt,emt,tmi,pmi,trafficoutput)); trafficoutput = false; SM.start(); } if (multiple.isSelected()) { MM = new Thread(tg,new MultipleMessMeasurement(ChartPanel,trafficpattern,smt,emt,tmi,pmi,trafficoutput)); trafficoutput = false; MM.start(); } if (cprobe.isSelected()) { CB = new Thread(tg,new CprobingMeasurement(ChartPanel,trafficpattern,smt,emt,tmi,pmi,trafficoutput)); trafficoutput = false; CB.start(); } if (adaptive.isSelected()) { AB = new Thread(tg,new AdaptiveCprobingMeasurement(ChartPanel,trafficpattern,smt,emt,tmi,pmi,trafficoutput)); AB.start(); } Start.setEnabled(false); Stop.setEnabled(true); } if (e.getActionCommand().equals("Stop")) { tg.stop(); Stop.setEnabled(false); Start.setEnabled(true); } if (e.getSource() instanceof JMenuItem) { JMenuItem source = (JMenuItem) (e.getSource()); JFrame frame; if (source.getText().equals("Message Size")) { frame = new CprobArguments(1); frame.setTitle("Cprobing Statistics form"); // center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2); } if (source.getText().equals("Message Quantity")) { frame = new CprobArguments(2); frame.setTitle("Cprobing Statistics form"); // center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2); } if (source.getText().equals("Link Length")) { frame = new CprobArguments(3); frame.setTitle("Cprobing Statistics form"); // center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2); } if (source.getText().equals("Router Processing Speed")) { frame = new CprobArguments(4); frame.setTitle("Cprobing Statistics form"); // center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2); } if (source.getText().equals("Hop(Router) Number")) { frame = new CprobArguments(5); frame.setTitle("Cprobing Statistics form"); // center the window Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = frame.getSize(); if (frameSize.height > screenSize.height) frameSize.height = screenSize.height; if (frameSize.width > screenSize.width) frameSize.width = screenSize.width; frame.setLocation((screenSize.width - frameSize.width)/2,(screenSize.height - frameSize.height)/2); } } } // end of function }