001: /*
002: * $Id: AutoConfigurationBuilder.java 11007 2008-02-25 20:10:32Z dfeist $
003: * --------------------------------------------------------------------------------------
004: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
005: *
006: * The software in this package is published under the terms of the CPAL v1.0
007: * license, a copy of which has been included with this distribution in the
008: * LICENSE.txt file.
009: */
010:
011: package org.mule.config.builders;
012:
013: import org.mule.api.MuleContext;
014: import org.mule.api.config.ConfigurationBuilder;
015: import org.mule.api.config.ConfigurationException;
016: import org.mule.config.ConfigResource;
017: import org.mule.config.i18n.CoreMessages;
018: import org.mule.util.ClassUtils;
019: import org.mule.util.StringUtils;
020:
021: import java.util.ArrayList;
022: import java.util.Iterator;
023: import java.util.LinkedHashMap;
024: import java.util.List;
025: import java.util.Map;
026: import java.util.Properties;
027:
028: import org.apache.commons.logging.Log;
029: import org.apache.commons.logging.LogFactory;
030:
031: /**
032: * Configures Mule from a configuration resource or comma seperated list of configuration resources by
033: * auto-detecting the ConfigurationBuilder to use for each resource. This is resolved by either checking the
034: * classpath for config modules e.g. spring-config or by using the file extention or a combination.
035: */
036: public class AutoConfigurationBuilder extends
037: AbstractResourceConfigurationBuilder {
038: protected static final Log logger = LogFactory
039: .getLog(AutoConfigurationBuilder.class);
040:
041: public AutoConfigurationBuilder(String resource)
042: throws ConfigurationException {
043: super (resource);
044: }
045:
046: public AutoConfigurationBuilder(String[] resources)
047: throws ConfigurationException {
048: super (resources);
049: }
050:
051: public AutoConfigurationBuilder(ConfigResource[] resources) {
052: super (resources);
053: }
054:
055: protected void doConfigure(MuleContext muleContext)
056: throws ConfigurationException {
057: autoConfigure(muleContext, configResources);
058: }
059:
060: /**
061: * @param muleContext
062: * @param resource
063: * @return
064: * @throws ConfigurationException
065: */
066: protected void autoConfigure(MuleContext muleContext,
067: ConfigResource[] configResources)
068: throws ConfigurationException {
069:
070: Map configsMap = new LinkedHashMap();
071:
072: for (int i = 0; i < configResources.length; i++) {
073: String configExtension = StringUtils.substringAfterLast(
074: (configResources[i]).getUrl().getFile(), ".");
075: List configs = (List) configsMap.get(configExtension);
076: if (configs == null) {
077: configs = new ArrayList();
078: configsMap.put(configExtension, configs);
079: }
080: configs.add(configResources[i]);
081: }
082:
083: try {
084: Properties props = new Properties();
085: props.load(ClassUtils.getResource(
086: "configuration-builders.properties",
087: this .getClass()).openStream());
088:
089: Iterator iterator = configsMap.entrySet().iterator();
090: while (iterator.hasNext()) {
091: Map.Entry e = (Map.Entry) iterator.next();
092: String extension = (String) e.getKey();
093: List configs = (List) e.getValue();
094:
095: String className = (String) props.get(extension);
096:
097: if (className == null
098: || !ClassUtils.isClassOnPath(className, this
099: .getClass())) {
100: throw new ConfigurationException(
101: CoreMessages
102: .configurationBuilderNoMatching(createConfigResourcesString()));
103: }
104:
105: ConfigResource[] constructorArg = new ConfigResource[configs
106: .size()];
107: System.arraycopy(configs.toArray(), 0, constructorArg,
108: 0, configs.size());
109: ConfigurationBuilder cb = (ConfigurationBuilder) ClassUtils
110: .instanciateClass(className,
111: new Object[] { constructorArg });
112: cb.configure(muleContext);
113: }
114: } catch (ConfigurationException e) {
115: throw e;
116: } catch (Exception e) {
117: throw new ConfigurationException(e);
118: }
119: }
120:
121: }
|