Add query methods to project API
Change-Id: I53f3b8611ea9c51c5325e80c17c123eea26b985e
This commit is contained in:
@@ -58,6 +58,24 @@ public interface Projects {
|
|||||||
|
|
||||||
ListRequest list();
|
ListRequest list();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query projects.
|
||||||
|
*
|
||||||
|
* <p>Example code: {@code query().withQuery("name:project").get()}
|
||||||
|
*
|
||||||
|
* @return API for setting parameters and getting result.
|
||||||
|
*/
|
||||||
|
QueryRequest query();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Query projects.
|
||||||
|
*
|
||||||
|
* <p>Shortcut API for {@code query().withQuery(String)}.
|
||||||
|
*
|
||||||
|
* @see #query()
|
||||||
|
*/
|
||||||
|
QueryRequest query(String query);
|
||||||
|
|
||||||
abstract class ListRequest {
|
abstract class ListRequest {
|
||||||
public enum FilterType {
|
public enum FilterType {
|
||||||
CODE,
|
CODE,
|
||||||
@@ -171,6 +189,56 @@ public interface Projects {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API for setting parameters and getting result. Used for {@code query()}.
|
||||||
|
*
|
||||||
|
* @see #query()
|
||||||
|
*/
|
||||||
|
abstract class QueryRequest {
|
||||||
|
private String query;
|
||||||
|
private int limit;
|
||||||
|
private int start;
|
||||||
|
|
||||||
|
/** Execute query and returns the matched projects as list. */
|
||||||
|
public abstract List<ProjectInfo> get() throws RestApiException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set query.
|
||||||
|
*
|
||||||
|
* @param query needs to be in human-readable form.
|
||||||
|
*/
|
||||||
|
public QueryRequest withQuery(String query) {
|
||||||
|
this.query = query;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set limit for returned list of projects. Optional; server-default is used when not provided.
|
||||||
|
*/
|
||||||
|
public QueryRequest withLimit(int limit) {
|
||||||
|
this.limit = limit;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set number of projects to skip. Optional; no projects are skipped when not provided. */
|
||||||
|
public QueryRequest withStart(int start) {
|
||||||
|
this.start = start;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getQuery() {
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLimit() {
|
||||||
|
return limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStart() {
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A default implementation which allows source compatibility when adding new methods to the
|
* A default implementation which allows source compatibility when adding new methods to the
|
||||||
* interface.
|
* interface.
|
||||||
@@ -195,5 +263,15 @@ public interface Projects {
|
|||||||
public ListRequest list() {
|
public ListRequest list() {
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public QueryRequest query() {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public QueryRequest query(String query) {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,14 +22,18 @@ import com.google.gerrit.extensions.api.projects.Projects;
|
|||||||
import com.google.gerrit.extensions.common.ProjectInfo;
|
import com.google.gerrit.extensions.common.ProjectInfo;
|
||||||
import com.google.gerrit.extensions.restapi.BadRequestException;
|
import com.google.gerrit.extensions.restapi.BadRequestException;
|
||||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||||
|
import com.google.gerrit.extensions.restapi.TopLevelResource;
|
||||||
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||||
import com.google.gerrit.server.project.ListProjects;
|
import com.google.gerrit.server.project.ListProjects;
|
||||||
import com.google.gerrit.server.project.ListProjects.FilterType;
|
import com.google.gerrit.server.project.ListProjects.FilterType;
|
||||||
import com.google.gerrit.server.project.ProjectsCollection;
|
import com.google.gerrit.server.project.ProjectsCollection;
|
||||||
|
import com.google.gerrit.server.project.QueryProjects;
|
||||||
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
import java.util.List;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@@ -37,15 +41,18 @@ class ProjectsImpl implements Projects {
|
|||||||
private final ProjectsCollection projects;
|
private final ProjectsCollection projects;
|
||||||
private final ProjectApiImpl.Factory api;
|
private final ProjectApiImpl.Factory api;
|
||||||
private final Provider<ListProjects> listProvider;
|
private final Provider<ListProjects> listProvider;
|
||||||
|
private final Provider<QueryProjects> queryProvider;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ProjectsImpl(
|
ProjectsImpl(
|
||||||
ProjectsCollection projects,
|
ProjectsCollection projects,
|
||||||
ProjectApiImpl.Factory api,
|
ProjectApiImpl.Factory api,
|
||||||
Provider<ListProjects> listProvider) {
|
Provider<ListProjects> listProvider,
|
||||||
|
Provider<QueryProjects> queryProvider) {
|
||||||
this.projects = projects;
|
this.projects = projects;
|
||||||
this.api = api;
|
this.api = api;
|
||||||
this.listProvider = listProvider;
|
this.listProvider = listProvider;
|
||||||
|
this.queryProvider = queryProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -124,4 +131,32 @@ class ProjectsImpl implements Projects {
|
|||||||
|
|
||||||
return lp.apply();
|
return lp.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public QueryRequest query() {
|
||||||
|
return new QueryRequest() {
|
||||||
|
@Override
|
||||||
|
public List<ProjectInfo> get() throws RestApiException {
|
||||||
|
return ProjectsImpl.this.query(this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public QueryRequest query(String query) {
|
||||||
|
return query().withQuery(query);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<ProjectInfo> query(QueryRequest r) throws RestApiException {
|
||||||
|
try {
|
||||||
|
QueryProjects myQueryProjects = queryProvider.get();
|
||||||
|
myQueryProjects.setQuery(r.getQuery());
|
||||||
|
myQueryProjects.setLimit(r.getLimit());
|
||||||
|
myQueryProjects.setStart(r.getStart());
|
||||||
|
|
||||||
|
return myQueryProjects.apply(TopLevelResource.INSTANCE);
|
||||||
|
} catch (OrmException e) {
|
||||||
|
throw new RestApiException("Cannot query projects", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user