blob: 93e106cacd62c65c8e75adbbf899f7729dd8f2e6 [file] [log] [blame]
package org.eclipse.epsilon.emc.simulink.engine;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class MatlabClassLoader {
private static MatlabClassLoader instance;
private String engineJarPath;
private URLClassLoader urlClassLoader;
private MatlabClassLoader(String engineJarPath) {
this.engineJarPath = engineJarPath;
try {
URL engineJarPathURL = new File(this.engineJarPath).toURI().toURL();
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
if (systemClassLoader instanceof URLClassLoader) {
urlClassLoader = (URLClassLoader) systemClassLoader;
Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
method.setAccessible(true);
method.invoke(urlClassLoader, engineJarPathURL);
} else {
urlClassLoader = new URLClassLoader(new URL[] {engineJarPathURL}, systemClassLoader);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static MatlabClassLoader init(String engineJarPath) {
if (instance == null || !engineJarPath.equalsIgnoreCase(instance.getEngineJarPath())) {
instance = new MatlabClassLoader(engineJarPath);
}
return instance;
}
public static MatlabClassLoader getInstance() {
return instance;
}
public synchronized Class<?> loadMatlabClass(String classURI) throws ClassNotFoundException {
return Class.forName(classURI, true, urlClassLoader);
// return urlClassLoader.loadClass(classURI);
}
public String getEngineJarPath() {
return engineJarPath;
}
}