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

org.kohsuke.args4j.spi.MultiValueFieldGetter Maven / Gradle / Ivy

There is a newer version: 1.3.10
Show newest version
package org.kohsuke.args4j.spi;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.kohsuke.args4j.IllegalAnnotationError;
import org.openimaj.util.pair.IndependentPair;

/**
 * @author Jonathon Hare ([email protected]), Sina Samangooei ([email protected])
 *
 */
public class MultiValueFieldGetter extends AbstractGetter {
	
	/**
	 * @param bean
	 * @param name
	 * @param f
	 */
	public MultiValueFieldGetter(String name, Object bean, Field f) {
		super(name,bean,f);
	}

	@Override
	public List>> getStringValues()  {
		try {
			return getListStrings();
		} catch (Exception _) {
			// try again
            f.setAccessible(true);
            try {
                return getListStrings();
            } catch (Exception e) {
                throw new IllegalAccessError(e.getMessage());
            }
		}
	}

	private List>> getListStrings() throws IllegalArgumentException, IllegalAccessException {
		Object o = f.get(bean);
        if(o==null) {
            return new ArrayList>>();
        }
        if(!(o instanceof List))
            throw new IllegalAnnotationError(Messages.ILLEGAL_FIELD_SIGNATURE.format(f));
        ArrayList>> ret = new ArrayList>>();
        for(Object obj : (List) o){
        	Class objClass = obj.getClass();
        	ret.add(new IndependentPair>(obj.toString(), objClass));
        }
        return ret;
	}

	@Override
	public boolean isMultiValued() {
		return true;
	}

}