James Moger
2012-10-31 644bdd5a59a5ed5fbf93a0765f92608b0530c16a
src/com/gitblit/WebXmlSettings.java
@@ -15,64 +15,96 @@
 */
package com.gitblit;
import java.util.List;
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;
public class WebXmlSettings implements IStoredSettings {
import com.gitblit.utils.StringUtils;
/**
 * Loads Gitblit settings from the context-parameter values of a web.xml file.
 *
 * @author James Moger
 *
 */
public class WebXmlSettings extends IStoredSettings {
   private final Properties properties = new Properties();
   private File overrideFile;
   public WebXmlSettings(ServletContext context) {
      super(WebXmlSettings.class);
      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));
      }
   }
   @Override
   public List<String> getAllKeys(String startingWith) {
      // TODO Auto-generated method stub
      return null;
   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("\\\\", "\\");
   }
   @Override
   public boolean getBoolean(String name, boolean defaultValue) {
      // TODO Auto-generated method stub
   protected Properties read() {
      return properties;
   }
   @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 int getInteger(String name, int defaultValue) {
      // TODO Auto-generated method stub
      return 0;
   }
   @Override
   public String getString(String name, String defaultValue) {
      // TODO Auto-generated method stub
      return null;
   }
   @Override
   public List<String> getStrings(String name) {
      // TODO Auto-generated method stub
      return null;
   }
   @Override
   public List<String> getStringsFromValue(String value) {
      // TODO Auto-generated method stub
      return null;
   }
   @Override
   public List<String> getStrings(String name, String separator) {
      // TODO Auto-generated method stub
      return null;
   }
   @Override
   public List<String> getStringsFromValue(String value, String separator) {
      // TODO Auto-generated method stub
      return null;
   }
   @Override
   public String toString() {
      return "WEB.XML";