diff options
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.java | 130 |
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; + } +} |