James Moger
2011-10-24 97a20ed01cb5ec890517e4fcbd67b8d8ff381787
src/com/gitblit/WebXmlSettings.java
@@ -15,7 +15,13 @@
 */
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.util.Enumeration;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletContext;
@@ -32,14 +38,28 @@
   private final Properties properties = new Properties();
   private final ServletContext context;
   public WebXmlSettings(ServletContext context) {
      super(WebXmlSettings.class);
      this.context = context;
      Enumeration<?> keys = context.getInitParameterNames();
      while (keys.hasMoreElements()) {
         String key = keys.nextElement().toString();
         String value = context.getInitParameter(key);
         properties.put(key, decodeValue(value));
         logger.debug(key + "=" + properties.getProperty(key));
      }
      // apply any web-configured overrides
      File file = new File(context.getRealPath("/WEB-INF/web.properties"));
      if (file.exists()) {
         try {
            InputStream is = new FileInputStream(file);
            properties.load(is);
            is.close();
         } catch (Throwable t) {
            logger.error("Failed to load web.properties setting overrides", t);
         }
      }
   }
@@ -54,6 +74,33 @@
   }
   @Override
   public synchronized boolean saveSettings(Map<String, String> settings) {
      try {
         Properties props = new Properties();
         // load pre-existing web-configuration
         File file = new File(context.getRealPath("/WEB-INF/web.properties"));
         if (file.exists()) {
            InputStream is = new FileInputStream(file);
            props.load(is);
            is.close();
         }
         // put all new settings and persist
         props.putAll(settings);
         OutputStream os = new FileOutputStream(file);
         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";
   }