1 19 package org.java.plugin.standard; 20 21 import org.apache.commons.logging.Log; 22 import org.apache.commons.logging.LogFactory; 23 import org.java.plugin.ObjectFactory; 24 import org.java.plugin.PathResolver; 25 import org.java.plugin.PluginManager; 26 import org.java.plugin.registry.PluginRegistry; 27 import org.java.plugin.util.ExtendedProperties; 28 29 33 public class StandardObjectFactory extends ObjectFactory { 34 static final String PACKAGE_NAME = "org.java.plugin.standard"; 36 protected Log log = LogFactory.getLog(getClass()); 37 protected ExtendedProperties config; 38 39 42 protected void configure(final ExtendedProperties configuration) { 43 config = (configuration != null) ? configuration 44 : new ExtendedProperties(); 45 } 46 47 protected String getImplClassName(final Class cls) { 48 String result = config.getProperty(cls.getName(), null); 49 if (log.isDebugEnabled()) { 50 log.debug("implementation class for " + cls.getName() + " is " + result); } 53 return result; 54 } 55 56 protected Object createClassInstance(final String className) 57 throws InstantiationException , IllegalAccessException , 58 ClassNotFoundException { 59 ClassLoader cl = Thread.currentThread().getContextClassLoader(); 60 if (cl != null) { 61 try { 62 return cl.loadClass(className).newInstance(); 63 } catch (ClassNotFoundException cnfe) { 64 } 66 } 67 cl = getClass().getClassLoader(); 68 if (cl != null) { 69 try { 70 return cl.loadClass(className).newInstance(); 71 } catch (ClassNotFoundException cnfe) { 72 } 74 } 75 return ClassLoader.getSystemClassLoader().loadClass( 76 className).newInstance(); 77 } 78 79 82 public PluginRegistry createRegistry() { 83 String className = getImplClassName(PluginRegistry.class); 84 PluginRegistry result; 85 if (className == null) { 86 className = "org.java.plugin.registry.xml.PluginRegistryImpl"; } 88 try { 89 result = (PluginRegistry) createClassInstance(className); 90 } catch (Exception e) { 91 log.fatal("failed creating registry instance " + className, e); 93 throw new Error ("failed creating registry instance " + className, e); 95 } 96 result.configure(config.getSubset(className + ".")); log.debug("registry instance created - " + result); return result; 99 } 100 101 104 public PathResolver createPathResolver() { 105 String className = getImplClassName(PathResolver.class); 106 PathResolver result; 107 if (className == null) { 108 className = "org.java.plugin.standard.StandardPathResolver"; } 110 try { 111 result = (PathResolver) createClassInstance(className); 112 } catch (Exception e) { 113 log.fatal("failed creating path resolver instance " + className, e); 115 throw new Error ("failed creating path resolver instance " + className, e); 117 } 118 try { 119 result.configure(config.getSubset(className + ".")); } catch (Exception e) { 121 log.fatal("failed configuring path resolver instance " + result, e); 123 throw new Error ("failed configuring path resolver instance " + result, e); 125 } 126 log.debug("path resolver instance created - " + result); return result; 128 } 129 130 136 protected PluginLifecycleHandler createLifecycleHandler() { 137 String className = getImplClassName(PluginLifecycleHandler.class); 138 PluginLifecycleHandler result; 139 if (className == null) { 140 className = 141 "org.java.plugin.standard.StandardPluginLifecycleHandler"; } 143 try { 144 result = (PluginLifecycleHandler) createClassInstance(className); 145 } catch (Exception e) { 146 log.fatal("failed creating plug-in life cycle handler instance " + className, e); 148 throw new Error ( 149 "failed creating plug-in life cycle handler instance " + className, e); 151 } 152 result.configure(config.getSubset(className + ".")); log.debug("life cycle handler instance created - " + result); return result; 155 } 156 157 162 public PluginManager createManager(final PluginRegistry registry, 163 final PathResolver pathResolver) { 164 return new StandardPluginManager(registry, pathResolver, 165 createLifecycleHandler()); 166 } 167 } 168 | Popular Tags |