Merge "Make RAW formatter configurable"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
index 91f34fd..92fa3ee 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/client/XDocScreen.java
@@ -16,6 +16,11 @@
 
 import com.google.gerrit.plugin.client.Plugin;
 import com.google.gerrit.plugin.client.screen.Screen;
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
 import com.google.gwt.http.client.URL;
 import com.google.gwt.user.client.ui.Frame;
 import com.google.gwt.user.client.ui.HorizontalPanel;
@@ -45,17 +50,43 @@
   }
 
   XDocScreen(String projectName, String revision, String fileName) {
+    setStyleName("xdocs-panel");
+
     HorizontalPanel p = new HorizontalPanel();
     p.add(new InlineHyperlink(projectName, "/admin/projects/" + projectName));
     p.add(new Label(" / " + fileName + " (" + revision + ")"));
     add(p);
 
-    setStyleName("xdocs-panel");
-    String frameId = "xdoc_iframe";
-    Frame frame = new Frame(getUrl(projectName, revision, fileName));
-    frame.getElement().setId(frameId);
-    resize(frame, frameId);
-    add(frame);
+    final String url = getUrl(projectName, revision, fileName);
+    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
+    try {
+      builder.sendRequest(null, new RequestCallback() {
+        public void onResponseReceived(Request request, Response response) {
+          int status = response.getStatusCode();
+          if (200 <= status && status < 300) {
+            String frameId = "xdoc_iframe";
+            Frame frame = new Frame(url);
+            frame.getElement().setId(frameId);
+            resize(frame, frameId);
+            add(frame);
+          } else {
+            showError(status + " " + response.getStatusText());
+          }
+        }
+
+        public void onError(Request request, Throwable exception) {
+          showError(exception.getMessage());
+        }
+      });
+    } catch (RequestException e) {
+      showError(e.getMessage());
+    }
+  }
+
+  private void showError(String message) {
+    Label l = new Label("Unable to load document: " + message);
+    l.setStyleName("xdocs-error");
+    add(l);
   }
 
   private String getUrl(String projectName, String revision, String fileName) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/public/xdocs.css b/src/main/java/com/googlesource/gerrit/plugins/xdocs/public/xdocs.css
index e2623eb..cf984d4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/public/xdocs.css
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/public/xdocs.css
@@ -7,3 +7,8 @@
   width: 100%;
 }
 
+.xdocs-error {
+  margin-top: 10px;
+  color: red;
+  font-weight: bold;
+}