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 |  206 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 197 insertions(+), 9 deletions(-)

diff --git a/src/com/gitblit/IStoredSettings.java b/src/com/gitblit/IStoredSettings.java
index 07d21e2..2f45f09 100644
--- a/src/com/gitblit/IStoredSettings.java
+++ b/src/com/gitblit/IStoredSettings.java
@@ -15,24 +15,212 @@
  */
 package com.gitblit;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 
-public interface IStoredSettings {
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-	List<String> getAllKeys(String startingWith);
+import com.gitblit.utils.StringUtils;
 
-	boolean getBoolean(String name, boolean defaultValue);
+/**
+ * Base class for stored settings implementations.
+ * 
+ * @author James Moger
+ * 
+ */
+public abstract class IStoredSettings {
 
-	int getInteger(String name, int defaultValue);
+	protected final Logger logger;
 
-	String getString(String name, String defaultValue);
+	protected final Properties overrides = new Properties();
 
-	List<String> getStrings(String name);
+	public IStoredSettings(Class<? extends IStoredSettings> clazz) {
+		logger = LoggerFactory.getLogger(clazz);
+	}
 
-	List<String> getStringsFromValue(String value);
+	protected abstract Properties read();
 
-	List<String> getStrings(String name, String separator);
+	private Properties getSettings() {
+		Properties props = read();
+		props.putAll(overrides);
+		return props;
+	}
 
-	List<String> getStringsFromValue(String value, String separator);
+	/**
+	 * 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 = getSettings();
+		if (props.containsKey(name)) {
+			String value = props.getProperty(name);
+			if (!StringUtils.isEmpty(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 = getSettings();
+		if (props.containsKey(name)) {
+			try {
+				String value = props.getProperty(name);
+				if (!StringUtils.isEmpty(value)) {
+					return Integer.parseInt(value.trim());
+				}
+			} catch (NumberFormatException e) {
+				logger.warn("Failed to parse integer for " + name + " using default of "
+						+ defaultValue);
+			}
+		}
+		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.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 = 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