package net.curisit.securis.utils;
import java.io.File;
import java.io.FileInputStream;
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 final 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 DEFAUT_SERVER_URL = "https://securis.curistec.com/api";
public static final String CONFIG_FILE_RESOURCE = "/securis-client.properties";
public static final String ENV_PARAM_CONFIGFILE = "SECURIS_CLIENT_CONFIG_FILE";
private static Properties params = null;
static {
try {
loadParameters();
} catch (IOException e) {
LOG.error("Config file {} was not found in classpath", CONFIG_FILE_RESOURCE);
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() throws IOException {
String configPath = System.getenv(ENV_PARAM_CONFIGFILE);
if (configPath == null) {
configPath = System.getProperty(ENV_PARAM_CONFIGFILE);
}
InputStream fileis = null;
if (configPath != null) {
File configFile = new File(configPath);
if (configFile.exists()) {
LOG.info("Securis client config file read from: {}", configFile.getAbsolutePath());
fileis = new FileInputStream(configFile);
}
}
if (fileis == null) {
LOG.info("Securis client config file read from resource: {}", CONFIG_FILE_RESOURCE);
fileis = Params.class.getResourceAsStream(CONFIG_FILE_RESOURCE);
}
params = new Properties();
try {
params.load(fileis);
LOG.debug("Params loaded OK");
} 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