Extract option setting utils for REST endpoints
This makes the parsing of "fields=" in all endpoints slightly more lenient: it is now case-insensitive and supports ' ' as a delimiter in addition to ','. This matches the previous behavior of "q=" in GetCapabilities. Change-Id: Iea40cf31b5f5a3a73264c74506848a3cfc73c542
This commit is contained in:
@@ -68,6 +68,7 @@ import com.google.gerrit.httpd.WebSession;
|
||||
import com.google.gerrit.server.AccessPath;
|
||||
import com.google.gerrit.server.AnonymousUser;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.OptionUtil;
|
||||
import com.google.gerrit.server.OutputFormat;
|
||||
import com.google.gerrit.server.account.CapabilityControl;
|
||||
import com.google.gson.ExclusionStrategy;
|
||||
@@ -587,9 +588,7 @@ public class RestApiServlet extends HttpServlet {
|
||||
Multimap<String, String> config) {
|
||||
final Set<String> want = Sets.newHashSet();
|
||||
for (String p : config.get("fields")) {
|
||||
Iterables.addAll(want, Splitter.on(',')
|
||||
.omitEmptyStrings().trimResults()
|
||||
.split(p));
|
||||
Iterables.addAll(want, OptionUtil.splitOptionValue(p));
|
||||
}
|
||||
if (!want.isEmpty()) {
|
||||
gb.addSerializationExclusionStrategy(new ExclusionStrategy() {
|
||||
|
@@ -0,0 +1,41 @@
|
||||
// Copyright (C) 2013 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.google.gerrit.server;
|
||||
|
||||
import com.google.common.base.CharMatcher;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/** Utilities for option parsing. */
|
||||
public class OptionUtil {
|
||||
private static final Splitter COMMA_OR_SPACE =
|
||||
Splitter.on(CharMatcher.anyOf(", ")).omitEmptyStrings().trimResults();
|
||||
|
||||
private static final Function<String, String> TO_LOWER_CASE =
|
||||
new Function<String, String>() {
|
||||
@Override
|
||||
public String apply(String input) {
|
||||
return input.toLowerCase();
|
||||
}
|
||||
};
|
||||
|
||||
public static Iterable<String> splitOptionValue(String value) {
|
||||
return Iterables.transform(COMMA_OR_SPACE.split(value), TO_LOWER_CASE);
|
||||
}
|
||||
|
||||
private OptionUtil() {
|
||||
}
|
||||
}
|
@@ -28,8 +28,6 @@ import static com.google.gerrit.common.data.GlobalCapability.VIEW_CACHES;
|
||||
import static com.google.gerrit.common.data.GlobalCapability.VIEW_CONNECTIONS;
|
||||
import static com.google.gerrit.common.data.GlobalCapability.VIEW_QUEUE;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
@@ -40,6 +38,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||
import com.google.gerrit.extensions.restapi.BinaryResult;
|
||||
import com.google.gerrit.extensions.restapi.RestReadView;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.OptionUtil;
|
||||
import com.google.gerrit.server.OutputFormat;
|
||||
import com.google.gerrit.server.account.AccountResource.Capability;
|
||||
import com.google.gerrit.server.git.QueueProvider;
|
||||
@@ -63,14 +62,7 @@ class GetCapabilities implements RestReadView<AccountResource> {
|
||||
if (query == null) {
|
||||
query = Sets.newHashSet();
|
||||
}
|
||||
Iterables.addAll(query, Iterables.transform(
|
||||
Splitter.onPattern("[, ]").omitEmptyStrings().trimResults().split(name),
|
||||
new Function<String, String>() {
|
||||
@Override
|
||||
public String apply(String input) {
|
||||
return input.toLowerCase();
|
||||
}
|
||||
}));
|
||||
Iterables.addAll(query, OptionUtil.splitOptionValue(name));
|
||||
}
|
||||
private Set<String> query;
|
||||
|
||||
|
Reference in New Issue
Block a user