/* * Copyright 2013-2016 Urs Wolfer * * 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.urswolfer.gerrit.client.rest.http.groups; import com.google.common.base.Strings; import com.google.gerrit.extensions.api.groups.GroupApi; import com.google.gerrit.extensions.api.groups.GroupInput; import com.google.gerrit.extensions.api.groups.Groups; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.NotImplementedException; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.Url; import com.google.gson.JsonElement; import com.urswolfer.gerrit.client.rest.http.GerritRestClient; import com.urswolfer.gerrit.client.rest.http.util.UrlUtils; import java.util.Collections; import java.util.List; import java.util.SortedMap; import java.util.TreeMap; /** * @author Shawn Stafford */ public class GroupsRestClient extends Groups.NotImplemented implements Groups { private final GerritRestClient gerritRestClient; private final GroupsParser groupsParser; public GroupsRestClient(GerritRestClient gerritRestClient, GroupsParser groupsParser) { this.gerritRestClient = gerritRestClient; this.groupsParser = groupsParser; } @Override public GroupApi id(String id) throws RestApiException { return new GroupApiRestClient(gerritRestClient, groupsParser, id); } @Override public GroupApi create(String name) throws RestApiException { GroupInput groupInput = new GroupInput(); groupInput.name = name; return create(groupInput); } @Override public GroupApi create(GroupInput input) throws RestApiException { String restPath = GroupApiRestClient.getBaseRequestPath() + "/" + Url.encode(input.name); String body = gerritRestClient.getGson().toJson(input); JsonElement result = gerritRestClient.putRequest(restPath, body); GroupInfo info = groupsParser.parseGroupInfo(result); return new GroupApiRestClient(gerritRestClient, groupsParser, info.id); } @Override public ListRequest list() { return new ListRequest() { @Override public SortedMap<String, GroupInfo> getAsMap() throws RestApiException { SortedMap<String, GroupInfo> map = new TreeMap<String, GroupInfo>(); List<GroupInfo> list = GroupsRestClient.this.list(this); if (list != null) { for (GroupInfo group : list) { map.put(group.id, group); } } return map; } }; } private List<GroupInfo> list(ListRequest listParameter) throws RestApiException { String query = ""; if (listParameter.getLimit() > 0) { query = UrlUtils.appendToUrlQuery(query, "n=" + listParameter.getLimit()); } if (listParameter.getStart() > 0) { query = UrlUtils.appendToUrlQuery(query, "S=" + listParameter.getStart()); } if (listParameter.getOwned()) { query = UrlUtils.appendToUrlQuery(query, "owned"); } if (!Strings.isNullOrEmpty(listParameter.getSuggest())) { // 1. If this option is set and n is not set, then n defaults to 10 // 2. When using this option, the project or p option can be used to // name the current project, to allow context-dependent suggestions // 3. Not compatible with visible-to-all, owned, user, match, q, or S query = UrlUtils.appendToUrlQuery(query, "suggest=" + listParameter.getSuggest()); } if (listParameter.getVisibleToAll()) { throw new NotImplementedException(); } if (!listParameter.getOptions().isEmpty()) { throw new NotImplementedException(); } if (!listParameter.getProjects().isEmpty()) { throw new NotImplementedException(); } if (!listParameter.getGroups().isEmpty()) { throw new NotImplementedException(); } if (!Strings.isNullOrEmpty(listParameter.getUser())) { throw new NotImplementedException(); } if (!Strings.isNullOrEmpty(listParameter.getSubstring())) { throw new NotImplementedException(); } String url = GroupApiRestClient.getBaseRequestPath() + "/"; if (!Strings.isNullOrEmpty(query)) { url += '?' + query; } JsonElement result = gerritRestClient.getRequest(url); if (result == null) { return Collections.emptyList(); } else { return groupsParser.parseGroupInfos(result); } } }