Refactor linkage from ChangeScreen2 and its Reviewers widget

Move the loop that splits the reviewer and CC list into the Reviewers
widget, eliminating a duplicated block of code.

Link the widget with its sibling reviewersText in the init() method
rather than set(), matching the pattern used in Labels widget.

Change-Id: Iebc74f60781140d7a3b8643aed9f2dbb74e4e889
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
index c6940de..2c01773 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/ChangeScreen2.java
@@ -16,13 +16,10 @@
 
 import com.google.gerrit.client.FormatUtil;
 import com.google.gerrit.client.Gerrit;
-import com.google.gerrit.client.account.AccountInfo;
 import com.google.gerrit.client.actions.ActionInfo;
 import com.google.gerrit.client.changes.ChangeApi;
 import com.google.gerrit.client.changes.ChangeInfo;
-import com.google.gerrit.client.changes.ChangeInfo.ApprovalInfo;
 import com.google.gerrit.client.changes.ChangeInfo.CommitInfo;
-import com.google.gerrit.client.changes.ChangeInfo.LabelInfo;
 import com.google.gerrit.client.changes.ChangeInfo.MergeableInfo;
 import com.google.gerrit.client.changes.ChangeInfo.MessageInfo;
 import com.google.gerrit.client.changes.ChangeInfo.RevisionInfo;
@@ -81,9 +78,7 @@
 import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.EnumSet;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 public class ChangeScreen2 extends Screen {
   interface Binder extends UiBinder<HTMLPanel, ChangeScreen2> {}
@@ -208,7 +203,7 @@
     Resources.I.style().ensureInjected();
     star.setVisible(Gerrit.isSignedIn());
     labels.init(style, statusText);
-    reviewers.init(style);
+    reviewers.init(style, reviewersText);
 
     keysNavigation = new KeyCommandSet(Gerrit.C.sectionNavigation());
     keysNavigation.add(new KeyCommand(0, 'u', Util.C.upToChangeList()) {
@@ -600,7 +595,6 @@
     }
 
     renderOwner(info);
-    renderReviewers(info);
     renderActionTextDate(info);
     renderHistory(info);
     initRevisionsAction(info, revision);
@@ -618,6 +612,7 @@
     topic.set(info, revision);
     commit.set(commentLinkProcessor, info, revision);
     related.set(info, revision);
+    reviewers.set(info);
     quickApprove.set(info, revision);
 
     if (Gerrit.isSignedIn()) {
@@ -645,27 +640,6 @@
     setWindowTitle(sb.toString());
   }
 
-  private void renderReviewers(ChangeInfo info) {
-    // TODO Fix approximation of reviewers and CC list(s).
-    Map<Integer, AccountInfo> r = new HashMap<Integer, AccountInfo>();
-    Map<Integer, AccountInfo> cc = new HashMap<Integer, AccountInfo>();
-    for (LabelInfo label : Natives.asList(info.all_labels().values())) {
-      if (label.all() != null) {
-        for (ApprovalInfo ai : Natives.asList(label.all())) {
-          (ai.value() != 0 ? r : cc).put(ai._account_id(), ai);
-        }
-      }
-    }
-    for (Integer i : r.keySet()) {
-      cc.remove(i);
-    }
-    r.remove(info.owner()._account_id());
-    cc.remove(info.owner()._account_id());
-    reviewersText.setInnerSafeHtml(Labels.formatUserList(style, r.values()));
-    reviewers.set(info.legacy_id());
-    reviewers.setReviewers(Labels.formatUserList(style, cc.values()));
-  }
-
   private void renderOwner(ChangeInfo info) {
     // TODO info card hover
     String name = info.owner().name() != null
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.java
index b4e1f55..45cf600 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.java
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.java
@@ -48,7 +48,6 @@
 import com.google.gwt.user.client.ui.SuggestBox.DefaultSuggestionDisplay;
 import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
 import com.google.gwt.user.client.ui.UIObject;
-import com.google.gwtexpui.safehtml.client.SafeHtml;
 import com.google.gwtexpui.safehtml.client.SafeHtmlBuilder;
 
 import java.util.HashMap;
@@ -59,17 +58,19 @@
   interface Binder extends UiBinder<HTMLPanel, Reviewers> {}
   private static final Binder uiBinder = GWT.create(Binder.class);
 
+  @UiField Element ccText;
   @UiField Button openForm;
-  @UiField Element reviewers;
   @UiField Element form;
   @UiField Element error;
   @UiField(provided = true)
   SuggestBox suggestBox;
 
+  private ChangeScreen2.Style style;
+  private Element reviewersText;
+
   private RestReviewerSuggestOracle reviewerSuggestOracle;
   private HintTextBox nameTxtBox;
   private Change.Id changeId;
-  private ChangeScreen2.Style style;
   private boolean submitOnSelection;
 
   Reviewers() {
@@ -108,18 +109,16 @@
     });
   }
 
-  void set(Change.Id changeId) {
-    this.changeId = changeId;
-    reviewerSuggestOracle.setChange(changeId);
-  }
-
-  void init(ChangeScreen2.Style style) {
+  void init(ChangeScreen2.Style style, Element reviewersText) {
     this.style = style;
-    openForm.setVisible(Gerrit.isSignedIn());
+    this.reviewersText = reviewersText;
   }
 
-  void setReviewers(SafeHtml formatUserList) {
-    reviewers.setInnerSafeHtml(formatUserList);
+  void set(ChangeInfo info) {
+    this.changeId = info.legacy_id();
+    display(info);
+    reviewerSuggestOracle.setChange(changeId);
+    openForm.setVisible(Gerrit.isSignedIn());
   }
 
   @UiHandler("openForm")
@@ -219,7 +218,9 @@
     for (Integer i : r.keySet()) {
       cc.remove(i);
     }
+    r.remove(info.owner()._account_id());
     cc.remove(info.owner()._account_id());
-    setReviewers(Labels.formatUserList(style, cc.values()));
+    reviewersText.setInnerSafeHtml(Labels.formatUserList(style, r.values()));
+    ccText.setInnerSafeHtml(Labels.formatUserList(style, cc.values()));
   }
 }
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.ui.xml b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.ui.xml
index 568e950..9aed0d7 100644
--- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.ui.xml
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/change/Reviewers.ui.xml
@@ -44,7 +44,7 @@
   </ui:style>
   <g:HTMLPanel>
     <div>
-      <span ui:field='reviewers'/>
+      <span ui:field='ccText'/>
       <g:Button ui:field='openForm'
          title='Add reviewers to this change'
          styleName='{style.openAdd}'