diff options
Diffstat (limited to 'args4j/args4j/src/org/kohsuke/args4j/ParserProperties.java')
-rw-r--r-- | args4j/args4j/src/org/kohsuke/args4j/ParserProperties.java | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/args4j/args4j/src/org/kohsuke/args4j/ParserProperties.java b/args4j/args4j/src/org/kohsuke/args4j/ParserProperties.java new file mode 100644 index 0000000..fd36dfa --- /dev/null +++ b/args4j/args4j/src/org/kohsuke/args4j/ParserProperties.java @@ -0,0 +1,120 @@ +package org.kohsuke.args4j; + +import org.kohsuke.args4j.spi.OptionHandler; + +import java.util.Comparator; + +/** + * Set of properties that controls {@link CmdLineParser} behaviours. + * + * @see CmdLineParser#CmdLineParser(Object, ParserProperties) + */ +public class ParserProperties { + + private static final int DEFAULT_USAGE_WIDTH = 80; + + private int usageWidth = DEFAULT_USAGE_WIDTH; + private Comparator<OptionHandler> optionSorter = DEFAULT_COMPARATOR; + private String optionValueDelimiter=" "; + private boolean atSyntax = true; + + private ParserProperties() { + } + + /** + * Returns an instance of the default parser properties. + * This instance can be manipulated with the {@code withXXX()} methods + * in this class. + */ + public static ParserProperties defaults() { + return new ParserProperties(); + } + + /** + * Toggles the parsing of @-prefixes in values. + * If a command line value starts with @, it is interpreted + * as being a file, loaded, and interpreted as if + * the file content would have been passed to the command line. + * @param atSyntax {@code true} if at sign is being parsed, {@code false} + * if it is to be ignored. Defaults to {@code true}. + * @see #getAtSyntax() + */ + public ParserProperties withAtSyntax(boolean atSyntax) { + this.atSyntax = atSyntax; + return this; + } + + /** + * Gets whether @-prefix-parsing is enabled. + * @see #withAtSyntax(boolean) + */ + public boolean getAtSyntax() { + return atSyntax; + } + + /** + * Sets the width of a usage line. + * If the usage message is longer than this value, the parser wraps the line. + * + * Defaults to {@code 80}. + * + * @param usageWidth the width of the usage output in columns. + * @throws IllegalArgumentException if {@code usageWidth} is negative + */ + public ParserProperties withUsageWidth(int usageWidth) { + if (usageWidth < 0) + throw new IllegalArgumentException("Usage width is negative"); + this.usageWidth = usageWidth; + return this; + } + + /** + * @return the width of a usage line. + */ + int getUsageWidth() { + return usageWidth; + } + + /** + * Controls how options are sorted in the usage screen. + * + * @param sorter + * If non-{@code null}, options are sorted in the order induced by this comparator. + */ + public ParserProperties withOptionSorter(Comparator<OptionHandler> sorter) { + this.optionSorter = sorter; + return this; + } + + /** + * @return + * {@code null} if options are left unsorted and should be listed by their discovery order. + * Otherwise the returned comparator is used to sort options. + * The default value is a comparator that sorts options alphabetically. + */ + Comparator<OptionHandler> getOptionSorter() { + return optionSorter; + } + + /** + * Sets the string used to separate option name and its value (such as --foo=bar vs --foo bar) + * + * Default to whitespace. Note that the tokens separated in the argument array (such as '-foo','bar') + * is always recognized as a valid name/value separator. + * + */ + public ParserProperties withOptionValueDelimiter(String v) { + this.optionValueDelimiter = v; + return this; + } + + public String getOptionValueDelimiter() { + return this.optionValueDelimiter; + } + + static final Comparator<OptionHandler> DEFAULT_COMPARATOR = new Comparator<OptionHandler>() { + public int compare(OptionHandler o1, OptionHandler o2) { + return o1.option.toString().compareTo(o2.option.toString()); + } + }; +} |