package net.curisit.securis.utils;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Class that loads and serves global config parameters.
*
* @author rsanchez
*/
public class Params {
private static Logger log = LogManager.getLogger(Params.class);
/**
* Key used to store config file resource location. In a web application, can be set as initial parameter in a servlet loaded on startup
*/
public static final String KEY_CONFIG_FILE = "/securis-client.properties";
private static Properties params = null;
static {
try {
loadParameters(KEY_CONFIG_FILE);
} catch (IOException e) {
log.error("Config file {} was not found in classpath", KEY_CONFIG_FILE);
System.exit(-2);
}
}
/**
* Loads application global parameters from a classpath resource
*
* @param resource
* : Resource location in classpath, i.e: "/resource/cp-securis.conf"
* @throws IOException
*/
public static void loadParameters(String resource) throws IOException {
log.debug("Loading params from " + resource);
InputStream fileis = Params.class.getResourceAsStream(resource);
params = new Properties();
try {
params.load(fileis);
log.debug("Params loaded OK from {}", resource);
} catch (IOException e) {
log.error("Error loading config file: " + e);
params = null;
throw e;
}
}
public static String getByDomain(String domain, String paramname) {
return getByDomain(domain, paramname, null);
}
public static String getByPrefix(String prefix, String paramname) {
return get(prefix + "." + paramname, get(paramname));
}
public static String getByPrefix(String prefix, String paramname, String defaultVal) {
return get(prefix + "." + paramname, get(paramname, defaultVal));
}
public static String getByDomain(String domain, String paramname, String defaultval) {
return get(paramname + "." + domain, defaultval);
}
public static int getIntByDomain(String domain, String paramname) {
return getInt(paramname + "." + domain, getInt(paramname));
}
public static int getIntByDomain(String domain, String paramname, int defaultval) {
return getInt(paramname + "." + domain, defaultval);
}
/**
* Gets a List with all values of properties that begins with prefix It reads sequentially. For example:
*
*
* securis.sort.comparator.0: net.cp.securis.comparators.ComparePttidVsPtn * securis.sort.comparator.1: net.cp.securis.comparators.CompareFrequency * securis.sort.comparator.2: net.cp.securis.comparators.CompareOutgoingVsIncomming * securis.sort.comparator.3: net.cp.securis.comparators.CompareDuration * securis.sort.comparator.4: net.cp.securis.comparators.CompareCallVsSms ** * That config (for prefix: "securis.sort.comparator" ) will return a List
* "net.cp.securis.comparators.ComparePttidVsPtn", * "net.cp.securis.comparators.CompareFrequency", * "net.cp.securis.comparators.CompareOutgoingVsIncomming", * "net.cp.securis.comparators.CompareDuration", * "net.cp.securis.comparators.CompareCallVsSms" ** * Note: If there is a gap between suffixes process will stop, that is, only will be returned properties found before gap. * * @param prefix * @return */ public static List