package org.approvaltests.hadoop;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class WritableUtils
{
public static <T> T createWritable(Object value, Class<T> writableType) throws InstantiationException,
IllegalAccessException, InvocationTargetException, NoSuchMethodException
{
if (writableType.isInstance(value)) { return (T) value; }
Object writable = writableType.newInstance();
try
{
Method method = writableType.getMethod("set", value.getClass());
method.invoke(writable, value);
return (T) writable;
}
catch (Exception e)
{
// TODO: handle exception
}
for (Method m : writableType.getMethods())
{
if (m.getName().equals("set") && m.getParameterTypes().length == 1) // needed for string
{
try
{
m.invoke(writable, value);
}
catch (Exception e)
{
throw new RuntimeException(String.format("Could not convert %s => %s", value.getClass().getName(),
writableType.getName()), e);
}
}
}
return (T) writable;
}
}