mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
160 lines
4.0 KiB
Java
160 lines
4.0 KiB
Java
package io.ebean.config;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileNotFoundException;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.Map;
|
|
import java.util.Properties;
|
|
|
|
/**
|
|
* Helper used to load the ebean.properties into a PropertyMap.
|
|
*/
|
|
final class PropertyMapLoader {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(PropertyMapLoader.class);
|
|
|
|
/**
|
|
* Load the <code>test-ebean.properties</code>.
|
|
*/
|
|
public static PropertyMap loadTestProperties() {
|
|
if (!PropertyMap.loadTestProperties()) {
|
|
return new PropertyMap();
|
|
}
|
|
return load(null, "test-ebean.properties");
|
|
}
|
|
|
|
/**
|
|
* Load the ebean.properties (and test-ebean.properties if present).
|
|
*/
|
|
public static PropertyMap loadGlobalProperties() {
|
|
|
|
boolean loadTestProperties = false;
|
|
String fileName = System.getenv("EBEAN_PROPS_FILE");
|
|
if (fileName == null) {
|
|
fileName = System.getProperty("ebean.props.file");
|
|
if (fileName == null) {
|
|
loadTestProperties = PropertyMap.loadTestProperties();
|
|
fileName = "ebean.properties";
|
|
}
|
|
}
|
|
|
|
PropertyMap map = load(null, fileName);
|
|
if (loadTestProperties) {
|
|
// load test properties if present in classpath
|
|
map = load(map, "test-ebean.properties");
|
|
}
|
|
return map;
|
|
}
|
|
|
|
/**
|
|
* Load the file returning the property map.
|
|
*
|
|
* @param p an existing property map to load into.
|
|
* @param fileName the name of the properties file to load.
|
|
*/
|
|
public static PropertyMap load(PropertyMap p, String fileName) {
|
|
|
|
InputStream is = findInputStream(fileName);
|
|
if (is == null) {
|
|
return p;
|
|
} else {
|
|
return load(p, is);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Load the InputStream returning the property map.
|
|
*
|
|
* @param p an existing property map to load into.
|
|
* @param in the InputStream of the properties file to load.
|
|
*/
|
|
public static PropertyMap load(PropertyMap p, InputStream in) {
|
|
|
|
Properties props = new Properties();
|
|
try {
|
|
props.load(in);
|
|
in.close();
|
|
return load(p, props);
|
|
|
|
} catch (IOException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
public static PropertyMap load(PropertyMap p, Properties props) {
|
|
|
|
if (p == null) {
|
|
p = new PropertyMap();
|
|
}
|
|
|
|
// put values in initially without any evaluation
|
|
for (Map.Entry<Object, Object> entry : props.entrySet()) {
|
|
String key = ((String) entry.getKey()).toLowerCase();
|
|
String val = ((String) entry.getValue());
|
|
if (val != null) {
|
|
val = val.trim();
|
|
}
|
|
p.put(key, val);
|
|
}
|
|
|
|
p.evaluateProperties();
|
|
|
|
String otherProps = p.remove("load.properties");
|
|
if (otherProps == null) {
|
|
otherProps = p.remove("load.properties.override");
|
|
}
|
|
if (otherProps != null) {
|
|
otherProps = otherProps.replace("\\", "/");
|
|
InputStream is = findInputStream(otherProps);
|
|
if (is != null) {
|
|
logger.debug("loading properties from " + otherProps);
|
|
load(p, is);
|
|
} else {
|
|
logger.error("load.properties " + otherProps + " not found.");
|
|
}
|
|
}
|
|
|
|
return p;
|
|
}
|
|
|
|
/**
|
|
* Find the input stream given the file name.
|
|
*/
|
|
private static InputStream findInputStream(String fileName) {
|
|
|
|
if (fileName == null) {
|
|
throw new NullPointerException("fileName is null?");
|
|
}
|
|
|
|
try {
|
|
File f = new File(fileName);
|
|
|
|
if (f.exists()) {
|
|
logger.debug(fileName + " found in file system");
|
|
return new FileInputStream(f);
|
|
} else {
|
|
InputStream in = findInClassPath(fileName);
|
|
if (in != null) {
|
|
logger.debug(fileName + " found in classpath");
|
|
}
|
|
return in;
|
|
}
|
|
|
|
} catch (FileNotFoundException ex) {
|
|
// already made the check so this
|
|
// should never be thrown
|
|
throw new RuntimeException(ex);
|
|
}
|
|
}
|
|
|
|
private static InputStream findInClassPath(String fileName) {
|
|
return Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
|
|
}
|
|
|
|
}
|