Allow plugins to register options for both ssh and restapi commands

Change-Id: I6976dffa98cb822a207a4de4c549486591e849e8
This commit is contained in:
Zac Livingston
2016-05-20 12:38:43 -06:00
parent 054d2b8ead
commit 4f083a841d
8 changed files with 247 additions and 4 deletions

View File

@@ -14,9 +14,11 @@
package com.google.gerrit.httpd.plugins;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.httpd.resources.Resource;
import com.google.gerrit.httpd.resources.ResourceKey;
import com.google.gerrit.httpd.resources.ResourceWeigher;
import com.google.gerrit.server.DynamicOptions;
import com.google.gerrit.server.cache.CacheModule;
import com.google.gerrit.server.plugins.ModuleGenerator;
import com.google.gerrit.server.plugins.ReloadPluginListener;
@@ -62,5 +64,7 @@ public class HttpPluginModule extends ServletModule {
.weigher(ResourceWeigher.class);
}
});
DynamicMap.mapOf(binder(), DynamicOptions.DynamicBean.class);
}
}

View File

@@ -24,9 +24,11 @@ import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.gerrit.extensions.registration.DynamicMap;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.BinaryResult;
import com.google.gerrit.extensions.restapi.Url;
import com.google.gerrit.server.DynamicOptions;
import com.google.gerrit.util.cli.CmdLineParser;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
@@ -49,16 +51,19 @@ class ParameterParser {
ImmutableSet.of("pp", "prettyPrint", "strict", "callback", "alt", "fields");
private final CmdLineParser.Factory parserFactory;
private final DynamicMap<DynamicOptions.DynamicBean> dynamicBeans;
@Inject
ParameterParser(CmdLineParser.Factory pf) {
ParameterParser(CmdLineParser.Factory pf, DynamicMap<DynamicOptions.DynamicBean> dynamicBeans) {
this.parserFactory = pf;
this.dynamicBeans = dynamicBeans;
}
<T> boolean parse(
T param, ListMultimap<String, String> in, HttpServletRequest req, HttpServletResponse res)
throws IOException {
CmdLineParser clp = parserFactory.create(param);
DynamicOptions.parse(dynamicBeans, clp, param);
try {
clp.parseOptionMap(in);
} catch (CmdLineException | NumberFormatException e) {