/** * Jeff Rupp * Master's Thesis * 2005 * * sets all of the simulation related parameters: * type of node * type of protocol * type of propagation * type of packet * number of nodes * number of nodes per cluster * algorigthm (selected via the node type) * number of transmit power levels * average desired node density * maximum bit rate * data bytes per packet * header size * data transmit frequency * power per bit for distance * * Rampable paramters (for graph sampling) * allow multiple ramps and selection of sequential ramp order * number of nodes * transmit levels * number of nodes per cluster * maximum transmit range * node density * bit rate * data size * header size * data transmit frequency * * Note 1 watt-hour == 3600 Joule. * watch batteries have approx. 10 joule */ package jdr.mobisim; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.io.*; import org.apache.log4j.*; public class SimSetupDialog extends JDialog { private static Logger m_logger = Logger.getLogger(SimSetupDialog.class); private static final String s_PACKAGE_NAME = "jdr.mobisim"; // simulation entry parameters private JComboBox m_nodeClassNameCombo = new JComboBox(); private JLabel m_algorithmLabel = new JLabel(""); private JComboBox m_protocolClassNameCombo = new JComboBox(); private JComboBox m_propagationClassNameCombo = new JComboBox(); private JComboBox m_packetClassNameCombo = new JComboBox(); private JTextField m_numberOfNodesEdit = new JTextField("25"); private JTextField m_numberOfNodesPerClusterEdit = new JTextField("10"); private JTextField m_numberOfPowerLevelsEdit = new JTextField("12"); private JTextField m_areaWidthEdit = new JTextField("90"); private JTextField m_areaHeightEdit = new JTextField("75"); private JTextField m_sinkNodeXEdit = new JTextField("0"); private JTextField m_sinkNodeYEdit = new JTextField("0"); private JTextField m_avergeNodesPer1000UnitsAreaEdit = new JTextField("10"); private JTextField m_maximumBitRateBpsEdit = new JTextField("100000"); private JTextField m_headerSizeBytesEdit = new JTextField("10"); private JTextField m_dataSizeBytesEdit = new JTextField("60"); private JTextField m_dataTransmitIntervalTicsEdit = new JTextField("200"); private JTextField m_wattHoursCapacityEdit = new JTextField("0.0028"); private JTextField m_helloLevelPercentEdit = new JTextField("30"); private JTextField m_simulationRunTicsEdit = new JTextField("300000"); private JTextField m_runToPercentEdit = new JTextField("0.0"); private JTextField m_percentOfNodesAtRunToPercentEdit = new JTextField("100.0"); private JTextField m_threadPoolSizeEdit = new JTextField("50"); // ramping parameters private JCheckBox m_enableRampingCheck = new JCheckBox("Enable Ramping"); private JRadioButton m_enableNumNodesRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_numberNodesRampStartEdit = new JTextField("10"); private JTextField m_numberNodesRampStopEdit = new JTextField("100"); private JTextField m_numberNodesRampStepSizeEdit = new JTextField("30"); private JCheckBox m_matchNumNodesWithAreaCheck = new JCheckBox("Use Nodes Per 1000 Units Area To Match Size With Number of Nodes"); private JRadioButton m_enableTransmitLevelsRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_transmitLevelsRampStartEdit = new JTextField("1"); private JTextField m_transmitLevelsRampStopEdit = new JTextField("10"); private JTextField m_transmitLevelsRampStepSizeEdit = new JTextField("1"); private JRadioButton m_enableRehelloPercentRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_rehelloPercentRampStartEdit = new JTextField("10"); private JTextField m_rehelloPercentRampStopEdit = new JTextField("100"); private JTextField m_rehelloPercentRampStepSizeEdit = new JTextField("10"); private JRadioButton m_enableNumNodesPerClusterRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_numNodesPerClusterRampStartEdit = new JTextField("1"); private JTextField m_numNodesPerClusterRampStopEdit = new JTextField("100"); private JTextField m_numNodesPerClusterRampStepSizeEdit = new JTextField("10"); private JRadioButton m_enableMaxTransmitRangeRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_maxTransmitRangeRampStartEdit = new JTextField("10"); private JTextField m_maxTransmitRangeRampStopEdit = new JTextField("400"); private JTextField m_maxTransmitRangeRampStepSizeEdit = new JTextField("10"); private JRadioButton m_enableNodesPer1000UnitsAreaRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_nodesPer1000UnitsAreaRampStartEdit = new JTextField("1"); private JTextField m_nodesPer1000UnitsAreaRampStopEdit = new JTextField("100"); private JTextField m_nodesPer1000UnitsAreaRampStepSizeEdit = new JTextField("10"); private JRadioButton m_enableAreaRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_areaRampXStartEdit = new JTextField("50"); private JTextField m_areaRampXStopEdit = new JTextField("200"); private JTextField m_areaRampXStepSizeEdit = new JTextField("50"); private JTextField m_areaRampYStartEdit = new JTextField("40"); private JTextField m_areaRampYStopEdit = new JTextField("180"); private JTextField m_areaRampYStepSizeEdit = new JTextField("47"); private JRadioButton m_enableMaxBitRateBpsRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_maxBitRateBpsRampStartEdit = new JTextField("1000"); private JTextField m_maxBitRateBpsRampStopEdit = new JTextField("1000000"); private JTextField m_maxBitRateBpsRampStepSizeEdit = new JTextField("1000"); private JRadioButton m_enableHeaderSizeBytesRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_headerSizeBytesRampStartEdit = new JTextField("10"); private JTextField m_headerSizeBytesRampStopEdit = new JTextField("50"); private JTextField m_headerSizeBytesRampStepSizeEdit = new JTextField("5"); private JRadioButton m_enableDataSizeBytesRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_dataSizeBytesRampStartEdit = new JTextField("10"); private JTextField m_dataSizeBytesRampStopEdit = new JTextField("150"); private JTextField m_dataSizeBytesRampStepSizeEdit = new JTextField("20"); private JRadioButton m_enabledataTransmitIntervalTicsRampRadio = new JRadioButton("Enable Ramp"); private JTextField m_dataTransmitIntervalTicsRampStartEdit = new JTextField("100"); private JTextField m_dataTransmitIntervalTicsRampStopEdit = new JTextField("3000"); private JTextField m_dataTransmitIntervalTicsRampStepSizeEdit = new JTextField("100"); private ButtonGroup m_enableRadioGroup = new ButtonGroup(); private JTabbedPane m_tabPane = new JTabbedPane(); private JButton m_okButton = new JButton("Ok"); private JButton m_cancelButton = new JButton("Cancel"); private boolean m_closeWasOk = true; private String m_nodeClassName = null; private String m_protocolClassName = null; private String m_propagationClassName = null; private String m_packetClassName = null; private double m_numberOfNodes = 100.0; private double m_numberOfNodesPerCluster = 10.0; private double m_numberOfPowerLevels = 12.0; private double m_areaWidth = 90.0; private double m_areaHeight = 75.0; private double m_sinkNodeX = 0.0; private double m_sinkNodeY = 0.0; private double m_avergeNodesPer1000UnitsArea = 10.0; private double m_maximumBitRateBps = 100000.0; private double m_headerSizeBytes = 10.0; private double m_dataSizeBytes = 60.0; private double m_dataTransmitIntervalTics = 200.0; private double m_wattHoursCapacity = 0.0028; private double m_simulationRunTics = 300000; private double m_runToPercent = 0.0; private double m_percentOfNodesAtRunToPercent = 100.0; private double m_threadPoolSize = 30; private double m_helloLevelPercent = 30; // ramping parameters private boolean m_enableRamping = false; private boolean m_enableNumNodesRamp = false; private double m_numberNodesRampStart = 10.0; private double m_numberNodesRampStop = 100.0; private double m_numberNodesRampStepSize = 30.0; private boolean m_matchNumNodesWithArea = false; private boolean m_enableTransmitLevelsRamp = false; private double m_transmitLevelsRampStart = 1.0; private double m_transmitLevelsRampStop = 10.0; private double m_transmitLevelsRampStepSize = 1.0; private boolean m_enableRehelloPercentRamp = false; private double m_rehelloPercentRampStart = 10.0; private double m_rehelloPercentRampStop = 100.0; private double m_rehelloPercentRampStepSize = 10.0; private boolean m_enableNumNodesPerClusterRamp = false; private double m_numNodesPerClusterRampStart = 1.0; private double m_numNodesPerClusterRampStop = 100.0; private double m_numNodesPerClusterRampStepSize = 10.0; private boolean m_enableMaxTransmitRangeRamp = false; private double m_maxTransmitRangeRampStart = 10.0; private double m_maxTransmitRangeRampStop = 400.0; private double m_maxTransmitRangeRampStepSize = 10.0; private boolean m_enableNodesPer1000UnitsAreaRamp = false; private double m_nodesPer1000UnitsAreaRampStart = 1.0; private double m_nodesPer1000UnitsAreaRampStop = 100.0; private double m_nodesPer1000UnitsAreaRampStepSize = 10.0; private boolean m_enableAreaRamp = false; private double m_areaRampXStart = 50; private double m_areaRampXStop = 200; private double m_areaRampXStepSize = 50; private double m_areaRampYStart = 40; private double m_areaRampYStop = 180; private double m_areaRampYStepSize = 47; private boolean m_enableMaxBitRateBpsRamp = false; private double m_maxBitRateBpsRampStart = 1000.0; private double m_maxBitRateBpsRampStop = 1000000.0; private double m_maxBitRateBpsRampStepSize = 1000.0; private boolean m_enableHeaderSizeBytesRamp = false; private double m_headerSizeBytesRampStart = 10.0; private double m_headerSizeBytesRampStop = 50.0; private double m_headerSizeBytesRampStepSize = 5.0; private boolean m_enableDataSizeBytesRamp = false; private double m_dataSizeBytesRampStart = 10.0; private double m_dataSizeBytesRampStop = 150.0; private double m_dataSizeBytesRampStepSize = 20.0; private boolean m_enabledataTransmitIntervalTicsRamp = false; private double m_dataTransmitIntervalTicsRampStart = 100.0; private double m_dataTransmitIntervalTicsRampStop = 3000.0; private double m_dataTransmitIntervalTicsRampStepSize = 100.0; private SortedSet m_nodeIfClasses = null; private SortedSet m_packetIfClasses = null; private SortedSet m_protocolIfClasses = null; private SortedSet m_propagationIfClasses = null; private boolean m_rampingStarted = false; private double m_rampedValueCurrentValue = 0.0; private String m_rampedValueName = "none"; public SimSetupDialog() { super((Frame)null, "Simulation Setup"); initGui(); setSize(new Dimension(610, 840)); } private void initGui() { JPanel paramsPnl = new JPanel(new VFlowLayout()); JPanel rampPnl = new JPanel(new VFlowLayout()); // params JPanel pnl = new JPanel(); pnl.add(new JLabel("Node type: ")); pnl.add(m_nodeClassNameCombo); pnl.add(m_algorithmLabel); paramsPnl.add(pnl); pnl = new JPanel(); pnl.add(new JLabel("Protocol type: ")); pnl.add(m_protocolClassNameCombo); paramsPnl.add(pnl); pnl = new JPanel(); pnl.add(new JLabel("Propagation type: ")); pnl.add(m_propagationClassNameCombo); paramsPnl.add(pnl); pnl = new JPanel(); pnl.add(new JLabel("Packet type: ")); pnl.add(m_packetClassNameCombo); paramsPnl.add(pnl); pnl = new JPanel(); m_numberOfNodesEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Number of nodes: ")); pnl.add(m_numberOfNodesEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_numberOfNodesPerClusterEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Number of nodes per cluster: ")); pnl.add(m_numberOfNodesPerClusterEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_numberOfPowerLevelsEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Number of discrete power levels: ")); pnl.add(m_numberOfPowerLevelsEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_helloLevelPercentEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Hello protocol re-hello levels(percent): ")); m_helloLevelPercentEdit.setToolTipText("Percentage of hello transmit levels "+ "which will also execute the hello sequence"); pnl.add(m_helloLevelPercentEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_areaWidthEdit.setPreferredSize(new Dimension(80,24)); m_areaHeightEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Area width: ")); pnl.add(m_areaWidthEdit); pnl.add(new JLabel(" height: ")); pnl.add(m_areaHeightEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_sinkNodeXEdit.setPreferredSize(new Dimension(80,24)); m_sinkNodeYEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Sink node X: ")); pnl.add(m_sinkNodeXEdit); pnl.add(new JLabel(" Y: ")); pnl.add(m_sinkNodeYEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_avergeNodesPer1000UnitsAreaEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Average number of nodes per 1000 square units area: ")); pnl.add(m_avergeNodesPer1000UnitsAreaEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_maximumBitRateBpsEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Maximum bit rate (bps): ")); pnl.add(m_maximumBitRateBpsEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_headerSizeBytesEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Header size (Bytes): ")); pnl.add(m_headerSizeBytesEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_dataSizeBytesEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Data size (Bytes): ")); pnl.add(m_dataSizeBytesEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_dataTransmitIntervalTicsEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel("Number of tics between data transmits: ")); pnl.add(m_dataTransmitIntervalTicsEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_wattHoursCapacityEdit.setPreferredSize(new Dimension(80,24)); m_wattHoursCapacityEdit.setToolTipText("two AA batteries are about 4.5 Watt-Hour, a watch battery about 0.0028 Watt-Hour"); pnl.add(new JLabel("Watt-Hours capacity of the batteries: ")); pnl.add(m_wattHoursCapacityEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_simulationRunTicsEdit.setPreferredSize(new Dimension(80,24)); m_simulationRunTicsEdit.setToolTipText("Number of simulated tics to run After the clusters are formed. Overridden if Percent at > 0"); pnl.add(new JLabel("Simulation duration (tics): ")); pnl.add(m_simulationRunTicsEdit); paramsPnl.add(pnl); pnl = new JPanel(); m_runToPercentEdit.setPreferredSize(new Dimension(80,24)); m_runToPercentEdit.setToolTipText("Percent of initial power left at which to stop sim. Over-rides tics when non-zero."); pnl.add(new JLabel("Stop Sim at % Power Left: ")); pnl.add(m_runToPercentEdit); m_percentOfNodesAtRunToPercentEdit.setPreferredSize(new Dimension(80,24)); pnl.add(new JLabel(" % of Nodes at Level: ")); pnl.add(m_percentOfNodesAtRunToPercentEdit); m_percentOfNodesAtRunToPercentEdit.setToolTipText("Percentage of the nodes at the specificed level."); paramsPnl.add(pnl); pnl = new JPanel(); m_threadPoolSizeEdit.setPreferredSize(new Dimension(80,24)); m_threadPoolSizeEdit.setToolTipText("Number number of threads used by the scheduler"); pnl.add(new JLabel("Thread Pool Size: ")); pnl.add(m_threadPoolSizeEdit); paramsPnl.add(pnl); // ramp m_enableRadioGroup.add(m_enableNumNodesRampRadio); m_enableRadioGroup.add(m_enableTransmitLevelsRampRadio); m_enableRadioGroup.add(m_enableRehelloPercentRampRadio); m_enableRadioGroup.add(m_enableNumNodesPerClusterRampRadio); m_enableRadioGroup.add(m_enableMaxTransmitRangeRampRadio); m_enableRadioGroup.add(m_enableNodesPer1000UnitsAreaRampRadio); m_enableRadioGroup.add(m_enableAreaRampRadio); m_enableRadioGroup.add(m_enableMaxBitRateBpsRampRadio); m_enableRadioGroup.add(m_enableHeaderSizeBytesRampRadio); m_enableRadioGroup.add(m_enableDataSizeBytesRampRadio); m_enableRadioGroup.add(m_enabledataTransmitIntervalTicsRampRadio); pnl = new JPanel(); pnl.add(m_enableRampingCheck); rampPnl.add(pnl); pnl = new JPanel(); m_numberNodesRampStartEdit.setPreferredSize(new Dimension(80,24)); m_numberNodesRampStopEdit.setPreferredSize(new Dimension(80,24)); m_numberNodesRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Number of Nodes: ")); pnl.add(m_numberNodesRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_numberNodesRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_numberNodesRampStepSizeEdit); pnl.add(m_enableNumNodesRampRadio); m_enableNumNodesRampRadio.setSelected(true); rampPnl.add(pnl); rampPnl.add(m_matchNumNodesWithAreaCheck); pnl = new JPanel(); m_transmitLevelsRampStartEdit.setPreferredSize(new Dimension(80,24)); m_transmitLevelsRampStopEdit.setPreferredSize(new Dimension(80,24)); m_transmitLevelsRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Transmit levels: ")); pnl.add(m_transmitLevelsRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_transmitLevelsRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_transmitLevelsRampStepSizeEdit); pnl.add(m_enableTransmitLevelsRampRadio); rampPnl.add(pnl); pnl = new JPanel(); m_rehelloPercentRampStartEdit.setPreferredSize(new Dimension(80,24)); m_rehelloPercentRampStopEdit.setPreferredSize(new Dimension(80,24)); m_rehelloPercentRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Rehello percent: ")); pnl.add(m_rehelloPercentRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_rehelloPercentRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_rehelloPercentRampStepSizeEdit); pnl.add(m_enableRehelloPercentRampRadio); rampPnl.add(pnl); pnl = new JPanel(); m_numNodesPerClusterRampStartEdit.setPreferredSize(new Dimension(80,24)); m_numNodesPerClusterRampStopEdit.setPreferredSize(new Dimension(80,24)); m_numNodesPerClusterRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Nodes per cluster: ")); pnl.add(m_numNodesPerClusterRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_numNodesPerClusterRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_numNodesPerClusterRampStepSizeEdit); pnl.add(m_enableNumNodesPerClusterRampRadio); rampPnl.add(pnl); /* ??? not connected to anything pnl = new JPanel(); m_maxTransmitRangeRampStartEdit.setPreferredSize(new Dimension(80,24)); m_maxTransmitRangeRampStopEdit.setPreferredSize(new Dimension(80,24)); m_maxTransmitRangeRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Transmit range: ")); pnl.add(m_maxTransmitRangeRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_maxTransmitRangeRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_maxTransmitRangeRampStepSizeEdit); pnl.add(m_enableMaxTransmitRangeRampRadio); rampPnl.add(pnl); */ pnl = new JPanel(); m_nodesPer1000UnitsAreaRampStartEdit.setPreferredSize(new Dimension(80,24)); m_nodesPer1000UnitsAreaRampStopEdit.setPreferredSize(new Dimension(80,24)); m_nodesPer1000UnitsAreaRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Nodes per 1000 square units area: ")); pnl.add(m_nodesPer1000UnitsAreaRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_nodesPer1000UnitsAreaRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_nodesPer1000UnitsAreaRampStepSizeEdit); pnl.add(m_enableNodesPer1000UnitsAreaRampRadio); rampPnl.add(pnl); pnl = new JPanel(new BorderLayout()); m_areaRampXStartEdit.setPreferredSize(new Dimension(80,24)); m_areaRampXStopEdit.setPreferredSize(new Dimension(80,24)); m_areaRampXStepSizeEdit.setPreferredSize(new Dimension(40,24)); m_areaRampYStartEdit.setPreferredSize(new Dimension(80,24)); m_areaRampYStopEdit.setPreferredSize(new Dimension(80,24)); m_areaRampYStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Area: "), BorderLayout.WEST); JPanel subPanel = new JPanel(); subPanel.add(m_areaRampXStartEdit); subPanel.add(new JLabel(" to ")); subPanel.add(m_areaRampXStopEdit); subPanel.add(new JLabel(" step ")); subPanel.add(m_areaRampXStepSizeEdit); JPanel centerPanel = new JPanel(new VFlowLayout()); centerPanel.add(subPanel); subPanel = new JPanel(); subPanel.add(m_areaRampYStartEdit); subPanel.add(new JLabel(" to ")); subPanel.add(m_areaRampYStopEdit); subPanel.add(new JLabel(" step ")); subPanel.add(m_areaRampYStepSizeEdit); centerPanel.add(subPanel); pnl.add(centerPanel, BorderLayout.CENTER); pnl.add(m_enableAreaRampRadio, BorderLayout.EAST); rampPnl.add(pnl); pnl = new JPanel(); m_maxBitRateBpsRampStartEdit.setPreferredSize(new Dimension(80,24)); m_maxBitRateBpsRampStopEdit.setPreferredSize(new Dimension(80,24)); m_maxBitRateBpsRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Max bit rate (bps): ")); pnl.add(m_maxBitRateBpsRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_maxBitRateBpsRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_maxBitRateBpsRampStepSizeEdit); pnl.add(m_enableMaxBitRateBpsRampRadio); rampPnl.add(pnl); pnl = new JPanel(); m_headerSizeBytesRampStartEdit.setPreferredSize(new Dimension(80,24)); m_headerSizeBytesRampStopEdit.setPreferredSize(new Dimension(80,24)); m_headerSizeBytesRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Header size (Bytes): ")); pnl.add(m_headerSizeBytesRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_headerSizeBytesRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_headerSizeBytesRampStepSizeEdit); pnl.add(m_enableHeaderSizeBytesRampRadio); rampPnl.add(pnl); pnl = new JPanel(); m_dataSizeBytesRampStartEdit.setPreferredSize(new Dimension(80,24)); m_dataSizeBytesRampStopEdit.setPreferredSize(new Dimension(80,24)); m_dataSizeBytesRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Data size (Bytes): ")); pnl.add(m_dataSizeBytesRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_dataSizeBytesRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_dataSizeBytesRampStepSizeEdit); pnl.add(m_enableDataSizeBytesRampRadio); rampPnl.add(pnl); pnl = new JPanel(); m_dataTransmitIntervalTicsRampStartEdit.setPreferredSize(new Dimension(80,24)); m_dataTransmitIntervalTicsRampStopEdit.setPreferredSize(new Dimension(80,24)); m_dataTransmitIntervalTicsRampStepSizeEdit.setPreferredSize(new Dimension(40,24)); pnl.add(new JLabel("Number of tics between data transmits: ")); pnl.add(m_dataTransmitIntervalTicsRampStartEdit); pnl.add(new JLabel(" to ")); pnl.add(m_dataTransmitIntervalTicsRampStopEdit); pnl.add(new JLabel(" step ")); pnl.add(m_dataTransmitIntervalTicsRampStepSizeEdit); pnl.add(m_enabledataTransmitIntervalTicsRampRadio); rampPnl.add(pnl); m_tabPane.add("Parameters", new JScrollPane(paramsPnl)); m_tabPane.add("Ramping", new JScrollPane(rampPnl)); JPanel buttonsPnl = new JPanel(); buttonsPnl.add(m_okButton); buttonsPnl.add(m_cancelButton); this.getContentPane().add(m_tabPane, BorderLayout.CENTER); this.getContentPane().add(buttonsPnl, BorderLayout.SOUTH); PopulateCombos(); ConnectGuiEventHandlers(); RampEnableChanged(); PopulateCachedVars(); } private void ConnectGuiEventHandlers() { m_enableRampingCheck.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableChanged(); } }); m_okButton.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { boolean allGood = PopulateCachedVars(); if(allGood) { m_closeWasOk = true; dispose(); } } }); m_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { m_closeWasOk = false; dispose(); } }); m_nodeClassNameCombo.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { NodeClassNameChanged(); } }); m_enableNumNodesRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableTransmitLevelsRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableRehelloPercentRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableNumNodesPerClusterRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableMaxTransmitRangeRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableNodesPer1000UnitsAreaRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableAreaRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableMaxBitRateBpsRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableHeaderSizeBytesRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enableDataSizeBytesRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); m_enabledataTransmitIntervalTicsRampRadio.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { RampEnableRadioChanged(); } }); } private void RampEnableChanged() { boolean enableRamp = m_enableRampingCheck.isSelected(); m_enableNumNodesRampRadio.setEnabled(enableRamp); m_numberNodesRampStartEdit.setEnabled(enableRamp); m_numberNodesRampStopEdit.setEnabled(enableRamp); m_numberNodesRampStepSizeEdit.setEnabled(enableRamp); m_matchNumNodesWithAreaCheck.setEnabled(enableRamp); m_enableTransmitLevelsRampRadio.setEnabled(enableRamp); m_transmitLevelsRampStartEdit.setEnabled(enableRamp); m_transmitLevelsRampStopEdit.setEnabled(enableRamp); m_transmitLevelsRampStepSizeEdit.setEnabled(enableRamp); m_enableRehelloPercentRampRadio.setEnabled(enableRamp); m_rehelloPercentRampStartEdit.setEnabled(enableRamp); m_rehelloPercentRampStopEdit.setEnabled(enableRamp); m_rehelloPercentRampStepSizeEdit.setEnabled(enableRamp); m_enableNumNodesPerClusterRampRadio.setEnabled(enableRamp); m_numNodesPerClusterRampStartEdit.setEnabled(enableRamp); m_numNodesPerClusterRampStopEdit.setEnabled(enableRamp); m_numNodesPerClusterRampStepSizeEdit.setEnabled(enableRamp); m_enableMaxTransmitRangeRampRadio.setEnabled(enableRamp); m_maxTransmitRangeRampStartEdit.setEnabled(enableRamp); m_maxTransmitRangeRampStopEdit.setEnabled(enableRamp); m_maxTransmitRangeRampStepSizeEdit.setEnabled(enableRamp); m_enableNodesPer1000UnitsAreaRampRadio.setEnabled(enableRamp); m_nodesPer1000UnitsAreaRampStartEdit.setEnabled(enableRamp); m_nodesPer1000UnitsAreaRampStopEdit.setEnabled(enableRamp); m_nodesPer1000UnitsAreaRampStepSizeEdit.setEnabled(enableRamp); m_enableAreaRampRadio.setEnabled(enableRamp); m_areaRampXStartEdit.setEnabled(enableRamp); m_areaRampXStopEdit.setEnabled(enableRamp); m_areaRampXStepSizeEdit.setEnabled(enableRamp); m_areaRampYStartEdit.setEnabled(enableRamp); m_areaRampYStopEdit.setEnabled(enableRamp); m_areaRampYStepSizeEdit.setEnabled(enableRamp); m_enableMaxBitRateBpsRampRadio.setEnabled(enableRamp); m_maxBitRateBpsRampStartEdit.setEnabled(enableRamp); m_maxBitRateBpsRampStopEdit.setEnabled(enableRamp); m_maxBitRateBpsRampStepSizeEdit.setEnabled(enableRamp); m_enableHeaderSizeBytesRampRadio.setEnabled(enableRamp); m_headerSizeBytesRampStartEdit.setEnabled(enableRamp); m_headerSizeBytesRampStopEdit.setEnabled(enableRamp); m_headerSizeBytesRampStepSizeEdit.setEnabled(enableRamp); m_enableDataSizeBytesRampRadio.setEnabled(enableRamp); m_dataSizeBytesRampStartEdit.setEnabled(enableRamp); m_dataSizeBytesRampStopEdit.setEnabled(enableRamp); m_dataSizeBytesRampStepSizeEdit.setEnabled(enableRamp); m_enabledataTransmitIntervalTicsRampRadio.setEnabled(enableRamp); m_dataTransmitIntervalTicsRampStartEdit.setEnabled(enableRamp); m_dataTransmitIntervalTicsRampStopEdit.setEnabled(enableRamp); m_dataTransmitIntervalTicsRampStepSizeEdit.setEnabled(enableRamp); RampEnableRadioChanged(); } private void RampEnableRadioChanged() { boolean enableRamp = m_enableRampingCheck.isSelected(); boolean enable = m_enableNumNodesRampRadio.isSelected(); m_numberNodesRampStartEdit.setEnabled(enableRamp && enable); m_numberNodesRampStopEdit.setEnabled(enableRamp && enable); m_numberNodesRampStepSizeEdit.setEnabled(enableRamp && enable); m_matchNumNodesWithAreaCheck.setEnabled(enableRamp && enable); enable = m_enableTransmitLevelsRampRadio.isSelected(); m_transmitLevelsRampStartEdit.setEnabled(enableRamp && enable); m_transmitLevelsRampStopEdit.setEnabled(enableRamp && enable); m_transmitLevelsRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableRehelloPercentRampRadio.isSelected(); m_rehelloPercentRampStartEdit.setEnabled(enableRamp && enable); m_rehelloPercentRampStopEdit.setEnabled(enableRamp && enable); m_rehelloPercentRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableNumNodesPerClusterRampRadio.isSelected(); m_numNodesPerClusterRampStartEdit.setEnabled(enableRamp && enable); m_numNodesPerClusterRampStopEdit.setEnabled(enableRamp && enable); m_numNodesPerClusterRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableMaxTransmitRangeRampRadio.isSelected(); m_maxTransmitRangeRampStartEdit.setEnabled(enableRamp && enable); m_maxTransmitRangeRampStopEdit.setEnabled(enableRamp && enable); m_maxTransmitRangeRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableNodesPer1000UnitsAreaRampRadio.isSelected(); m_nodesPer1000UnitsAreaRampStartEdit.setEnabled(enableRamp && enable); m_nodesPer1000UnitsAreaRampStopEdit.setEnabled(enableRamp && enable); m_nodesPer1000UnitsAreaRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableAreaRampRadio.isSelected(); m_areaRampXStartEdit.setEnabled(enableRamp && enable); m_areaRampXStopEdit.setEnabled(enableRamp && enable); m_areaRampXStepSizeEdit.setEnabled(enableRamp && enable); m_areaRampYStartEdit.setEnabled(enableRamp && enable); m_areaRampYStopEdit.setEnabled(enableRamp && enable); m_areaRampYStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableMaxBitRateBpsRampRadio.isSelected(); m_maxBitRateBpsRampStartEdit.setEnabled(enableRamp && enable); m_maxBitRateBpsRampStopEdit.setEnabled(enableRamp && enable); m_maxBitRateBpsRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableHeaderSizeBytesRampRadio.isSelected(); m_headerSizeBytesRampStartEdit.setEnabled(enableRamp && enable); m_headerSizeBytesRampStopEdit.setEnabled(enableRamp && enable); m_headerSizeBytesRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enableDataSizeBytesRampRadio.isSelected(); m_dataSizeBytesRampStartEdit.setEnabled(enableRamp && enable); m_dataSizeBytesRampStopEdit.setEnabled(enableRamp && enable); m_dataSizeBytesRampStepSizeEdit.setEnabled(enableRamp && enable); enable = m_enabledataTransmitIntervalTicsRampRadio.isSelected(); m_dataTransmitIntervalTicsRampStartEdit.setEnabled(enableRamp && enable); m_dataTransmitIntervalTicsRampStopEdit.setEnabled(enableRamp && enable); m_dataTransmitIntervalTicsRampStepSizeEdit.setEnabled(enableRamp && enable); } /** * traverse the class path and get the names of the classes that support the correct * interfaces for the combos */ private void PopulateCombos() { //m_logger.debug("who called SimSetupDialog", new Throwable()); m_nodeIfClasses = searchClassPath(jdr.mobisim.NodeIF.class); Iterator iter = m_nodeIfClasses.iterator(); m_nodeClassNameCombo.removeAllItems(); while(iter.hasNext()) { m_nodeClassNameCombo.addItem(iter.next()); } m_packetIfClasses = searchClassPath(jdr.mobisim.PacketIF.class); iter = m_packetIfClasses.iterator(); m_packetClassNameCombo.removeAllItems(); while(iter.hasNext()) { m_packetClassNameCombo.addItem(iter.next()); } m_protocolIfClasses = searchClassPath(jdr.mobisim.ProtocolIF.class); iter = m_protocolIfClasses.iterator(); m_protocolClassNameCombo.removeAllItems(); while(iter.hasNext()) { m_protocolClassNameCombo.addItem(iter.next()); } // select 802.11 as the default m_protocolClassNameCombo.setSelectedIndex(1); m_propagationIfClasses = searchClassPath(jdr.mobisim.PropagationIF.class); iter = m_propagationIfClasses.iterator(); m_propagationClassNameCombo.removeAllItems(); while(iter.hasNext()) { m_propagationClassNameCombo.addItem(iter.next()); } } /** * populate the cached varibales that are used in querying this class */ private boolean PopulateCachedVars() { boolean rc = true; String varName = ""; try { varName = "NodeClassName"; AvailableClassName acn = (AvailableClassName)(m_nodeClassNameCombo.getSelectedItem()); m_nodeClassName = acn.m_fullClassName; varName = "protocolClassName"; acn = (AvailableClassName)(m_protocolClassNameCombo.getSelectedItem()); m_protocolClassName = acn.m_fullClassName; varName = "propagationClassName"; acn = (AvailableClassName)(m_propagationClassNameCombo.getSelectedItem()); m_propagationClassName = acn.m_fullClassName; varName = "packetClassName"; acn = (AvailableClassName)(m_packetClassNameCombo.getSelectedItem()); m_packetClassName = acn.m_fullClassName; varName = "numberOfNodes"; m_numberOfNodes = Double.parseDouble(m_numberOfNodesEdit.getText()); varName = "numberOfNodesPerCluster"; m_numberOfNodesPerCluster = Double.parseDouble(m_numberOfNodesPerClusterEdit.getText()); varName = "numberOfPowerLevels"; m_numberOfPowerLevels = Double.parseDouble(m_numberOfPowerLevelsEdit.getText()); varName = "areaWidth"; m_areaWidth = Double.parseDouble(m_areaWidthEdit.getText()); varName = "areaHeight"; m_areaHeight = Double.parseDouble(m_areaHeightEdit.getText()); varName = "sink X"; m_sinkNodeX = Double.parseDouble(m_sinkNodeXEdit.getText()); varName = "sink Y"; m_sinkNodeY = Double.parseDouble(m_sinkNodeYEdit.getText()); varName = "avergeNodesPer1000UnitsArea"; m_avergeNodesPer1000UnitsArea = Double.parseDouble(m_avergeNodesPer1000UnitsAreaEdit.getText()); varName = "maximumBitRateBps"; m_maximumBitRateBps = Double.parseDouble(m_maximumBitRateBpsEdit.getText()); varName = "headerSizeBytes"; m_headerSizeBytes = Double.parseDouble(m_headerSizeBytesEdit.getText()); varName = "dataSizeBytes"; m_dataSizeBytes = Double.parseDouble(m_dataSizeBytesEdit.getText()); varName = "dataTransmitIntervalTics"; m_dataTransmitIntervalTics = Double.parseDouble(m_dataTransmitIntervalTicsEdit.getText()); varName = "wattHoursCapacity"; m_wattHoursCapacity = Double.parseDouble(m_wattHoursCapacityEdit.getText()); varName = "simulationRunTics"; m_simulationRunTics = Double.parseDouble(m_simulationRunTicsEdit.getText()); varName = "stopPercent"; m_runToPercent = Double.parseDouble(m_runToPercentEdit.getText()); varName = "percentNodesAtStopPercent"; m_percentOfNodesAtRunToPercent = Double.parseDouble(m_percentOfNodesAtRunToPercentEdit.getText()); varName = "threadpool size"; m_threadPoolSize = Double.parseDouble(m_threadPoolSizeEdit.getText()); varName = "rehelloPercent"; m_helloLevelPercent = Double.parseDouble(m_helloLevelPercentEdit.getText()); varName = "m_enableRamping"; m_enableRamping = m_enableRampingCheck.isSelected(); varName = "enableNumNodesRamp"; m_enableNumNodesRamp = m_enableNumNodesRampRadio.isSelected(); varName = "numberNodesRampStart"; m_numberNodesRampStart = Double.parseDouble(m_numberNodesRampStartEdit.getText()); varName = "numberNodesRampStop"; m_numberNodesRampStop = Double.parseDouble(m_numberNodesRampStopEdit.getText()); varName = "numberNodesRampStepSize"; m_numberNodesRampStepSize = Double.parseDouble(m_numberNodesRampStepSizeEdit.getText()); varName = "matchNumNodesWithArea"; m_matchNumNodesWithArea = m_matchNumNodesWithAreaCheck.isSelected(); varName = "enableTransmitLevelsRamp"; m_enableTransmitLevelsRamp = m_enableTransmitLevelsRampRadio.isSelected(); varName = "transmitLevelsRampStart"; m_transmitLevelsRampStart = Double.parseDouble(m_transmitLevelsRampStartEdit.getText()); varName = "transmitLevelsRampStop"; m_transmitLevelsRampStop = Double.parseDouble(m_transmitLevelsRampStopEdit.getText()); varName = "transmitLevelsRampStepSize"; m_transmitLevelsRampStepSize = Double.parseDouble(m_transmitLevelsRampStepSizeEdit.getText()); varName = "enableRehelloPercentRamp"; m_enableRehelloPercentRamp = m_enableRehelloPercentRampRadio.isSelected(); varName = "RehelloPercentRampStart"; m_rehelloPercentRampStart = Double.parseDouble(m_rehelloPercentRampStartEdit.getText()); varName = "RehelloPercentRampStop"; m_rehelloPercentRampStop = Double.parseDouble(m_rehelloPercentRampStopEdit.getText()); varName = "RehelloPercentRampStepSize"; m_rehelloPercentRampStepSize = Double.parseDouble(m_rehelloPercentRampStepSizeEdit.getText()); varName = "enableNumNodesPerClusterRamp"; m_enableNumNodesPerClusterRamp = m_enableNumNodesPerClusterRampRadio.isSelected(); varName = "numNodesPerClusterRampStart"; m_numNodesPerClusterRampStart = Double.parseDouble(m_numNodesPerClusterRampStartEdit.getText()); varName = "numNodesPerClusterRampStop"; m_numNodesPerClusterRampStop = Double.parseDouble(m_numNodesPerClusterRampStopEdit.getText()); varName = "numNodesPerClusterRampStepSize"; m_numNodesPerClusterRampStepSize = Double.parseDouble(m_numNodesPerClusterRampStepSizeEdit.getText()); varName = "enableMaxTransmitRangeRamp"; m_enableMaxTransmitRangeRamp = m_enableMaxTransmitRangeRampRadio.isSelected(); varName = "maxTransmitRangeRampStart"; m_maxTransmitRangeRampStart = Double.parseDouble(m_maxTransmitRangeRampStartEdit.getText()); varName = "maxTransmitRangeRampStop"; m_maxTransmitRangeRampStop = Double.parseDouble(m_maxTransmitRangeRampStopEdit.getText()); varName = "maxTransmitRangeRampStepSize"; m_maxTransmitRangeRampStepSize = Double.parseDouble(m_maxTransmitRangeRampStepSizeEdit.getText()); varName = "enableNodesPer1000UnitsAreaRamp"; m_enableNodesPer1000UnitsAreaRamp = m_enableNodesPer1000UnitsAreaRampRadio.isSelected(); varName = "nodesPer1000UnitsAreaRampStart"; m_nodesPer1000UnitsAreaRampStart = Double.parseDouble(m_nodesPer1000UnitsAreaRampStartEdit.getText()); varName = "nodesPer1000UnitsAreaRampStop"; m_nodesPer1000UnitsAreaRampStop = Double.parseDouble(m_nodesPer1000UnitsAreaRampStopEdit.getText()); varName = "nodesPer1000UnitsAreaRampStepSize"; m_nodesPer1000UnitsAreaRampStepSize = Double.parseDouble(m_nodesPer1000UnitsAreaRampStepSizeEdit.getText()); varName = "enableAreaRamp"; m_enableAreaRamp = m_enableAreaRampRadio.isSelected(); varName = "areaRampXStart"; m_areaRampXStart = Double.parseDouble(m_areaRampXStartEdit.getText()); varName = "areaRampXStop"; m_areaRampXStop = Double.parseDouble(m_areaRampXStopEdit.getText()); varName = "areaRampXStepSize"; m_areaRampXStepSize = Double.parseDouble(m_areaRampXStepSizeEdit.getText()); varName = "areaRampYStart"; m_areaRampYStart = Double.parseDouble(m_areaRampYStartEdit.getText()); varName = "areaRampYStop"; m_areaRampYStop = Double.parseDouble(m_areaRampYStopEdit.getText()); varName = "areaRampYStepSize"; m_areaRampYStepSize = Double.parseDouble(m_areaRampYStepSizeEdit.getText()); varName = "enableMaxBitRateBpsRamp"; m_enableMaxBitRateBpsRamp = m_enableMaxBitRateBpsRampRadio.isSelected(); varName = "maxBitRateBpsRampStart"; m_maxBitRateBpsRampStart = Double.parseDouble(m_maxBitRateBpsRampStartEdit.getText()); varName = "maxBitRateBpsRampStop"; m_maxBitRateBpsRampStop = Double.parseDouble(m_maxBitRateBpsRampStopEdit.getText()); varName = "maxBitRateBpsRampStepSize"; m_maxBitRateBpsRampStepSize = Double.parseDouble(m_maxBitRateBpsRampStepSizeEdit.getText()); varName = "enableHeaderSizeBytesRamp"; m_enableHeaderSizeBytesRamp = m_enableHeaderSizeBytesRampRadio.isSelected(); varName = "headerSizeBytesRampStart"; m_headerSizeBytesRampStart = Double.parseDouble(m_headerSizeBytesRampStartEdit.getText()); varName = "headerSizeBytesRampStop"; m_headerSizeBytesRampStop = Double.parseDouble(m_headerSizeBytesRampStopEdit.getText()); varName = "headerSizeBytesRampStepSize"; m_headerSizeBytesRampStepSize = Double.parseDouble(m_headerSizeBytesRampStepSizeEdit.getText()); varName = "enableDataSizeBytesRamp"; m_enableDataSizeBytesRamp = m_enableDataSizeBytesRampRadio.isSelected(); varName = "dataSizeBytesRampStart"; m_dataSizeBytesRampStart = Double.parseDouble(m_dataSizeBytesRampStartEdit.getText()); varName = "dataSizeBytesRampStop"; m_dataSizeBytesRampStop = Double.parseDouble(m_dataSizeBytesRampStopEdit.getText()); varName = "dataSizeBytesRampStepSize"; m_dataSizeBytesRampStepSize = Double.parseDouble(m_dataSizeBytesRampStepSizeEdit.getText()); varName = "enabledataTransmitIntervalTicsRamp"; m_enabledataTransmitIntervalTicsRamp = m_enabledataTransmitIntervalTicsRampRadio.isSelected(); varName = "dataTransmitIntervalTicsRampStart"; m_dataTransmitIntervalTicsRampStart = Double.parseDouble(m_dataTransmitIntervalTicsRampStartEdit.getText()); varName = "dataTransmitIntervalTicsRampStop"; m_dataTransmitIntervalTicsRampStop = Double.parseDouble(m_dataTransmitIntervalTicsRampStopEdit.getText()); varName = "dataTransmitIntervalTicsRampStepSize"; m_dataTransmitIntervalTicsRampStepSize = Double.parseDouble(m_dataTransmitIntervalTicsRampStepSizeEdit.getText()); } catch(NumberFormatException nfex) { rc = false; JOptionPane.showMessageDialog(this, "Incorrectly formatted number in: "+varName); } return rc; } public void setVisible(boolean vis) { super.setVisible(vis); PopulateWidgetsFromCachedVars(); } private void PopulateWidgetsFromCachedVars() { m_nodeClassNameCombo.setSelectedItem(new AvailableClassName(m_nodeClassName)); m_protocolClassNameCombo.setSelectedItem(new AvailableClassName(m_protocolClassName)); m_propagationClassNameCombo.setSelectedItem(new AvailableClassName(m_propagationClassName)); m_packetClassNameCombo.setSelectedItem(new AvailableClassName(m_packetClassName)); m_numberOfNodesEdit.setText(""+m_numberOfNodes); m_numberOfNodesPerClusterEdit.setText(""+m_numberOfNodesPerCluster); m_numberOfPowerLevelsEdit.setText(""+m_numberOfPowerLevels); m_areaWidthEdit.setText(""+m_areaWidth); m_areaHeightEdit.setText(""+m_areaHeight); m_sinkNodeXEdit.setText(""+m_sinkNodeX); m_sinkNodeYEdit.setText(""+m_sinkNodeY); m_avergeNodesPer1000UnitsAreaEdit.setText(""+m_avergeNodesPer1000UnitsArea); m_maximumBitRateBpsEdit.setText(""+m_maximumBitRateBps); m_headerSizeBytesEdit.setText(""+m_headerSizeBytes); m_dataSizeBytesEdit.setText(""+m_dataSizeBytes); m_dataTransmitIntervalTicsEdit.setText(""+m_dataTransmitIntervalTics); m_wattHoursCapacityEdit.setText(""+m_wattHoursCapacity); m_simulationRunTicsEdit.setText(""+m_simulationRunTics); m_runToPercentEdit.setText(""+m_runToPercent); m_percentOfNodesAtRunToPercentEdit.setText(""+m_percentOfNodesAtRunToPercent); m_threadPoolSizeEdit.setText(""+m_threadPoolSize); m_helloLevelPercentEdit.setText(""+m_helloLevelPercent); m_enableRampingCheck.setSelected(m_enableRamping); m_enableNumNodesRampRadio.setSelected(m_enableNumNodesRamp); m_numberNodesRampStartEdit.setText(""+m_numberNodesRampStart); m_numberNodesRampStopEdit.setText(""+m_numberNodesRampStop); m_numberNodesRampStepSizeEdit.setText(""+m_numberNodesRampStepSize); m_matchNumNodesWithAreaCheck.setSelected(m_matchNumNodesWithArea); m_enableTransmitLevelsRampRadio.setSelected(m_enableTransmitLevelsRamp); m_transmitLevelsRampStartEdit.setText(""+m_transmitLevelsRampStart); m_transmitLevelsRampStopEdit.setText(""+m_transmitLevelsRampStop); m_transmitLevelsRampStepSizeEdit.setText(""+m_transmitLevelsRampStepSize); m_enableRehelloPercentRampRadio.setSelected(m_enableRehelloPercentRamp); m_rehelloPercentRampStartEdit.setText(""+m_rehelloPercentRampStart); m_rehelloPercentRampStopEdit.setText(""+m_rehelloPercentRampStop); m_rehelloPercentRampStepSizeEdit.setText(""+m_rehelloPercentRampStepSize); m_enableNumNodesPerClusterRampRadio.setSelected(m_enableNumNodesPerClusterRamp); m_numNodesPerClusterRampStartEdit.setText(""+m_numNodesPerClusterRampStart); m_numNodesPerClusterRampStopEdit.setText(""+m_numNodesPerClusterRampStop); m_numNodesPerClusterRampStepSizeEdit.setText(""+m_numNodesPerClusterRampStepSize); m_enableMaxTransmitRangeRampRadio.setSelected(m_enableMaxTransmitRangeRamp); m_maxTransmitRangeRampStartEdit.setText(""+m_maxTransmitRangeRampStart); m_maxTransmitRangeRampStopEdit.setText(""+m_maxTransmitRangeRampStop); m_maxTransmitRangeRampStepSizeEdit.setText(""+m_maxTransmitRangeRampStepSize); m_enableNodesPer1000UnitsAreaRampRadio.setSelected(m_enableNodesPer1000UnitsAreaRamp); m_nodesPer1000UnitsAreaRampStartEdit.setText(""+m_nodesPer1000UnitsAreaRampStart); m_nodesPer1000UnitsAreaRampStopEdit.setText(""+m_nodesPer1000UnitsAreaRampStop); m_nodesPer1000UnitsAreaRampStepSizeEdit.setText(""+m_nodesPer1000UnitsAreaRampStepSize); m_enableAreaRampRadio.setSelected(m_enableAreaRamp); m_areaRampXStartEdit.setText(""+m_areaRampXStart); m_areaRampXStopEdit.setText(""+m_areaRampXStop); m_areaRampXStepSizeEdit.setText(""+m_areaRampXStepSize); m_areaRampYStartEdit.setText(""+m_areaRampYStart); m_areaRampYStopEdit.setText(""+m_areaRampYStop); m_areaRampYStepSizeEdit.setText(""+m_areaRampYStepSize); m_enableMaxBitRateBpsRampRadio.setSelected(m_enableMaxBitRateBpsRamp); m_maxBitRateBpsRampStartEdit.setText(""+m_maxBitRateBpsRampStart); m_maxBitRateBpsRampStopEdit.setText(""+m_maxBitRateBpsRampStop); m_maxBitRateBpsRampStepSizeEdit.setText(""+m_maxBitRateBpsRampStepSize); m_enableHeaderSizeBytesRampRadio.setSelected(m_enableHeaderSizeBytesRamp); m_headerSizeBytesRampStartEdit.setText(""+m_headerSizeBytesRampStart); m_headerSizeBytesRampStopEdit.setText(""+m_headerSizeBytesRampStop); m_headerSizeBytesRampStepSizeEdit.setText(""+m_headerSizeBytesRampStepSize); m_enableDataSizeBytesRampRadio.setSelected(m_enableDataSizeBytesRamp); m_dataSizeBytesRampStartEdit.setText(""+m_dataSizeBytesRampStart); m_dataSizeBytesRampStopEdit.setText(""+m_dataSizeBytesRampStop); m_dataSizeBytesRampStepSizeEdit.setText(""+m_dataSizeBytesRampStepSize); m_enabledataTransmitIntervalTicsRampRadio.setSelected(m_enabledataTransmitIntervalTicsRamp); m_dataTransmitIntervalTicsRampStartEdit.setText(""+m_dataTransmitIntervalTicsRampStart); m_dataTransmitIntervalTicsRampStopEdit.setText(""+m_dataTransmitIntervalTicsRampStop); m_dataTransmitIntervalTicsRampStepSizeEdit.setText(""+m_dataTransmitIntervalTicsRampStepSize); } /** * set the algorithm based on the node */ private void NodeClassNameChanged() { //??? need to modify to get an instance, then call the get algorithm name Object node = m_nodeClassNameCombo.getSelectedItem(); if(node != null) { try { Class cls = Class.forName(((AvailableClassName)node).m_fullClassName); NodeIF nif = (NodeIF)cls.newInstance(); m_algorithmLabel.setText(nif.GetAlgorithmName()); } catch (Exception ex) { m_logger.error("unable to get the algorithm name from: "+node.toString(), ex); } } } public boolean CloseWasOk() { return m_closeWasOk; } /** * restore the settings from the given file */ public void RestoreFromFile(File propsFile) { // load the properties we stored try { Properties props = new Properties(); FileInputStream fis = new FileInputStream(propsFile); props.load(fis); fis.close(); String val = props.getProperty("m_nodeClassName"); if(val != null) { m_nodeClassNameCombo.setSelectedItem(val); } val = props.getProperty("m_protocolClassName"); if(val != null) { m_protocolClassNameCombo.setSelectedItem(val); } val = props.getProperty("m_propagationClassName"); if(val != null) { m_propagationClassNameCombo.setSelectedItem(val); } val = props.getProperty("m_packetClassName"); if(val != null) { m_packetClassNameCombo.setSelectedItem(val); } val = props.getProperty("m_numberOfNodes"); if(val != null) { m_numberOfNodesEdit.setText(val); } val = props.getProperty("m_numberOfNodesPerCluster"); if(val != null) { m_numberOfNodesPerClusterEdit.setText(val); } val = props.getProperty("m_numberOfPowerLevels"); if(val != null) { m_numberOfPowerLevelsEdit.setText(val); } val = props.getProperty("m_areaWidth"); if(val != null) { m_areaWidthEdit.setText(val); } val = props.getProperty("m_areaHeight"); if(val != null) { m_areaHeightEdit.setText(val); } val = props.getProperty("m_sinkNodeX"); if(val != null) { m_sinkNodeXEdit.setText(val); } val = props.getProperty("m_sinkNodeY"); if(val != null) { m_sinkNodeYEdit.setText(val); } val = props.getProperty("m_avergeNodesPer1000UnitsArea"); if(val != null) { m_avergeNodesPer1000UnitsAreaEdit.setText(val); } val = props.getProperty("m_maximumBitRateBps"); if(val != null) { m_maximumBitRateBpsEdit.setText(val); } val = props.getProperty("m_headerSizeBytes"); if(val != null) { m_headerSizeBytesEdit.setText(val); } val = props.getProperty("m_dataSizeBytes"); if(val != null) { m_dataSizeBytesEdit.setText(val); } val = props.getProperty("m_dataTransmitIntervalTics"); if(val != null) { m_dataTransmitIntervalTicsEdit.setText(val); } val = props.getProperty("m_wattHoursCapacity"); if(val != null) { m_wattHoursCapacityEdit.setText(val); } val = props.getProperty("m_simulationRunTics"); if(val != null) { m_simulationRunTicsEdit.setText(val); } val = props.getProperty("m_runToPercent"); if(val != null) { m_runToPercentEdit.setText(val); } val = props.getProperty("m_percentOfNodesAtRunToPercent"); if(val != null) { m_percentOfNodesAtRunToPercentEdit.setText(val); } val = props.getProperty("m_threadPoolSize"); if(val != null) { m_threadPoolSizeEdit.setText(val); } val = props.getProperty("m_helloLevelPercent"); if(val != null) { m_helloLevelPercentEdit.setText(val); } // ramping val = props.getProperty("m_enableRamping"); if(val != null) { m_enableRampingCheck.setSelected(val.equals("true")); } val = props.getProperty("m_enableNumNodesRamp"); if(val != null) { m_enableNumNodesRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_numberNodesRampStart"); if(val != null) { m_numberNodesRampStartEdit.setText(val); } val = props.getProperty("m_numberNodesRampStop"); if(val != null) { m_numberNodesRampStopEdit.setText(val); } val = props.getProperty("m_numberNodesRampStepSize"); if(val != null) { m_numberNodesRampStepSizeEdit.setText(val); } val = props.getProperty("m_matchNumNodesWithArea"); if(val != null) { m_matchNumNodesWithAreaCheck.setSelected(val.equals("true")); } val = props.getProperty("m_enableTransmitLevelsRamp"); if(val != null) { m_enableTransmitLevelsRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_transmitLevelsRampStart"); if(val != null) { m_transmitLevelsRampStartEdit.setText(val); } val = props.getProperty("m_transmitLevelsRampStop"); if(val != null) { m_transmitLevelsRampStopEdit.setText(val); } val = props.getProperty("m_transmitLevelsRampStepSize"); if(val != null) { m_transmitLevelsRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableRehelloPercentRamp"); if(val != null) { m_enableRehelloPercentRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_rehelloPercentRampStart"); if(val != null) { m_rehelloPercentRampStartEdit.setText(val); } val = props.getProperty("m_rehelloPercentRampStop"); if(val != null) { m_rehelloPercentRampStopEdit.setText(val); } val = props.getProperty("m_rehelloPercentRampStepSize"); if(val != null) { m_rehelloPercentRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableNumNodesPerClusterRamp"); if(val != null) { m_enableNumNodesPerClusterRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_numNodesPerClusterRampStart"); if(val != null) { m_numNodesPerClusterRampStartEdit.setText(val); } val = props.getProperty("m_numNodesPerClusterRampStop"); if(val != null) { m_numNodesPerClusterRampStopEdit.setText(val); } val = props.getProperty("m_numNodesPerClusterRampStepSize"); if(val != null) { m_numNodesPerClusterRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableMaxTransmitRangeRamp"); if(val != null) { m_enableMaxTransmitRangeRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_maxTransmitRangeRampStart"); if(val != null) { m_maxTransmitRangeRampStartEdit.setText(val); } val = props.getProperty("m_maxTransmitRangeRampStop"); if(val != null) { m_maxTransmitRangeRampStopEdit.setText(val); } val = props.getProperty("m_maxTransmitRangeRampStepSize"); if(val != null) { m_maxTransmitRangeRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableNodesPer1000UnitsAreaRamp"); if(val != null) { m_enableNodesPer1000UnitsAreaRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_nodesPer1000UnitsAreaRampStart"); if(val != null) { m_nodesPer1000UnitsAreaRampStartEdit.setText(val); } val = props.getProperty("m_nodesPer1000UnitsAreaRampStop"); if(val != null) { m_nodesPer1000UnitsAreaRampStopEdit.setText(val); } val = props.getProperty("m_nodesPer1000UnitsAreaRampStepSize"); if(val != null) { m_nodesPer1000UnitsAreaRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableAreaRamp"); if(val != null) { m_enableAreaRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_areaRampXStart"); if(val != null) { m_areaRampXStartEdit.setText(val); } val = props.getProperty("m_areaRampXStop"); if(val != null) { m_areaRampXStopEdit.setText(val); } val = props.getProperty("m_areaRampXStepSize"); if(val != null) { m_areaRampXStepSizeEdit.setText(val); } val = props.getProperty("m_areaRampYStart"); if(val != null) { m_areaRampYStartEdit.setText(val); } val = props.getProperty("m_areaRampYStop"); if(val != null) { m_areaRampYStopEdit.setText(val); } val = props.getProperty("m_areaRampYStepSize"); if(val != null) { m_areaRampYStepSizeEdit.setText(val); } val = props.getProperty("m_enableMaxBitRateBpsRamp"); if(val != null) { m_enableMaxBitRateBpsRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_maxBitRateBpsRampStart"); if(val != null) { m_maxBitRateBpsRampStartEdit.setText(val); } val = props.getProperty("m_maxBitRateBpsRampStop"); if(val != null) { m_maxBitRateBpsRampStopEdit.setText(val); } val = props.getProperty("m_maxBitRateBpsRampStepSize"); if(val != null) { m_maxBitRateBpsRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableHeaderSizeBytesRamp"); if(val != null) { m_enableHeaderSizeBytesRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_headerSizeBytesRampStart"); if(val != null) { m_headerSizeBytesRampStartEdit.setText(val); } val = props.getProperty("m_headerSizeBytesRampStop"); if(val != null) { m_headerSizeBytesRampStopEdit.setText(val); } val = props.getProperty("m_headerSizeBytesRampStepSize"); if(val != null) { m_headerSizeBytesRampStepSizeEdit.setText(val); } val = props.getProperty("m_enableDataSizeBytesRamp"); if(val != null) { m_enableDataSizeBytesRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_dataSizeBytesRampStart"); if(val != null) { m_dataSizeBytesRampStartEdit.setText(val); } val = props.getProperty("m_dataSizeBytesRampStop"); if(val != null) { m_dataSizeBytesRampStopEdit.setText(val); } val = props.getProperty("m_dataSizeBytesRampStepSize"); if(val != null) { m_dataSizeBytesRampStepSizeEdit.setText(val); } val = props.getProperty("m_enabledataTransmitIntervalTicsRamp"); if(val != null) { m_enabledataTransmitIntervalTicsRampRadio.setSelected(val.equals("true")); } val = props.getProperty("m_dataTransmitIntervalTicsRampStart"); if(val != null) { m_dataTransmitIntervalTicsRampStartEdit.setText(val); } val = props.getProperty("m_dataTransmitIntervalTicsRampStop"); if(val != null) { m_dataTransmitIntervalTicsRampStopEdit.setText(val); } val = props.getProperty("m_dataTransmitIntervalTicsRampStepSize"); if(val != null) { m_dataTransmitIntervalTicsRampStepSizeEdit.setText(val); } PopulateCachedVars(); RampEnableChanged(); } catch(java.io.IOException ioex) { JOptionPane.showMessageDialog(this, "Error writing setup properties to file"); m_logger.error("error writing setup properties to file: "+ propsFile.toString(), ioex); } } /** * saves the settings to the given file */ public void SaveToFile(File propsFile) { // create a properties object, then write to file Properties props = new Properties(); if(m_nodeClassName != null) { props.put("m_nodeClassName", m_nodeClassName); } if(m_protocolClassName != null) { props.put("m_protocolClassName", m_protocolClassName); } if(m_propagationClassName != null) { props.put("m_propagationClassName", m_propagationClassName); } if(m_packetClassName != null) { props.put("m_packetClassName", m_packetClassName); } props.put("m_numberOfNodes", ""+m_numberOfNodes); props.put("m_numberOfNodesPerCluster", ""+m_numberOfNodesPerCluster); props.put("m_numberOfPowerLevels", ""+m_numberOfPowerLevels); props.put("m_areaWidth", ""+m_areaWidth); props.put("m_areaHeight", ""+m_areaHeight); props.put("m_sinkNodeX", ""+m_sinkNodeX); props.put("m_sinkNodeY", ""+m_sinkNodeY); props.put("m_avergeNodesPer1000UnitsArea", ""+m_avergeNodesPer1000UnitsArea); props.put("m_maximumBitRateBps", ""+m_maximumBitRateBps); props.put("m_headerSizeBytes", ""+m_headerSizeBytes); props.put("m_dataSizeBytes", ""+m_dataSizeBytes); props.put("m_dataTransmitIntervalTics", ""+m_dataTransmitIntervalTics); props.put("m_wattHoursCapacity", ""+m_wattHoursCapacity); props.put("m_simulationRunTics", ""+m_simulationRunTics); props.put("m_runToPercent", ""+m_runToPercent); props.put("m_percentOfNodesAtRunToPercent", ""+m_percentOfNodesAtRunToPercent); props.put("m_threadPoolSize", ""+m_threadPoolSize); props.put("m_helloLevelPercent", ""+m_helloLevelPercent); props.put("m_enableRamping", ""+m_enableRamping); props.put("m_enableNumNodesRamp", ""+m_enableNumNodesRamp); props.put("m_numberNodesRampStart", ""+m_numberNodesRampStart); props.put("m_numberNodesRampStop", ""+m_numberNodesRampStop); props.put("m_numberNodesRampStepSize", ""+m_numberNodesRampStepSize); props.put("m_matchNumNodesWithArea", ""+m_matchNumNodesWithArea); props.put("m_enableTransmitLevelsRamp", ""+m_enableTransmitLevelsRamp); props.put("m_transmitLevelsRampStart", ""+m_transmitLevelsRampStart); props.put("m_transmitLevelsRampStop", ""+m_transmitLevelsRampStop); props.put("m_transmitLevelsRampStepSize", ""+m_transmitLevelsRampStepSize); props.put("m_enableRehelloPercentRamp", ""+m_enableRehelloPercentRamp); props.put("m_rehelloPercentRampStart", ""+m_rehelloPercentRampStart); props.put("m_rehelloPercentRampStop", ""+m_rehelloPercentRampStop); props.put("m_rehelloPercentRampStepSize", ""+m_rehelloPercentRampStepSize); props.put("m_enableNumNodesPerClusterRamp", ""+m_enableNumNodesPerClusterRamp); props.put("m_numNodesPerClusterRampStart", ""+m_numNodesPerClusterRampStart); props.put("m_numNodesPerClusterRampStop", ""+m_numNodesPerClusterRampStop); props.put("m_numNodesPerClusterRampStepSize", ""+m_numNodesPerClusterRampStepSize); props.put("m_enableMaxTransmitRangeRamp", ""+m_enableMaxTransmitRangeRamp); props.put("m_maxTransmitRangeRampStart", ""+m_maxTransmitRangeRampStart); props.put("m_maxTransmitRangeRampStop", ""+m_maxTransmitRangeRampStop); props.put("m_maxTransmitRangeRampStepSize", ""+m_maxTransmitRangeRampStepSize); props.put("m_enableNodesPer1000UnitsAreaRamp", ""+m_enableNodesPer1000UnitsAreaRamp); props.put("m_nodesPer1000UnitsAreaRampStart", ""+m_nodesPer1000UnitsAreaRampStart); props.put("m_nodesPer1000UnitsAreaRampStop", ""+m_nodesPer1000UnitsAreaRampStop); props.put("m_nodesPer1000UnitsAreaRampStepSize", ""+m_nodesPer1000UnitsAreaRampStepSize); props.put("m_enableAreaRamp", ""+m_enableAreaRamp); props.put("m_areaRampXStart", ""+m_areaRampXStart); props.put("m_areaRampXStop", ""+m_areaRampXStop); props.put("m_areaRampXStepSize", ""+m_areaRampXStepSize); props.put("m_areaRampYStart", ""+m_areaRampYStart); props.put("m_areaRampYStop", ""+m_areaRampYStop); props.put("m_areaRampYStepSize", ""+m_areaRampYStepSize); props.put("m_enableMaxBitRateBpsRamp", ""+m_enableMaxBitRateBpsRamp); props.put("m_maxBitRateBpsRampStart", ""+m_maxBitRateBpsRampStart); props.put("m_maxBitRateBpsRampStop", ""+m_maxBitRateBpsRampStop); props.put("m_maxBitRateBpsRampStepSize", ""+m_maxBitRateBpsRampStepSize); props.put("m_enableHeaderSizeBytesRamp", ""+m_enableHeaderSizeBytesRamp); props.put("m_headerSizeBytesRampStart", ""+m_headerSizeBytesRampStart); props.put("m_headerSizeBytesRampStop", ""+m_headerSizeBytesRampStop); props.put("m_headerSizeBytesRampStepSize", ""+m_headerSizeBytesRampStepSize); props.put("m_enableDataSizeBytesRamp", ""+m_enableDataSizeBytesRamp); props.put("m_dataSizeBytesRampStart", ""+m_dataSizeBytesRampStart); props.put("m_dataSizeBytesRampStop", ""+m_dataSizeBytesRampStop); props.put("m_dataSizeBytesRampStepSize", ""+m_dataSizeBytesRampStepSize); props.put("m_enabledataTransmitIntervalTicsRamp", ""+m_enabledataTransmitIntervalTicsRamp); props.put("m_dataTransmitIntervalTicsRampStart", ""+m_dataTransmitIntervalTicsRampStart); props.put("m_dataTransmitIntervalTicsRampStop", ""+m_dataTransmitIntervalTicsRampStop); props.put("m_dataTransmitIntervalTicsRampStepSize", ""+m_dataTransmitIntervalTicsRampStepSize); try { FileOutputStream fos = new FileOutputStream(propsFile); props.store(fos, "Simualtion properties"); fos.close(); } catch(java.io.IOException ioex) { JOptionPane.showMessageDialog(this, "Error writing setup properties to file"); m_logger.error("error writing setup properties to file: "+ propsFile.toString(), ioex); } } private SortedSet searchClassPath(Class interfaceClassName) { String[] classpaths = jdr.utils.ClassPathHelper.getClassPath(); SortedSet matchingClasses = Collections.synchronizedSortedSet(new TreeSet()); m_logger.debug("got "+classpaths.length + " class paths"); for(int i = 0;i < classpaths.length;i++) { m_logger.debug("checking "+classpaths[i]+" for instances of: " + interfaceClassName); try { // First find all the provided interfaces names. ArrayList list = null; list = jdr.utils.ClassPathHelper.getClassesOfType(classpaths[i], s_PACKAGE_NAME, interfaceClassName); if(list != null && list.size() > 0) { Iterator iter = list.iterator(); while(iter.hasNext()) { try { Class elt = Class.forName(iter.next().toString()); if(!elt.isInterface()) // don't add the actual interface { synchronized(matchingClasses) { matchingClasses.add(new AvailableClassName(elt.getName())); } } } catch(java.lang.ClassNotFoundException ignore) { } } } if(list != null) { m_logger.debug("got "+list.size() + " classes of the right type"); } } catch(Exception ex) { m_logger.error("In loadClassPathFiles received Exception.", ex); } } m_logger.debug("checked all "+classpaths.length + " class paths"); m_logger.debug("got a total of "+matchingClasses.size()+" unique concrete classes"); return matchingClasses; } // all the getters for the cached values public String getNodeClassName() { return m_nodeClassName; } public String getprotocolClassName() { return m_protocolClassName; } public String getpropagationClassName() { return m_propagationClassName; } public String getpacketClassName() { return m_packetClassName; } public double getNumberOfNodes() { return m_numberOfNodes; } public double getNumberOfNodesPerCluster() { return m_numberOfNodesPerCluster; } public double getNumberOfPowerLevels() { return m_numberOfPowerLevels; } public double getareaWidth() { return m_areaWidth; } public double getareaHeight() { return m_areaHeight; } public double getSinkX() { return m_sinkNodeX; } public double getSinkY() { return m_sinkNodeY; } public double getAvergeNodesPer1000UnitsArea() { return m_avergeNodesPer1000UnitsArea; } public double getMaximumBitRateBps() { return m_maximumBitRateBps; } public double getHeaderSizeBytes() { return m_headerSizeBytes; } public double getDataSizeBytes() { return m_dataSizeBytes; } public double getdataTransmitIntervalTics() { return m_dataTransmitIntervalTics; } public double getWattHoursCapacity() { return m_wattHoursCapacity; } public double getSimulationRunTics() { return m_simulationRunTics; } public double getRunToPercent() { return m_runToPercent; } public double getPercentOfNodesAtRunToPercent() { return m_percentOfNodesAtRunToPercent; } public double getThreadPoolSize() { return m_threadPoolSize; } public double getHelloLevelPercent() { return m_helloLevelPercent; } // ramping parameters public boolean getm_EnableRamping() { return m_enableRamping; } public boolean getEnableNumNodesRamp() { return m_enableNumNodesRamp; } public double getNumberNodesRampStart() { return m_numberNodesRampStart; } public double getNumberNodesRampStop() { return m_numberNodesRampStop; } public double getNumberNodesRampStepSize() { return m_numberNodesRampStepSize; } public boolean getMatchNumNodesWithArea() { return m_matchNumNodesWithArea; } public boolean getEnableTransmitLevelsRamp() { return m_enableTransmitLevelsRamp; } public double getTransmitLevelsRampStart() { return m_transmitLevelsRampStart; } public double getTransmitLevelsRampStop() { return m_transmitLevelsRampStop; } public double getTransmitLevelsRampStepSize() { return m_transmitLevelsRampStepSize; } public boolean getEnableRehelloPercentRamp() { return m_enableRehelloPercentRamp; } public double getRehelloPercentRampStart() { return m_rehelloPercentRampStart; } public double getRehelloPercentRampStop() { return m_rehelloPercentRampStop; } public double getRehelloPercentRampStepSize() { return m_rehelloPercentRampStepSize; } public boolean getEnableNumNodesPerClusterRamp() { return m_enableNumNodesPerClusterRamp; } public double getNumNodesPerClusterRampStart() { return m_numNodesPerClusterRampStart; } public double getNumNodesPerClusterRampStop() { return m_numNodesPerClusterRampStop; } public double getNumNodesPerClusterRampStepSize() { return m_numNodesPerClusterRampStepSize; } public boolean getEnableMaxTransmitRangeRamp() { return m_enableMaxTransmitRangeRamp; } public double getMaxTransmitRangeRampStart() { return m_maxTransmitRangeRampStart; } public double getMaxTransmitRangeRampStop() { return m_maxTransmitRangeRampStop; } public double getMaxTransmitRangeRampStepSize() { return m_maxTransmitRangeRampStepSize; } public boolean getEnableNodesPer1000UnitsAreaRamp() { return m_enableNodesPer1000UnitsAreaRamp; } public double getNodesPer1000UnitsAreaRampStart() { return m_nodesPer1000UnitsAreaRampStart; } public double getNodesPer1000UnitsAreaRampStop() { return m_nodesPer1000UnitsAreaRampStop; } public double getNodesPer1000UnitsAreaRampStepSize() { return m_nodesPer1000UnitsAreaRampStepSize; } public boolean getEnableAreaRamp() { return m_enableAreaRamp; } public double getAreaRampXStart() { return m_areaRampXStart; } public double getAreaRampXStop() { return m_areaRampXStop; } public double getAreaRampXStepSize() { return m_areaRampXStepSize; } public double getAreaRampYStart() { return m_areaRampYStart; } public double getAreaRampYStop() { return m_areaRampYStop; } public double getAreaRampYStepSize() { return m_areaRampYStepSize; } public boolean getEnableMaxBitRateBpsRamp() { return m_enableMaxBitRateBpsRamp; } public double getMaxBitRateBpsRampStart() { return m_maxBitRateBpsRampStart; } public double getMaxBitRateBpsRampStop() { return m_maxBitRateBpsRampStop; } public double getMaxBitRateBpsRampStepSize() { return m_maxBitRateBpsRampStepSize; } public boolean getEnableHeaderSizeBytesRamp() { return m_enableHeaderSizeBytesRamp; } public double getHeaderSizeBytesRampStart() { return m_headerSizeBytesRampStart; } public double getHeaderSizeBytesRampStop() { return m_headerSizeBytesRampStop; } public double getHeaderSizeBytesRampStepSize() { return m_headerSizeBytesRampStepSize; } public boolean getEnableDataSizeBytesRamp() { return m_enableDataSizeBytesRamp; } public double getDataSizeBytesRampStart() { return m_dataSizeBytesRampStart; } public double getDataSizeBytesRampStop() { return m_dataSizeBytesRampStop; } public double getDataSizeBytesRampStepSize() { return m_dataSizeBytesRampStepSize; } public boolean getEnabledataTransmitIntervalTicsRamp() { return m_enabledataTransmitIntervalTicsRamp; } public double getdataTransmitIntervalTicsRampStart() { return m_dataTransmitIntervalTicsRampStart; } public double getdataTransmitIntervalTicsRampStop() { return m_dataTransmitIntervalTicsRampStop; } public double getdataTransmitIntervalTicsRampStepSize() { return m_dataTransmitIntervalTicsRampStepSize; } /** * set the sim dialog edit fields to the first step of the currently selected ramp * @return true if ramping is enabled */ public boolean TakeFirstRampStep() { m_rampingStarted = false; if(m_enableRampingCheck.isSelected()) { return TakeNextRampStep(); } else { return false; } } /** * set the sim dialog edit fields to the next step of the currently selected ramp * @return true if a step was taken */ public boolean TakeNextRampStep() { boolean tookStep = true; boolean tookOtherStep = false; // used for the area ramp since have X & Y if(m_enableRampingCheck.isSelected()) { boolean firstStep = false; if(!m_rampingStarted) { m_rampingStarted = true; firstStep = true; } JTextField start = null; JTextField stop = null; JTextField step = null; JTextField value = null; if(m_enableNumNodesRampRadio.isSelected()) { start = m_numberNodesRampStartEdit; stop = m_numberNodesRampStopEdit; step = m_numberNodesRampStepSizeEdit; value = m_numberOfNodesEdit; m_rampedValueName = "Number of Nodes"; } else if(m_enableMaxBitRateBpsRampRadio.isSelected()) { start = m_maxBitRateBpsRampStartEdit; stop = m_maxBitRateBpsRampStopEdit; step = m_maxBitRateBpsRampStepSizeEdit; value = m_maximumBitRateBpsEdit; m_rampedValueName = "Max Bit Rate"; } else if(m_enableNodesPer1000UnitsAreaRampRadio.isSelected()) { start = m_nodesPer1000UnitsAreaRampStartEdit; stop = m_nodesPer1000UnitsAreaRampStopEdit; step = m_nodesPer1000UnitsAreaRampStepSizeEdit; value = m_avergeNodesPer1000UnitsAreaEdit; m_rampedValueName = "Average Nodes per 1000 Units"; } else if(m_enableAreaRampRadio.isSelected()) { m_rampedValueName = "Area"; // need to step the Y area here start = m_areaRampYStartEdit; stop = m_areaRampYStopEdit; step = m_areaRampYStepSizeEdit; value = m_areaHeightEdit; if(firstStep) { value.setText(start.getText()); tookOtherStep = true; } else { double stepSize = Double.parseDouble(step.getText()); double currentNum = Double.parseDouble(value.getText()); double stopNum = Double.parseDouble(stop.getText()); if(((stepSize > 0) && (currentNum < stopNum)) || ((stepSize < 0) && (currentNum > stopNum))) { double newValue = currentNum + stepSize; value.setText(Double.toString(newValue)); tookOtherStep = true; } } start = m_areaRampXStartEdit; stop = m_areaRampXStopEdit; step = m_areaRampXStepSizeEdit; value = m_areaWidthEdit; } else if(m_enableMaxTransmitRangeRampRadio.isSelected()) { start = m_maxTransmitRangeRampStartEdit; stop = m_maxTransmitRangeRampStopEdit; step = m_maxTransmitRangeRampStepSizeEdit; value = null; tookStep = false; // ??? no value field m_rampedValueName = "Max Transmit Range"; } else if(m_enableNumNodesPerClusterRampRadio.isSelected()) { start = m_numNodesPerClusterRampStartEdit; stop = m_numNodesPerClusterRampStopEdit; step = m_numNodesPerClusterRampStepSizeEdit; value = m_numberOfNodesPerClusterEdit; m_rampedValueName = "Number of Nodes per Cluster"; } else if(m_enableRehelloPercentRampRadio.isSelected()) { start = m_rehelloPercentRampStartEdit; stop = m_rehelloPercentRampStopEdit; step = m_rehelloPercentRampStepSizeEdit; value = m_helloLevelPercentEdit; m_rampedValueName = "Re-Hello Percent"; } else if(m_enableTransmitLevelsRampRadio.isSelected()) { start = m_transmitLevelsRampStartEdit; stop = m_transmitLevelsRampStopEdit; step = m_transmitLevelsRampStepSizeEdit; value = m_numberOfPowerLevelsEdit; m_rampedValueName = "Transmit Levels"; } else if(m_enableHeaderSizeBytesRampRadio.isSelected()) { start = m_headerSizeBytesRampStartEdit; stop = m_headerSizeBytesRampStopEdit; step = m_headerSizeBytesRampStepSizeEdit; value = m_headerSizeBytesEdit; m_rampedValueName = "Header Size Bytes"; } else if(m_enableDataSizeBytesRampRadio.isSelected()) { start = m_dataSizeBytesRampStartEdit; stop = m_dataSizeBytesRampStopEdit; step = m_dataSizeBytesRampStepSizeEdit; value = m_dataSizeBytesEdit; m_rampedValueName = "Data Size Bytes"; } else if(m_enabledataTransmitIntervalTicsRampRadio.isSelected()) { start = m_dataTransmitIntervalTicsRampStartEdit; stop = m_dataTransmitIntervalTicsRampStopEdit; step = m_dataTransmitIntervalTicsRampStepSizeEdit; value = m_dataTransmitIntervalTicsEdit; m_rampedValueName = "Tics Between Data Transmits"; } else { tookStep = false; m_rampedValueName = "No Ramp Selected"; } if(tookStep) { if(firstStep) { value.setText(start.getText()); m_rampedValueCurrentValue = Double.parseDouble(start.getText()); if(tookOtherStep) { m_rampedValueCurrentValue *= Double.parseDouble(m_areaRampYStartEdit.getText()); } } else { double stepSize = Double.parseDouble(step.getText()); double currentNum = Double.parseDouble(value.getText()); double stopNum = Double.parseDouble(stop.getText()); if(((stepSize > 0) && (currentNum < stopNum)) || ((stepSize < 0) && (currentNum > stopNum))) { double newValue = currentNum + stepSize; value.setText(Double.toString(newValue)); m_rampedValueCurrentValue = newValue; if(tookOtherStep) { m_rampedValueCurrentValue *= Double.parseDouble(m_areaHeightEdit.getText()); } } else { tookStep = tookOtherStep; } } // do the update so the cached vars are correct PopulateCachedVars(); if(m_matchNumNodesWithArea && m_enableNumNodesRampRadio.isSelected()) { //??? change area to provide the density specified // use a square that is of sufficient dimension to allow the requested density double sqrt1000 = Math.sqrt(1000.0); double density = m_numberOfNodes / m_avergeNodesPer1000UnitsArea; double sqrtDensity = Math.sqrt(density); if(sqrtDensity > 0) { double dim = sqrt1000 * sqrtDensity; m_areaHeightEdit.setText(""+((int)dim)); m_areaWidthEdit.setText(""+((int)dim)); } PopulateCachedVars(); } } } return tookStep; } public double getRampedValueCurrentValue() { return m_rampedValueCurrentValue; } public String getRampedValueName() { return m_rampedValueName; } /** * simple inner class to store the full class name and just the last * part of the class name after the last '.' * For use with the available list, to shorten the names displayed */ protected class AvailableClassName implements java.lang.Comparable { String m_fullClassName = ""; String m_lastPartOfName = ""; public AvailableClassName(String fullName) { m_fullClassName = fullName; int lastDotIndex = fullName.lastIndexOf("."); if(lastDotIndex != -1) { m_lastPartOfName = fullName.substring(lastDotIndex+1, fullName.length()); } } public String toString() { return m_lastPartOfName; } public String getFullClassName() { return m_fullClassName; } public java.lang.Object getNewInstanceOfClass() { java.lang.Object obj = null; try { obj = Class.forName(m_fullClassName).newInstance(); } catch(Exception ex) { m_logger.error("could not instantiate: "+m_fullClassName, ex); } return obj; } public int compareTo(Object o) { int retVal = 0; if(o instanceof AvailableClassName) { retVal = m_fullClassName.compareTo(((AvailableClassName)o).m_fullClassName); } return retVal; } public boolean equals(Object o) { boolean retVal = false; if(o instanceof AvailableClassName) { retVal = compareTo(o) == 0; } else if(o instanceof String) { retVal = m_fullClassName.equals(o.toString()); } return retVal; } } } // end class definition