1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.exolab.castor.builder.printing;
17
18 import java.util.HashMap;
19 import java.util.Map;
20
21 import org.apache.commons.logging.Log;
22 import org.apache.commons.logging.LogFactory;
23 import org.exolab.castor.builder.BuilderConfiguration;
24
25
26
27
28
29
30
31
32
33
34 public class JClassPrinterFactoryRegistry {
35
36
37
38 private final Log _log = LogFactory.getLog(JClassPrinterFactoryRegistry.class);
39
40
41 private Map<String, JClassPrinterFactory> _factories = new HashMap<String, JClassPrinterFactory>();
42
43
44
45
46
47
48
49
50 public JClassPrinterFactoryRegistry(final BuilderConfiguration config) {
51 String jClassPrinterFactories = config.getJClassPrinterFactories();
52 String[] factoryClassNames = jClassPrinterFactories.split(",");
53
54 for (int i = 0; i < factoryClassNames.length; i++) {
55 JClassPrinterFactory factory;
56 try {
57 factory = (JClassPrinterFactory)
58 Class.forName(factoryClassNames[i]).newInstance();
59 } catch (InstantiationException e) {
60 throw new IllegalStateException("Property entry '"
61 + factoryClassNames[i] + "' does"
62 + " not represent a valid class name.");
63 } catch (IllegalAccessException e) {
64 throw new IllegalStateException("Property entry '"
65 + factoryClassNames[i] + "' does"
66 + " not represent a valid class name.");
67 } catch (ClassNotFoundException e) {
68 throw new IllegalStateException("Property entry '"
69 + factoryClassNames[i] + "' does"
70 + " not represent a valid class name.");
71 }
72 _factories.put(factory.getName(), factory);
73 }
74 }
75
76
77
78
79
80
81
82
83 public String[] getJClassPrinterFactoryNames() {
84 String[] names = new String[_factories.size()];
85 return _factories.keySet().toArray(names);
86 }
87
88
89
90
91
92
93
94
95 public JClassPrinterFactory getJClassPrinterFactory(final String name) {
96 Object factory = _factories.get(name);
97 if (factory == null) {
98 String msg = "The JClassPrinterFactory '" + name + "' "
99 + "does not exist in the Castor XML code generator properties file "
100 + "and is therefore not supported.";
101 _log.error(msg);
102 throw new IllegalArgumentException(msg);
103 }
104
105 if (_log.isDebugEnabled()) {
106 _log.debug("Returning JClassPrinterFactory with name " + name);
107 }
108 return (JClassPrinterFactory) factory;
109 }
110
111 }