package org.kohsuke.args4j.spi; import java.util.ResourceBundle; import org.kohsuke.args4j.OptionDef; import org.kohsuke.args4j.CmdLineException; import org.kohsuke.args4j.CmdLineParser; import org.kohsuke.args4j.NamedOptionDef; /** * Code that parses operands of an option into Java. * * <p> * This class can be extended by application to support additional Java datatypes in option operands. * * <p> * Implementation of this class needs to be registered to args4j by using * {@link CmdLineParser#registerHandler(Class,Class)} * * @param <T> * The type of the field that this {@link OptionHandler} works with. * * @author Kohsuke Kawaguchi */ public abstract class OptionHandler<T> { /** * The annotation. */ public final OptionDef option; /** * Object to be used for setting value. */ public final Setter<? super T> setter; /** * The owner to which this handler belongs to. */ public final CmdLineParser owner; protected OptionHandler(CmdLineParser parser, OptionDef option, Setter<? super T> setter) { this.owner = parser; this.option = option; this.setter = setter; } /** * Called if the option that this owner recognizes is found. * * @param params * The rest of the arguments. This method can use this * object to access the arguments of the option if necessary. * * The object is valid only during the method call. * * @return * The number of arguments consumed. For example, return 0 * if this option doesn't take any parameter. */ public abstract int parseArguments( Parameters params ) throws CmdLineException; /** * Gets the default meta variable name used to print the usage screen. * * @return null to hide a meta variable. */ public abstract String getDefaultMetaVariable(); public final String getMetaVariable(ResourceBundle rb) { String token = option.metaVar(); if(token.length()==0) token = getDefaultMetaVariable(); if(token==null) return null; if(rb!=null) { String localized = rb.getString(token); if(localized!=null) token = localized; } return token; } public final String getNameAndMeta(ResourceBundle rb) { String str = option.isArgument() ? "" : option.toString(); String meta = getMetaVariable(rb); if (meta != null) { if (str.length() > 0) { str += " "; } str += meta; } return str; } }