1 8 package org.codehaus.loom.components.util.factory; 9 10 import java.util.Map ; 11 import java.util.WeakHashMap ; 12 13 import org.codehaus.dna.Logger; 14 import org.codehaus.loom.components.util.info.ComponentInfo; 15 import org.codehaus.loom.components.util.infobuilder.BlockInfoReader; 16 import org.codehaus.loom.components.util.infobuilder.CascadingBlockInfoReader; 17 18 24 public class DefaultComponentFactory 25 implements ComponentFactory 26 { 27 30 private final Map m_infos = new WeakHashMap (); 31 32 35 private final BlockInfoReader m_blockInfoReader; 36 37 40 private final ClassLoader m_classLoader; 41 42 48 public DefaultComponentFactory( final ClassLoader classLoader, final Logger logger ) 49 { 50 if( null == classLoader ) 51 { 52 throw new NullPointerException ( "classLoader" ); 53 } 54 else if( null == logger ) 55 { 56 throw new NullPointerException ( "logger" ); 57 } 58 59 m_classLoader = classLoader; 60 m_blockInfoReader = new CascadingBlockInfoReader( classLoader, logger ); 61 } 62 63 68 public ComponentInfo createInfo( final String implementationKey ) 69 throws Exception 70 { 71 ComponentInfo bundle = (ComponentInfo)m_infos.get( implementationKey ); 72 if( null == bundle ) 73 { 74 bundle = createComponentInfo( implementationKey ); 75 m_infos.put( implementationKey, bundle ); 76 } 77 78 return bundle; 79 } 80 81 86 public Object createComponent( final String implementationKey ) 87 throws Exception 88 { 89 final Class clazz = getClassLoader().loadClass( implementationKey ); 90 return clazz.newInstance(); 91 } 92 93 102 protected ComponentInfo createComponentInfo( final String implementationKey ) 103 throws Exception 104 { 105 final Class type = getClassLoader().loadClass( implementationKey ); 106 return m_blockInfoReader.buildComponentInfo( type ); 107 } 108 109 114 protected ClassLoader getClassLoader() 115 { 116 return m_classLoader; 117 } 118 } 119 | Popular Tags |