1
2
3
4
5
6
7
8
9
10
11 package org.mule.config.builders;
12
13 import org.mule.api.MuleContext;
14 import org.mule.api.config.ConfigurationBuilder;
15 import org.mule.api.config.ConfigurationException;
16 import org.mule.config.ConfigResource;
17 import org.mule.config.i18n.CoreMessages;
18 import org.mule.util.ClassUtils;
19 import org.mule.util.StringUtils;
20
21 import java.util.ArrayList;
22 import java.util.Iterator;
23 import java.util.LinkedHashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Properties;
27
28 import org.apache.commons.logging.Log;
29 import org.apache.commons.logging.LogFactory;
30
31
32
33
34
35
36 public class AutoConfigurationBuilder extends AbstractResourceConfigurationBuilder
37 {
38 protected static final Log logger = LogFactory.getLog(AutoConfigurationBuilder.class);
39
40 public AutoConfigurationBuilder(String resource) throws ConfigurationException
41 {
42 super(resource);
43 }
44
45 public AutoConfigurationBuilder(String[] resources) throws ConfigurationException
46 {
47 super(resources);
48 }
49
50 public AutoConfigurationBuilder(ConfigResource[] resources)
51 {
52 super(resources);
53 }
54
55 protected void doConfigure(MuleContext muleContext) throws ConfigurationException
56 {
57 autoConfigure(muleContext, configResources);
58 }
59
60 protected void autoConfigure(MuleContext muleContext, ConfigResource[] configResources) throws ConfigurationException
61 {
62
63 Map configsMap = new LinkedHashMap();
64
65 for (int i = 0; i < configResources.length; i++)
66 {
67 String configExtension = StringUtils.substringAfterLast(
68 (configResources[i]).getUrl().getFile(), ".");
69 List configs = (List) configsMap.get(configExtension);
70 if (configs == null)
71 {
72 configs = new ArrayList();
73 configsMap.put(configExtension, configs);
74 }
75 configs.add(configResources[i]);
76 }
77
78 try
79 {
80 Properties props = new Properties();
81 props.load(ClassUtils.getResource("configuration-builders.properties", this.getClass()).openStream());
82
83 Iterator iterator = configsMap.entrySet().iterator();
84 while (iterator.hasNext())
85 {
86 Map.Entry e = (Map.Entry) iterator.next();
87 String extension = (String) e.getKey();
88 List configs = (List) e.getValue();
89
90 String className = (String) props.get(extension);
91
92 if (className == null || !ClassUtils.isClassOnPath(className, this.getClass()))
93 {
94 throw new ConfigurationException(
95 CoreMessages.configurationBuilderNoMatching(createConfigResourcesString()));
96 }
97
98 ConfigResource[] constructorArg = new ConfigResource[configs.size()];
99 System.arraycopy(configs.toArray(), 0, constructorArg, 0, configs.size());
100 ConfigurationBuilder cb = (ConfigurationBuilder) ClassUtils.instanciateClass(className, new Object[] {constructorArg});
101 cb.configure(muleContext);
102 }
103 }
104 catch (ConfigurationException e)
105 {
106 throw e;
107 }
108 catch (Exception e)
109 {
110 throw new ConfigurationException(e);
111 }
112 }
113
114 }