/* * Copyright @ 2013 CurisTEC, S.A.S. All Rights Reserved. */ 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; /** * Config *
* Class that loads and serves global config parameters from a classpath properties file * and, as a fallback, from environment variables. * * Initialization: * - Static initializer loads {@link #KEY_CONFIG_FILE} from classpath (fails hard if missing). * * Accessors: * - {@link #get(String)} / {@link #get(String, String)} * - Integer variants: {@link #getInt(String)} / {@link #getInt(String, int)} * - Namespaced helpers: by prefix/domain, and sequential lists via {@link #getListByPrefix(String)}. * * Thread-safety: static-only utility; internal state is read-only after init. * * @author JRA * Last reviewed by JRA on Oct 5, 2025. */ public class Config { private static final Logger LOG = LogManager.getLogger(Config.class); /** * Resource path of the application properties file (in classpath). * E.g. "/securis-server.properties". */ public static final String KEY_CONFIG_FILE = "/securis-server.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); } } /** * loadParameters *
* Loads application global parameters from a classpath resource. * * @param resource Classpath location (e.g. "/resource/cp-securis.conf"). * @throws IOException If the resource cannot be found or read. */ 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; } } /** * getByDomain *
* Convenience accessor for domain-suffixed parameters (param.domain). * * @param domain Domain suffix. * @param paramname Base parameter name. * @return String value or null if not present. */ public static String getByDomain(String domain, String paramname) { return getByDomain(domain, paramname, null); } /** * getByPrefix *
* Returns parameter value from "{prefix}.{param}" or falls back to the plain "{param}". * * @param prefix Namespace prefix. * @param paramname Parameter name. * @return Resolved value or null. */ public static String getByPrefix(String prefix, String paramname) { return get(prefix + "." + paramname, get(paramname)); } /** * getByPrefix *
* Returns parameter value from "{prefix}.{param}" or provided default (which itself * falls back to "{param}" or its default). * * @param prefix Namespace prefix. * @param paramname Parameter name. * @param defaultVal Default value if none resolved. * @return Resolved value. */ public static String getByPrefix(String prefix, String paramname, String defaultVal) { return get(prefix + "." + paramname, get(paramname, defaultVal)); } /** * getByDomain *
* Returns value from "{param}.{domain}" or provided default. * * @param domain domain suffix. * @param paramname base name. * @param defaultval fallback if not found. * @return resolved string. */ public static String getByDomain(String domain, String paramname, String defaultval) { return get(paramname + "." + domain, defaultval); } /** * getIntByDomain *
* Integer variant of {@link #getByDomain(String, String)} with fallback to plain param. */ public static int getIntByDomain(String domain, String paramname) { return getInt(paramname + "." + domain, getInt(paramname)); } /** * getIntByDomain *
* Integer variant returning provided default when missing. */ public static int getIntByDomain(String domain, String paramname, int defaultval) { return getInt(paramname + "." + domain, defaultval); } /** * getListByPrefix *
* Reads sequential properties using numeric suffixes starting from 0 and stops on first gap.
* Example:
* securis.sort.comparator.0=...
* securis.sort.comparator.1=...
* ...
*
* @param prefix Base prefix (e.g. "securis.sort.comparator").
* @return Ordered list of values until first missing index.
*/
public static List
* Get a parameter value from the loaded properties or environment variables.
*
* @param paramname Parameter key.
* @return Value or null if not found anywhere.
*/
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;
}
/**
* get
*
* Returns parameter value or default if missing.
*
* @param paramname Key.
* @param defaultval Default fallback.
* @return value or default.
*/
public static String get(String paramname, String defaultval) {
String value = get(paramname);
return (value == null ? defaultval : value);
}
/**
* getInt
*
* Integer accessor, returns -1 if missing.
*
* @param paramname Key.
* @return Parsed integer or -1.
*/
public static int getInt(String paramname) {
String value = get(paramname);
return (value == null ? -1 : Integer.parseInt(value));
}
/**
* getInt
*
* Integer accessor, returns provided default when missing.
*
* @param paramname Key.
* @param defaultval Default fallback.
* @return Parsed integer or default.
*/
public static int getInt(String paramname, int defaultval) {
String value = get(paramname);
return (value == null ? defaultval : Integer.parseInt(value));
}
/**
* KEYS
*
* Strongly-typed keys used across the application.
*/
public static class KEYS {
public static final String SERVER_HOSTNAME = "license.server.hostname";
public static final String SERVER_PORT = "license.server.port";
public static final String SERVER_SSL_PORT = "license.server.ssl.port";
public static final String KEYSTORE_PATH = "ssl.keystore.path";
public static final String KEYSTORE_TYPE = "ssl.keystore.type";
public static final String KEYSTORE_PASSWORD = "ssl.keystore.password";
public static final String KEYSTORE_ALIAS = "ssl.keystore.alias";
public static final String MAILGUN_DOMAIN = "mailgun.domain";
public static final String MAILGUN_API_KEY = "mailgun.api.key";
public static final String EMAIL_FROM_ADDRESS = "email.from.address";
public static final String EMAIL_LIC_DEFAULT_SUBJECT = "email.lic.default.subject";
}
}