diff options
Diffstat (limited to 'args4j/args4j/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java')
-rw-r--r-- | args4j/args4j/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/args4j/args4j/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java b/args4j/args4j/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java new file mode 100644 index 0000000..def390d --- /dev/null +++ b/args4j/args4j/src/org/kohsuke/args4j/spi/DelimitedOptionHandler.java @@ -0,0 +1,48 @@ +package org.kohsuke.args4j.spi; + +import org.kohsuke.args4j.CmdLineException; +import org.kohsuke.args4j.CmdLineParser; +import org.kohsuke.args4j.Option; +import org.kohsuke.args4j.OptionDef; + +/** + * Partial {@link OptionHandler} implementation that takes a single value to the option, + * which is then gets split into individual tokens using fixed delimiter. + * + * <p> + * This class is marked as {@code abstract} even though it has no abstract methods + * to indicate that the class cannot be used by itself in {@link Option#handler()}, + * due to the extra argument that it takes. + * + * @author kmahoney + */ +public abstract class DelimitedOptionHandler<T> extends OptionHandler<T> { + + protected final String delimiter; + protected final OneArgumentOptionHandler<? extends T> individualOptionHandler; + + public DelimitedOptionHandler(CmdLineParser parser, OptionDef option, Setter<? super T> setter, String delimiter, OneArgumentOptionHandler<? extends T> individualOptionHandler) { + super(parser, option, setter); + this.delimiter = delimiter; + this.individualOptionHandler = individualOptionHandler; + } + + @Override + public int parseArguments(Parameters params) throws CmdLineException { + String full = params.getParameter(0); + String[] delimitedStrs = full.split(delimiter); + for (String delimitedStr : delimitedStrs) { + setter.addValue(individualOptionHandler.parse(delimitedStr)); + } + + // The number of Parameters consumed (not the number set) + return 1; + } + + @Override + public String getDefaultMetaVariable() { + final String tMetaVar = individualOptionHandler.getDefaultMetaVariable(); + if (tMetaVar == null || tMetaVar.trim().isEmpty()) return tMetaVar; + return "<" + tMetaVar + delimiter + tMetaVar + delimiter + "...>"; + } +}
\ No newline at end of file |