package org.dcache.gplazma.loader;
import java.util.Collection;
import org.dcache.gplazma.plugins.GPlazmaPlugin;
/**
* This class is a {@link PluginRepositoryFactory} that creates a
* {@link PluginRepository} based on the list of plugin classes passed to the
* constructor. It is meant mainly as demonstration code and for
* unit-testing.
* <p>
* The plugin name is the simple name of the class implementing this plugin,
* so a GPlazma plugin class <tt>org.example.foo.BarPlugin</tt> is registered
* with the name <tt>BarPlugin</tt>.
*/
public class StaticClassPluginRepositoryFactory implements
PluginRepositoryFactory {
private final Collection<Class<? extends GPlazmaPlugin>> _pluginClasses;
public StaticClassPluginRepositoryFactory(Collection<Class<? extends GPlazmaPlugin>> plugins) {
_pluginClasses = plugins;
}
@Override
public PluginRepository newRepository() {
PluginRepository repository = new PluginRepository();
for( Class<? extends GPlazmaPlugin> pluginClass : _pluginClasses) {
PluginMetadata pluginMetadata = new PluginMetadata();
String pluginName = getNameFromClass( pluginClass);
pluginMetadata.addName( pluginName);
pluginMetadata.setPluginClass( pluginClass);
repository.addPlugin( pluginMetadata);
}
return repository;
}
protected static String getNameFromClass(Class<? extends GPlazmaPlugin> pluginClass) {
return pluginClass.getSimpleName();
}
}