Add download icon to preview diff screens

Change-Id: Ifd5aff3eec29f81930f93cc493cd8d189b19ba67
Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
index 3583461..83ea13a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/ChangeInfo.java
@@ -27,6 +27,7 @@
   public final native NativeMap<RevisionInfo> revisions() /*-{ return this.revisions; }-*/;
   public final native int _number() /*-{ return this._number; }-*/;
   public final native String current_revision() /*-{ return this.current_revision; }-*/;
+  public final native RevisionInfo revision(String n) /*-{ return this.revisions[n]; }-*/;
 
   protected ChangeInfo() {
   }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
index 21ddf00..c895091 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/PatchSetSelectBox.java
@@ -15,8 +15,12 @@
 package com.googlesource.gerrit.plugins.xdocs.client;
 
 import com.google.gerrit.plugin.client.Plugin;
+import com.google.gwt.core.client.GWT;
 import com.google.gwt.core.client.JsArray;
+import com.google.gwt.http.client.URL;
+import com.google.gwt.user.client.ui.Anchor;
 import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.ImageResourceRenderer;
 import com.google.gwt.user.client.ui.InlineHyperlink;
 import com.google.gwt.user.client.ui.Label;
 
@@ -33,6 +37,8 @@
     UNIFIED_DIFF
   }
 
+  private static final String COMMIT_MSG = "/COMMIT_MSG";
+
   private final DiffView diffView;
   private final DisplaySide side;
   private final ChangeInfo change;
@@ -72,6 +78,10 @@
     for (int i = 0; i < list.length(); i++) {
       add(createLink(list.get(i)));
     }
+
+    if (!COMMIT_MSG.equals(path)) {
+      add(createDownloadLink());
+    }
   }
 
   private void addPatchSetLabel() {
@@ -122,6 +132,19 @@
     return link;
   }
 
+  private Anchor createDownloadLink() {
+    String base = GWT.getHostPageBaseURL() + "cat/";
+    String sideUrl = isBaseSelected() ? "1" : "0";
+    int ps = isBaseSelected()
+        ? change.revision(change.current_revision())._number()
+        : getSelectedPatchSet();
+    Anchor anchor = new Anchor(
+        new ImageResourceRenderer().render(XDocsPlugin.RESOURCES.downloadIcon()),
+        base + URL.encode(change._number() + "," + ps + "," + path) + "^" + sideUrl);
+    anchor.setTitle("Download");
+    return anchor;
+  }
+
   private Integer getSelectedPatchSet() {
     return sideA() ? basePatchSet : Integer.valueOf(patchSet);
   }