/************************************************************************************ * Copyright (C) 2008 by Politehnica University of Bucharest and Rutgers University * All rights reserved. * Refer to LICENSE for terms and conditions of use. ***********************************************************************************/ package vnsim.gui; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.RandomAccessFile; import java.util.Random; import java.util.StringTokenizer; import java.util.TreeSet; import java.util.Vector; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.ButtonGroup; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.Spring; import javax.swing.SpringLayout; import javax.swing.plaf.basic.BasicBorders.RadioButtonBorder; import vnsim.applications.adaptiveTL.WirelessTrafficLight; import vnsim.applications.trafficview.SimulatedCarInfo; import vnsim.core.Engine; import vnsim.gui.Utils.ClassSystemView; import vnsim.gui.selector.StartRouteDesigner; import vnsim.gui.selector.StartScenarioDesigner; import vnsim.map.object.Globals; import vnsim.socialNet.GlobalNetwork; import vnsim.vehicular.routePlan.RoutingConstants; import vnsim.vehicular.scenarios.MainSMFCreator; public class MapLoader { /** Logger used by this class */ private static final transient Logger logger = Logger.getLogger("gui.MapLoader"); static void loadSerializedMap(String file) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(mapsDir + file)); Globals.map = (vnsim.map.object.Map) ois.readObject(); } static void createMapFromRT1(String file) throws Exception { // file = "*.RT1" or "*.rt1" String file2 = null; if (file.endsWith(".rt1")) { file2 = file.substring(0, file.length() - 4) + ".rt2"; } else if (file.endsWith(".RT1")) { file2 = file.substring(0, file.length() - 4) + ".RT2"; } else { logger.severe("ERROR: file not rt1 or RT1:" + file); throw new Exception("ERROR: file not rt1 or RT1:" + file); } logger.info("PARAMS:" + rtDir + file + ";" + rtDir + file2); Globals.map = new vnsim.map.object.Map(rtDir + file, rtDir + file2); final String dir = System.getProperty("user.home") + File.separatorChar + "maps" + File.separatorChar + "map"; (new File(dir)).mkdirs(); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(dir + File.separatorChar + file.substring(0, file.length() - 4) + ".map")); try { loadExtraInfo(file.substring(0, file.length() - 4) + ".rtx.txt"); } catch (Exception ex) { logger.log(Level.WARNING, "Extra info not loaded: check file: " + file.substring(0, file.length() - 4) + ".rtx.txt", ex); } Globals.map.createTrafficLights(new Random()); logger.info("Writing Map File..."); oos.writeObject(Globals.map); oos.close(); logger.info("Done writing map file"); } private final static String mapsDir = "/maps/map/"; private final static String rtDir = "/maps/rt/"; private final static String smfDir = "/maps/smf/"; private final static String fscDir = "/maps/fsc/"; static boolean startDesigner = false; static boolean startRouteDesign = false; static boolean startSimulation = false; static boolean socialNetwork = false; static String selectedScenario; public static JList listMap, listFsc, listSmf, list; private static JFrame frame; public static void show(boolean isShowing) { frame.setVisible(isShowing); if (isShowing) frame.getContentPane().repaint(); } public static String[] readSerializedMaps() { final ClassSystemView f1 = new ClassSystemView(mapsDir); String[] files1 = f1.list(); File f = (new File(System.getProperty("user.home") + File.separatorChar + "maps" + File.separatorChar + "map")); String[] files2 = null; if (f.exists() && f.isDirectory()) files2 = f.list(); // merge the two lists... final TreeSet l = new TreeSet(); if (files1 != null && files1.length != 0) for (int i = 0; i < files1.length; i++) if (!l.contains(files1[i])) l.add(files1[i]); if (files2 != null && files2.length != 0) for (int i = 0; i < files2.length; i++) if (!l.contains(files2[i])) l.add(files2[i]); files1 = new String[l.size()]; files1 = l.toArray(files1); return files1; } public static String[] readSMFs() { final ClassSystemView f1 = new ClassSystemView(smfDir); String[] files1 = f1.list(); File f = (new File(System.getProperty("user.home") + File.separatorChar + "maps" + File.separatorChar + "smf")); String[] files2 = null; if (f.exists() && f.isDirectory()) files2 = f.list(); // merge the two lists... final TreeSet l = new TreeSet(); if (files1 != null && files1.length != 0) for (int i = 0; i < files1.length; i++) if (!l.contains(files1[i])) l.add(files1[i]); if (files2 != null && files2.length != 0) for (int i = 0; i < files2.length; i++) if (!l.contains(files2[i])) l.add(files2[i]); files1 = new String[l.size()]; files1 = l.toArray(files1); return files1; } public static String[] readFSCs() { final ClassSystemView f1 = new ClassSystemView(fscDir); String[] files1 = f1.list(); File f = (new File(System.getProperty("user.home") + File.separatorChar + "maps" + File.separatorChar + "fsc")); String[] files2 = null; if (f.exists() && f.isDirectory()) files2 = f.list(); // merge the two lists... final TreeSet l = new TreeSet(); if (files1 != null && files1.length != 0) for (int i = 0; i < files1.length; i++) if (!l.contains(files1[i])) l.add(files1[i]); if (files2 != null && files2.length != 0) for (int i = 0; i < files2.length; i++) if (!l.contains(files2[i])) l.add(files2[i]); files1 = new String[l.size()]; files1 = l.toArray(files1); return files1; } /** * */ /** * */ public static void loadMap() { frame = new JFrame(); frame.addComponentListener(new MapLoaderComponentListener()); frame.setSize(810, 400); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); list = new JList(); listSmf = new JList(new DefaultListModel()); ((DefaultListModel) listSmf.getModel()).addElement("tt"); listFsc = new JList(); listMap = new JList(); final JButton buildMap = new JButton("Build Map"); final JButton smf = new JButton("Create Empty Scenarios"); final JButton scenario = new JButton("Scenario Designer"); final JButton startSim = new JButton("Simulate Scenario"); final JButton routeDesign = new JButton("Route Designer"); final JButton socialNet = new JButton("Social Network"); final JButton refresh = new JButton("Refresh"); JButton exit = new JButton("Exit"); final JLabel label1, label2, label3, label4; final JScrollPane scroll1, scroll2, scroll3, scroll4; scroll1 = new JScrollPane(); scroll2 = new JScrollPane(); scroll3 = new JScrollPane(); scroll4 = new JScrollPane(); label1 = new JLabel("Raw maps:"); label2 = new JLabel("Serialized maps:"); label3 = new JLabel("Empty Scenarios:"); label4 = new JLabel("Complete Scenarios:"); scroll1.setViewportView(list); scroll2.setViewportView(listMap); scroll3.setViewportView(listSmf); scroll4.setViewportView(listFsc); final ClassSystemView f1 = new ClassSystemView(rtDir); String[] files1 = f1.list(); String[] files2 = readSerializedMaps(); String[] files3 = readSMFs(); String[] files4 = readFSCs(); if (files1 == null) System.out.println("eroare 1"); if (files1 == null || files2 == null || files3 == null || files4 == null) { // System.out.println(files1.length); // System.out.println(files2.length); // System.out.println(files3.length); // System.out.println(files4.length); logger.severe("ERROR! Directories maps/map or maps/rt or maps/fsc or maps/smf not found!"); System.exit(0); } Vector maps = new Vector(); for (int i = 0; i < files1.length; i++) { if ((files1[i].endsWith(".RT1") || (files1[i].endsWith(".rt1")))) maps.addElement(files1[i]); } listSmf.setListData(files3); listFsc.setListData(files4); list.setListData(maps); listMap.setListData(files2); buildMap.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String sel = (String) list.getSelectedValue(); if (sel == null) { JOptionPane.showMessageDialog(null, "Select a raw map first!"); return; } try { createMapFromRT1(sel); } catch (Exception ex) { logger.log(Level.WARNING, "Got exception creating map from rt1 file", ex); } listMap.setListData(readSerializedMaps()); } }); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { logger.info("Bye bye"); frame.dispose(); System.exit(0); } }); smf.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { String sel = (String) listMap.getSelectedValue(); if (sel == null) { JOptionPane.showMessageDialog(null, "Select a map first!"); return; } try { MainSMFCreator.main(null); } catch (Exception e) { // return; } logger.info("SMF files created"); listSmf.setListData(readSMFs()); } }); scenario.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { String sel = (String) listSmf.getSelectedValue(); if (sel == null) { JOptionPane.showMessageDialog(null, "Select an empty scenario first!"); return; } show(!StartScenarioDesigner.createWindow()); } }); routeDesign.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { String sel = (String) listSmf.getSelectedValue(); if (sel == null) { JOptionPane.showMessageDialog(null, "Select an empty scenario first!"); return; } show(!StartRouteDesigner.createWindow()); } }); startSim.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { selectedScenario = (String) listFsc.getSelectedValue(); if (selectedScenario == null) { JOptionPane.showMessageDialog(null, "Select a scenario to simulate!"); return; } try { String[] args = new String[1]; args[0] = selectedScenario; loadSimulationParameters(args, false); show(false); // vnsim.vehicular.scenarios.Main.main(args); } catch (Exception ex) { ex.printStackTrace(); // System.exit(0); show(true); } } }); refresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { String[] files1 = f1.list(); String[] files2 = readSerializedMaps(); String[] files3 = readSMFs(); String[] files4 = readFSCs(); if (files1 == null || files2 == null || files3 == null || files4 == null) { logger.severe("ERROR! Directories maps/map or maps/rt or maps/fsc or maps/smf not found!"); return; } Vector maps = new Vector(); for (int i = 0; i < files1.length; i++) { if ((files1[i].endsWith(".RT1") || (files1[i].endsWith(".rt1")))) maps.addElement(files1[i]); } listSmf.setListData(files3); listFsc.setListData(files4); list.setListData(maps); listMap.setListData(files2); } }); socialNet.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { selectedScenario = (String) listMap.getSelectedValue(); if (selectedScenario == null) { JOptionPane.showMessageDialog(null, "Select a map file!"); return; } try { String[] args = new String[1]; args[0] = selectedScenario; loadSocialNetworkParameters(args); show(false); } catch (Exception ex) { ex.printStackTrace(); // System.exit(0); socialNetwork = false; loadMap(); } } }); SpringLayout l = new SpringLayout(); frame.setLayout(l); SpringLayout.Constraints constraint; constraint = l.getConstraints(label1); constraint.setY(Spring.constant(1)); constraint.setX(Spring.constant(5)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(40)); constraint = l.getConstraints(label2); constraint.setY(Spring.constant(1)); constraint.setX(Spring.constant(200)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(40)); constraint = l.getConstraints(label3); constraint.setY(Spring.constant(1)); constraint.setX(Spring.constant(400)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(40)); constraint = l.getConstraints(label4); constraint.setY(Spring.constant(1)); constraint.setX(Spring.constant(600)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(40)); constraint = l.getConstraints(scroll1); constraint.setY(Spring.constant(50)); constraint.setX(Spring.constant(5)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(200)); constraint = l.getConstraints(scroll2); constraint.setY(Spring.constant(50)); constraint.setX(Spring.constant(200)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(200)); constraint = l.getConstraints(scroll3); constraint.setY(Spring.constant(50)); constraint.setX(Spring.constant(400)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(200)); constraint = l.getConstraints(scroll4); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(50)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(200)); constraint = l.getConstraints(buildMap); constraint.setX(Spring.constant(1)); constraint.setY(Spring.constant(250)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(routeDesign); constraint.setX(Spring.constant(400)); constraint.setY(Spring.constant(250)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(refresh); constraint.setX(Spring.constant(1)); constraint.setY(Spring.constant(310)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(socialNet); constraint.setX(Spring.constant(200)); constraint.setY(Spring.constant(310)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(scenario); constraint.setX(Spring.constant(400)); constraint.setY(Spring.constant(310)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(smf); constraint.setX(Spring.constant(200)); constraint.setY(Spring.constant(250)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(startSim); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(250)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(exit); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(310)); constraint.setWidth(Spring.constant(190)); constraint.setHeight(Spring.constant(50)); buildMap.setToolTipText("Builds a map using a RT1 file."); routeDesign.setToolTipText("Manages routes, entries and exits from a scenario."); smf.setToolTipText("Creates an empty scenario from a map file."); exit.setToolTipText("Closes the application."); refresh.setToolTipText("Refresh the lists."); startSim.setToolTipText("Start the simulation."); socialNet.setToolTipText("Starts a simulation using random entries and exits."); scenario.setToolTipText("Create a scenario that can be simulated."); frame.add(label1); frame.add(label2); frame.add(label3); frame.add(label4); frame.add(scroll1); frame.add(scroll2); frame.add(scroll3); frame.add(scroll4); frame.add(buildMap); frame.add(routeDesign); frame.add(socialNet); frame.add(smf); frame.add(scenario); frame.add(startSim); frame.add(exit); frame.add(refresh); frame.setVisible(true); frame.setResizable(false); } public static void refreshSMF() { String[] files3 = readSMFs(); if (files3 == null) { return; } listSmf.setListData(files3); } public static void loadSocialNetworkParameters(final String args[]) { final JFrame frame = new JFrame(); frame.setSize(800, 520); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JButton exit = new JButton("Cancel"); final JButton ok = new JButton("Ok"); final JPanel timePanel = new JPanel(new GridLayout(0, 1)); final JLabel vehicleCalm, vehicleAggresive, vehicleRegular, theshold, thesholdUnit; final JTextField vehicleCalmVal, vehicleAggresiveVal, vehicleRegularVal, thesholdVal; final JTextField confTimeVal, rewireVal, rowVal, columnVal, groupVal, seedVal; final JLabel rewire, rewireUnit, grid, row, column, group, seed; final ButtonGroup priorityButton, typeButton, routingButton; final JPanel priorityPanel = new JPanel(new GridLayout(0, 1)); final JPanel priority = new JPanel(new GridLayout(0, 1)); final JPanel routingPanel = new JPanel(new GridLayout(0, 1)); final JRadioButton randomPr, centerPr, edgePr, priorityTrue, priorityFalse, socialNetwork, shortestPath; JLabel confTimeLabel = new JLabel("Reconfiguration Interval (sec)"); vehicleCalm = new JLabel("Number of calm vehicles "); vehicleAggresive = new JLabel("Number of aggresive vehicles "); vehicleRegular = new JLabel("Number of regular vehicles "); theshold = new JLabel("Connection Theshold "); thesholdUnit = new JLabel(" /100"); rewire = new JLabel("Rewire Probability"); rewireUnit = new JLabel(" /100"); grid = new JLabel("Grid Properties"); row = new JLabel("Number of Rows"); column = new JLabel("Number of Columns"); group = new JLabel("Number of Groups"); seed = new JLabel("Seed generator"); vehicleCalmVal = new JTextField("10"); vehicleAggresiveVal = new JTextField("10"); vehicleRegularVal = new JTextField("20"); thesholdVal = new JTextField("10"); confTimeVal = new JTextField("100"); rewireVal = new JTextField("10"); rowVal = new JTextField("10"); columnVal = new JTextField("10"); groupVal = new JTextField("15"); seedVal = new JTextField("0"); typeButton = new ButtonGroup(); randomPr = new JRadioButton("Random Priority"); randomPr.setSelected(true); centerPr = new JRadioButton("Center - Edge"); edgePr = new JRadioButton("Edge - Edge"); typeButton.add(randomPr); typeButton.add(centerPr); typeButton.add(edgePr); priorityPanel.add(new JLabel("Priority Type")); priorityPanel.add(randomPr); priorityPanel.add(centerPr); priorityPanel.add(edgePr); priorityPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); priorityButton = new ButtonGroup(); priorityFalse = new JRadioButton("Without priority"); priorityFalse.setSelected(true); priorityTrue = new JRadioButton("With priority"); priorityButton.add(priorityFalse); priorityButton.add(priorityTrue); priority.add(new JLabel("Priority")); priority.add(priorityFalse); priority.add(priorityTrue); priority.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); routingButton = new ButtonGroup(); socialNetwork = new JRadioButton("Social Network"); socialNetwork.setSelected(true); shortestPath = new JRadioButton("Shortest Path"); routingButton.add(socialNetwork); routingButton.add(shortestPath); routingPanel.add(new JLabel("Static Routing Type")); routingPanel.add(socialNetwork); routingPanel.add(shortestPath); routingPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { frame.dispose(); System.exit(0); } }); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { GlobalNetwork.CALM = (int) Integer.parseInt(vehicleCalmVal.getText()); GlobalNetwork.AGGRESIVE = (int) Integer.parseInt(vehicleAggresiveVal.getText()); GlobalNetwork.REGULAR = (int) Integer.parseInt(vehicleRegularVal.getText()); GlobalNetwork.THESHOLD = (double) Integer.parseInt(thesholdVal.getText()) / 100; GlobalNetwork.REWIRE = (double) Integer.parseInt(rewireVal.getText()) / 100; GlobalNetwork.CONFTIME = (double) Integer.parseInt(confTimeVal.getText()); GlobalNetwork.ROWS = (int) Integer.parseInt(rowVal.getText()); GlobalNetwork.COLUMNS = (int) Integer.parseInt(columnVal.getText()); GlobalNetwork.GROUPS = (double) Integer.parseInt(groupVal.getText()); GlobalNetwork.SEED = (double) Integer.parseInt(seedVal.getText()); if (priorityTrue.isSelected()) { GlobalNetwork.PRIORITY = true; } else { GlobalNetwork.PRIORITY = false; } GlobalNetwork.priorityType = -1; if (randomPr.isSelected()) { GlobalNetwork.priorityType = 0; } if (centerPr.isSelected()) { GlobalNetwork.priorityType = 1; } if (edgePr.isSelected()) { GlobalNetwork.priorityType = 2; } if (socialNetwork.isSelected()) { GlobalNetwork.routingType = 0; } if (shortestPath.isSelected()) { GlobalNetwork.routingType = 0; } frame.setVisible(false); frame.dispose(); try { Globals.SOCIALNETWORK = 1; MapLoader.loadSimulationParameters(args, true); // vnsim.socialNet.Main.main(args); } catch (Throwable t) { t.printStackTrace(); show(true); } } }); SpringLayout l = new SpringLayout(); frame.setLayout(l); SpringLayout.Constraints constraint; SpringLayout l2 = new SpringLayout(); timePanel.setLayout(l2); SpringLayout.Constraints cons; cons = l2.getConstraints(confTimeVal); cons.setX(Spring.constant(5)); cons.setY(Spring.constant(55)); cons.setWidth(Spring.constant(200)); cons.setHeight(Spring.constant(45)); cons = l2.getConstraints(confTimeLabel); cons.setX(Spring.constant(5)); cons.setY(Spring.constant(5)); cons.setWidth(Spring.constant(200)); cons.setHeight(Spring.constant(45)); timePanel.add(confTimeLabel); timePanel.add(confTimeVal); timePanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); constraint = l.getConstraints(ok); constraint.setX(Spring.constant(350)); constraint.setY(Spring.constant(420)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(exit); constraint.setX(Spring.constant(460)); constraint.setY(Spring.constant(420)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(vehicleCalm); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(10)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleCalmVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(10)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleAggresive); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(60)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleAggresiveVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(60)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleRegular); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(110)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleRegularVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(110)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(theshold); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(180)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(thesholdVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(180)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(thesholdUnit); constraint.setX(Spring.constant(310)); constraint.setY(Spring.constant(180)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(rewire); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(230)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(rewireVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(230)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(rewireUnit); constraint.setX(Spring.constant(310)); constraint.setY(Spring.constant(230)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(timePanel); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(230)); constraint.setHeight(Spring.constant(110)); constraint = l.getConstraints(grid); constraint.setX(Spring.constant(550)); constraint.setY(Spring.constant(0)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(row); constraint.setX(Spring.constant(450)); constraint.setY(Spring.constant(50)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(rowVal); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(50)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(column); constraint.setX(Spring.constant(450)); constraint.setY(Spring.constant(100)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(columnVal); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(100)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(group); constraint.setX(Spring.constant(450)); constraint.setY(Spring.constant(160)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(groupVal); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(160)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(seed); constraint.setX(Spring.constant(450)); constraint.setY(Spring.constant(210)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(seedVal); constraint.setX(Spring.constant(600)); constraint.setY(Spring.constant(210)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(routingPanel); constraint.setX(Spring.constant(270)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(110)); constraint = l.getConstraints(priority); constraint.setX(Spring.constant(450)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(110)); constraint = l.getConstraints(priorityPanel); constraint.setX(Spring.constant(630)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(150)); constraint.setHeight(Spring.constant(110)); frame.add(vehicleRegular); frame.add(vehicleRegularVal); frame.add(vehicleAggresive); frame.add(vehicleAggresiveVal); frame.add(vehicleCalm); frame.add(vehicleCalmVal); frame.add(theshold); frame.add(thesholdVal); frame.add(thesholdUnit); frame.add(timePanel); frame.add(rewire); frame.add(rewireVal); frame.add(rewireUnit); frame.add(grid); frame.add(row); frame.add(rowVal); frame.add(column); frame.add(columnVal); frame.add(group); frame.add(groupVal); frame.add(seed); frame.add(seedVal); frame.add(priorityPanel); frame.add(priority); frame.add(routingPanel); frame.add(exit); frame.add(ok); frame.setVisible(true); } public static void loadSimulationParameters(final String[] args, final boolean socialNet) { final JFrame frame = new JFrame(); frame.setSize(1100, 550); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JButton ok = new JButton("Start Simulation"); JButton exit = new JButton("Cancel"); final ButtonGroup semaphoreType, routingType, applicationType, disseminationType; final JRadioButton fixSem, adaptiveSem, predefRoute, scftRoute, infrastructRoute; final JRadioButton noneApp, ezCab; final JRadioButton neighDisc, compForward, probabilistic; final JLabel vehicleWrange, infrastructWrange, mobilityFps, simFps, equiped, neigExp; final JTextField vehicleWrangeVal, infrastructWrangeVal, mobilityFpsVal, simFpsVal, equipedVal, neigExpVal; final JPanel semPanel = new JPanel(new GridLayout(0, 1)); final JPanel routingPanel = new JPanel(new GridLayout(0, 1)); final JPanel applicationPanel = new JPanel(new GridLayout(0, 1)); final JPanel dissemPanel = new JPanel(new GridLayout(0, 1)); final JPanel protocolPanel = new JPanel(new GridLayout(0, 1));/* Petroaca */ final JPanel propagationPanel = new JPanel(new GridLayout(0, 1));/* Petroaca */ final JPanel DSRCfunctions = new JPanel(new GridLayout(0, 1));/* Petroaca */ final ButtonGroup protocolType;/* Petroaca */ final ButtonGroup propagationType;/* Petroaca */ final JRadioButton p802p11, DSRC;/* * Petroaca - 2 communication protocol * types : 802.11 and DSRC */ final JRadioButton twoRay, shadow, ricean;/* * Petroaca - 2 radio * propagation models : two ray * and shadowing */ final JCheckBox phyParam, DiffCW, multiChannels;/* * Petroaca - 3 DSRC * functions */ // Petroaca - creates the radio button group from where the user can // select the communication protocol type protocolType = new ButtonGroup(); p802p11 = new JRadioButton("802.11"); p802p11.setSelected(true); DSRC = new JRadioButton("DSRC"); protocolType.add(p802p11); protocolType.add(DSRC); protocolPanel.add(new JLabel("Communication Protocol Type")); protocolPanel.add(p802p11); protocolPanel.add(DSRC); protocolPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); DSRC.setSelected(true); // Petroaca - creates the radio button group from where the user can // select the radio propagation model propagationType = new ButtonGroup(); twoRay = new JRadioButton("Two Ray"); twoRay.setSelected(true); shadow = new JRadioButton("Shadowing"); ricean = new JRadioButton("Ricean"); ricean.setSelected(true); propagationType.add(twoRay); propagationType.add(shadow); propagationType.add(ricean); propagationPanel.add(new JLabel("Radio Propagation Model")); propagationPanel.add(twoRay); propagationPanel.add(shadow); propagationPanel.add(ricean); propagationPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); shadow.setSelected(true); // Petroaca - creates the 3 DSRC functions - phy paramaters , diff CW , // multiple channels phyParam = new JCheckBox("DSRC Physical Parameters"); phyParam.setSelected(true); DiffCW = new JCheckBox("CSMA/CA Differential CW"); DiffCW.setSelected(true); multiChannels = new JCheckBox("DSRC Multiple Cahnnels"); multiChannels.setSelected(true); DSRCfunctions.add(new JLabel("DSRC functionalities")); DSRCfunctions.add(phyParam); DSRCfunctions.add(DiffCW); DSRCfunctions.add(multiChannels); DSRCfunctions.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); semaphoreType = new ButtonGroup(); fixSem = new JRadioButton("Fixed Traffic Lights "); fixSem.setSelected(true); adaptiveSem = new JRadioButton("Adaptive Traffic Lights"); semaphoreType.add(fixSem); semaphoreType.add(adaptiveSem); semPanel.add(new JLabel("Traffic Lights Type")); semPanel.add(fixSem); semPanel.add(adaptiveSem); semPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); adaptiveSem.setSelected(true); routingType = new ButtonGroup(); predefRoute = new JRadioButton("Predefined Routes"); predefRoute.setSelected(true); scftRoute = new JRadioButton("SCFT Routing"); infrastructRoute = new JRadioButton("Infrastructure Routing"); routingType.add(predefRoute); routingType.add(scftRoute); routingType.add(infrastructRoute); routingPanel.add(new JLabel("Routing Type")); routingPanel.add(predefRoute); routingPanel.add(scftRoute); routingPanel.add(infrastructRoute); routingPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); applicationType = new ButtonGroup(); noneApp = new JRadioButton("None"); noneApp.setSelected(true); ezCab = new JRadioButton("EZCab"); ezCab.setSelected(false); applicationType.add(noneApp); applicationType.add(ezCab); applicationPanel.add(new JLabel("Application Type")); applicationPanel.add(noneApp); applicationPanel.add(ezCab); applicationPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); disseminationType = new ButtonGroup(); neighDisc = new JRadioButton("Neighbor Discovery"); neighDisc.setSelected(true); compForward = new JRadioButton("Complete Forwarding"); probabilistic = new JRadioButton("Probabilistic Forwarding"); disseminationType.add(neighDisc); disseminationType.add(compForward); disseminationType.add(probabilistic); dissemPanel.add(new JLabel("Dissemination Model")); dissemPanel.add(neighDisc); dissemPanel.add(compForward); dissemPanel.add(probabilistic); dissemPanel.setBorder(new RadioButtonBorder(Color.BLACK, Color.GRAY, Color.WHITE, Color.WHITE)); probabilistic.setSelected(true); vehicleWrange = new JLabel("Vehicle's Wireless Range (m)"); infrastructWrange = new JLabel("Infrastructure Wireless Range (m)"); mobilityFps = new JLabel("Mobility FPS (frames/sec)"); simFps = new JLabel("Simulation FPS (frames/sec)"); equiped = new JLabel("Equiped Cars (%) "); neigExp = new JLabel("Neighbour Expires (s)"); vehicleWrangeVal = new JTextField("200"); infrastructWrangeVal = new JTextField("1000"); mobilityFpsVal = new JTextField("10"); simFpsVal = new JTextField("100"); equipedVal = new JTextField("100"); neigExpVal = new JTextField("2"); ok.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { Globals.FPS = Integer.parseInt(mobilityFpsVal.getText()); Globals.executionFPS = Integer.parseInt(simFpsVal.getText()); Engine.WIRELESS_RANGE = (double) Integer.parseInt(vehicleWrangeVal.getText()) / 1000; Engine.EXTENDED_WIRELESS_RANGE = (double) Integer.parseInt(infrastructWrangeVal.getText()) / 1000; Globals.PERCENT_EQUIPPED_VEHICLES = Integer.parseInt(equipedVal.getText()); Globals.NEIGHBOR_EXPIRES = Integer.parseInt(neigExpVal.getText()) * Globals.SECOND; if (neighDisc.isSelected()) { SimulatedCarInfo.STANDARD_MESSAGE_ID = Globals.PROT_NEIGHBOR_DISCOVERY; } if (compForward.isSelected()) { SimulatedCarInfo.STANDARD_MESSAGE_ID = Globals.PROT_SETOFCARS; Globals.probabilisticModel = false; } if (probabilistic.isSelected()) { SimulatedCarInfo.STANDARD_MESSAGE_ID = Globals.PROT_SETOFCARS; Globals.probabilisticModel = true; } if (fixSem.isSelected()) { WirelessTrafficLight.adaptive = false; } if (adaptiveSem.isSelected()) { WirelessTrafficLight.adaptive = true; } if (predefRoute.isSelected()) { Engine.simulationType = Globals.routePlanConstants.INITIALLY_PROVIDED_ROUTE; } if (scftRoute.isSelected()) { // Engine.simulationType = Globals.routePlanConstants.DYNAMIC_SELF_ROUTE; Engine.simulationType = RoutingConstants.ROUTING_SCFT; } if (ezCab.isSelected()) { Engine.applicationType = Globals.PROT_EZCAB; } else if (noneApp.isSelected()) { Engine.applicationType = 0; } if (infrastructRoute.isSelected()) { Engine.simulationType = Globals.routePlanConstants.DYNAMIC_INFRASTRUCTURE_ROUTE; } // Petroaca - checks the selection of the protocol type if (p802p11.isSelected()) { Engine.simulationProtocol = Globals.PROTOCOL_80211; } if (DSRC.isSelected()) { Engine.simulationProtocol = Globals.PROTOCOL_DSRC; } // Petroaca - checks the selection of the propagation model if (twoRay.isSelected()) { Engine.propagationModel = Globals.TWO_RAY_GROUND; } if (shadow.isSelected()) { Engine.propagationModel = Globals.SHADOWING; } if (ricean.isSelected()) { Engine.propagationModel = Globals.RICEAN; } if (phyParam.isSelected()) { Globals.TRANSMITTER_POWER = Globals.TRANSMITTER_POWER_DSRC; Globals.SINRThresholdBPSK = Globals.SINRThresholdBPSK_DSRC; } else { Globals.TRANSMITTER_POWER = Globals.TRANSMITTER_POWER_80211; Globals.SINRThresholdBPSK = Globals.SINRThresholdBPSK_80211; } if (DiffCW.isSelected()) { Globals.DIFFERENTIAL_CW = true; } else Globals.DIFFERENTIAL_CW = false; if (multiChannels.isSelected()) Globals.MULTI_CHANNEL = true; else Globals.MULTI_CHANNEL = false; } catch (Exception ex) { ex.printStackTrace(); return; } frame.setVisible(false); frame.dispose(); try { if (socialNet) vnsim.socialNet.Main.main(args); else vnsim.vehicular.scenarios.Main.main(args); } catch (Throwable t) { t.printStackTrace(); // System.exit(0); show(true); } } }); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ev) { frame.dispose(); System.exit(0); } }); SpringLayout l = new SpringLayout(); frame.setLayout(l); SpringLayout.Constraints constraint; constraint = l.getConstraints(mobilityFps); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(5)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(simFps); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(50)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(mobilityFpsVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(5)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(simFpsVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(50)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(semPanel); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(145)); constraint.setHeight(Spring.constant(100)); constraint = l.getConstraints(routingPanel); constraint.setX(Spring.constant(160)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(145)); constraint.setHeight(Spring.constant(100)); constraint = l.getConstraints(dissemPanel); constraint.setX(Spring.constant(310)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(145)); constraint.setHeight(Spring.constant(100)); constraint = l.getConstraints(applicationPanel); constraint.setX(Spring.constant(340)); constraint.setY(Spring.constant(5)); constraint.setWidth(Spring.constant(145)); constraint.setHeight(Spring.constant(100)); // Petroaca - set position of protocol panel on frame constraint = l.getConstraints(protocolPanel); constraint.setX(Spring.constant(460)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(100)); // Petroaca - set position of propagation panel on frame constraint = l.getConstraints(propagationPanel); constraint.setX(Spring.constant(665)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(100)); // Petroaca - set positiion of DSRC functions panel constraint = l.getConstraints(DSRCfunctions); constraint.setX(Spring.constant(870)); constraint.setY(Spring.constant(120)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(100)); constraint = l.getConstraints(vehicleWrange); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(240)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(infrastructWrange); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(equiped); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(340)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(neigExp); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(390)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(vehicleWrangeVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(240)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(infrastructWrangeVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(290)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(equipedVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(340)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(neigExpVal); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(390)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(45)); constraint = l.getConstraints(ok); constraint.setX(Spring.constant(10)); constraint.setY(Spring.constant(440)); constraint.setWidth(Spring.constant(200)); constraint.setHeight(Spring.constant(50)); constraint = l.getConstraints(exit); constraint.setX(Spring.constant(210)); constraint.setY(Spring.constant(440)); constraint.setWidth(Spring.constant(100)); constraint.setHeight(Spring.constant(50)); frame.add(ok); frame.add(exit); frame.add(semPanel); frame.add(routingPanel); frame.add(applicationPanel); frame.add(dissemPanel); frame.add(protocolPanel);// Petroaca frame.add(propagationPanel);// Petroaca frame.add(DSRCfunctions);// Petroaca frame.add(vehicleWrange); frame.add(infrastructWrange); frame.add(mobilityFps); frame.add(simFps); frame.add(equiped); frame.add(neigExp); frame.add(vehicleWrangeVal); frame.add(infrastructWrangeVal); frame.add(mobilityFpsVal); frame.add(simFpsVal); frame.add(equipedVal); frame.add(neigExpVal); frame.setVisible(true); frame.setResizable(false); } public static void loadExtraInfo(String filename) { // 2 TYPES OF LINES: "R _ID_ _ONEWAY_" where _ONEWAY_=0,1 or 2 (like in // the Road class) // OR: "L _ID_ _NOLANES_" try { RandomAccessFile f = new RandomAccessFile(rtDir + filename, "r"); String line; while (((line = f.readLine()) != null)) { try { if (line.startsWith("R")) { StringTokenizer st = new StringTokenizer(line, " \t"); st.nextToken(); int id = new Integer(st.nextToken()); int oneWay = new Integer(st.nextToken()); Globals.map.roads.get(id).oneWay = oneWay; } else if (line.startsWith("L")) { StringTokenizer st = new StringTokenizer(line, " \t"); st.nextToken(); int id = new Integer(st.nextToken()); int laneNo = new Integer(st.nextToken()); Globals.map.roads.get(id).laneNo = laneNo; } } catch (Exception ex) { // skipping line } } } catch (Exception ex) { logger.info("Additional map information could not be set"); } } private static class MapLoaderComponentListener implements ComponentListener { public void componentHidden(ComponentEvent e) { } public void componentMoved(ComponentEvent e) { } public void componentResized(ComponentEvent e) { } public void componentShown(ComponentEvent e) { } } public static void main(String args[]) { loadMap(); } }