View Javadoc

1   /*
2    * $Id: AutoConfigurationBuilder.java 11007 2008-02-25 20:10:32Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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   * Configures Mule from a configuration resource or comma seperated list of configuration resources by
33   * auto-detecting the ConfigurationBuilder to use for each resource. This is resolved by either checking the
34   * classpath for config modules e.g. spring-config or by using the file extention or a combination.
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      /**
61       * @param muleContext
62       * @param resource
63       * @return
64       * @throws ConfigurationException
65       */
66      protected void autoConfigure(MuleContext muleContext, ConfigResource[] configResources) throws ConfigurationException
67      {
68  
69          Map configsMap = new LinkedHashMap();
70  
71          for (int i = 0; i < configResources.length; i++)
72          {
73              String configExtension = StringUtils.substringAfterLast(
74                  (configResources[i]).getUrl().getFile(), ".");
75              List configs = (List) configsMap.get(configExtension);
76              if (configs == null)
77              {
78                  configs = new ArrayList();
79                  configsMap.put(configExtension, configs);
80              }
81              configs.add(configResources[i]);
82          }
83  
84          try
85          {
86              Properties props = new Properties();
87              props.load(ClassUtils.getResource("configuration-builders.properties", this.getClass()).openStream());
88  
89              Iterator iterator = configsMap.entrySet().iterator();
90              while (iterator.hasNext())
91              {
92                  Map.Entry e = (Map.Entry) iterator.next();
93                  String extension = (String) e.getKey();
94                  List configs = (List) e.getValue();
95  
96                  String className = (String) props.get(extension);
97  
98                  if (className == null || !ClassUtils.isClassOnPath(className, this.getClass()))
99                  {
100                     throw new ConfigurationException(
101                         CoreMessages.configurationBuilderNoMatching(createConfigResourcesString()));
102                 }
103 
104                 ConfigResource[] constructorArg = new ConfigResource[configs.size()];
105                 System.arraycopy(configs.toArray(), 0, constructorArg, 0, configs.size());
106                 ConfigurationBuilder cb = (ConfigurationBuilder) ClassUtils.instanciateClass(className, new Object[]{constructorArg});
107                 cb.configure(muleContext);
108             }
109         }
110         catch (ConfigurationException e)
111         {
112             throw e;
113         }
114         catch (Exception e)
115         {
116             throw new ConfigurationException(e);
117         }
118     }
119 
120 }