package org.myrobotlab.framework;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import org.myrobotlab.logging.LoggerFactory;
import org.myrobotlab.logging.Logging;
import org.slf4j.Logger;
public class Instantiator {
transient public final static Logger log = LoggerFactory.getLogger(Instantiator.class);
static public Object getNewInstance(Class<?> cast, String classname, Object... params) {
return getNewInstance(new Class<?>[] { cast }, classname, params);
}
static public Object getNewInstance(Class<?>[] cast, String classname, Object... params) {
try {
return getThrowableNewInstance(cast, classname, params);
} catch (ClassNotFoundException e) {
// quiet no class
log.info(String.format("class %s not found", classname));
} catch (Exception e) {
// noisy otherwise
Logging.logError(e);
}
return null;
}
static public Object getNewInstance(String classname) {
return getNewInstance((Class<?>[]) null, classname, (Object[]) null);
}
static public Object getNewInstance(String classname, Object... params) {
return getNewInstance((Class<?>[]) null, classname, params);
}
static public Object getThrowableNewInstance(Class<?>[] cast, String classname, Object... params)
throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
Class<?> c;
c = Class.forName(classname);
if (params == null) {
Constructor<?> mc = c.getConstructor();
return mc.newInstance();
} else {
Class<?>[] paramTypes = new Class[params.length];
for (int i = 0; i < params.length; ++i) {
paramTypes[i] = params[i].getClass();
}
Constructor<?> mc = null;
if (cast == null) {
mc = c.getConstructor(paramTypes);
} else {
mc = c.getConstructor(cast);
}
return mc.newInstance(params); // Dynamically instantiate it
}
}
}