From 0e44acbb2fec928a1606dc60f427a148fff405c9 Mon Sep 17 00:00:00 2001
From: Mohamed Ragab <moragab@gmail.com>
Date: Wed, 02 May 2012 11:15:01 -0400
Subject: [PATCH] Added a script to facilitate setting the proxy host and port and no proxy hosts, and then it concatenates all the java system properties for setting the java proxy configurations and puts the resulting string in an environment variable JAVA_PROXY_CONFIG, modified the scirpts gitblit,  gitblit-ubuntu, and gitblit-centos to source the java-proxy-config.sh script and then include the resulting java proxy configuration in the java command

---
 src/com/gitblit/IStoredSettings.java |  161 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 143 insertions(+), 18 deletions(-)

diff --git a/src/com/gitblit/IStoredSettings.java b/src/com/gitblit/IStoredSettings.java
index 7108c06..2f45f09 100644
--- a/src/com/gitblit/IStoredSettings.java
+++ b/src/com/gitblit/IStoredSettings.java
@@ -17,6 +17,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
 import org.slf4j.Logger;
@@ -24,47 +25,90 @@
 
 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);
 	}
-		
+
 	protected abstract Properties read();
 
-	public List<String> getAllKeys(String startingWith) {
-		startingWith = startingWith.toLowerCase();
-		List<String> keys = new ArrayList<String>();
+	private Properties getSettings() {
 		Properties props = read();
-		for (Object o : props.keySet()) {
-			String key = o.toString();
-			if (key.toLowerCase().startsWith(startingWith)) {
-				keys.add(key);
+		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 = getSettings();
+		if (StringUtils.isEmpty(startingWith)) {
+			keys.addAll(props.stringPropertyNames());
+		} else {
+			startingWith = startingWith.toLowerCase();
+			for (Object o : props.keySet()) {
+				String key = o.toString();
+				if (key.toLowerCase().startsWith(startingWith)) {
+					keys.add(key);
+				}
 			}
 		}
 		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)) {
-				return Boolean.parseBoolean(value);
+				return Boolean.parseBoolean(value.trim());
 			}
 		}
 		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);
 				if (!StringUtils.isEmpty(value)) {
-					return Integer.parseInt(value);
+					return Integer.parseInt(value.trim());
 				}
 			} catch (NumberFormatException e) {
 				logger.warn("Failed to parse integer for " + name + " using default of "
@@ -74,28 +118,109 @@
 		return defaultValue;
 	}
 
-	public String getString(String name, String defaultValue) {
-		Properties props = read();
+	/**
+	 * 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 (value != null) {
-				return value;
+			if (!StringUtils.isEmpty(value)) {
+				return value.trim().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 = getSettings();
+		if (props.containsKey(name)) {
+			String value = props.getProperty(name);
+			if (value != null) {
+				return value.trim();
+			}
+		}
+		return defaultValue;
+	}
+	
+	/**
+	 * Returns the string value for the specified key.  If the key does not
+	 * exist an exception is thrown.
+	 * 
+	 * @param key
+	 * @return key value
+	 */
+	public String getRequiredString(String name) {
+		Properties props = getSettings();
+		if (props.containsKey(name)) {
+			String value = props.getProperty(name);
+			if (value != null) {
+				return value.trim();
+			}
+		}		
+		throw new RuntimeException("Property (" + name + ") does not exist");
+	}
+
+	/**
+	 * 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);
+	}
+
+	/**
+	 * Updates the values for the specified keys and persists the entire
+	 * configuration file.
+	 * 
+	 * @param map
+	 *            of key, value pairs
+	 * @return true if successful
+	 */
+	public abstract boolean saveSettings(Map<String, String> updatedSettings);
 }
\ No newline at end of file

--
Gitblit v1.9.1