1 package net.javacoding.jspider.core.impl; 2 3 import net.javacoding.jspider.core.dispatch.impl.PluginSocket; 4 import net.javacoding.jspider.core.logging.Log; 5 import net.javacoding.jspider.core.logging.LogFactory; 6 import net.javacoding.jspider.core.util.config.*; 7 import net.javacoding.jspider.spi.Plugin; 8 9 import java.util.ArrayList ; 10 11 17 public class PluginFactory { 18 19 PluginInstantiator pluginInstantiator; 20 21 22 public PluginFactory() { 23 pluginInstantiator = new PluginInstantiator(); 24 } 25 26 public Plugin[] createPlugins() { 27 28 Log log = LogFactory.getLog(PluginFactory.class); 29 ArrayList loadedPlugins = new ArrayList (); 30 31 PropertySet props = ConfigurationFactory.getConfiguration().getPluginsConfiguration(); 32 PropertySet pluginsProps = new MappedPropertySet(ConfigConstants.PLUGINS,props); 33 int pluginCount = pluginsProps.getInteger(ConfigConstants.PLUGINS_COUNT, 0); 34 log.info("Loading " + pluginCount + " plugins."); 35 36 for (int i = 0; i < pluginCount; i++) { 37 String pluginInstance = pluginsProps.getString( "" + (i+1) + "." + ConfigConstants.PLUGINS_CONFIG, null); 38 if (pluginInstance != null) { 39 log.info("Loading plugin configuration '" + pluginInstance + "'..."); 40 PropertySet config = ConfigurationFactory.getConfiguration().getPluginConfiguration(pluginInstance); 41 PropertySet pluginConfig = new MappedPropertySet(ConfigConstants.PLUGIN, config); 42 Class pluginClass = pluginConfig.getClass(ConfigConstants.PLUGIN_CLASS, null); 43 if (pluginClass == null) { 44 log.info("Plugin class '" + pluginConfig.getString(ConfigConstants.PLUGIN_CLASS, "") + "' not found"); 45 } else { 46 PropertySet pluginParams = new MappedPropertySet(ConfigConstants.PLUGIN_CONFIG, pluginConfig); 47 Plugin plugin = pluginInstantiator.instantiate(pluginClass, pluginInstance, pluginParams); 48 49 PropertySet filterConfig = new MappedPropertySet(ConfigConstants.PLUGIN_FILTER, pluginConfig); 50 if (filterConfig.getBoolean(ConfigConstants.PLUGIN_FILTER_ENABLED, false)) { 51 52 log.info("Plugin uses local event filtering"); 53 loadedPlugins.add(new PluginSocket(plugin, filterConfig)); 54 } else { 55 log.info("Plugin not configured for local event filtering"); 56 loadedPlugins.add(plugin); 57 } 58 59 log.info("Plugin Name : " + plugin.getName()); 60 log.info("Plugin Version : " + plugin.getVersion()); 61 log.info("Plugin Vendor : " + plugin.getVendor()); 62 } 63 } else { 64 log.info("Plugin configuration '" + pluginInstance + "' couldn't be loaded"); 65 } 66 } 67 68 log.info("Loaded " + loadedPlugins.size() + " plugins."); 69 return (Plugin[]) loadedPlugins.toArray(new Plugin[loadedPlugins.size()]); 70 } 71 } 72 | Popular Tags |