package com.cdr.gen; import com.cdr.gen.util.IOUtils; import com.cdr.gen.util.JavaUtils; import com.google.common.io.Files; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; /** * This class only loads the configuration file and handles the saving of the population * to a file. * @author Maycon Viana Bordin <[email protected]> */ public final class CDRGen { private static final Logger LOG = Logger.getLogger(CDRGen.class); private static final String DEFAULT_CONFIG_FILE = "/config.json"; private Map<String, Object> config; public CDRGen() { loadConfig(DEFAULT_CONFIG_FILE); } public CDRGen(String configFile) { loadConfig(configFile); } public void loadConfig(String file) { try { JSONParser parser = new JSONParser(); String configStr; if (JavaUtils.isJar() && file.equals(DEFAULT_CONFIG_FILE)) { InputStream is = CDRGen.class.getResourceAsStream(file); configStr = IOUtils.convertStreamToString(is); } else { if (file.equals(DEFAULT_CONFIG_FILE)) file = "src/main/resources" + file; configStr = Files.toString(new File(file), Charset.defaultCharset()); } config = (JSONObject) parser.parse(configStr); } catch (IOException ex) { LOG.error("Unable to read config file '" + file + "'.", ex); } catch (ParseException ex) { LOG.error("Error parsing the config file '" + file + "'.", ex); } } public Map<String, Object> getConfig() { return config; } public void saveToFile(String outputFile, List<Person> customers) { DateTimeFormatter dateFormatter = DateTimeFormat.forPattern("dd/MM/yyyy"); DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); try { FileWriter fw = new FileWriter(outputFile); String newLine = System.getProperty("line.separator"); for (Person p : customers) { for (Call c : p.getCalls()) { fw.append(c.getId() + "," + p.getPhoneNumber() + "," + c.getLine() + "," + c.getDestPhoneNumber() + "," + c.getTime().getStart().toString(dateFormatter) + "," + c.getTime().getEnd().toString(dateFormatter) + "," + c.getTime().getStart().toString(timeFormatter) + "," + c.getTime().getEnd().toString(timeFormatter) + "," + c.getType() + "," + c.getCost() + newLine); } } fw.close(); } catch (IOException ex) { LOG.error("Error while writing the output file.", ex); } } public static void main( String[] args ) { if (args.length == 0) { String exec = new java.io.File(CDRGen.class.getProtectionDomain() .getCodeSource().getLocation().getPath()).getName(); System.out.println("Usage: java -jar " + exec + " <output_file> [<config_file>]"); System.exit(1); } String configFile = (args.length > 1) ? args[1] : DEFAULT_CONFIG_FILE; CDRGen generator = new CDRGen(configFile); Population population = new Population(generator.getConfig()); population.create(); List<Person> customers = population.getPopulation(); generator.saveToFile(args[0], customers); LOG.info("Done."); } }