DataPath.java

package eu.javaexperience.reflect;

import java.util.List;
import java.util.Map;

public class DataPath
{
	/**
	 * o-ból ami lehet list vagy Map kiveszi a megfelelő 
	 * */
	public static Object get(Object o,Object... path)
	{
		return recursiveGet(o, path, 0);
	}
	
	private static Object recursiveGet(Object o,Object[] path, int index)
	{
		Object ret = get(o,path[index++]);
		if(ret == null)
			return null;

		if(index == path.length)
			return ret;
		
		return recursiveGet(ret, path, index);
	}
	
	private static Object get(Object c,Object k)
	{
		if(k instanceof Number && c instanceof List)
		{
			List<?> l = (List<?>) c;
			int i = ((Number)k).intValue();
			if(l.size() > i)
				return l.get(i);
		}
		else if(k instanceof String && c instanceof Map)
		{
			Map<String,?> m = (Map<String,?>) c;
			return m.get(k);
		}
		
		return null;
	}
}