Merge "Encapsulate access to global plugin config in own class"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java
index accaec9..c313f4d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/Module.java
@@ -38,7 +38,7 @@
   @Override
   protected void configure() {
     install(new XDocLoader.Module());
-    factory(XDocConfig.Factory.class);
+    factory(XDocProjectConfig.Factory.class);
 
     DynamicSet.bind(binder(), ProjectWebLink.class)
         .to(XDocWebLink.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocFileWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocFileWebLink.java
index 2f14e06..32fb4e0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocFileWebLink.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocFileWebLink.java
@@ -30,7 +30,7 @@
       @PluginName String pluginName,
       GitRepositoryManager repoManager,
       @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache,
-      XDocConfig.Factory cfgFactory,
+      XDocProjectConfig.Factory cfgFactory,
       ProjectCache projectCache) {
     super(pluginName, repoManager, cache, cfgFactory, projectCache);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
new file mode 100644
index 0000000..df6ff5a
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
@@ -0,0 +1,37 @@
+// Copyright (C) 2014 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.xdocs;
+
+import org.eclipse.jgit.lib.Config;
+
+public class XDocGlobalConfig {
+  private static final String SECTION_FORMATTER = "formatter";
+  private static final String KEY_ALLOW_HTML = "allowHtml";
+
+  enum Formatter {
+    MARKDOWN;
+  }
+
+  private final Config cfg;
+
+  XDocGlobalConfig(Config cfg) {
+    this.cfg = cfg;
+  }
+
+  boolean isHtmlAllowed(Formatter formatter) {
+    return cfg.getBoolean(SECTION_FORMATTER, formatter.name(),
+        KEY_ALLOW_HTML, false);
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
index e4ed3d4..76cfe34 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -33,7 +33,8 @@
 import com.google.inject.Provider;
 import com.google.inject.Singleton;
 
-import org.eclipse.jgit.lib.Config;
+import com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.Formatter;
+
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.lib.ObjectLoader;
 import org.eclipse.jgit.lib.Repository;
@@ -52,13 +53,6 @@
 public class XDocLoader extends CacheLoader<String, Resource> {
   private static final String DEFAULT_HOST = "review.example.com";
 
-  private static final String SECTION_FORMATTER = "formatter";
-  private static final String KEY_ALLOW_HTML = "allowHtml";
-
-  private enum Formatter {
-    MARKDOWN;
-  }
-
   private final GitRepositoryManager repoManager;
   private final Provider<String> webUrl;
   private final String pluginName;
@@ -78,7 +72,7 @@
   @Override
   public Resource load(String strKey) throws Exception {
     XDocResourceKey key = XDocResourceKey.fromString(strKey);
-    Config cfg = cfgFactory.getGlobalPluginConfig(pluginName);
+    XDocGlobalConfig cfg = new XDocGlobalConfig(cfgFactory.getGlobalPluginConfig(pluginName));
     Repository repo = repoManager.openRepository(key.getProject());
     try {
       RevWalk rw = new RevWalk(repo);
@@ -109,12 +103,11 @@
     }
   }
 
-  private Resource getMarkdownAsHtmlResource(Config cfg,
+  private Resource getMarkdownAsHtmlResource(XDocGlobalConfig cfg,
       Project.NameKey project, String md, int lastModified)
       throws IOException {
     MarkdownFormatter f = new MarkdownFormatter();
-    if (!cfg.getBoolean(SECTION_FORMATTER, Formatter.MARKDOWN.name(),
-        KEY_ALLOW_HTML, false)) {
+    if (!cfg.isHtmlAllowed(Formatter.MARKDOWN)) {
       f.suppressHtml();
     }
     byte[] html = f.markdownToDocHtml(replaceMacros(project, md), UTF_8.name());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocConfig.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocProjectConfig.java
similarity index 89%
rename from src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocConfig.java
rename to src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocProjectConfig.java
index 8af2182..f3c931a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocProjectConfig.java
@@ -23,9 +23,9 @@
 
 import org.eclipse.jgit.lib.Config;
 
-public class XDocConfig {
+public class XDocProjectConfig {
   interface Factory {
-    XDocConfig create(ProjectState project);
+    XDocProjectConfig create(ProjectState project);
   }
 
   private static final String SECTION_WEB = "web";
@@ -35,7 +35,7 @@
   private final Config cfg;
 
   @Inject
-  XDocConfig(@PluginName String pluginName, PluginConfigFactory cfgFactory,
+  XDocProjectConfig(@PluginName String pluginName, PluginConfigFactory cfgFactory,
       @Assisted ProjectState project) {
     this.cfg = cfgFactory.getProjectPluginConfigWithInheritance(project, pluginName);
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
index 64e3d60..ab56e70 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocServlet.java
@@ -77,7 +77,7 @@
   private final GitRepositoryManager repoManager;
   private final LoadingCache<String, Resource> docCache;
   private final FileTypeRegistry fileTypeRegistry;
-  private final XDocConfig.Factory cfgFactory;
+  private final XDocProjectConfig.Factory cfgFactory;
 
   @Inject
   XDocServlet(
@@ -88,7 +88,7 @@
       GitRepositoryManager repoManager,
       @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache,
       FileTypeRegistry fileTypeRegistry,
-      XDocConfig.Factory cfgFactory) {
+      XDocProjectConfig.Factory cfgFactory) {
     this.db = db;
     this.projectControlFactory = projectControlFactory;
     this.projectCache = projectCache;
@@ -114,7 +114,7 @@
       Resource.NOT_FOUND.send(req, res);
       return;
     }
-    XDocConfig cfg = cfgFactory.create(state);
+    XDocProjectConfig cfg = cfgFactory.create(state);
     if (key.file == null) {
       res.sendRedirect(getRedirectUrl(req, key, cfg));
       return;
@@ -251,7 +251,7 @@
   }
 
   private String getRedirectUrl(HttpServletRequest req, ResourceKey key,
-      XDocConfig cfg) {
+      XDocProjectConfig cfg) {
     StringBuilder redirectUrl = new StringBuilder();
     redirectUrl.append(req.getRequestURL().substring(0,
         req.getRequestURL().length() - req.getRequestURI().length()));
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java
index 5355572..1838b0f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocWebLink.java
@@ -44,7 +44,7 @@
   private final String pluginName;
   private final GitRepositoryManager repoManager;
   private final LoadingCache<String, Resource> docCache;
-  private final XDocConfig.Factory cfgFactory;
+  private final XDocProjectConfig.Factory cfgFactory;
   private final ProjectCache projectCache;
 
   @Inject
@@ -52,7 +52,7 @@
       @PluginName String pluginName,
       GitRepositoryManager repoManager,
       @Named(XDocLoader.Module.X_DOC_RESOURCES) LoadingCache<String, Resource> cache,
-      XDocConfig.Factory cfgFactory,
+      XDocProjectConfig.Factory cfgFactory,
       ProjectCache projectCache) {
     this.pluginName = pluginName;
     this.repoManager = repoManager;