de.weltraumschaf.groundzero.opt.commons.OptionsConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for de.weltraumschaf.groundzero.opt.commons.OptionsConfiguration.java

Source

/*
 *  LICENSE
 *
 * "THE BEER-WARE LICENSE" (Revision 43):
 * "Sven Strittmatter" <weltraumschaf@googlemail.com> wrote this file.
 * As long as you retain this notice you can do whatever you want with
 * this stuff. If we meet some day, and you think this stuff is worth it,
 * you can buy me a non alcohol-free beer in return.
 *
 * Copyright (C) 2012 "Sven Strittmatter" <weltraumschaf@googlemail.com>
 */
package de.weltraumschaf.groundzero.opt.commons;

import de.weltraumschaf.groundzero.opt.CliOptions;
import de.weltraumschaf.groundzero.opt.OptionDescriptor;
import java.io.PrintStream;
import java.io.PrintWriter;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;

/**
 * Configuration for {@link OptionsParser options parser}.
 *
 * @author Sven Strittmatter <weltraumschaf@googlemail.com>
 */
final class OptionsConfiguration {

    /**
     * Options configuration.
     */
    private final Options options = new Options();

    /**
     * Initializes {@link #options} with all information the options parser needs.
     */
    public OptionsConfiguration() {
        super();
        // w/ argument
        OptionBuilder.withDescription(OptionDescriptor.PATH_PREFIX.getDescription());
        OptionBuilder.withArgName("PATH");
        OptionBuilder.hasArg();
        OptionBuilder.withLongOpt(OptionDescriptor.PATH_PREFIX.getLongOption());
        options.addOption(OptionBuilder.create(OptionDescriptor.PATH_PREFIX.getShortOption()));
        OptionBuilder.withDescription(OptionDescriptor.INPUT_ENCODING.getDescription());
        OptionBuilder.withArgName("ENCODING");
        OptionBuilder.hasArg();
        OptionBuilder.withLongOpt(OptionDescriptor.INPUT_ENCODING.getLongOption());
        options.addOption(OptionBuilder.create(OptionDescriptor.INPUT_ENCODING.getShortOption()));
        OptionBuilder.withDescription(OptionDescriptor.OUTPUT_ENCODING.getDescription());
        OptionBuilder.withArgName("ENCODING");
        OptionBuilder.hasArg();
        OptionBuilder.withLongOpt(OptionDescriptor.OUTPUT_ENCODING.getLongOption());
        options.addOption(OptionBuilder.create(OptionDescriptor.OUTPUT_ENCODING.getShortOption()));

        // w/o argument
        options.addOption(OptionDescriptor.DEBUG.getShortOption(), OptionDescriptor.DEBUG.getLongOption(), false,
                OptionDescriptor.DEBUG.getDescription());
        options.addOption(OptionDescriptor.HELP.getShortOption(), OptionDescriptor.HELP.getLongOption(), false,
                OptionDescriptor.HELP.getDescription());
        options.addOption(OptionDescriptor.VERSION.getShortOption(), OptionDescriptor.VERSION.getLongOption(),
                false, OptionDescriptor.VERSION.getDescription());
    }

    /**
     * Get the configured options.
     *
     * @return never {@code null}.
     */
    public Options getParseOptions() {
        return options;
    }

    /**
     * Format the command line options.
     *
     * Useful to show help message.
     *
     * @param formatter Formatter to format with.
     * @param out Stream to print formatted output.
     */
    public void format(final HelpFormatter formatter, final PrintStream out) {
        final PrintWriter writer = new PrintWriter(out);
        formatter.printHelp(writer, HelpFormatter.DEFAULT_WIDTH, CliOptions.EXECUTABLE,
                CliOptions.HEADER + CliOptions.DESCRIPTION, options, HelpFormatter.DEFAULT_LEFT_PAD,
                HelpFormatter.DEFAULT_DESC_PAD, "\n" + CliOptions.FOOTER, true);
        writer.flush();
    }

}