Related Changes: Decorate merged and abandoned changes

Merged changes are decorated with a black dot; abandoned changes are
decorated with a dark red dot.

Change-Id: I1a5d044d432952f864df1fe3ec8ad9a514587fe4
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index bd94789..6e5cc36 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -3352,6 +3352,7 @@
 |===========================
 |Field Name                ||Description
 |`change_id`               |optional|The Change-Id of the change.
+|`status`                  |optional|The status of the change.
 |`commit`                  ||The commit as a
 link:#commit-info[CommitInfo] entity.
 |`_change_number`          |optional|The change number.
diff --git a/Documentation/user-review-ui.txt b/Documentation/user-review-ui.txt
index 0cea546..d303703 100644
--- a/Documentation/user-review-ui.txt
+++ b/Documentation/user-review-ui.txt
@@ -538,7 +538,7 @@
 note that following the link to an indirect descendant change may
 result in a completely different related changes listing.
 
-** [[closed-ancestor]]Black Dot:
+** [[merged-ancestor]]Black Dot:
 +
 Indicates a merged ancestor, e.g. the commit was directly pushed into
 the repository bypassing code review, or the ancestor change was
@@ -547,6 +547,10 @@
 the commit was done on `branch-a`, but was then pushed to
 `refs/for/branch-b`.
 
+** [[abandoned-change]]Dark Red Dot:
++
+Indicates an abandoned change.
+
 +
 image::images/user-review-ui-change-screen-related-changes-indicators.png[width=800, link="images/user-review-ui-change-screen-related-changes-indicators.png"]
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.java
index ada960c..a7d4945 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.java
@@ -47,4 +47,6 @@
   String sameTopicTooltip();
   String noChanges();
   String indirectAncestor();
+  String merged();
+  String abandoned();
 }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.properties
index 172c1de..8852d4e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.properties
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeConstants.properties
@@ -28,3 +28,5 @@
 sameTopicTooltip = Changes with the same topic
 noChanges = No Changes
 indirectAncestor = Indirect ancestor
+merged = Merged
+abandoned = Abandoned
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
index 7fbbfc7..5f6c6de 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChanges.java
@@ -55,6 +55,8 @@
     String current();
     String gitweb();
     String indirect();
+    String abandoned();
+    String merged();
     String notCurrent();
     String pointer();
     String row();
@@ -342,6 +344,13 @@
     }
 
     public final native String id() /*-{ return this.change_id }-*/;
+
+    public final Change.Status status() {
+      String s = statusRaw();
+      return s != null ? Change.Status.valueOf(s) : null;
+    }
+    private final native String statusRaw() /*-{ return this.status; }-*/;
+
     public final native CommitInfo commit() /*-{ return this.commit }-*/;
     final native String branch() /*-{ return this.branch }-*/;
 
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
index 0f2ee81..2dfd53e 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/RelatedChangesTab.java
@@ -20,6 +20,7 @@
 import com.google.gerrit.client.changes.ChangeInfo.CommitInfo;
 import com.google.gerrit.client.changes.Util;
 import com.google.gerrit.common.PageLinks;
+import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JsArray;
@@ -301,6 +302,14 @@
         sb.setStyleName(RelatedChanges.R.css().notCurrent());
         sb.setAttribute("title", Util.C.notCurrent());
         sb.append('\u25CF');
+      } else if (Change.Status.MERGED == info.status()) {
+        sb.setStyleName(RelatedChanges.R.css().merged());
+        sb.setAttribute("title", Resources.C.merged());
+        sb.append('\u25CF');
+      } else if (Change.Status.ABANDONED == info.status()) {
+        sb.setStyleName(RelatedChanges.R.css().abandoned());
+        sb.setAttribute("title", Resources.C.abandoned());
+        sb.append('\u25CF');
       } else {
         sb.setStyleName(RelatedChanges.R.css().current());
       }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/related_changes.css b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/related_changes.css
index 2e62b98..4d103ae 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/related_changes.css
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/related_changes.css
@@ -68,6 +68,8 @@
 .current,
 .gitweb,
 .indirect,
+.abandoned,
+.merged,
 .notCurrent {
   display: inline-block;
   text-align: center;
@@ -75,6 +77,7 @@
   width: 12px;
 }
 
+.merged,
 .gitweb {
   color: #000;
 }
@@ -84,6 +87,10 @@
   font-weight: bold;
 }
 
+.abandoned {
+  color: #900;      /* dark red */
+}
+
 .notCurrent {
   color: #FFA62F;   /* orange */
 }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
index 7c83c75..6056e5f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/GetRelated.java
@@ -20,6 +20,7 @@
 import com.google.common.collect.Multimap;
 import com.google.common.collect.Sets;
 import com.google.gerrit.common.Nullable;
+import com.google.gerrit.extensions.common.ChangeStatus;
 import com.google.gerrit.extensions.common.CommitInfo;
 import com.google.gerrit.extensions.restapi.RestReadView;
 import com.google.gerrit.reviewdb.client.Change;
@@ -291,6 +292,7 @@
 
   public static class ChangeAndCommit {
     public String changeId;
+    public ChangeStatus status;
     public CommitInfo commit;
     public Integer _changeNumber;
     public Integer _revisionNumber;
@@ -299,6 +301,7 @@
     ChangeAndCommit(@Nullable Change change, @Nullable PatchSet ps, RevCommit c) {
       if (change != null) {
         changeId = change.getKey().get();
+        status = change.getStatus().asChangeStatus();
         _changeNumber = change.getChangeId();
         _revisionNumber = ps != null ? ps.getPatchSetId() : null;
         PatchSet.Id curr = change.currentPatchSetId();