Extend extensions-api Changes with query methods

QueryParameter can be constructed with a fluent interface.

Change-Id: I443a5b16aba11b72d7b1593e9d68021636747b50
This commit is contained in:
Urs Wolfer
2014-05-01 21:52:54 +02:00
parent 8663d378f4
commit 596f46e082

View File

@@ -14,15 +14,85 @@
package com.google.gerrit.extensions.api.changes;
import com.google.gerrit.extensions.common.ChangeInfo;
import com.google.gerrit.extensions.common.ListChangesOption;
import com.google.gerrit.extensions.restapi.NotImplementedException;
import com.google.gerrit.extensions.restapi.RestApiException;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
public interface Changes {
ChangeApi id(int id) throws RestApiException;
ChangeApi id(String triplet) throws RestApiException;
ChangeApi id(String project, String branch, String id)
throws RestApiException;
/**
* Shorthand for {@link #query(QueryParameter)} without any conditions (i.e. lists all changes).
*/
List<ChangeInfo> query() throws RestApiException;
List<ChangeInfo> query(QueryParameter queryParameter) throws RestApiException;
public class QueryParameter {
private String query;
private int limit;
private int start;
private EnumSet<ListChangesOption> options = EnumSet.noneOf(ListChangesOption.class);
public QueryParameter() {}
public QueryParameter(String query) {
this.query = query;
}
public QueryParameter withQuery(String query) {
this.query = query;
return this;
}
public QueryParameter withLimit(int limit) {
this.limit = limit;
return this;
}
public QueryParameter withStart(int start) {
this.start = start;
return this;
}
public QueryParameter withOption(ListChangesOption options) {
this.options.add(options);
return this;
}
public QueryParameter withOptions(ListChangesOption... options) {
this.options.addAll(Arrays.asList(options));
return this;
}
public QueryParameter withOptions(EnumSet<ListChangesOption> options) {
this.options = options;
return this;
}
public String getQuery() {
return query;
}
public int getLimit() {
return limit;
}
public int getStart() {
return start;
}
public EnumSet<ListChangesOption> getOptions() {
return options;
}
}
/**
* A default implementation which allows source compatibility
* when adding new methods to the interface.
@@ -42,5 +112,15 @@ public interface Changes {
public ChangeApi id(String project, String branch, String id) throws RestApiException {
throw new NotImplementedException();
}
@Override
public List<ChangeInfo> query() throws RestApiException {
throw new NotImplementedException();
}
@Override
public List<ChangeInfo> query(QueryParameter queryParameter) throws RestApiException {
throw new NotImplementedException();
}
}
}