diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/ListPlugins.java b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/ListPlugins.java index e0545a33b3..b9871ab655 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/plugins/ListPlugins.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/plugins/ListPlugins.java @@ -40,6 +40,10 @@ import java.util.TreeMap; public class ListPlugins implements RestReadView { private final PluginLoader pluginLoader; + @Deprecated + @Option(name = "--format", usage = "(deprecated) output format") + private OutputFormat format = OutputFormat.TEXT; + @Option(name = "--all", aliases = {"-a"}, usage = "List all plugins, including disabled plugins") private boolean all; @@ -48,12 +52,23 @@ public class ListPlugins implements RestReadView { this.pluginLoader = pluginLoader; } + public OutputFormat getFormat() { + return format; + } + + public ListPlugins setFormat(OutputFormat fmt) { + this.format = fmt; + return this; + } + @Override public Object apply(TopLevelResource resource) { + format = OutputFormat.JSON; return display(null); } public JsonElement display(PrintWriter stdout) { + Map output = new TreeMap<>(); List plugins = Lists.newArrayList(pluginLoader.getPlugins(all)); Collections.sort(plugins, new Comparator() { @Override @@ -62,24 +77,30 @@ public class ListPlugins implements RestReadView { } }); - if (stdout == null) { - Map output = new TreeMap<>(); - for (Plugin p : plugins) { - PluginInfo info = new PluginInfo(p); + if (!format.isJson()) { + stdout.format("%-30s %-10s %-8s %s\n", "Name", "Version", "Status", "File"); + stdout.print("-------------------------------------------------------------------------------\n"); + } + + for (Plugin p : plugins) { + PluginInfo info = new PluginInfo(p); + if (format.isJson()) { output.put(p.getName(), info); + } else { + stdout.format("%-30s %-10s %-8s %s\n", p.getName(), + Strings.nullToEmpty(info.version), + p.isDisabled() ? "DISABLED" : "ENABLED", + p.getSrcFile().getFileName()); } + } + + if (stdout == null) { return OutputFormat.JSON.newGson().toJsonTree( output, new TypeToken>() {}.getType()); - } - stdout.format("%-30s %-10s %-8s %s\n", "Name", "Version", "Status", "File"); - stdout.print("-------------------------------------------------------------------------------\n"); - for (Plugin p : plugins) { - PluginInfo info = new PluginInfo(p); - stdout.format("%-30s %-10s %-8s %s\n", p.getName(), - Strings.nullToEmpty(info.version), - p.isDisabled() ? "DISABLED" : "ENABLED", - p.getSrcFile().getFileName()); + } else if (format.isJson()) { + format.newGson().toJson(output, + new TypeToken>() {}.getType(), stdout); stdout.print('\n'); } stdout.flush();