From 3f5b8f5d9203aa7ffb7fbe9cdbaf9dba3da6cae6 Mon Sep 17 00:00:00 2001 From: Hybris95 <hybris_95@hotmail.com> Date: Thu, 01 May 2014 16:14:15 -0400 Subject: [PATCH] Fixes sort, page building and search functions on "my tickets" page. --- src/main/java/com/gitblit/FileSettings.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gitblit/FileSettings.java b/src/main/java/com/gitblit/FileSettings.java index 3a42cad..21a2043 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(); @@ -80,9 +103,27 @@ return properties; } + @Override + public boolean saveSettings() { + String content = FileUtils.readContent(propertiesFile, "\n"); + for (String key : removals) { + String regex = "(?m)^(" + regExEscape(key) + "\\s*+=\\s*+)" + + "(?:[^\r\n\\\\]++|\\\\(?:\r?\n|\r|.))*+$"; + content = content.replaceAll(regex, ""); + } + removals.clear(); + + FileUtils.writeContent(propertiesFile, content); + // manually set the forceReload flag because not all JVMs support real + // millisecond resolution of lastModified. (issue-55) + forceReload = true; + return true; + } + /** * 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 +139,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