/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.config.builders; import static org.mule.runtime.deployment.model.api.application.ApplicationDescriptor.DEFAULT_ARTIFACT_PROPERTIES_RESOURCE; import org.mule.runtime.core.api.config.MuleConfiguration; import org.mule.runtime.core.config.DefaultMuleConfiguration; import org.mule.runtime.core.util.BeanUtils; import org.mule.runtime.core.util.ClassUtils; import org.mule.runtime.core.util.FilenameUtils; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class PropertiesMuleConfigurationFactory { private static Logger logger = LoggerFactory.getLogger(PropertiesMuleConfigurationFactory.class); private Properties properties; public static String getMuleAppConfiguration(String muleConfig) { String directory = FilenameUtils.getFullPath(muleConfig); String muleAppConfiguration = directory + DEFAULT_ARTIFACT_PROPERTIES_RESOURCE; return muleAppConfiguration; } public PropertiesMuleConfigurationFactory(String muleAppConfiguration) { URL muleAppURL = ClassUtils.getResource(muleAppConfiguration, getClass()); if (muleAppURL != null) { this.properties = new Properties(); InputStream inputStream = null; try { inputStream = muleAppURL.openStream(); this.properties.load(inputStream); } catch (IOException e) { logger.debug("Unable to read properties", e); } finally { IOUtils.closeQuietly(inputStream); } } } public DefaultMuleConfiguration createConfiguration() { DefaultMuleConfiguration configuration = new DefaultMuleConfiguration(); if (this.properties != null) { this.initializeFromProperties(configuration); } return configuration; } private void initializeFromProperties(MuleConfiguration configuration) { initializeFromProperties(configuration, this.properties); } public static void initializeFromProperties(MuleConfiguration configuration, Map properties) { for (Object entryObject : properties.entrySet()) { Entry entry = (Entry) entryObject; String key = (String) entry.getKey(); String value = (String) entry.getValue(); if (key.startsWith("sys.")) { String systemProperty = key.substring(4); System.setProperty(systemProperty, value); } else if (key.startsWith("mule.config.")) { String configProperty = key.substring(12); try { BeanUtils.setProperty(configuration, configProperty, value); } catch (IllegalAccessException | InvocationTargetException e) { logger.error("Cannot set configuration property", e); } } } } }