
org.kohsuke.args4j.util.ArgsUtil Maven / Gradle / Ivy
package org.kohsuke.args4j.util;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import org.kohsuke.args4j.Option;
import org.kohsuke.args4j.ProxyOptionHandler;
import org.kohsuke.args4j.spi.Getter;
import org.kohsuke.args4j.spi.Getters;
import org.openimaj.util.pair.IndependentPair;
/**
* @author Sina Samangooei ([email protected])
*/
public class ArgsUtil {
private ArgsUtil() {
}
/**
* @param bean
* @return return the Args4j options which would result in the current bean
* @throws Exception
*/
public static String[] extractArguments(Object bean) throws Exception {
List> arguments = null;
arguments = parse(bean);
List args = new ArrayList();
for (Getter> optionHandler : arguments) {
List>> values = optionHandler.getStringValues();
for (IndependentPair> object : values) {
if(object.secondObject() == Boolean.class){
if(object.firstObject() == null){
continue;
}
else{
args.add(optionHandler.getOptionName());
}
}
else{
args.add(optionHandler.getOptionName());
args.add(object.firstObject());
}
}
}
return args.toArray(new String[args.size()]);
}
private static List> parse(Object bean) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
ArrayList> options = new ArrayList>();
// recursively process all the methods/fields.
for (Class> c = bean.getClass(); c != null; c = c.getSuperclass()) {
for (Field f : c.getDeclaredFields()) {
Option o = f.getAnnotation(Option.class);
if (o != null) {
options.add(Getters.create(o.name(),f, bean));
if (o.handler() == ProxyOptionHandler.class) {
Field opField = c.getDeclaredField(f.getName() + "Op");
Object opBean = null;
try{
opBean = opField.get(bean);
}
catch (Exception e) {
opField.setAccessible(true);
opBean = opField.get(bean);
}
options.addAll(parse(opBean));
}
}
}
}
return options;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy