package ns2; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * central class of ns2-converter * @author Thimor Bohn <bohn@itm.uni-luebeck.de> * */ public class Converter { /** * object creation * @param args command line arguments */ public static void convert(String[] args) { // parse parameters Parameter param = null; try { param = Parser.parse(args); } catch (IllegalArgumentException e) { System.err.println(e); help(); } // call constructor if (param != null) { new Converter(param.net, param.trace, param.activity, param.mobility, param.config, param.begin, param.end, param.penetration, param.seed, param.hasPenetration); } else { System.err.println("param == null"); } } /** * some error occured * print parameter options * */ private static void help() { System.out.println("needed options:"); System.out.println("-n <sumo net.xml file>"); System.out.println("-t <sumo netstate-dump file>"); System.out.println("-a <output activity file>"); System.out.println("-m <output mobility file>"); System.out.println("-c <output config file]"); System.out.println("-b <converting begin time>"); System.out.println("-e <converting end time>"); System.out.println("[ -p <penetration rate (0..1)> ] "); System.out.println("[ -s <seed for random numbers (used to determine fraction of equipped cars)> ] "); } /** * constructor * @param net name of sumo net file * @param trace name of sumo trace file * @param activity name of ns2 activity file * @param mobility name of ns2 mobility file * @param config name of ns2 config file * @param begin sumo time at which ns2 should start to simulate * @param end sumo time at which ns2 should stop to simulate */ private Converter(String net, String trace, String activity, String mobility, String config, double begin, double end, double penetration, long seed, boolean hasPenetration) { // 1. get net List<Edge> edges = new LinkedList<Edge>(); Map<String, Junction> junctions = new HashMap<String, Junction>(); NetReader.read(net, edges, junctions); // 2. translate net NetTranslater.translate(edges, junctions); // 3. get all vehicles (IDs, first occurence, last occurence) List<String> vehicleId = new LinkedList<String>(); HashMap<String, Double> vehicleFirstOcc = new HashMap<String, Double>(); HashMap<String, Double> vehicleLastOcc = new HashMap<String, Double>(); VehicleReader.read(trace, vehicleId, vehicleFirstOcc, vehicleLastOcc); // 4. filter vehicles (intersection: [first occurence, last occurence], [begin time, end time] List<String> wantedVehicle = new LinkedList<String>(vehicleId); VehicleFilter.filter(vehicleId, wantedVehicle, vehicleFirstOcc, vehicleLastOcc, begin, end); // 5. Randomize new id List<String> vehicleNewId = new LinkedList<String>(); IdRandomizer.randomize(wantedVehicle, vehicleNewId, seed); // 6. write mobility file (contains every movement of all (wanted) vehicles MobilityWriter.write(trace, mobility, wantedVehicle, vehicleNewId, edges, begin, end, penetration, hasPenetration); // 7. write activity file (contains first and last occurence of all (wanted -> filtered) vehicles ActivityWriter.write(activity, wantedVehicle, vehicleNewId, vehicleFirstOcc, vehicleLastOcc, begin, penetration, hasPenetration); // 8. write config file (contains statical information about simulation) ConfigWriter.write(config, activity, mobility, edges, wantedVehicle, vehicleFirstOcc, vehicleLastOcc, begin, penetration, hasPenetration); } }