Merge "Make RAW formatter configurable"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
index 29e7bf7..473b740 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocGlobalConfig.java
@@ -26,6 +26,7 @@
public static final String KEY_APPEND_CSS = "appendCss";
public static final String KEY_ENABLED = "enabled";
public static final String KEY_EXT = "ext";
+ public static final String KEY_FORMATTER = "formatter";
public static final String KEY_INCLUDE_TOC = "includeToc";
public static final String KEY_MIME_TYPE = "mimeType";
public static final String KEY_PREFIX = "prefix";
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/Formatters.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/Formatters.java
index 0d6a77e..4e3c359 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/Formatters.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/Formatters.java
@@ -16,14 +16,12 @@
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_ENABLED;
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_EXT;
+import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_FORMATTER;
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_MIME_TYPE;
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_PREFIX;
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.KEY_PRIO;
import static com.googlesource.gerrit.plugins.xdocs.XDocGlobalConfig.SECTION_FORMATTER;
-import org.apache.commons.io.FilenameUtils;
-import org.eclipse.jgit.lib.Config;
-
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.reviewdb.client.Project;
@@ -40,10 +38,17 @@
import eu.medsea.mimeutil.MimeType;
+import org.apache.commons.io.FilenameUtils;
+import org.eclipse.jgit.lib.Config;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.util.Map.Entry;
@Singleton
public class Formatters {
+ private static final Logger log = LoggerFactory.getLogger(Formatters.class);
+
public static final String RAW_FORMATTER = "RAW";
private final String pluginName;
@@ -154,8 +159,7 @@
public FormatterProvider getByName(String formatterName) {
if (formatterName.equals(RAW_FORMATTER)) {
- return new FormatterProvider(RAW_FORMATTER,
- getByName(PlainTextFormatter.NAME).formatter);
+ return resolveRawFormatter();
}
for (String pluginName : formatters.plugins()) {
@@ -173,6 +177,28 @@
return getByName(RAW_FORMATTER);
}
+ private FormatterProvider resolveRawFormatter() {
+ XDocGlobalConfig globalCfg =
+ new XDocGlobalConfig(pluginCfgFactory.getGlobalPluginConfig(pluginName));
+ String formatterName =
+ globalCfg.getFormatterConfig(RAW_FORMATTER)
+ .getString(KEY_FORMATTER, PlainTextFormatter.NAME);
+ if (formatterName.equals(RAW_FORMATTER)) {
+ log.warn(String.format(
+ "%s plugin: Invalid '%s' formatter configuration, '%s' formatter cannot be set to '%s', using '%s' formatter",
+ pluginName, RAW_FORMATTER, RAW_FORMATTER, formatterName, PlainTextFormatter.NAME));
+ formatterName = PlainTextFormatter.NAME;
+ }
+ FormatterProvider formatter = getByName(formatterName);
+ if (formatter == null) {
+ log.warn(String.format(
+ "%s plugin: Invalid '%s' formatter configuration, formatter '%s' not found, using '%s' formatter",
+ pluginName, RAW_FORMATTER, formatterName, PlainTextFormatter.NAME));
+ formatter = getByName(PlainTextFormatter.NAME);
+ }
+ return new FormatterProvider(RAW_FORMATTER, formatter.formatter);
+ }
+
public static class FormatterProvider {
private final String name;
private final Provider<Formatter> formatter;
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 9bb7cf1..3f802b9 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -226,3 +226,17 @@
Can be overridden on [project-level](#prio).
Default: `0`
+
+<a id="rawFormatter">
+formatter.RAW.formatter
+: The name of the formatter that should be used as RAW formatter.
+
+ The RAW formatter is used when the `raw` URL parameter is appended
+ to the project documentation URL.
+
+ When this option is changed the `xdocs-x_doc_resources` cache must
+ be flushed.
+
+ *CANNOT* be overridden on project-level.
+
+ Default: `PLAIN_TEXT`