package jnetman.session;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
public class PropertiesParser {
private File file;
private Properties prop;
static private Logger logger = Logger.getLogger("utils.propertiesParser");
public PropertiesParser(File file) {
this.file = file;
prop = new Properties();
try {
FileInputStream is = new FileInputStream(file);
prop.load(is);
is.close();
} catch (IOException e) {
fatalError(e.getMessage());
}
}
public void fatalError(String s) {
logger.fatal("[" + file.getAbsolutePath() + "] " + s);
System.exit(-1);
}
public void fatalError(String key, String s) {
fatalError("In property '" + key + "': " + s);
}
public boolean hasProperty(String key) {
if (prop.getProperty(key) == null)
return false;
else
return true;
}
private String getProperty(String key) {
String val = prop.getProperty(key);
if (val == null) {
fatalError("Property '" + key + "' not found");
System.exit(-1);
}
return val;
}
public String getString(String key) {
return StringUtils.trim(getProperty(key));
}
public boolean getBoolean(String key) {
String val = getString(key);
if (val.equalsIgnoreCase("true"))
return true;
else if (val.equalsIgnoreCase("false"))
return false;
fatalError(key, "input '" + val + "' can't be parsed as a boolean");
return false;
}
public int getInt(String key) {
try {
return Integer.valueOf(getString(key));
} catch (NumberFormatException e) {
fatalError(key, "input '" + getString(key)
+ "' can't be parsed as an integer");
}
return 0;
}
public long getLong(String key) {
try {
return Long.valueOf(getString(key));
} catch (NumberFormatException e) {
fatalError(key, "input '" + getString(key)
+ "' can't be parsed as a long");
}
return 0;
}
public float getFloat(String key) {
try {
return Float.valueOf(getString(key));
} catch (NumberFormatException e) {
fatalError(key, "input '" + getString(key)
+ "' can't be parsed as a float");
}
return 0;
}
public Double getDouble(String key) {
try {
return Double.valueOf(getString(key));
} catch (NumberFormatException e) {
fatalError(key, "input '" + getString(key)
+ "' can't be parsed as a double");
}
return (double) 0;
}
public String[] getStringArray(String key) {
String val = getString(key);
if (val == null)
return null;
return StringUtils.split(val);
}
public Set<String> keySet() {
return keySet(null);
}
public Set<String> keySet(String prefix) {
Set<String> keys = new HashSet<String>();
for (String key : prop.keySet().toArray(new String[0])) {
if (prefix == null || StringUtils.startsWith(key, prefix))
keys.add(key);
}
return keys;
}
public Properties getProperties() {
return this.prop;
}
}