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 with values: * *
	 * 	"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 getListByPrefix(String prefix) { List list = new ArrayList(); String tpl = prefix + ".{0}"; int i = 0; String value = get(MessageFormat.format(tpl, i++)); while (value != null) { list.add(value); value = get(MessageFormat.format(tpl, i++)); } return list; } /** * Gets param value in config file or environment variables * * @param paramname * Global parameter's name * @return Value of paramname or null if paramname is not found neither in * config file nor in environment variables */ public static String get(String paramname) { assert (params != null) : "Parameters have not been loaded. Call method loadParameters(resource) before use Params."; String value = params.getProperty(paramname); if (value == null) value = System.getenv(paramname); return value; } /** * Gets param value from config file or environment variables * * @param paramname * Global parameter's name * @param defaultval * @return Value of paramname or defaultval if paramname is not found */ public static String get(String paramname, String defaultval) { String value = get(paramname); return (value == null ? defaultval : value); } /** * Gets param value in config file or environment variables * * @param paramname * Global parameter's name * @return Integer value of paramname or -1 if paramname is not found * neither in config file nor in environment variables */ public static int getInt(String paramname) { String value = get(paramname); return (value == null ? -1 : Integer.parseInt(value)); } /** * Gets param value from config file or environment variables * * @param paramname * Global parameter's name * @param defaultval * @return Integer value of paramname or defaultval if paramname is not * found */ public static int getInt(String paramname, int defaultval) { String value = get(paramname); return (value == null ? defaultval : Integer.parseInt(value)); } public static class KEYS { /** * Public key file, Usually in "PEM" format */ public static final String PUBLIC_KEY_FILE = "public.key.file"; public static final String LIC_TYPE_CODE = "license.type.code"; public static final String APPLICATION_CODE = "app.code"; public static final String CUSTOMER_CODE = "customer.code"; public static final String PACK_CODE = "pack.code"; public static final String LICENSE_SERVER_URL = "license.server.url"; } }