JavaXT
|
|
Config Classpackage javaxt.express; import javaxt.json.*; import java.util.*; //****************************************************************************** //** Config Class //****************************************************************************** /** * Provides thread-safe methods used to get and set application variables. * ******************************************************************************/ public class Config { private List<JSONObject> config; //************************************************************************** //** Constructor //************************************************************************** public Config(){ config = new LinkedList<>(); config.add(new JSONObject()); } //************************************************************************** //** init //************************************************************************** /** Used to initialize the config with a given JSON document. This will * replace any previously assigned config values. */ public void init(JSONObject json){ synchronized(config){ config.set(0, json); config.notify(); } } //************************************************************************** //** get //************************************************************************** /** Returns the value for a given key. */ public JSONValue get(String key){ synchronized(config){ return config.get(0).get(key); } } //************************************************************************** //** get //************************************************************************** /** Returns a nested value associated with the given keys */ public JSONValue get(String... path){ synchronized(config){ return config.get(0).get(path); } } //************************************************************************** //** set //************************************************************************** /** Used to set the value for a given key. */ public void set(String key, Object value){ synchronized(config){ config.get(0).set(key, value); config.notify(); } } //************************************************************************** //** has //************************************************************************** /** Returns true if the config has a given key. */ public boolean has(String key){ synchronized(config){ return config.get(0).has(key); } } //************************************************************************** //** getKeys //************************************************************************** /** Returns a list of keys found in the config. */ public ArrayList<String> getKeys(){ ArrayList<String> keys = new ArrayList<>(); synchronized(config){ for (String key : config.get(0).keySet()){ keys.add(key); } } return keys; } //************************************************************************** //** isEmpty //************************************************************************** /** Returns true if there are no entries in the config. */ public boolean isEmpty(){ return getKeys().isEmpty(); } //************************************************************************** //** getDatabase //************************************************************************** /** Returns a Database assigned to a "database" key. */ public javaxt.sql.Database getDatabase(){ JSONValue val = get("database"); if (val==null) return null; if (val.toObject() instanceof javaxt.sql.Database){ return (javaxt.sql.Database) val.toObject(); } else{ javaxt.sql.Database database = getDatabase(val); if (database!=null) setDatabase(database); return database; } } //************************************************************************** //** getDatabase //************************************************************************** /** Used to parse database connection information found in a given JSONValue * and returns a Database object. */ public static javaxt.sql.Database getDatabase(JSONValue val){ return getDatabase(val.toJSONObject()); } //************************************************************************** //** getDatabase //************************************************************************** /** Used to parse database connection information found in a given JSONObject * and returns a Database object. Example: <pre> { "driver": "PostgreSQL", "host": "localhost:5432", "name": "test", "username": "postgres", "password": "xxxxxxxx", "maxConnections": 35 } </pre> */ public static javaxt.sql.Database getDatabase(JSONObject json){ if (json==null) return null; javaxt.sql.Database database = new javaxt.sql.Database(); database.setDriver(json.get("driver").toString()); database.setHost(json.get("host").toString()); database.setName(json.get("name").toString()); database.setUserName(json.get("username").toString()); database.setPassword(json.get("password").toString()); if (json.has("maxConnections")){ database.setConnectionPoolSize(json.get("maxConnections").toInteger()); } return database; } //************************************************************************** //** setDatabase //************************************************************************** /** Used to assign a Database to a "database" key. */ public void setDatabase(javaxt.sql.Database database){ set("database", database); } //************************************************************************** //** toJson //************************************************************************** /** Returns the current config in JSON notation. */ public JSONObject toJson(){ JSONObject json = new JSONObject(); synchronized(config){ JSONObject currConfig = config.get(0); for (String key : currConfig.keySet()){ JSONValue val = currConfig.get(key); Object obj = val.toObject(); if (obj instanceof javaxt.sql.Database){ javaxt.sql.Database database = (javaxt.sql.Database) obj; JSONObject db = new JSONObject(); String host = database.getHost(); Integer port = database.getPort(); if (port!=null && port>0) host += ":" + port; db.set("driver", database.getDriver().getVendor()); db.set("host", host); db.set("name", database.getName()); db.set("username", database.getUserName()); db.set("password", database.getPassword()); db.set("maxConnections", database.getConnectionPoolSize()); json.set(key, db); } else{ json.set(key, obj); } } } return json; } } |