public static void main(String[] args) {
        try {
            // create the command line parser
            parser = new BasicParser();

            // create the Options
            options = new Options();

            addOption("folder", "Folder to store downloaded data");
            addOption("congress", "Congress number");
            addOption("processed-folder", "Processed folder");
            addOption("addinfo-folder", "Folder containing additional files");
            addOption("format-folder", "Format folder");
            addOption("tea-party-file", "Tea party annotation file");
            addOption("mode", "Mode of processing");

            options.addOption("help", false, "Help");
            options.addOption("v", false, "Verbose");

            cmd = parser.parse(options, args);
            if (cmd.hasOption("help")) {
                CLIUtils.printHelp(getHelpString(), options);
                return;
            }

            String mode = CLIUtils.getStringArgument(cmd, "mode", "process");
            verbose = cmd.hasOption("v");

            if (mode.equals("process")) {
                process();
            } else if (mode.equals("format-debate-turns")) {
                formatDebateTurns();
            } else if (mode.equals("format-bill-summaries")) {
                formatBillSummaries();
            } else if (mode.equals("extract-republicans")) {
                extractRepublicans();
            } else if (mode.equals("format-debate-turns-tea-party")) {
                formatDebateTurnsWithTeaPartyAnnotations();
            } else {
                throw new RuntimeException("Processing mode " + mode + " is not supported.");
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }