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

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

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

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

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

/**
 * A getter for map objects
 * @author Jonathon Hare ([email protected]), Sina Samangooei ([email protected])
 *
 */
public class MapGetter extends AbstractGetter{

	/**
	 * @param name
	 * @param bean
	 * @param f
	 */
	public MapGetter(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 Map))
            throw new IllegalAnnotationError(Messages.ILLEGAL_FIELD_SIGNATURE.format(f));
        ArrayList>> ret = new ArrayList>>();
        for(Entry obj : ((Map) o).entrySet()){
        	Class objClass = Object.class;
        	IndependentPair> pair = new IndependentPair>(obj.getKey().toString() + "=" + obj.getValue().toString(),objClass);
        	ret.add(pair);
        }
        return ret;
	}
	
	@Override
	public boolean isMultiValued() {
		return true;
	}
}