package phoenix.config; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Properties; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; public class Context { private Map<String, String> parameters; public Context() { parameters = Collections.synchronizedMap(new HashMap<String, String>()); } public Context(Map<String, String> paramters) { this(); this.putAll(paramters); } public Context(Properties ps) { this(); Enumeration<?> propertyNames = ps.propertyNames(); while (propertyNames.hasMoreElements()) { String name = (String) propertyNames.nextElement(); String value = ps.getProperty(name); this.parameters.put(name, value); } } public Context(String propertyFilePath) throws IOException { this(loadFile(propertyFilePath)); } public ImmutableMap<String, String> getParameters() { synchronized (parameters) { return ImmutableMap.copyOf(parameters); } } public void clear() { parameters.clear(); } public ImmutableMap<String, String> getSubProperties(String prefix) { Preconditions.checkArgument(prefix.endsWith("."), "The given prefix does not end with a period (" + prefix + ")"); Map<String, String> result = Maps.newHashMap(); synchronized (parameters) { for (String key : parameters.keySet()) { if (key.startsWith(prefix)) { String name = key.substring(prefix.length()); result.put(name, parameters.get(key)); } } } return ImmutableMap.copyOf(result); } public void putAll(Map<String, String> map) { parameters.putAll(map); } public void put(String key, String value) { parameters.put(key, value); } public Boolean getBoolean(String key, Boolean defaultValue) { String value = get(key); if (value != null) { return Boolean.parseBoolean(value.trim()); } return defaultValue; } public Boolean getBoolean(String key) { return getBoolean(key, null); } public Integer getInteger(String key, Integer defaultValue) { String value = get(key); if (value != null) { return Integer.parseInt(value.trim()); } return defaultValue; } public Integer getInteger(String key) { return getInteger(key, null); } public Long getLong(String key, Long defaultValue) { String value = get(key); if (value != null) { return Long.parseLong(value.trim()); } return defaultValue; } public Long getLong(String key) { return getLong(key, null); } public Double getDouble(String key, Double defaultValue) { String value = get(key); if (value != null) { return Double.parseDouble(value); } return defaultValue; } public Double getDouble(String key) { return getDouble(key, null); } public String getString(String key, String defaultValue) { return get(key, defaultValue); } public String getString(String key) { return get(key); } private String get(String key, String defaultValue) { String result = parameters.get(key); if (result != null) { return result; } return defaultValue; } public String get(String key) { return get(key, null); } @Override public String toString() { return "{ parameters:" + parameters + " }"; } private static Properties loadFile(String configPath) throws IOException { InputStream in = new BufferedInputStream(new FileInputStream(configPath)); Properties properties = new Properties(); properties.load(in); in.close(); return properties; } }