package hu.sztaki.ilab.longneck.bootstrap;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
/**
*
* @author Molnár Péter <molnarp@sztaki.mta.hu>
*/
public class PropertyUtils {
public static String getStringProperty(Properties properties, String propertyName,
String defaultValue) {
String value;
try {
value = properties.getProperty(propertyName);
} catch (NullPointerException ex) {
value = defaultValue;
}
if (value == null)
value = defaultValue;
return value;
}
public static int getIntProperty(Properties properties, String propertyName,
int defaultValue) {
int value;
try {
value = Integer.parseInt(properties.getProperty(propertyName));
} catch (NumberFormatException ex) {
value = defaultValue;
} catch (NullPointerException ex) {
value = defaultValue;
}
return value;
}
public static boolean getBooleanProperty(Properties properties, String propertyName,
boolean defaultValue) {
boolean value;
try {
value = Boolean.parseBoolean(properties.getProperty(propertyName));
} catch (NumberFormatException ex) {
value = defaultValue;
} catch (NullPointerException ex) {
value = defaultValue;
}
return value;
}
public static List<String> getFilteredStringList(Properties properties,
String propertyName, List<String> defaultValue) {
List<String> retval = new ArrayList<String>();
String value = properties.getProperty(propertyName);
if (!StringUtils.isEmpty(value)) {
String[] parts = StringUtils.split(value, ',');
for (final String part : parts) {
if (!StringUtils.isEmpty(part.trim())) {
retval.add(part.trim());
}
}
}
return retval;
}
public static Properties readPropertyFiles(File confDir, Set<String> blacklist) {
if (!confDir.exists() || !confDir.canRead()) {
return new Properties();
}
Properties properties = new Properties();
for (File f : confDir.listFiles()) {
if (f.isFile() && f.getName().endsWith(".properties") &&
!blacklist.contains(f.getName())) {
try {
properties.load(new BufferedReader(new FileReader(f)));
} catch (IOException ex) {
Logger.getLogger(PropertyUtils.class.getName()).warn(
String.format("Failed to read configuration file %1$s.",
f.getAbsolutePath()), ex);
continue;
}
}
}
return properties;
}
public static Properties readDefaultProperties() {
final Logger LOG = Logger.getLogger(PropertyUtils.class);
Properties properties = new Properties();
// Read defaults from classpath properties files
PathMatchingResourcePatternResolver cpResolver = new PathMatchingResourcePatternResolver();
try {
for (Resource r : cpResolver
.getResources("classpath*:META-INF/longneck/properties/*.properties")) {
try {
Properties p = new Properties();
p.load(r.getInputStream());
properties.putAll(p);
} catch (IOException ex) {
LOG.warn(String.format("Could not read properties file %1$s", r
.getURL().toString()), ex);
}
}
} catch (IOException ex) {
LOG.warn("Failed to scan for default properties.", ex);
}
return properties;
}
}