// Path: devrank-job/src/main/java/com/yasikstudio/devrank/merge/DataMergeJob.java
// public class DataMergeJob implements Tool {
// 
//   private Configuration configuration;
// 
//   @Override
//   public int run(String[] args) throws Exception {
//     Options options = new Options();
//     options.addOption("h", "help", false, "Help");
//     options.addOption("i", "inputPath", true, "Input Path");
//     options.addOption("o", "outputPath", true, "Output Path");
// 
//     HelpFormatter formatter = new HelpFormatter();
//     if (args.length == 0) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
//     CommandLineParser parser = new PosixParser();
//     CommandLine cmd = parser.parse(options, args);
//     if (cmd.hasOption('h')) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
// 
//     String inputPath = cmd.getOptionValue("inputPath");
//     String outputPath = cmd.getOptionValue("outputPath");
// 
//     String jobname = "devrank-job-merge-" + System.currentTimeMillis();
//     Job job = new Job(getConf(), jobname);
//     job.setJarByClass(DataMergeJob.class);
// 
//     job.setMapperClass(DataMergeMapper.class);
//     job.setCombinerClass(DataMergeCombiner.class);
//     job.setReducerClass(DataMergeReducer.class);
// 
//     job.setMapOutputKeyClass(Text.class);
//     job.setMapOutputValueClass(UserRecord.class);
//     job.setOutputKeyClass(Text.class);
//     job.setOutputValueClass(NullWritable.class);
// 
//     FileInputFormat.addInputPath(job, new Path(inputPath));
//     FileOutputFormat.setOutputPath(job, new Path(outputPath));
// 
//     return job.waitForCompletion(true) ? 0 : 1;
//   }
// 
//   @Override
//   public Configuration getConf() {
//     return configuration;
//   }
// 
//   @Override
//   public void setConf(Configuration configuration) {
//     this.configuration = configuration;
//   }
// }
// 
// Path: devrank-job/src/main/java/com/yasikstudio/devrank/rank/DeveloperRankJob.java
// public class DeveloperRankJob implements Tool {
// 
//   private Configuration configuration;
// 
//   @Override
//   public int run(String[] args) throws Exception {
//     Options options = new Options();
//     options.addOption("h", "help", false, "Help");
//     options.addOption("i", "inputPath", true, "Input Path");
//     options.addOption("o", "outputPath", true, "Output Path");
//     options.addOption("w", "workers", true, "Number of workers");
//     options.addOption("s", "supersteps", true, "Number of supersteps");
//     options.addOption("r", "ratioOptions", true, "followings,forks,pulls,stars,watches");
// 
//     HelpFormatter formatter = new HelpFormatter();
//     if (args.length == 0) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
//     CommandLineParser parser = new PosixParser();
//     CommandLine cmd = parser.parse(options, args);
//     if (cmd.hasOption('h')) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
// 
//     int workers = Integer.parseInt(cmd.getOptionValue('w', "1"));
//     long supersteps = Long.parseLong(cmd.getOptionValue('s', "10"));
//     String inputPath = cmd.getOptionValue("inputPath");
//     String outputPath = cmd.getOptionValue("outputPath");
//     String ratio = cmd.getOptionValue("ratioOptions", "1,1,1,1,1");
// 
//     configuration.setLong("superstep", supersteps);
//     configuration.setStrings("ratioOptions", ratio);
// 
//     String jobname = "devrank-job-rank-" + System.currentTimeMillis();
//     GiraphJob job = new GiraphJob(getConf(), jobname);
//     GiraphConfiguration giraphConf = job.getConfiguration();
//     giraphConf.setVertexClass(DeveloperRankVertex.class);
//     giraphConf.setVertexInputFormatClass(DeveloperRankVertexInputFormat.class);
//     giraphConf.setVertexOutputFormatClass(DeveloperRankVertexOutputFormat.class);
//     GiraphFileInputFormat.addVertexInputPath(job.getConfiguration(), new Path(inputPath));
//     FileOutputFormat.setOutputPath(job.getInternalJob(), new Path(outputPath));
//     giraphConf.setWorkerConfiguration(workers, workers, 100.0f);
//     return job.run(true) ? 0 : -1;
//   }
// 
//   @Override
//   public Configuration getConf() {
//     return configuration;
//   }
// 
//   @Override
//   public void setConf(Configuration configuration) {
//     this.configuration = configuration;
//   }
// }


import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import com.google.common.base.Joiner;
import com.yasikstudio.devrank.merge.DataMergeJob;
import com.yasikstudio.devrank.rank.DeveloperRankJob;
package com.yasikstudio.devrank;




public class DevRank {
  private static Map<String, Class<?>> jobs = new HashMap<String, Class<?>>();

  static {
// Path: devrank-job/src/main/java/com/yasikstudio/devrank/merge/DataMergeJob.java
// public class DataMergeJob implements Tool {
// 
//   private Configuration configuration;
// 
//   @Override
//   public int run(String[] args) throws Exception {
//     Options options = new Options();
//     options.addOption("h", "help", false, "Help");
//     options.addOption("i", "inputPath", true, "Input Path");
//     options.addOption("o", "outputPath", true, "Output Path");
// 
//     HelpFormatter formatter = new HelpFormatter();
//     if (args.length == 0) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
//     CommandLineParser parser = new PosixParser();
//     CommandLine cmd = parser.parse(options, args);
//     if (cmd.hasOption('h')) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
// 
//     String inputPath = cmd.getOptionValue("inputPath");
//     String outputPath = cmd.getOptionValue("outputPath");
// 
//     String jobname = "devrank-job-merge-" + System.currentTimeMillis();
//     Job job = new Job(getConf(), jobname);
//     job.setJarByClass(DataMergeJob.class);
// 
//     job.setMapperClass(DataMergeMapper.class);
//     job.setCombinerClass(DataMergeCombiner.class);
//     job.setReducerClass(DataMergeReducer.class);
// 
//     job.setMapOutputKeyClass(Text.class);
//     job.setMapOutputValueClass(UserRecord.class);
//     job.setOutputKeyClass(Text.class);
//     job.setOutputValueClass(NullWritable.class);
// 
//     FileInputFormat.addInputPath(job, new Path(inputPath));
//     FileOutputFormat.setOutputPath(job, new Path(outputPath));
// 
//     return job.waitForCompletion(true) ? 0 : 1;
//   }
// 
//   @Override
//   public Configuration getConf() {
//     return configuration;
//   }
// 
//   @Override
//   public void setConf(Configuration configuration) {
//     this.configuration = configuration;
//   }
// }
// 
// Path: devrank-job/src/main/java/com/yasikstudio/devrank/rank/DeveloperRankJob.java
// public class DeveloperRankJob implements Tool {
// 
//   private Configuration configuration;
// 
//   @Override
//   public int run(String[] args) throws Exception {
//     Options options = new Options();
//     options.addOption("h", "help", false, "Help");
//     options.addOption("i", "inputPath", true, "Input Path");
//     options.addOption("o", "outputPath", true, "Output Path");
//     options.addOption("w", "workers", true, "Number of workers");
//     options.addOption("s", "supersteps", true, "Number of supersteps");
//     options.addOption("r", "ratioOptions", true, "followings,forks,pulls,stars,watches");
// 
//     HelpFormatter formatter = new HelpFormatter();
//     if (args.length == 0) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
//     CommandLineParser parser = new PosixParser();
//     CommandLine cmd = parser.parse(options, args);
//     if (cmd.hasOption('h')) {
//       formatter.printHelp(getClass().getName(), options, true);
//       return 0;
//     }
// 
//     int workers = Integer.parseInt(cmd.getOptionValue('w', "1"));
//     long supersteps = Long.parseLong(cmd.getOptionValue('s', "10"));
//     String inputPath = cmd.getOptionValue("inputPath");
//     String outputPath = cmd.getOptionValue("outputPath");
//     String ratio = cmd.getOptionValue("ratioOptions", "1,1,1,1,1");
// 
//     configuration.setLong("superstep", supersteps);
//     configuration.setStrings("ratioOptions", ratio);
// 
//     String jobname = "devrank-job-rank-" + System.currentTimeMillis();
//     GiraphJob job = new GiraphJob(getConf(), jobname);
//     GiraphConfiguration giraphConf = job.getConfiguration();
//     giraphConf.setVertexClass(DeveloperRankVertex.class);
//     giraphConf.setVertexInputFormatClass(DeveloperRankVertexInputFormat.class);
//     giraphConf.setVertexOutputFormatClass(DeveloperRankVertexOutputFormat.class);
//     GiraphFileInputFormat.addVertexInputPath(job.getConfiguration(), new Path(inputPath));
//     FileOutputFormat.setOutputPath(job.getInternalJob(), new Path(outputPath));
//     giraphConf.setWorkerConfiguration(workers, workers, 100.0f);
//     return job.run(true) ? 0 : -1;
//   }
// 
//   @Override
//   public Configuration getConf() {
//     return configuration;
//   }
// 
//   @Override
//   public void setConf(Configuration configuration) {
//     this.configuration = configuration;
//   }
// }


// Path: devrank-job/src/main/java/com/yasikstudio/devrank/DevRank.java
import java.util.HashMap;
import java.util.Map;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import com.google.common.base.Joiner;
import com.yasikstudio.devrank.merge.DataMergeJob;
import com.yasikstudio.devrank.rank.DeveloperRankJob;

package com.yasikstudio.devrank;




public class DevRank {
  private static Map<String, Class<?>> jobs = new HashMap<String, Class<?>>();

  static {
    jobs.put("rank", DeveloperRankJob.class);