All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.dstream.utils.PropertiesHelper Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.dstream.utils;

import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;

/**
 * Helper class to load properties from files which supports 
 * property place-holders to System properties (e.g., propName =file:${user.dir}/src/test);
 */
public class PropertiesHelper {
	
	/**
	 * Will create an instance of {@link Properties} object loaded from the properties file
	 * identified by the given propertyFilePath relative to the root of the classpath
	 * 
	 * @param propertyFilePath path to the property file.
	 * @return
	 */
	public static Properties loadProperties(String propertyFilePath){
		Properties prop = new Properties();
		InputStream is = null;
		ClassLoader cl = Thread.currentThread().getContextClassLoader();
		try {
			is = cl.getResourceAsStream(propertyFilePath);
			Assert.notNull(is, "Failed to obtain InputStream for " + propertyFilePath);
			prop.load(is);
			resolveSystemPropertyPlaceholders(prop);
		} 
		catch (Exception e) {
			throw new IllegalStateException("Failed to load configuration properties: " + propertyFilePath, e);
		} 
		finally {
			try {
				is.close();
			} catch (Exception e2) {
				// ignore
			}
		}
		return prop;
	}
	
	/**
	 * 
	 */
	private static void resolveSystemPropertyPlaceholders(Properties props){
        Map systemProperties = System.getProperties().entrySet()
        		.stream().collect(Collectors.toMap(prop -> "${" + prop.getKey() + "}", prop -> (String)prop.getValue()));
        
        props.entrySet().stream().forEach(executionProp -> systemProperties.entrySet().stream()
        	.filter(systemProp -> ((String) executionProp.getValue()).contains(systemProp.getKey()))
        	.forEach(systemProp -> executionProp.setValue(((String) executionProp.getValue()).replace(systemProp.getKey(), systemProp.getValue()))));
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy