package org.dcache.gplazma.loader; import java.util.Properties; import diskCacheV111.namespace.NameSpaceProvider; import org.dcache.gplazma.plugins.GPlazmaPlugin; import org.dcache.gplazma.plugins.NamespaceAware; /** * A PluginLoader that allows gPlazma plugins to be dCache aware. */ public class DcacheAwarePluginFactory extends PropertiesPluginFactory { private final NameSpaceProvider _namespace; public DcacheAwarePluginFactory(NameSpaceProvider namespace) { _namespace = namespace; } @Override public <T extends GPlazmaPlugin> T newPlugin(Class<T> pluginClass) throws PluginLoadingException { T plugin = super.newPlugin(pluginClass); makePluginDcacheAware(plugin); return plugin; } @Override public <T extends GPlazmaPlugin> T newPlugin(Class<T> pluginClass, Properties properties) throws PluginLoadingException { T plugin = super.newPlugin(pluginClass, properties); makePluginDcacheAware(plugin); return plugin; } private <T extends GPlazmaPlugin> void makePluginDcacheAware(T plugin) { if(plugin instanceof NamespaceAware) { NamespaceAware nsPlugin = (NamespaceAware) plugin; nsPlugin.setNamespace(_namespace); } } }