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 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 APPLICATION_CODE = "app.code"; public static final String CUSTOMER_CODE = "customer.code"; public static final String LICENSE_SERVER_URL = "license.server.url"; } }