All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.kohsuke.args4j.util.ArgsUtil Maven / Gradle / Ivy

There is a newer version: 1.3.10
Show newest version
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