1 7 package com.inversoft.config.component; 8 9 10 import java.util.Collections; 11 import java.util.Enumeration; 12 import java.util.HashMap; 13 import java.util.Map; 14 import java.util.MissingResourceException; 15 import java.util.ResourceBundle; 16 17 import com.inversoft.config.ConfigurationException; 18 import com.inversoft.error.ErrorList; 19 import com.inversoft.util.ReflectionException; 20 import com.inversoft.util.ReflectionTools; 21 22 23 43 public class ComponentConfigBuilderRegistry { 44 45 48 private final Map builders = Collections.synchronizedMap(new HashMap()); 49 50 51 62 public ComponentConfigBuilderRegistry(String bundleName) 63 throws ConfigurationException { 64 65 ResourceBundle bundle = null; 66 try { 67 bundle = ResourceBundle.getBundle(bundleName); 68 } catch (MissingResourceException mre) { 69 throw new ConfigurationException(mre); 70 } 71 72 Enumeration enum = bundle.getKeys(); 73 String key; 74 String className; 75 Class klass; 76 ComponentConfigBuilder builder; 77 ErrorList errors = new ErrorList(); 78 while (enum.hasMoreElements()) { 79 key = (String) enum.nextElement(); 80 className = bundle.getString(key); 81 82 try { 83 klass = ReflectionTools.findClass(className); 84 } catch (ReflectionException re) { 85 errors.addError(re.toString()); 86 continue; 87 } 88 89 if (!ComponentConfigBuilder.class.isAssignableFrom(klass)) { 90 errors.addError(klass.getName() + " is not a ConfigBuilder"); 91 continue; 92 } 93 94 try { 95 builder = (ComponentConfigBuilder) ReflectionTools.instantiate(klass); 96 builder.setRegistry(this); 97 } catch (ReflectionException re) { 98 errors.addError(re.toString()); 99 continue; 100 } 101 102 register(key, builder); 103 } 104 105 if (!errors.isEmpty()) { 106 throw new ConfigurationException(errors); 107 } 108 } 109 110 111 120 public void register(String name, ComponentConfigBuilder builder) { 121 builders.put(name, builder); 122 builder.setRegistry(this); 123 } 124 125 135 public ComponentConfigBuilder unregister(String name) { 136 return (ComponentConfigBuilder) builders.remove(name); 137 } 138 139 148 public ComponentConfigBuilder lookup(String name) { 149 return (ComponentConfigBuilder) builders.get(name); 150 } 151 } 152 153
| Popular Tags
|