1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.james.container.spring.lifecycle;
20
21 import org.apache.avalon.framework.configuration.Configurable;
22 import org.apache.avalon.framework.configuration.Configuration;
23 import org.apache.avalon.framework.configuration.ConfigurationException;
24 import org.apache.james.container.spring.adaptor.ConfigurationProvider;
25 import org.springframework.beans.factory.config.BeanDefinition;
26 import org.springframework.beans.factory.config.BeanPostProcessor;
27 import org.springframework.core.Ordered;
28
29
30
31
32 public class ConfigurationPropagator extends AbstractPropagator implements BeanPostProcessor, Ordered {
33
34 private Configuration configuration;
35
36 public void setConfigurationProvider(ConfigurationProvider configurationProvider) {
37 this.configuration = configurationProvider.getConfiguration();
38 }
39
40 private boolean isConfigurationEmpty(Configuration componentConfiguration) {
41 return (componentConfiguration.getChildren() == null || componentConfiguration.getChildren().length == 0)
42 && (componentConfiguration.getAttributeNames() == null || componentConfiguration.getAttributeNames().length == 0);
43 }
44
45 public int getOrder() {
46 return 3;
47 }
48
49 protected Class getLifecycleInterface() {
50 return Configurable.class;
51 }
52
53 protected void invokeLifecycleWorker(String beanName, Object bean, BeanDefinition beanDefinition) {
54 if (!(bean instanceof Configurable)) return;
55 Configurable configurable = (Configurable)bean;
56 try {
57 Configuration componentConfiguration = configuration.getChild(beanName);
58 if (isConfigurationEmpty(componentConfiguration)) {
59
60 componentConfiguration = configuration.getChild(beanName.toLowerCase());
61 }
62 if (isConfigurationEmpty(componentConfiguration)) {
63 System.out.println("configuraton empty for bean " + beanName);
64 }
65 configurable.configure(componentConfiguration);
66 } catch (ConfigurationException e) {
67 throw new RuntimeException("could not configure component of type " + configurable.getClass(), e);
68 }
69
70
71
72 }
73 }