From b23b67c1cc0b2541580f23c9aec97c0b84a823f4 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 21 Feb 2014 09:56:37 -0500
Subject: [PATCH] Select default/configured gc period in create/edit repository page

---
 src/main/java/com/gitblit/FileSettings.java |   40 ++++++++++++++++++++++++++++++++--------
 1 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/gitblit/FileSettings.java b/src/main/java/com/gitblit/FileSettings.java
index 3a42cad..d31fc2f 100644
--- a/src/main/java/com/gitblit/FileSettings.java
+++ b/src/main/java/com/gitblit/FileSettings.java
@@ -26,23 +26,46 @@
 /**
  * Dynamically loads and reloads a properties file by keeping track of the last
  * modification date.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
 public class FileSettings extends IStoredSettings {
 
-	protected final File propertiesFile;
+	protected File propertiesFile;
 
 	private final Properties properties = new Properties();
 
 	private volatile long lastModified;
-	
+
 	private volatile boolean forceReload;
 
-	public FileSettings(String file) {
+	public FileSettings() {
 		super(FileSettings.class);
+	}
+
+	public FileSettings(String file) {
+		this();
+		load(file);
+	}
+
+	public void load(String file) {
 		this.propertiesFile = new File(file);
+	}
+
+	/**
+	 * Merges the provided settings into this instance.  This will also
+	 * set the target file for this instance IFF it is unset AND the merge
+	 * source is also a FileSettings.  This is a little sneaky.
+	 */
+	@Override
+	public void merge(IStoredSettings settings) {
+		super.merge(settings);
+
+		// sneaky: set the target file from the merge source
+		if (propertiesFile == null && settings instanceof FileSettings) {
+			this.propertiesFile = ((FileSettings) settings).propertiesFile;
+		}
 	}
 
 	/**
@@ -51,7 +74,7 @@
 	 */
 	@Override
 	protected synchronized Properties read() {
-		if (propertiesFile.exists() && (forceReload || (propertiesFile.lastModified() > lastModified))) {
+		if (propertiesFile != null && propertiesFile.exists() && (forceReload || (propertiesFile.lastModified() > lastModified))) {
 			FileInputStream is = null;
 			try {
 				Properties props = new Properties();
@@ -83,6 +106,7 @@
 	/**
 	 * Updates the specified settings in the settings file.
 	 */
+	@Override
 	public synchronized boolean saveSettings(Map<String, String> settings) {
 		String content = FileUtils.readContent(propertiesFile, "\n");
 		for (Map.Entry<String, String> setting:settings.entrySet()) {
@@ -98,11 +122,11 @@
 		}
 		FileUtils.writeContent(propertiesFile, content);
 		// manually set the forceReload flag because not all JVMs support real
-		// millisecond resolution of lastModified. (issue-55)		
+		// millisecond resolution of lastModified. (issue-55)
 		forceReload = true;
 		return true;
 	}
-	
+
 	private String regExEscape(String input) {
 		return input.replace(".", "\\.").replace("$", "\\$").replace("{", "\\{");
 	}

--
Gitblit v1.9.1