01: package org.concern.controller;
02:
03: import org.concern.controller.*;
04: import org.concern.controller.Loader;
05: import org.concern.model.EnvironmentEntry;
06: import org.concern.*;
07: import org.concern.Controller;
08:
09: import java.util.*;
10: import java.beans.PropertyDescriptor;
11: import java.beans.Introspector;
12:
13: /**
14: * @author hengels
15: * @version $Revision$
16: */
17: public class LoaderFactory {
18: private ResourceLocator resourceLocator;
19:
20: public LoaderFactory() {
21: try {
22: resourceLocator = (ResourceLocator) Class
23: .forName(
24: "org.concern.controller.spring.BeanFactoryInJndiResourceLocator")
25: .newInstance();
26: } catch (Exception e) {
27: e.printStackTrace();
28: }
29: }
30:
31: public Loader getLoader(Controller controller)
32: throws ControllerException {
33: try {
34: org.concern.model.Loader loaderModel = controller
35: .getProcess().getLoader();
36: Class loaderClass = getClassLoader().loadClass(
37: loaderModel.getImplementation());
38: Loader loader = (Loader) loaderClass.newInstance();
39:
40: Map environment = loaderEnvironment(loaderModel);
41: loader.setEnvironment(environment);
42: configure(loader, environment);
43: return loader;
44: } catch (Exception e) {
45: throw new ControllerException(e);
46: }
47: }
48:
49: private Map loaderEnvironment(org.concern.model.Loader loaderModel) {
50: Map environment = environment(loaderModel.getEnvironment());
51: environment.put("loader.name", loaderModel.getName());
52: return environment;
53: }
54:
55: private Map environment(List list) {
56: Map environment = new HashMap();
57: for (Iterator iterator = list.iterator(); iterator.hasNext();) {
58: EnvironmentEntry entry = (EnvironmentEntry) iterator.next();
59: Object value;
60: if (entry.getValue().startsWith("resource:"))
61: value = resourceLocator.lookup(entry.getValue()
62: .substring("resource:".length()));
63: else
64: value = EnvironmentEntry.createInstance(
65: entry.getType(), entry.getValue());
66: environment.put(entry.getName(), value);
67: }
68: return environment;
69: }
70:
71: protected void configure(Node node, Map environment) {
72: PropertyDescriptor[] descriptors = new PropertyDescriptor[0];
73: try {
74: descriptors = Introspector.getBeanInfo(node.getClass())
75: .getPropertyDescriptors();
76: for (int i = 0; i < descriptors.length; i++) {
77: PropertyDescriptor descriptor = descriptors[i];
78: if (descriptor.getWriteMethod() == null)
79: continue;
80: Object value = environment.get(descriptor.getName());
81: if (value == null)
82: continue;
83:
84: descriptor.getWriteMethod().invoke(node,
85: new Object[] { value });
86: }
87: } catch (Exception e) {
88: e.printStackTrace();
89: }
90: }
91:
92: public ClassLoader getClassLoader() {
93: return Thread.currentThread().getContextClassLoader();
94: }
95: }
|