private boolean parseAndPrimeWith(
     final Options options, final List<OptionHandler> optionHandlers, final String[] args) {
   final BootPrinter printer = new BootPrinter(getClass());
   final CommandLineParser parser = new BasicParser();
   try {
     final CommandLine commandLine = parser.parse(options, args);
     for (final OptionHandler optionHandler : optionHandlers) {
       if (!optionHandler.handle(commandLine, printer, options)) {
         return false;
       }
     }
   } catch (final ParseException e) {
     printer.printErrorMessage(e.getMessage());
     printer.printHelp(options);
     return false;
   }
   return true;
 }
  public boolean parseAndPrimeWith(final List<OptionHandler> optionHandlers, final String[] args) {

    // add options (ie cmd line flags)
    final Options options = new Options();
    for (final OptionHandler optionHandler : optionHandlers) {
      optionHandler.addOption(options);
    }

    // parse options from the cmd line
    final boolean parsedOk = parseAndPrimeWith(options, optionHandlers, args);

    if (parsedOk) {
      for (final OptionHandler optionHandler : optionHandlers) {
        primeWith(optionHandler);
      }
    }

    return parsedOk;
  }