1 package net.javacoding.jspider.core.impl; 2 3 import net.javacoding.jspider.core.logging.Log; 4 import net.javacoding.jspider.core.logging.LogFactory; 5 import net.javacoding.jspider.core.util.config.PropertySet; 6 import net.javacoding.jspider.spi.Plugin; 7 import net.javacoding.jspider.mod.plugin.console.ConsolePlugin; 8 9 import java.lang.reflect.Constructor ; 10 import java.lang.reflect.InvocationTargetException ; 11 12 15 public class PluginInstantiator { 16 17 protected Log log; 18 19 public PluginInstantiator() { 20 log = LogFactory.getLog(PluginInstantiator.class); 21 } 22 23 24 public Plugin instantiate(Class pluginClass, String name, PropertySet config) { 25 Plugin plugin = null; 26 27 try { 28 log.debug("first trying to instantiate via ctr with (name, config) params"); 29 plugin = instantiateWithNameAndConfig(pluginClass, name, config); 30 31 if (plugin == null) { 32 log.debug("plugin not yet instantiated, trying via ctr with (config) param"); 33 plugin = instantiateWithConfig(pluginClass, name, config); 34 } 35 if (plugin == null) { 36 log.debug("plugin not yet instantiated, trying via ctr with (name) param"); 37 plugin = instantiateWithName(pluginClass, name, config); 38 } 39 if (plugin == null) { 40 log.debug("plugin not yet instantiated, trying via default constructor"); 41 plugin = (Plugin) pluginClass.newInstance(); 42 } 43 } catch (InstantiationException e) { 44 log.error("cannot instantiate module - defaulting to console", e); 45 plugin = new ConsolePlugin(); 46 } catch (IllegalAccessException e) { 47 log.error("cannot instantiate module - defaulting to console", e); 48 plugin = new ConsolePlugin(); 49 } 50 log.debug("plugin instantiated."); 51 return plugin; 52 } 53 54 protected Plugin instantiateWithNameAndConfig(Class pluginClass, String name, PropertySet config) { 55 Plugin plugin = null; 56 try { 57 Class [] paramClasses = new Class [2]; 58 paramClasses[0] = String .class; 59 paramClasses[1] = PropertySet.class; 60 Object [] params = new Object [2]; 61 params[0] = name; 62 params[1] = config; 63 Constructor constructor = pluginClass.getDeclaredConstructor(paramClasses); 64 plugin = (Plugin) constructor.newInstance(params); 65 } catch (NoSuchMethodException e) { 66 log.debug("cannot instantiate module - constructor with name and PropertySet params not found", e); 67 } catch (InstantiationException e) { 68 log.debug("cannot instantiate module - InstantiationException", e); 69 } catch (InvocationTargetException e) { 70 log.debug("cannot instantiate module - InvocationTargetException", e); 71 } catch (IllegalAccessException e) { 72 log.debug("cannot instantiate module - IllegalAccessException", e); 73 } 74 return plugin; 75 } 76 77 protected Plugin instantiateWithConfig(Class pluginClass, String name, PropertySet config) { 78 Plugin plugin = null; 79 try { 80 Class [] paramClasses = new Class [1]; 81 paramClasses[0] = PropertySet.class; 82 Object [] params = new Object [1]; 83 params[0] = config; 84 Constructor constructor = pluginClass.getDeclaredConstructor(paramClasses); 85 plugin = (Plugin) constructor.newInstance(params); 86 } catch (NoSuchMethodException e) { 87 log.debug("cannot instantiate module - constructor with PropertySet param not found", e); 88 } catch (InstantiationException e) { 89 log.debug("cannot instantiate module - InstantiationException", e); 90 } catch (InvocationTargetException e) { 91 log.debug("cannot instantiate module - InvocationTargetException", e); 92 } catch (IllegalAccessException e) { 93 log.debug("cannot instantiate module - IllegalAccessException", e); 94 } 95 return plugin; 96 } 97 98 protected Plugin instantiateWithName(Class pluginClass, String name, PropertySet config) { 99 Plugin plugin = null; 100 try { 101 Class [] paramClasses = new Class [1]; 102 paramClasses[0] = String .class; 103 Object [] params = new Object [1]; 104 params[0] = name; 105 Constructor constructor = pluginClass.getDeclaredConstructor(paramClasses); 106 plugin = (Plugin) constructor.newInstance(params); 107 } catch (NoSuchMethodException e) { 108 log.debug("cannot instantiate module - constructor with name param not found", e); 109 } catch (InstantiationException e) { 110 log.debug("cannot instantiate module - InstantiationException", e); 111 } catch (InvocationTargetException e) { 112 log.debug("cannot instantiate module - InvocationTargetException", e); 113 } catch (IllegalAccessException e) { 114 log.debug("cannot instantiate module - IllegalAccessException", e); 115 } 116 return plugin; 117 } 118 119 } 120 | Popular Tags |