From a75a1819f4c7fa5080ddb47545fe9012a842e5b3 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 20 Jul 2011 21:08:57 -0400
Subject: [PATCH] Misc fixes.

---
 src/com/gitblit/IStoredSettings.java |  102 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 97 insertions(+), 5 deletions(-)

diff --git a/src/com/gitblit/IStoredSettings.java b/src/com/gitblit/IStoredSettings.java
index 403a067..0cc4bb4 100644
--- a/src/com/gitblit/IStoredSettings.java
+++ b/src/com/gitblit/IStoredSettings.java
@@ -24,9 +24,17 @@
 
 import com.gitblit.utils.StringUtils;
 
+/**
+ * Base class for stored settings implementations.
+ * 
+ * @author James Moger
+ * 
+ */
 public abstract class IStoredSettings {
 
 	protected final Logger logger;
+
+	protected final Properties overrides = new Properties();
 
 	public IStoredSettings(Class<? extends IStoredSettings> clazz) {
 		logger = LoggerFactory.getLogger(clazz);
@@ -34,9 +42,22 @@
 
 	protected abstract Properties read();
 
+	private Properties getSettings() {
+		Properties props = read();
+		props.putAll(overrides);
+		return props;
+	}
+
+	/**
+	 * Returns the list of keys whose name starts with the specified prefix. If
+	 * the prefix is null or empty, all key names are returned.
+	 * 
+	 * @param startingWith
+	 * @return list of keys
+	 */
 	public List<String> getAllKeys(String startingWith) {
 		List<String> keys = new ArrayList<String>();
-		Properties props = read();
+		Properties props = getSettings();
 		if (StringUtils.isEmpty(startingWith)) {
 			keys.addAll(props.stringPropertyNames());
 		} else {
@@ -51,8 +72,17 @@
 		return keys;
 	}
 
+	/**
+	 * Returns the boolean value for the specified key. If the key does not
+	 * exist or the value for the key can not be interpreted as a boolean, the
+	 * defaultValue is returned.
+	 * 
+	 * @param key
+	 * @param defaultValue
+	 * @return key value or defaultValue
+	 */
 	public boolean getBoolean(String name, boolean defaultValue) {
-		Properties props = read();
+		Properties props = getSettings();
 		if (props.containsKey(name)) {
 			String value = props.getProperty(name);
 			if (!StringUtils.isEmpty(value)) {
@@ -62,8 +92,17 @@
 		return defaultValue;
 	}
 
+	/**
+	 * Returns the integer value for the specified key. If the key does not
+	 * exist or the value for the key can not be interpreted as an integer, the
+	 * defaultValue is returned.
+	 * 
+	 * @param key
+	 * @param defaultValue
+	 * @return key value or defaultValue
+	 */
 	public int getInteger(String name, int defaultValue) {
-		Properties props = read();
+		Properties props = getSettings();
 		if (props.containsKey(name)) {
 			try {
 				String value = props.getProperty(name);
@@ -77,9 +116,38 @@
 		}
 		return defaultValue;
 	}
+	
+	/**
+	 * Returns the char value for the specified key. If the key does not exist
+	 * or the value for the key can not be interpreted as a char, the
+	 * defaultValue is returned.
+	 * 
+	 * @param key
+	 * @param defaultValue
+	 * @return key value or defaultValue
+	 */
+	public char getChar(String name, char defaultValue) {
+		Properties props = getSettings();
+		if (props.containsKey(name)) {
+			String value = props.getProperty(name);
+			if (!StringUtils.isEmpty(value)) {
+				return value.charAt(0);
+			}
+		}
+		return defaultValue;
+	}
 
+	/**
+	 * Returns the string value for the specified key. If the key does not exist
+	 * or the value for the key can not be interpreted as a string, the
+	 * defaultValue is returned.
+	 * 
+	 * @param key
+	 * @param defaultValue
+	 * @return key value or defaultValue
+	 */
 	public String getString(String name, String defaultValue) {
-		Properties props = read();
+		Properties props = getSettings();
 		if (props.containsKey(name)) {
 			String value = props.getProperty(name);
 			if (value != null) {
@@ -89,17 +157,41 @@
 		return defaultValue;
 	}
 
+	/**
+	 * Returns a list of space-separated strings from the specified key.
+	 * 
+	 * @param name
+	 * @return list of strings
+	 */
 	public List<String> getStrings(String name) {
 		return getStrings(name, " ");
 	}
 
+	/**
+	 * Returns a list of strings from the specified key using the specified
+	 * string separator.
+	 * 
+	 * @param name
+	 * @param separator
+	 * @return list of strings
+	 */
 	public List<String> getStrings(String name, String separator) {
 		List<String> strings = new ArrayList<String>();
-		Properties props = read();
+		Properties props = getSettings();
 		if (props.containsKey(name)) {
 			String value = props.getProperty(name);
 			strings = StringUtils.getStringsFromValue(value, separator);
 		}
 		return strings;
 	}
+
+	/**
+	 * Override the specified key with the specified value.
+	 * 
+	 * @param key
+	 * @param value
+	 */
+	public void overrideSetting(String key, String value) {
+		overrides.put(key, value);
+	}
 }
\ No newline at end of file

--
Gitblit v1.9.1