blob: 3697c5c82eecbb7745e1abb545e3c3f0ee7e81a5 [file] [log] [blame]
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;
}
}