Fix API breakage on ChangeDetailService

The Mylyn Reviews project pointed out Gerrit changed the API
signature of a JSON method they use remotely. Fix the API back to the
original signature, and define a new method with the extra arguments.

Change-Id: I51cbbdd64bdb72a666a6b5266db3b93494b75182
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java b/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
index 621f52d..2fbda21 100644
--- a/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
+++ b/gerrit-common/src/main/java/com/google/gerrit/common/data/ChangeDetailService.java
@@ -29,7 +29,9 @@
 
   void includedInDetail(Change.Id id, AsyncCallback<IncludedInDetail> callback);
 
-  void patchSetDetail(PatchSet.Id keyA, PatchSet.Id keyB,
+  void patchSetDetail(PatchSet.Id key, AsyncCallback<PatchSetDetail> callback);
+
+  void patchSetDetail2(PatchSet.Id baseId, PatchSet.Id key,
       AccountDiffPreference diffPrefs, AsyncCallback<PatchSetDetail> callback);
 
   @SignInRequired
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
index 364d710..740e08c 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/PatchSetComplexDisclosurePanel.java
@@ -539,7 +539,7 @@
       diffPrefs = patchTable.getPreferences().get();
     }
 
-    Util.DETAIL_SVC.patchSetDetail(patchSet.getId(), diffBaseId, diffPrefs,
+    Util.DETAIL_SVC.patchSetDetail2(diffBaseId, patchSet.getId(), diffPrefs,
         new GerritCallback<PatchSetDetail>() {
           @Override
           public void onSuccess(PatchSetDetail result) {
@@ -575,7 +575,7 @@
         diffPrefs = new ListenableAccountDiffPreference().get();
       }
 
-      Util.DETAIL_SVC.patchSetDetail(patchSet.getId(), diffBaseId, diffPrefs,
+      Util.DETAIL_SVC.patchSetDetail2(diffBaseId, patchSet.getId(), diffPrefs,
           new GerritCallback<PatchSetDetail>() {
             public void onSuccess(final PatchSetDetail result) {
               ensureLoaded(result);
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
index c815097..736d1f0 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/patches/PatchScreen.java
@@ -320,7 +320,7 @@
   protected void onLoad() {
     super.onLoad();
     if (patchSetDetail == null) {
-      Util.DETAIL_SVC.patchSetDetail(idSideB, null, null,
+      Util.DETAIL_SVC.patchSetDetail(idSideB,
           new GerritCallback<PatchSetDetail>() {
             @Override
             public void onSuccess(PatchSetDetail result) {
@@ -403,7 +403,7 @@
       commitMessageBlock.display(patchSetDetail.getInfo().getMessage());
     } else {
       commitMessageBlock.setVisible(false);
-      Util.DETAIL_SVC.patchSetDetail(idSideB, null, null,
+      Util.DETAIL_SVC.patchSetDetail(idSideB,
           new GerritCallback<PatchSetDetail>() {
             @Override
             public void onSuccess(PatchSetDetail result) {
@@ -500,7 +500,7 @@
         final PatchSet.Id psid = patchKey.getParentKey();
         fileList = new PatchTable(prefs);
         fileList.setSavePointerId("PatchTable " + psid);
-        Util.DETAIL_SVC.patchSetDetail(psid, null, null,
+        Util.DETAIL_SVC.patchSetDetail(psid,
             new GerritCallback<PatchSetDetail>() {
               public void onSuccess(final PatchSetDetail result) {
                 fileList.display(result);
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
index f131123..fa0579e 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/ChangeDetailServiceImpl.java
@@ -52,10 +52,14 @@
     includedInDetail.create(id).to(callback);
   }
 
-  public void patchSetDetail(final PatchSet.Id idA, final PatchSet.Id idB,
-      final AccountDiffPreference diffPrefs,
-      final AsyncCallback<PatchSetDetail> callback) {
-    patchSetDetail.create(idA, idB, diffPrefs).to(callback);
+  public void patchSetDetail(PatchSet.Id id,
+      AsyncCallback<PatchSetDetail> callback) {
+    patchSetDetail2(null, id, null, callback);
+  }
+
+  public void patchSetDetail2(PatchSet.Id baseId, PatchSet.Id id,
+      AccountDiffPreference diffPrefs, AsyncCallback<PatchSetDetail> callback) {
+    patchSetDetail.create(baseId, id, diffPrefs).to(callback);
   }
 
   public void patchSetPublishDetail(final PatchSet.Id id,
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
index 6865b2b..f478d66 100644
--- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
+++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/PatchSetDetailFactory.java
@@ -56,8 +56,10 @@
     LoggerFactory.getLogger(PatchSetDetailFactory.class);
 
   interface Factory {
-    PatchSetDetailFactory create(@Assisted("psIdNew") PatchSet.Id psIdA,
-        @Assisted("psIdOld") PatchSet.Id psIdB, AccountDiffPreference diffPrefs);
+    PatchSetDetailFactory create(
+        @Assisted("psIdBase") @Nullable PatchSet.Id psIdBase,
+        @Assisted("psIdNew") PatchSet.Id psIdNew,
+        @Nullable AccountDiffPreference diffPrefs);
   }
 
   private final PatchSetInfoFactory infoFactory;
@@ -66,8 +68,8 @@
   private final ChangeControl.Factory changeControlFactory;
 
   private Project.NameKey projectKey;
+  private final PatchSet.Id psIdBase;
   private final PatchSet.Id psIdNew;
-  private final PatchSet.Id psIdOld;
   private final AccountDiffPreference diffPrefs;
   private ObjectId oldId;
   private ObjectId newId;
@@ -80,16 +82,16 @@
   PatchSetDetailFactory(final PatchSetInfoFactory psif, final ReviewDb db,
       final PatchListCache patchListCache,
       final ChangeControl.Factory changeControlFactory,
+      @Assisted("psIdBase") @Nullable final PatchSet.Id psIdBase,
       @Assisted("psIdNew") final PatchSet.Id psIdNew,
-      @Assisted("psIdOld") @Nullable final PatchSet.Id psIdOld,
       @Assisted @Nullable final AccountDiffPreference diffPrefs) {
     this.infoFactory = psif;
     this.db = db;
     this.patchListCache = patchListCache;
     this.changeControlFactory = changeControlFactory;
 
+    this.psIdBase = psIdBase;
     this.psIdNew = psIdNew;
-    this.psIdOld = psIdOld;
     this.diffPrefs = diffPrefs;
   }
 
@@ -106,9 +108,9 @@
 
     final PatchList list;
 
-    if (psIdOld != null) {
+    if (psIdBase != null) {
+      oldId = toObjectId(psIdBase);
       newId = toObjectId(psIdNew);
-      oldId = psIdOld != null ? toObjectId(psIdOld) : null;
 
       projectKey = control.getProject().getNameKey();