summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/extensions/api/changes/Changes.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/extensions/api/changes/Changes.java')
-rw-r--r--java/com/google/gerrit/extensions/api/changes/Changes.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/java/com/google/gerrit/extensions/api/changes/Changes.java b/java/com/google/gerrit/extensions/api/changes/Changes.java
new file mode 100644
index 0000000000..dc0a250174
--- /dev/null
+++ b/java/com/google/gerrit/extensions/api/changes/Changes.java
@@ -0,0 +1,187 @@
+// 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.extensions.api.changes;
+
+import com.google.gerrit.extensions.client.ListChangesOption;
+import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.extensions.common.ChangeInput;
+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 {
+ /**
+ * Look up a change by numeric ID.
+ *
+ * <p><strong>Note:</strong> This method eagerly reads the change. Methods that mutate the change
+ * do not necessarily re-read the change. Therefore, calling a getter method on an instance after
+ * calling a mutation method on that same instance is not guaranteed to reflect the mutation. It
+ * is not recommended to store references to {@code ChangeApi} instances.
+ *
+ * @param id change number.
+ * @return API for accessing the change.
+ * @throws RestApiException if an error occurred.
+ */
+ ChangeApi id(int id) throws RestApiException;
+
+ /**
+ * Look up a change by string ID.
+ *
+ * @see #id(int)
+ * @param id any identifier supported by the REST API, including change number, Change-Id, or
+ * project~branch~Change-Id triplet.
+ * @return API for accessing the change.
+ * @throws RestApiException if an error occurred.
+ */
+ ChangeApi id(String id) throws RestApiException;
+
+ /**
+ * Look up a change by project, branch, and change ID.
+ *
+ * @see #id(int)
+ */
+ ChangeApi id(String project, String branch, String id) throws RestApiException;
+
+ /**
+ * Look up a change by project and numeric ID.
+ *
+ * @param project project name.
+ * @param id change number.
+ * @see #id(int)
+ */
+ ChangeApi id(String project, int id) throws RestApiException;
+
+ ChangeApi create(ChangeInput in) throws RestApiException;
+
+ QueryRequest query();
+
+ QueryRequest query(String query);
+
+ abstract class QueryRequest {
+ private String query;
+ private int limit;
+ private int start;
+ private EnumSet<ListChangesOption> options = EnumSet.noneOf(ListChangesOption.class);
+
+ public abstract List<ChangeInfo> get() throws RestApiException;
+
+ public QueryRequest withQuery(String query) {
+ this.query = query;
+ return this;
+ }
+
+ public QueryRequest withLimit(int limit) {
+ this.limit = limit;
+ return this;
+ }
+
+ public QueryRequest withStart(int start) {
+ this.start = start;
+ return this;
+ }
+
+ /** Set an option on the request, appending to existing options. */
+ public QueryRequest withOption(ListChangesOption options) {
+ this.options.add(options);
+ return this;
+ }
+
+ /** Set options on the request, appending to existing options. */
+ public QueryRequest withOptions(ListChangesOption... options) {
+ this.options.addAll(Arrays.asList(options));
+ return this;
+ }
+
+ /** Set options on the request, replacing existing options. */
+ public QueryRequest 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;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder(getClass().getSimpleName()).append('{').append(query);
+ if (limit != 0) {
+ sb.append(", limit=").append(limit);
+ }
+ if (start != 0) {
+ sb.append(", start=").append(start);
+ }
+ if (!options.isEmpty()) {
+ sb.append("options=").append(options);
+ }
+ return sb.append('}').toString();
+ }
+ }
+
+ /**
+ * A default implementation which allows source compatibility when adding new methods to the
+ * interface.
+ */
+ class NotImplemented implements Changes {
+ @Override
+ public ChangeApi id(int id) throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public ChangeApi id(String triplet) throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public ChangeApi id(String project, String branch, String id) throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public ChangeApi id(String project, int id) throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public ChangeApi create(ChangeInput in) throws RestApiException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public QueryRequest query() {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public QueryRequest query(String query) {
+ throw new NotImplementedException();
+ }
+ }
+}