James Moger
2011-12-28 abeaaf77673e9e764fe68e398eeda1e3c3c22ea5
src/com/gitblit/WebXmlSettings.java
@@ -15,7 +15,14 @@
 */
package com.gitblit;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
@@ -32,6 +39,8 @@
   private final Properties properties = new Properties();
   private File overrideFile;
   public WebXmlSettings(ServletContext context) {
      super(WebXmlSettings.class);
      Enumeration<?> keys = context.getInitParameterNames();
@@ -43,6 +52,23 @@
      }
   }
   public void applyOverrides(File overrideFile) {
      this.overrideFile = overrideFile;
      // apply any web-configured overrides
      if (overrideFile.exists()) {
         try {
            InputStream is = new FileInputStream(overrideFile);
            properties.load(is);
            is.close();
         } catch (Throwable t) {
            logger.error(
                  MessageFormat.format("Failed to apply {0} setting overrides",
                        overrideFile.getAbsolutePath()), t);
         }
      }
   }
   private String decodeValue(String value) {
      // decode escaped backslashes and HTML entities
      return StringUtils.decodeFromHtml(value).replace("\\\\", "\\");
@@ -54,6 +80,32 @@
   }
   @Override
   public synchronized boolean saveSettings(Map<String, String> settings) {
      try {
         Properties props = new Properties();
         // load pre-existing web-configuration
         if (overrideFile.exists()) {
            InputStream is = new FileInputStream(overrideFile);
            props.load(is);
            is.close();
         }
         // put all new settings and persist
         props.putAll(settings);
         OutputStream os = new FileOutputStream(overrideFile);
         props.store(os, null);
         os.close();
         // override current runtime settings
         properties.putAll(settings);
         return true;
      } catch (Throwable t) {
         logger.error("Failed to save settings!", t);
      }
      return false;
   }
   @Override
   public String toString() {
      return "WEB.XML";
   }