com.ebay.jetstream.application.CliOptions.java Source code

Java tutorial

Introduction

Here is the source code for com.ebay.jetstream.application.CliOptions.java

Source

/*******************************************************************************
 *  Copyright  2012-2015 eBay Software Foundation
 *  This program is dual licensed under the MIT and Apache 2.0 licenses.
 *  Please see LICENSE for more information.
 *******************************************************************************/
/**
 *
 */
package com.ebay.jetstream.application;

import java.io.PrintWriter;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class CliOptions {
    private final CliOptionHandler m_optionHandler;
    private final Options m_options;

    public CliOptions(CliOptionHandler handler, String args[]) {
        m_optionHandler = handler;
        Options options = new Options();
        options.addOption("h", "help", false, "Help");
        m_options = m_optionHandler.addOptions(options);
        m_optionHandler.parseOptions(getCommandLine(args));
    }

    /**
     * Parse command line options and enforce rules, config file, app name and config version are mandatory
     * 
     * @param args
     */
    private CommandLine getCommandLine(String[] args) {
        CommandLine cl = null;
        try {
            cl = new GnuParser().parse(m_options, args);

            if (cl.hasOption('h')) {
                printUsageAndExit(true);
            }
        } catch (ParseException e) {
            printErrorAndExit(e.getMessage());
        }
        return cl;
    }

    private void printErrorAndExit(String message) {
        System.err.println("Error: " + message);
        printUsageAndExit(false);
    }

    private void printUsageAndExit(boolean verbose) {
        PrintWriter pw = new PrintWriter(System.err, true);
        HelpFormatter hf = new HelpFormatter();
        hf.printUsage(pw, 72, m_optionHandler.getClass().getCanonicalName(), m_options);
        if (verbose)
            hf.printOptions(pw, 72, m_options, 3, 3);
        System.exit(1);
    }
}