summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java130
1 files changed, 130 insertions, 0 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java
new file mode 100644
index 0000000000..abd94c9b88
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeApi.java
@@ -0,0 +1,130 @@
+// Copyright (C) 2012 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.client.changes;
+
+import com.google.gerrit.client.rpc.NativeString;
+import com.google.gerrit.client.rpc.RestApi;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/**
+ * A collection of static methods which work on the Gerrit REST API for specific
+ * changes.
+ */
+public class ChangeApi {
+ /** Abandon the change, ending its review. */
+ public static void abandon(int id, String msg, AsyncCallback<ChangeInfo> cb) {
+ Input input = Input.create();
+ input.message(emptyToNull(msg));
+ call(id, "abandon").post(input, cb);
+ }
+
+ /** Restore a previously abandoned change to be open again. */
+ public static void restore(int id, String msg, AsyncCallback<ChangeInfo> cb) {
+ Input input = Input.create();
+ input.message(emptyToNull(msg));
+ call(id, "restore").post(input, cb);
+ }
+
+ /** Create a new change that reverts the delta caused by this change. */
+ public static void revert(int id, String msg, AsyncCallback<ChangeInfo> cb) {
+ Input input = Input.create();
+ input.message(emptyToNull(msg));
+ call(id, "revert").post(input, cb);
+ }
+
+ /** Update the topic of a change. */
+ public static void topic(int id, String topic, String msg, AsyncCallback<String> cb) {
+ RestApi call = call(id, "topic");
+ topic = emptyToNull(topic);
+ msg = emptyToNull(msg);
+ if (topic != null || msg != null) {
+ Input input = Input.create();
+ input.topic(topic);
+ input.message(msg);
+ call.put(input, NativeString.unwrap(cb));
+ } else {
+ call.delete(NativeString.unwrap(cb));
+ }
+ }
+
+ public static void detail(int id, AsyncCallback<ChangeInfo> cb) {
+ call(id, "detail").get(cb);
+ }
+
+ public static RestApi revision(PatchSet.Id id) {
+ return change(id.getParentKey().get()).view("revisions").id(id.get());
+ }
+
+ public static RestApi reviewers(int id) {
+ return change(id).view("reviewers");
+ }
+
+ public static RestApi reviewer(int id, int reviewer) {
+ return change(id).view("reviewers").id(reviewer);
+ }
+
+ public static RestApi reviewer(int id, String reviewer) {
+ return change(id).view("reviewers").id(reviewer);
+ }
+
+ /** Submit a specific revision of a change. */
+ public static void submit(int id, String commit, AsyncCallback<SubmitInfo> cb) {
+ SubmitInput in = SubmitInput.create();
+ in.wait_for_merge(true);
+ call(id, commit, "submit").post(in, cb);
+ }
+
+ private static class Input extends JavaScriptObject {
+ final native void topic(String t) /*-{ if(t)this.topic=t; }-*/;
+ final native void message(String m) /*-{ if(m)this.message=m; }-*/;
+
+ static Input create() {
+ return (Input) createObject();
+ }
+
+ protected Input() {
+ }
+ }
+
+ private static class SubmitInput extends JavaScriptObject {
+ final native void wait_for_merge(boolean b) /*-{ this.wait_for_merge=b; }-*/;
+
+ static SubmitInput create() {
+ return (SubmitInput) createObject();
+ }
+
+ protected SubmitInput() {
+ }
+ }
+
+ private static RestApi call(int id, String action) {
+ return change(id).view(action);
+ }
+
+ private static RestApi call(int id, String commit, String action) {
+ return change(id).view("revisions").id(commit).view(action);
+ }
+
+ private static RestApi change(int id) {
+ // TODO Switch to triplet project~branch~id format in URI.
+ return new RestApi("/changes/").id(String.valueOf(id));
+ }
+
+ public static String emptyToNull(String str) {
+ return str == null || str.isEmpty() ? null : str;
+ }
+}