package org.zstack.utils;
import groovy.lang.GroovyClassLoader;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
/**
*/
public class GroovyUtils {
public static <T> T newInstance(String scriptPath, ClassLoader parent) {
try {
Class clz = getClass(scriptPath, parent);
return (T)clz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static <T> T newInstance(String scriptPath) {
return newInstance(scriptPath, GroovyUtils.class.getClassLoader());
}
public static <T> T newInstance(String scriptPath, Object...params) {
Class clz = getClass(scriptPath);
try {
if (params.length != 0) {
List<Class> clzs = new ArrayList<>();
for (Object param : params) {
clzs.add(param.getClass());
}
return (T) clz.getConstructor(clzs.toArray(new Class[clzs.size()])).newInstance(params);
} else {
return newInstance(scriptPath);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static Class getClass(String scriptPath) {
return getClass(scriptPath, GroovyUtils.class.getClassLoader());
}
public static Class getClass(String scriptPath, ClassLoader parent) {
GroovyClassLoader loader = new GroovyClassLoader(parent);
InputStream in = parent.getResourceAsStream(scriptPath);
String script = StringDSL.inputStreamToString(in);
return loader.parseClass(script);
}
}