protected void runApplication(CommandLine cli, String[] originalArgs) throws Exception {

    String[] args = cli.getArgs();

    if (args.length < 2) {
      printHelp();
      System.exit(-1);
    }

    List<File> paths = new ArrayList<File>();
    for (int i = 0; i < args.length - 1; ++i) {
      paths.add(new File(args[i]));
    }
    GtfsTransformer transformer = new GtfsTransformer();
    transformer.setGtfsInputDirectories(paths);
    transformer.setOutputDirectory(new File(args[args.length - 1]));

    Option[] options = getOptionsInCommandLineOrder(cli, originalArgs);

    for (Option option : options) {

      String name = option.getOpt();

      if (name.equals(ARG_REMOVE_REPEATED_STOP_TIMES))
        configureRemoveRepeatedStopTimes(transformer);

      if (name.equals(ARG_REMOVE_DUPLICATE_TRIPS)) configureRemoveDuplicateTrips(transformer);

      if (name.equals(ARG_CHECK_STOP_TIMES)) configureEnsureStopTimesInOrder(transformer);

      if (name.equals(ARG_AGENCY_ID))
        configureAgencyId(transformer, cli.getOptionValue(ARG_AGENCY_ID));

      if (name.equals(ARG_MODIFICATIONS) || name.equals(ARG_TRANSFORM))
        GtfsTransformerLibrary.configureTransformation(transformer, option.getValue());

      if (name.equals(ARG_LOCAL_VS_EXPRESS)) configureLocalVsExpressUpdates(transformer);

      if (name.equals(ARG_OVERWRITE_DUPLICATES)) {
        transformer.getReader().setOverwriteDuplicates(true);
      }
    }

    transformer.run();
  }
 private void configureLocalVsExpressUpdates(GtfsTransformer updater) {
   updater.addTransform(new LocalVsExpressUpdateStrategy());
 }
 private void configureEnsureStopTimesInOrder(GtfsTransformer updater) {
   updater.addTransform(new EnsureStopTimesIncreaseUpdateStrategy());
 }
 private void configureAgencyId(GtfsTransformer updater, String agencyId) {
   if (agencyId != null) updater.setAgencyId(agencyId);
 }
 private void configureRemoveDuplicateTrips(GtfsTransformer updater) {
   updater.addTransform(new RemoveDuplicateTripsStrategy());
 }
 private void configureRemoveRepeatedStopTimes(GtfsTransformer updater) {
   updater.addTransform(new RemoveRepeatedStopTimesStrategy());
 }