package org.inria.myriads.snoozenode.util;
import java.io.File;
import java.io.FilenameFilter;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import org.inria.myriads.snoozecommon.guard.Guard;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author msimonin
*
*/
public final class PluginUtils
{
/** Define the logger. */
private static final Logger log_ = LoggerFactory.getLogger(PluginUtils.class);
/**
* Hide the consturctor.
*/
private PluginUtils()
{
throw new UnsupportedOperationException();
}
/**
*
* Gets a class from a directory.
*
* @param pluginsDirectory Directory to look in.
* @param classToLoad Name of the class to load.
* @return The class loaded.
*
* @throws MalformedURLException Malformed url exception.
* @throws ClassNotFoundException Class not found exception.
*/
@SuppressWarnings("rawtypes")
public static Class getClassFromDirectory(String pluginsDirectory, String classToLoad)
throws MalformedURLException, ClassNotFoundException
{
Guard.check(pluginsDirectory, classToLoad);
File dir = new File(pluginsDirectory);
log_.debug(dir.getAbsolutePath());
File[] files = dir.listFiles(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return name.endsWith(".jar");
}
});
if (files == null)
{
throw new MalformedURLException(String.format("Unable to get files from directory %s", pluginsDirectory));
}
URL[] urls = new URL[files.length];
int i = 0;
for (File file:files)
{
log_.debug("file " + file.toURI().toURL().toString());
urls[i] = file.toURI().toURL();
i++;
}
ClassLoader loader = new URLClassLoader(urls);
Class classLoaded = loader.loadClass(String.valueOf(classToLoad));
return classLoaded;
}
}