Inline Edit: Cleanup client utility API

Simplify the API and clarify where content is coming from based
on the arguments supplied by the caller.

Change-Id: I81676838ee00b7b7ba083f52cd0a59d16dc4bf92
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditFileBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditFileBox.java
index 67f9265..9c5ea31 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditFileBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditFileBox.java
@@ -16,7 +16,7 @@
 
 import com.google.gerrit.client.Gerrit;
 import com.google.gerrit.client.VoidResult;
-import com.google.gerrit.client.changes.ChangeFileApi;
+import com.google.gerrit.client.changes.ChangeEditApi;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.TextBoxChangeListener;
 import com.google.gerrit.common.PageLinks;
@@ -81,7 +81,7 @@
 
   @UiHandler("save")
   void onSave(@SuppressWarnings("unused") ClickEvent e) {
-    ChangeFileApi.putContent(id, file.getText(), content.getText(),
+    ChangeEditApi.put(id.getParentKey().get(), file.getText(), content.getText(),
         new GerritCallback<VoidResult>() {
           @Override
           public void onSuccess(VoidResult result) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditMessageBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditMessageBox.java
index 74600ab..317e9ac 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditMessageBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/EditMessageBox.java
@@ -16,7 +16,7 @@
 
 import com.google.gerrit.client.Gerrit;
 import com.google.gerrit.client.VoidResult;
-import com.google.gerrit.client.changes.ChangeFileApi;
+import com.google.gerrit.client.changes.ChangeEditApi;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.ui.TextBoxChangeListener;
 import com.google.gerrit.common.PageLinks;
@@ -79,7 +79,7 @@
   @UiHandler("save")
   void onSave(@SuppressWarnings("unused") ClickEvent e) {
     save.setEnabled(false);
-    ChangeFileApi.putMessage(changeId, message.getText().trim(),
+    ChangeEditApi.putMessage(changeId.get(), message.getText().trim(),
         new GerritCallback<VoidResult>() {
           @Override
           public void onSuccess(VoidResult result) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
index 429dd55..c0fe3e0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTable.java
@@ -18,7 +18,7 @@
 import com.google.gerrit.client.Gerrit;
 import com.google.gerrit.client.VoidResult;
 import com.google.gerrit.client.changes.ChangeApi;
-import com.google.gerrit.client.changes.ChangeFileApi;
+import com.google.gerrit.client.changes.ChangeEditApi;
 import com.google.gerrit.client.changes.CommentInfo;
 import com.google.gerrit.client.changes.ReviewInfo;
 import com.google.gerrit.client.changes.Util;
@@ -317,7 +317,7 @@
 
     void onDelete(int idx) {
       String path = list.get(idx).path();
-      ChangeFileApi.deleteContent(curr, path,
+      ChangeEditApi.delete(curr.getParentKey().get(), path,
           new AsyncCallback<VoidResult>() {
             @Override
             public void onSuccess(VoidResult result) {
@@ -333,7 +333,7 @@
 
     void onRestore(int idx) {
       String path = list.get(idx).path();
-      ChangeFileApi.restoreContent(curr, path,
+      ChangeEditApi.restore(curr.getParentKey().get(), path,
           new AsyncCallback<VoidResult>() {
             @Override
             public void onSuccess(VoidResult result) {
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTextBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTextBox.java
index 136998d..e511e24 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTextBox.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/FileTextBox.java
@@ -14,7 +14,7 @@
 
 package com.google.gerrit.client.change;
 
-import com.google.gerrit.client.changes.ChangeFileApi;
+import com.google.gerrit.client.changes.ChangeEditApi;
 import com.google.gerrit.client.rpc.GerritCallback;
 import com.google.gerrit.client.rpc.HttpCallback;
 import com.google.gerrit.client.rpc.HttpResponse;
@@ -54,7 +54,7 @@
   }
 
   private void loadFileContent() {
-    ChangeFileApi.getContent(id, getText(), new HttpCallback<NativeString>() {
+    ChangeEditApi.get(id, getText(), new HttpCallback<NativeString>() {
       @Override
       public void onSuccess(HttpResponse<NativeString> result) {
         textArea.setText(result.getResult().asString());
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeEditApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeEditApi.java
new file mode 100644
index 0000000..ca5d434
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeEditApi.java
@@ -0,0 +1,90 @@
+// Copyright (C) 2014 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.VoidResult;
+import com.google.gerrit.client.rpc.GerritCallback;
+import com.google.gerrit.client.rpc.HttpCallback;
+import com.google.gerrit.client.rpc.NativeString;
+import com.google.gerrit.client.rpc.RestApi;
+import com.google.gerrit.reviewdb.client.Patch;
+import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+/** REST API helpers to remotely edit a change. */
+public class ChangeEditApi {
+  /** Get file (or commit message) contents. */
+  public static void get(PatchSet.Id id, String path,
+      HttpCallback<NativeString> cb) {
+    RestApi api;
+    if (id.get() != 0) {
+      // Read from a published revision, when change edit doesn't
+      // exist for the caller, or is not currently active.
+      api = ChangeApi.revision(id).view("files").id(path).view("content");
+    } else if (Patch.COMMIT_MSG.equals(path)) {
+      api = editMessage(id.getParentKey().get());
+    } else {
+      api = editFile(id.getParentKey().get(), path);
+    }
+    api.get(cb);
+  }
+
+  /** Put message into a change edit. */
+  public static void putMessage(int id, String m, GerritCallback<VoidResult> cb) {
+    editMessage(id).put(m, cb);
+  }
+
+  /** Put contents into a file or commit message in a change edit. */
+  public static void put(int id, String path, String content,
+      GerritCallback<VoidResult> cb) {
+    if (Patch.COMMIT_MSG.equals(path)) {
+      putMessage(id, content, cb);
+    } else {
+      editFile(id, path).put(content, cb);
+    }
+  }
+
+  /** Delete a file in the pending edit. */
+  public static void delete(int id, String path, AsyncCallback<VoidResult> cb) {
+    editFile(id, path).delete(cb);
+  }
+
+  /** Restore (undo delete/modify) a file in the pending edit. */
+  public static void restore(int id, String path, AsyncCallback<VoidResult> cb) {
+    Input in = Input.create();
+    in.restore_path(path);
+    ChangeApi.edit(id).post(in, cb);
+  }
+
+  private static RestApi editMessage(int id) {
+    return ChangeApi.change(id).view("edit:message");
+  }
+
+  private static RestApi editFile(int id, String path) {
+    return ChangeApi.edit(id).id(path);
+  }
+
+  private static class Input extends JavaScriptObject {
+    static Input create() {
+      return createObject().cast();
+    }
+
+    final native void restore_path(String p) /*-{ this.restore_path=p }-*/;
+
+    protected Input() {
+    }
+  }
+}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeFileApi.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeFileApi.java
deleted file mode 100644
index 9ac11e4..0000000
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeFileApi.java
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (C) 2014 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.VoidResult;
-import com.google.gerrit.client.rpc.GerritCallback;
-import com.google.gerrit.client.rpc.HttpCallback;
-import com.google.gerrit.client.rpc.NativeString;
-import com.google.gerrit.client.rpc.RestApi;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.Patch;
-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
- * files in a change.
- */
-public class ChangeFileApi {
-  /** Get the contents of a File in a PatchSet or change edit. */
-  public static void getContent(PatchSet.Id id, String filename,
-      HttpCallback<NativeString> cb) {
-    contentEditOrPs(id, filename).get(cb);
-  }
-
-  /**
-   * Get the contents of a file or commit message in a PatchSet or change
-   * edit.
-   **/
-  public static void getContentOrMessage(PatchSet.Id id, String path,
-      HttpCallback<NativeString> cb) {
-    RestApi api = (Patch.COMMIT_MSG.equals(path) && id.get() == 0)
-        ? messageEdit(id)
-        : contentEditOrPs(id, path);
-    api.get(cb);
-  }
-
-  /** Put contents into a File in a change edit. */
-  public static void putContent(PatchSet.Id id, String filename,
-      String content, GerritCallback<VoidResult> result) {
-    contentEdit(id.getParentKey(), filename).put(content, result);
-  }
-
-  /** Put contents into a File or commit message in a change edit. */
-  public static void putContentOrMessage(PatchSet.Id id, String path,
-      String content, GerritCallback<VoidResult> result) {
-    if (Patch.COMMIT_MSG.equals(path)) {
-      putMessage(id, content, result);
-    } else {
-      contentEdit(id.getParentKey(), path).put(content, result);
-    }
-  }
-
-  /** Put message into a change edit. */
-  private static void putMessage(PatchSet.Id id, String m,
-      GerritCallback<VoidResult> r) {
-    putMessage(id.getParentKey(), m, r);
-  }
-
-  /** Put message into a change edit. */
-  public static void putMessage(Change.Id id, String m,
-      GerritCallback<VoidResult> r) {
-    ChangeApi.change(id.get()).view("edit:message").put(m, r);
-  }
-
-  /** Restore contents of a File in a change edit. */
-  public static void restoreContent(PatchSet.Id id, String filename,
-      AsyncCallback<VoidResult> result) {
-    Input in = Input.create();
-    in.restore_path(filename);
-    ChangeApi.edit(id.getParentKey().get()).post(in, result);
-  }
-
-  /** Delete a file from a change edit. */
-  public static void deleteContent(PatchSet.Id id, String filename,
-      AsyncCallback<VoidResult> result) {
-    contentEdit(id.getParentKey(), filename).delete(result);
-  }
-
-  private static RestApi contentEditOrPs(PatchSet.Id id, String filename) {
-    return id.get() == 0
-        ? contentEdit(id.getParentKey(), filename)
-        : ChangeApi.revision(id).view("files").id(filename).view("content");
-  }
-
-  private static RestApi messageEdit(PatchSet.Id id) {
-    return ChangeApi.change(id.getParentKey().get()).view("edit:message");
-  }
-
-  private static RestApi contentEdit(Change.Id id, String filename) {
-    return ChangeApi.edit(id.get()).id(filename);
-  }
-
-  private static class Input extends JavaScriptObject {
-    final native void restore_path(String p) /*-{ if(p)this.restore_path=p; }-*/;
-
-    static Input create() {
-      return (Input) createObject();
-    }
-
-    protected Input() {
-    }
-  }
-}
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java
index ee77e02..ba2bfac 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/editor/EditScreen.java
@@ -19,7 +19,7 @@
 import com.google.gerrit.client.VoidResult;
 import com.google.gerrit.client.account.DiffPreferences;
 import com.google.gerrit.client.changes.ChangeApi;
-import com.google.gerrit.client.changes.ChangeFileApi;
+import com.google.gerrit.client.changes.ChangeEditApi;
 import com.google.gerrit.client.changes.ChangeInfo;
 import com.google.gerrit.client.diff.FileInfo;
 import com.google.gerrit.client.diff.Header;
@@ -128,7 +128,7 @@
           }
         }));
 
-    ChangeFileApi.getContentOrMessage(revision, path,
+    ChangeEditApi.get(revision, path,
         cmGroup.add(new HttpCallback<NativeString>() {
           final AsyncCallback<Void> modeCallback = group.addEmpty();
 
@@ -293,7 +293,7 @@
         if (!cm.isClean(generation)) {
           String text = cm.getValue();
           final int g = cm.changeGeneration(false);
-          ChangeFileApi.putContentOrMessage(revision, path, text,
+          ChangeEditApi.put(revision.getParentKey().get(), path, text,
               new GerritCallback<VoidResult>() {
                 @Override
                 public void onSuccess(VoidResult result) {